主要内容

模拟识别模型金宝app

在命令行或系统识别app,你可以从MATLAB中导入模型®工作区进入Simulink.金宝app®使用模型块。然后,您可以模拟初始条件的模型输出和您指定的模型输入。

当您需要:从System Identification Toolbox™金宝app块库中将模型仿真块添加到Simulink模型中:

  • 使用基于数据的模型在Simulink模型中表示物理组件的动态金宝app

  • 用一个更简单的基于数据的模型替换一个金宝app复杂的Simulink子系统

仿真块摘要

Simulink中的系统识别工具箱库中有以下模型块。金宝app

描述
Idmodel 在Simulink软件中对线性辨识模型进行仿真。金宝app模型可以是一个流程(IDProc.)、线性多项式(idpoly),状态空间(中的难点),灰色矩形(idgrey.)或传递函数(idtf) 模型。
非线性ARX模型 模拟idnlarx模拟在Simuli金宝appnk中。
Hammerstein-Wiener模型 模拟idnlw.模拟在Simuli金宝appnk中。
非线性灰色矩形模型 模拟非线性ODE (idnlgrey模型对象)。金宝app

在这些模型块中,您指定要导入的已识别模型的模型变量名。您还可以指定模拟的初始条件(参见指定模拟的初始条件。)您可以通过以下方式指定时域输入数据:

  • 使用一个从工作空间块,如果输入数据的一个样本是标量或向量

  • 使用一个Iddata源块,如果输入数据处于其中iddata对象

有关如何配置块的详细信息,请参阅相应的块参考页面。

指定模拟的初始条件

当模型在模拟开始时不是静止状态时,您必须指定初始条件。模型可能不会在静止状态下启动,例如:

  • 使用测量的输出数据或先前的模拟比较您的模型响应

  • 继续之前的模拟

  • 在稳态阶段启动你的模拟

  • 从预定的操作条件开始模拟

如果不指定初始条件,就会引入一个影响模型明显性能的错误源。这个错误可能是暂时的;在一个有轻微阻尼或包含积分分量的模型中,误差可能不会完全消失。

