模拟识别模型金宝app
在命令行或中估计模型后系统识别app,可以从MATLAB中导入模型®工作空间到Simulink金宝app®使用模型块。然后,您可以为初始条件和指定的模型输入模拟模型输出。
当您需要时,将模型仿真块从系统识别工具箱™块库添加到您的Simulink金宝app模型:
使用基于数据的模型在Simulink模型中表示物理组件的动态金宝app
用更简单的基于数据的模型取代复杂的S金宝appimulink子系统
模拟模块总结
以下模型块可在Simulink中的“系统标识工具箱”库中使用。金宝app
块 | 描述 |
---|---|
Idmodel | 在Simulink软件中模拟线性识别模型。金宝app模型可以是一个过程(idproc ),线性多项式(idpoly ),状态空间(中的难点 )、灰盒(idgrey ),或传递函数(idtf )模型。 |
非线性ARX模型 | 模拟idnlarx 在Simulink金宝app中的模型。 |
Hammerstein-Wiener模型 | 模拟idnlhw 在Simulink金宝app中的模型。 |
非线性灰盒模型 | 模拟非线性ODE (idnlgrey 模型对象)在Simulink。金宝app |
在这些模型块中,您可以指定想要导入的已标识模型的模型变量名。您还可以为模拟指定初始条件(请参见为模拟指定初始条件)。可以通过以下方式指定时域输入数据:
有关如何配置块的详细信息,请参见相应的块参考页。
为模拟指定初始条件
当您的模型在模拟开始时不是静止的,您必须指定初始条件。模型可能不会从静止开始,例如,当你:
将您的模型响应与测量输出数据或先前的模拟进行比较
继续之前的模拟
在稳态阶段启动模拟
从预定的操作条件开始模拟
如果您没有指定初始条件,您就引入了一个错误源,它会影响模型的表观性能。这种错误可能是暂时的;在一个模型中,轻微阻尼或包括一个整体组件,误差可能不会完全消失。
指定初始条件需要两个步骤:
确定初始条件应该是什么(参见估计模拟已识别模型的初始条件)
在模型块中指定这些值作为参数。
如果你有一个线性模型,那就不是中的难点
或idgrey
,您还必须在第一步之前将模型转换为状态空间形式。
如果您已经使用比较
,sim卡
,或系统识别应用程序,并且您希望通过精确地再现前面的结果来检查您的Simulink实金宝app现,请参见在Simulink中再现命令行或系统识别应用程序仿真结果金宝app.
确定线性模型的初始状态
为状态空间线性模型指定初始状态(中的难点
,idgrey
),使用初始状态(仅状态空间:idss, idgrey)参数中的Idmodel块。初始状态的长度必须与模型的阶数相等。
其他类型的线性模型,例如传递函数形式的模型(idtf
),不使用显式的状态表示。因此,模型块没有初始状态规范的输入;该软件假定初始条件为零。要为这些模型之一指定初始条件,首先转换您的模型米
变成状态空间形式海量存储系统(mss)中
在命令行。
MSS = idss(m);
海量存储系统(mss)中
在识别模型参数。Idmodel块。现在,您可以为状态空间模型指定上一段所描述的初始状态。
在Simulink中用初始条件模拟辨识线性模型金宝app
此示例演示如何设置模拟线性模型的初始状态,以便模拟提供与测量的输入-输出数据的最佳拟合。
首先估计一个模型米
使用多个实验数据集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 = merge(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 Source、Idmodel和Scope块。以下块参数已预先配置,以指定仿真数据、估计模型和初始条件。
Iddata Source块参数:
IDDATA对象-
z2
Idmodel块块参数:
识别模型-
米
初始状态-
x0
模拟模型两秒钟,并比较模拟输出ysim
与测量输出ymeasured
使用Scope块。
simOut = sim(mdl);open_system ([mdl/范围的])
将此结果与不设置初始条件的结果进行比较。你可以取消X0
在初始状态字段,替换金宝appx0
变量0
.您还可以在命令行中使X0est本身无效,如下所示。
X0est = 0*X0est;
运行模拟,并查看新的结果。
simOut = sim(mdl);open_system ([mdl/范围的])
在这个图中,模拟输出在开始时有一个显著的瞬态,但这个瞬态随着时间的推移逐渐消失。
Hammerstein-Wiener模型初始状态的确定
Hammerstein-Wiener模型的状态对应于嵌入线性(idpoly
或中的难点
)模型。有关Hammerstein-Wiener模型状态的更多信息,请参见idnlhw
参考页面。
模拟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,“名字”,“双坦克系统”);
使用数据估计Hammerstein-Wiener模型。
mw1 = nlhw(z1,[1 5 3], idpiecewislinear, idpiecewislinear);
中的输入数据,现在可以在Simulink中模拟估计模型的输出金宝appz1
.为此,打开一个预配置的Simulink模型。金宝app
模型=“ex_idnlhw_block”;open_system(模型);
该模型使用Iddata Source、Hammerstein-Wiener模型和作用域块。以下块参数已预先配置,以指定估计数据、估计模型和初始条件:
Iddata Source块参数:
IDDATA对象-
z1
Hammerstein-Wiener模型块体参数:
模型-
mw1
初始条件-
零
(默认)
运行模拟。
使用Scope块查看测量输出和模型输出之间的差异。
simOut = sim(模型);open_system([模型/范围的])
为了提高测量响应和模拟响应之间的一致性,从估计数据中估计模型的初始状态向量z1
,使用findstates
.指定估算的最大迭代次数为100。指定预测水平为正
,使算法计算出仿真误差最小的初始状态。
opt = findstatesOptions;opt.SearchOptions.MaxIterations = 100;x0 = findstates(mw1,z1,Inf,opt);
设置初始条件块参数值的Hammerstein-Wiener模型块到状态值
.默认的初始状态是x0
.
set_param([模型“/ Hammerstein-Wiener模型”),“集成电路”,“国家价值观”);
再次运行模拟,并在Scope块中查看测量输出和模型输出之间的差异。测量响应和模拟响应之间的差异现在减小了。
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],idWaveletNetwork(8));
中的输入数据,现在可以在Simulink中模拟估计模型的输出金宝appz1
.为此,打开一个预配置的Simulink模型。金宝app
模型=“ex_idnlarx_block”;open_system(模型);
该模型使用Iddata Source、非线性ARX模型和作用域块。以下块参数已预先配置,以指定估计数据、估计模型以及输入和输出级别:
Iddata Source块参数:
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”);
再次运行模拟,并在Scope块中查看测量输出和模型输出之间的差异。测量响应和模拟响应之间的差异现在减小了。
simOut = sim(模型);
另请参阅
IDNLHW模型|IDNLARX模型|Iddata水槽|Iddata源|Idmodel