在命令行或系统识别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 |
在这些模型块中,您指定要导入的已识别模型的模型变量名。您还可以指定模拟的初始条件(参见指定模拟的初始条件。)您可以通过以下方式指定时域输入数据:
有关如何配置块的详细信息,请参阅相应的块参考页面。
当模型在模拟开始时不是静止状态时,您必须指定初始条件。模型可能不会在静止状态下启动,例如:
使用测量的输出数据或先前的模拟比较您的模型响应
继续之前的模拟
在稳态阶段启动你的模拟
从预定的操作条件开始模拟
如果不指定初始条件,就会引入一个影响模型明显性能的错误源。这个错误可能是暂时的;在一个有轻微阻尼或包含积分分量的模型中,误差可能不会完全消失。
指定初始条件需要两个步骤:
确定初始条件应该是什么(参见估算模拟识别模型的初始条件)
将这些值指定为模型块中的参数。
如果你有一个线性模型中的难点
或者idgrey.
,您还必须在第一步之前将模型转换为状态空间形式。
如果您已经使用比较
,sim卡
,或者是系统识别应用程序,并且您想通过精确再现早期的结果,查看您的Simulink实现,金宝app请参阅再现命令行或系统识别应用程序仿真结果在Simulink中金宝app.
为状态空间线性模型指定初始状态(中的难点
,idgrey.
), 使用初始状态(仅限状态空间:IDS,IDGREY)参数在Idmodel块。初始状态必须是长度的向量等于模型顺序。
其他类型的线性模型,如传递函数形式模型(idtf
),不要使用显式的状态表示。因此,模型块没有初始状态规范的输入;该软件假定初始条件为零。要为其中一个模型指定初始条件,首先转换您的模型米
成状态方程的形式海量存储系统(mss)中
在命令行。
海量存储系统(mss)中= ids (m);
海量存储系统(mss)中
在识别模型参数的Idmodel块。您现在可以为状态空间模型指定您的初始状态,如前一段所述。
此示例显示如何设置用于模拟线性模型的初始状态,使得模拟提供最适合测量的输入输出数据。
你第一次估计模型米
使用多实验数据集Z
,其中包含来自三个实验的数据 -Z1
,Z2
, 和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模型的状态对应于嵌入的线性(idpoly
或者中的难点
) 模型。有关HammerseIn-Wiener模型的状态的更多信息,请参阅idnlw.
参考页面。
模拟Hammerstein-Wiener模型的默认初始状态为0。有关为模拟指定初始条件的详细信息,请参见idnlhw模型参考页面。
将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模型状态的更多信息,请参见idnlarx
参考页面。
为了模拟非线性ARX模型,您可以指定初始条件为输入/输出值,或作为一个向量。有关为模拟指定初始条件的详细信息,请参见IDNLARX模型参考页面。
这个例子展示了如何比较非线性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(型号);
iddata汇|Iddata源|Idmodel|IDNLARX模型|idnlhw模型