分析多变量系统中的数据并识别模型
这个例子展示了如何处理具有多个输入和输出通道的数据(MIMO数据)。常见的操作,如查看MIMO数据,估计和比较模型,以及查看相应的模型响应都被突出显示。
数据集
我们从SteamEng数据集开始。
负载SteamEng
该数据集是从实验室规模的蒸汽机收集的。它有输入压力的蒸汽(实际上是压缩空气)后的控制阀,和磁化电压在与输出轴相连的发电机上。
输出是产生的电压在发电机中转速发电机的频率(产生交流电压的频率)。采样时间为50 ms。
首先将测量到的通道收集到一个iddata
对象:
蒸汽= iddata (GenVolt,速度,压力,MagVolt, 0.05);蒸汽。InputName = {“压力”;“MagVolt”};蒸汽。OutputName = {“GenVolt”;“速度”};
让我们看看数据
情节(蒸汽(:,1,1))
情节(蒸汽(:,1,2))
情节(蒸汽(:2 1))
情节(蒸汽(:2 2))
阶跃和脉冲响应
了解动态的第一步是查看直接从数据中估计的不同渠道之间的阶跃响应:
mi =冲动(蒸汽、50);clf,步骤(mi)
可信区域的反应
为了观察响应的显著性,可以使用脉冲图代替,其置信区域对应3个标准差:
showConfidence (impulseplot (mi), 3)
显然,非对角线的影响占主导地位(比较y刻度!)也就是说,GenVolt
主要受到MagVolt
(没有太多动态)和速度
主要取决于压力
.显然,来自MagVolt
来速度
不是很重要。
Two-Input-Two-Output模型
一个快速的第一个测试也是看一个默认的连续时间状态空间预测误差模型。只使用前半部分的数据进行估计:
议员= ss(蒸汽(摘要)
mp =连续时间识别状态空间模型:dx / dt = x (t) + B u e (t) + K (t) y (t) = C x (t) + D u (t) + e (t) = (x1, x2) x3 x4 x1 x2 -29.43 -4.561 0.5994 -5.2 0.4849 -0.8662 -4.101 -2.336 x3 x4 -3.855 2.839 5.084 -8.566 -12.13 0.9224 1.818 -34.29 B =压力MagVolt x1 -1.566 - 0.2953 -0.3027 - -0.09415 0.1033 - -1.617 x2 x3 x4 -0.04477 - -2.681 C = (x1, x2) x3 x4 GenVolt速度-16.39 - 0.3767 -0.7566 - 2.808 -5.623 - 2.246 -0.5356 - 3.423 D =压力MagVolt GenVolt 0 0速度0 0 K = GenVolt速度x1 1.526 - 2.132 -0.02311 - 5.195 -0.3555 - 0.08529 x2 x3 x4 1.7870.03215参数化:自由形式(所有系数在A, B, C自由)。自由系数:40参数及其不确定性使用"idssdata", "getpvec", "getcov"。状态:在时域数据上使用sest进行估计。拟合估计数据:[86.9;74.84]%(预测焦点)FPE: 3.897e-05, MSE: 0.01414
与直接从数据中估计的步长响应进行比较:
h = stepplot (mi,“b”国会议员,“r”2);%蓝色为直接估计,红色为mpshowConfidence (h)
在所示置信范围内允许的变化范围内,一致性是好的。
为了测试状态空间模型的质量,在未用于估计的部分数据上进行模拟,并比较输出:
比较(蒸汽(251:450)议员)
该模型非常擅长为验证数据再现生成的电压,并且在速度上也做了合理的工作。(使用下拉菜单查看适合不同的输出。)
光谱分析
类似地,频率响应的比较国会议员
通过光谱分析估计得到:
msp = spa(蒸汽);
波德(msp, mp)
clf,波德(msp,“b”国会议员,“r”)
您可以右键单击图,并选择不同的I/O对进行详细查看。您也可以选择“特征:置信区域”,以获取伯德图的可靠性图片。
如前所述,响应来自MagVolt
来速度
微不足道,难以估计。
Single-Input-Single-Output模型的输出
这个数据集很快就给出了好的模型。否则,您常常必须尝试特定通道的子模型,以查看重要的影响。工具箱对象为此类工作中的必要簿记提供了充分支持。输入和输出名称是其中的核心。
阶跃响应表明这一点MagVolt
主要的影响GenVolt
而压力
主要影响速度
.为此构建两个简单的SISO模型:在选择通道时可以同时使用名称和数字。
m1 =特遣部队(蒸汽(摘要,“速度”,“压力”)、2、1);TF模型与2极1零m2 =特遣部队(蒸汽(摘要、1、2),1,0)简单的TF模型与1杆。
m2 =从输入“MagVolt”到输出“GenVolt”:18.57 --------- s + 43.53连续时间识别传递函数。参数化:极点数:1零数:0自由系数数:2参数及其不确定性使用"tfdata", "getpvec", "getcov"。状态:使用时域数据上的TFEST进行估计。拟合估计数据:73.34% FPE: 0.04645, MSE: 0.04535
将这些模型与MIMO模型mp进行比较:
比较(蒸汽(251:450),m1, m2, mp)
SISO模型与完整模型比较良好。现在让我们比较一下奈奎斯特的图。m1
是蓝色的,平方米
是绿色的,国会议员
是红色的。注意,排序是自动的。国会议员
描述所有输入输出对,而m1
只包含压力
来速度
而且平方米
只包含MagVolt
来GenVolt
.
clf showConfidence (nyquistplot (m1,“b”平方米,‘g’国会议员,“r”), 3)
SISO模型很好地再现了它们各自的输出。
经验法则是,当您添加更多输出时,模型拟合会变得更加困难(要解释的更多!),而当您添加更多输入时,模型拟合会变得更加简单。
Two-Input-Single-Output模型
做好输出工作GenVolt
,两种输入都可以使用。
m3 = armax(蒸汽(摘要,“GenVolt”:)“na”4“注”(4 - 4),“数控”2,“朝鲜”[1]);m4 =特遣部队(蒸汽(摘要,“GenVolt”:), 2、1);比较(蒸汽(251:450),mp, m3, m4, m2)
通过加入输入,大约10%的改进是可能的压力
在模型中m3
(离散时间)m4
(连续时间),比较平方米
只使用MagVolt
作为输入。
合并的输出模型
如果需要,两个SISO模型m1
而且平方米
可以先创建一个零虚拟模型,将其组合成一个“非对角线”模型:
mdum = idss (0 (2, 2), 0 (2, 2), 0 (2, 2), 0 (2, 2));mdum。InputName = steam.InputName;mdum。OutputName = steam.OutputName;mdum。t = 0;%连续时间模型m12 = [ids (m1), mdum (“速度”,“MagVolt”));%增加投入。%从两个输入到速度锰= [mdum (“GenVolt”,“压力”), ids (m2)];%增加投入。%从两个输入到GenVolt毫米= (m12;锰);将输出添加到2 × 2模型中。比较(蒸汽(251:450)、国会议员、毫米)
显然是“非对角线”模式毫米
执行像m1
而且平方米
在解释输出时。