指定初始条件需要两个步骤:

  1. 确定初始条件应该是什么(参见估算模拟识别模型的初始条件

  2. 将这些值指定为模型块中的参数。

如果你有一个线性模型中的难点或者idgrey.,您还必须在第一步之前将模型转换为状态空间形式。

如果您已经使用比较sim卡,或者是系统识别应用程序,并且您想通过精确再现早期的结果,查看您的Simulink实现,金宝app请参阅再现命令行或系统识别应用程序仿真结果在Simulink中金宝app

指定线性模型的初始状态

为状态空间线性模型指定初始状态(中的难点idgrey.), 使用初始状态(仅限状态空间:IDS,IDGREY)参数在Idmodel块。初始状态必须是长度的向量等于模型顺序。

其他类型的线性模型,如传递函数形式模型(idtf),不要使用显式的状态表示。因此,模型块没有初始状态规范的输入;该软件假定初始条件为零。要为其中一个模型指定初始条件,首先转换您的模型成状态方程的形式海量存储系统(mss)中在命令行。

海量存储系统(mss)中= ids (m);
然后使用海量存储系统(mss)中识别模型参数的Idmodel块。您现在可以为状态空间模型指定您的初始状态,如前一段所述。

在具有初始条件的Simulink中仿真辨识线性模型金宝app

此示例显示如何设置用于模拟线性模型的初始状态,使得模拟提供最适合测量的输入输出数据。

你第一次估计模型使用多实验数据集Z,其中包含来自三个实验的数据 -Z1Z2, 和Z3.

加载多实验数据。

负载(fullfile (matlabroot'工具箱'“识别”“iddemos”......'数据''twobodiesdata'))

创建一个iddata存储多实验数据的对象。集'tstart'至0,以便数据开始时间匹配Simulink开始时间0f 0 s。金宝app

z1 = iddata (y1, u1, 0.005,'tstart', 0);Z2 = IDDATA(Y2,U2,0.005,'tstart', 0);z3 = iddata (y3, u3, 0.005,'tstart', 0);z =合并(Z1,Z2,Z3);

估计一个五阶状态空间模型。

[m,x0] = n4sid(z,5);

使用输入来模拟模型U2., 用x0 (: 2)作为初始状态。x0 (: 2)计算是为了使测量输出之间的匹配最大化Y2.的模拟响应

提取最适合相应输出的初始状态Y2.并使用第二实验模拟Simulink中的模型,金宝appZ2

x0est = x0(:,2);

打开预配置的Simulink模型。金宝app

mdl ='ex_idmodel_block';open_system (mdl)

该模型使用IDDATA源,IDModel和Scope块。已经预先配置了以下块参数以指定模拟数据,估计模型和初始条件。

iddata源块的块参数:

  • IDDATA对象-Z2

idmodel块的块参数:

  • 鉴定的模型-

  • 初始状态-x0

对模型进行2秒的仿真,并比较仿真的输出结果ysim与测量输出ymeasured使用Scope块。

simOut = sim (mdl);open_system ([mdl/范围的])

将此结果与结果进行比较,而无需设置初始条件即可。你可以无效X0.初始状态域的Simulink模型块金宝app替换x0变量0.您还可以在命令行中使X0est本身无效,如下所示。

x0 = 0 * x0;

运行模拟,并查看新的结果。

simOut = sim (mdl);open_system ([mdl/范围的])

在该图中,模拟输出在开始时具有显着的瞬态,但这种瞬态及时沉降。

Hammerstein-Wiener模型初始态的确定

Hammerstein-Wiener模型的状态对应于嵌入的线性(idpoly或者中的难点) 模型。有关HammerseIn-Wiener模型的状态的更多信息,请参阅idnlw.参考页面。

模拟Hammerstein-Wiener模型的默认初始状态为0。有关为模拟指定初始条件的详细信息,请参见idnlhw模型参考页面。

在Simulink中仿真Hammerstein-Wiener模型金宝app

将Hammerstein-Wiener模型块的模拟输出进行比较到系统的测量输出。通过估计初始状态值,可以改善测量响应和模拟响应之间的一致性。

加载样本数据。

负载twotankdata

创建一个iddata对象。集'tstart'至0,以便数据开始时间匹配Simulink开始时间0f 0 s。金宝app

z1 = iddata(y,u,0.2,'tstart',0,“名字”“两舱系统”);

使用数据估算HammerseIn-Wiener模型。

Mw1 = nlhw(z1,[1 5 3],pwlinear,pwlinear);

中输入的数据可以在Simulink中模拟估计模型的输出金宝appZ1.为此,请打开预先配置的Simulink模型。金宝app

模型=“ex_idnlhw_block”;Open_System(型号);

该模型使用IDDATA源,HAMBerstein-Wiener模型和范围块。已经预先配置了以下块参数以指定估计数据,估计模型和初始条件:

iddata源块的块参数:

  • IDDATA对象-Z1

Hammerstein-Wiener模型块体参数:

  • 模型-mw1

  • 初始条件-(默认)

运行模拟。

使用Scope块查看测量输出和模型输出之间的差异。

simout = sim(型号);Open_System([模型/范围的])

为了改善测量和模拟响应之间的一致性,从估计数据估计一个初始状态向量的模型Z1,使用findstates.指定估计的最大迭代次数为100.指定预测地平线为,使算法计算初始状态,使仿真误差最小。

选择= findstatesOptions;opt.SearchOptions.MaxIterations = 100;x0 = findstates (mw1 z1,正无穷,选择);

设定初始条件块参数值的Hammerstein-Wiener模型块州价值观.默认初始状态为X0.

set_param([模型'/ hammerstein-wiener模型'],“集成电路”“国家价值观”);

再次运行模拟,并在范围块中查看测量输出和模型输出之间的差异。现在减少了测量和模拟响应之间的差异。

simout = sim(型号);

非线性ARX模型初始状态的确定

非线性ARX模型的状态对应于非线性ARX模型结构的动态元素,即模型回归器。解释变量可以是延迟输入/输出变量(标准回归变量)或用户定义的延迟输入/输出变量转换(自定义回归变量)。有关非线性ARX模型状态的更多信息,请参见idnlarx参考页面。

为了模拟非线性ARX模型,您可以指定初始条件为输入/输出值,或作为一个向量。有关为模拟指定初始条件的详细信息,请参见IDNLARX模型参考页面。

在Simulink中模拟非线性ARX模型金宝app

这个例子展示了如何比较非线性ARX模型块的模拟输出和系统的测量输出。通过估计初始状态值,可以改善测量响应和模拟响应之间的一致性。

加载示例数据并创建iddata对象。集'tstart'至0,以便数据开始时间匹配Simulink开始时间0f 0 s。金宝app

负载twotankdataz = iddata(y,u,0.2,'tstart',0,“名字”“两舱系统”);z1 = z(1:1000);

估计一个非线性ARX模型。

Mnlarx1 = nlarx(z1,[5 1 3],wavenet('单位数', 8));

中输入的数据可以在Simulink中模拟估计模型的输出金宝appZ1.为此,请打开预先配置的Simulink模型。金宝app

模型=“ex_idnlarx_block”;Open_System(型号);

该模型使用Iddata Source、Nonlinear ARX model和Scope块。以下块参数已预先配置,以指定估计数据、估计模型以及输入和输出级别:

iddata源块的块参数:

  • IDDATA对象-Z1

非线性ARX模型块的块参数:

  • 模型-mnlarx1

  • 初始条件-输入和输出值(默认)

  • 输入水平- 10.

  • 输出电平- 0.1

运行模拟。

使用Scope块查看测量输出和模型输出之间的差异。

simout = sim(型号);Open_System([模型/范围的])

为了提高测量响应和模拟响应之间的一致性,从估计数据中估计模型的初始状态向量,Z1

x0 = findstates(mnlarx1,z1,inf);

设定初始条件块参数值的非线性ARX模型块州价值观.将初始状态指定为X0.

set_param([模型“/非线性ARX模型”],“ICspec”“国家价值观”'x0''x0');

再次运行模拟,并在范围块中查看测量输出和模型输出之间的差异。现在减少了测量和模拟响应之间的差异。

simout = sim(型号);

另请参阅

||||

相关话题