主要内容

利用Simulink数据估计连续时间模型

本示例说明了如何使用系统识别工具箱™对Simulink®中模拟的模型进行识别。该示例描述了如何处理连续时间系统和延迟,以及输入的样本间行为的重要性。

从Simulink模型中获取仿真数据

考虑用以下Simulink模型描述的系统:

open_system (“iddemsl1”) set_param (“iddemsl1 /随机数”“种子”' 0 '

红色部分是系统,蓝色部分是控制器,参考信号是扫过的正弦信号(啁啾信号)。数据采样时间设置为0.5秒。

该系统可以用idpoly结构:

M0 = idpoly(1,0.1,1,1,[1 0.5],“t”0,“InputDelay”, 1“NoiseVariance”, 0.01)
m0 =连续时间OE模型:y(t) = [B(s)/F(s)]u(t) + e(t) B(s) = 0.1 F(s) = s + 0.5输入延迟(按通道列出):1参数化:多项式阶数:nb=1 nf=1 nk=0自由系数数:2使用"polydata", "getpvec", "getcov"表示参数及其不确定性。现状:直接建造或改造而成。不估计。

让我们来模拟这个模型iddemsl1并将数据保存在iddata对象:

sim卡(“iddemsl1”) dat1e = iddata(y,u,0.5);IDDATA对象

为了验证目的,让我们对该模式进行第二次模拟。

set_param (“iddemsl1 /随机数”“种子”“13”) sim卡(“iddemsl1”) dat1v = iddata(y,u,0.5);

让我们来看看在第一次模拟中获得的估计数据:

情节(dat1e)

利用仿真数据估计离散模型

让我们从评估一个默认顺序离散模型开始,以获得对数据特征的一些初步洞察:

m1 = n4sid (dat1e,“最佳”一个默认的订单模型
m1 =离散时间状态空间模型发现:x (t + Ts) = x (t) + B K u (t) + e (t) y (t) = C x (t) + D u (t) + e (t) = (x1, x2) x3 x1 x2 0.7881 0.1643 0.1116 -0.1214 0.4223 -0.8489 x3 0.155 0.7527 0.2119 -0.0006427 B = u1 x1 x2 -0.02218 x3 0.07347 C = (x1, x2) x3日元-5.591 0.871 1.189 D = 0.002363 u1 y1 0 K = -0.001856日元x1 x2 x3 -0.06805样品时间:0.5秒参数化:自由形式(所有系数A、B、C免费)。自由系数:18参数及其不确定性使用"idssdata", "getpvec", "getcov"状态:使用N4SID对时域数据“dat1e”进行估计。与估计数据拟合:86.17%(预测焦点)FPE: 0.01281, MSE: 0.01251

检查模型复制验证数据的效果。

比较(dat1v m1)

结果表明,该模型能较好地预测验证数据。为了研究更多的数据特性,让我们检查非参数脉冲响应计算使用dat1e其中,自动确定分析的负滞后:

ImpModel =冲动(dat1e [],“负面”);clf h = impulseplot(ImpModel);showConfidence (h, 3)

ImpModel是一个FIR模型,其order (no。的系数)自动确定。我们还选择通过计算负延迟的脉冲响应来分析反馈效应。负滞后的影响并不都是微不足道的。这是由于调节器(输出反馈)。这意味着脉冲响应估计不能用来确定时间延迟。相反,构建几个具有不同延迟的低阶arx模型,找出最适合的:

V = arxstruc (dat1e dat1v struc (1:2, 1:2, 1:10));nn = selstruc (V, 0)%delay是nn的第三个元素
Nn = 2 2 3

延迟被确定为3个滞后。(这是正确的:1秒的死时间给出了两个延迟,zoh阻塞了另一个延迟。)相应的arx模型也可以计算,如下:

M2 = arx(dat1e,nn) compare(dat1v,m1, M2);
m2 =离散时间ARX模型:A(z)y(t) = B(z)u(t) + e(t) A(z) = 1 - 0.2568 z^-1 - 0.3372 z^-2 B(z) = 0.04021 z^-3 + 0.04022 z^-4采样时间:0.5秒参数化:多项式阶数:na=2 nb=2 nk=3自由系数数:4使用"polydata", "getpvec", "getcov"表示参数及其不确定性。状态:使用ARX对时域数据“dat1e”进行估计。拟合估计数据:85.73%(预测焦点)FPE: 0.01346, MSE: 0.0133

细化的评估

两个模型m1而且平方米在模拟中表现相似。现在让我们试着调整订单和延迟。将延迟修改为2(加上缺乏馈通,给出3个样本的净延迟),并找到一个具有该延迟的默认订单状态空间模型:

m3 = n4sid (dat1e,“最佳”“InputDelay”2,“引线”、假);%精细化预测误差使用pem(也可以使用% |学生|)M3 = pem(dat1e, M3);

让我们看看估计的系统矩阵。

m3.a%得到的模型的a矩阵
Ans = 0.7332 -0.3784 0.1735 0.705 0.3137 -0.6955 -0.0267 0.7527 0.6343

自动选择三阶动态,加上两个“额外”延迟,给出五阶状态空间模型。

不要盲目地依赖自动顺序选择总是明智的。它们受到随机误差的影响。一个好方法是观察模型的零点和极点,以及置信区域:

CLF h = iopzplot(m3);showConfidence (h, 2)%置信区域对应2个标准差

显然,单位圆上的两个极点/零似乎相互抵消,表明一阶动力学可能是充分的。利用这些信息,让我们做一个新的一阶估计:

m4 = ss (dat1e 1“引线”假的,“InputDelay”2,“t”, dat1e.Ts);比较(dat1v m4, m3, m1)

比较图显示,简单的一阶模型m4对数据进行了很好的描述。因此,我们将选择这个模型作为我们的最终结果。

离散模型到连续时间模型的转换

将此模型转换为连续时间,用传递函数形式表示:

mc = d2c (m4);idtf (mc)
ans =从输入“u1”到输出“y1”:0.09828 exp(-1*s) * ---------- s + 0.4903连续时间识别传递函数。参数化:极点数:1零数:0自由系数数:2参数及其不确定性使用"tfdata", "getpvec", "getcov"。现状:直接建造或改造而成。不估计。

如上面所示,已经获得了系统的良好描述。

连续时间模型的直接估计

连续时间模型也可以直接估计。离散模型m4有2个样本输入延迟,代表1秒延迟。我们使用党卫军命令用于此估计:

m5 = ss (dat1e 1“引线”假的,“InputDelay”1);礼物(m5)
m5 =连续时间识别状态空间模型:dx/dt = ax (t) + B u(t) + K e(t) y(t) = C x(t) + D u(t) + e(t) A = x1 x1 -0.4903 +/- 0.007954 B = u1 x1 0.01345 +/- 1.191e+11 C = x1 y1 7.307 +/- 6.468e+13 D = u1 y1 0 K = y1 x1 -0.02227 +/- 1.972e+11输入延迟(秒):1参数化:FREE形式(所有系数在A, B, C FREE)。参数及其不确定性用"idssdata"、"getpvec"、"getcov"表示。状态:终止条件:沿直线搜索方向无改进。迭代次数:9,函数计算次数:168在时域数据“dat1e”上使用SSEST进行估计。拟合估计数据:87.34%(预测焦点)FPE: 0.01054, MSE: 0.01047模型的“报告”属性中有更多信息。

不确定性分析

模型参数m5显示出高度的不确定性,即使模型符合数据87%。这是因为模型使用了比绝对需要的更多的参数,导致参数估计失去了唯一性。要查看模型中不确定性的真实影响,有两种可能的方法:

  1. 把不确定性看作模型响应的置信边界,而不是参数的置信边界。

  2. 以标准形式估计模型。

让我们尝试这两种方法。首先,我们用标准形式估计模型。

m5Canon = ss (dat1e 1“引线”假的,“InputDelay”, 1“形式”“规范”);礼物(m5Canon)
m5Canon =连续时间识别状态空间模型:dx/dt = ax (t) + B u(t) + K e(t) y(t) = C x(t) + D u(t) + e(t) A = x1 x1 -0.4903 +/- 0.007881 B = u1 x1 0.09828 +/- 0.001559 C = x1 y1 1 D = u1 y1 0 K = y1 x1 -0.1628 +/- 0.03702输入延迟(秒):1参数化:带索引的CANONICAL形式:1。参数及其不确定性用“idssdata”、“getpvec”、“getcov”表示。状态:终止条件:沿直线搜索方向无改进。迭代次数:9,函数计算次数:168在时域数据“dat1e”上使用SSEST进行估计。拟合估计数据:87.34%(预测焦点)FPE: 0.01054, MSE: 0.01047模型的“报告”属性中有更多信息。

m5Canon使用模型的规范参数化。它和模型一样能很好地拟合估计数据m5.它显示了其参数值的小不确定性,证明了它的可靠性。然而,正如我们看到的m5,大的不确定性并不一定意味着一个“坏的”模型。为了确定这些模型的质量,让我们在时域和频域上查看它们的响应,其置信度区域对应3个标准差。我们也画出原始系统m0进行比较。

波德图。

CLF opt = bodeoptions;opt.FreqScale =“线性”;h = bodeplot (m0, m5, m5Canon选择);showConfidence (h, 3)传奇显示

这一步的阴谋。

clf showConfidence (stepplot (m0、m5 m5Canon), 3)传奇显示

这两个模型的不确定性边界实际上是相同的。我们同样可以生成极零映射(iopzplot)和奈奎斯特情节(nyquistplot)为这些模型的置信区域。

idtf (m5)
ans =从输入“u1”到输出“y1”:0.09828 exp(-1*s) * ---------- s + 0.4903连续时间识别传递函数。参数化:极点数:1零数:0自由系数数:2参数及其不确定性使用"tfdata", "getpvec", "getcov"。状态:由idss模型转换创建。

连续时间估计中样本间行为的解释

当比较从采样数据计算的连续时间模型时,重要的是要考虑输入信号的样本间行为。在到目前为止的示例中,由于控制器中的零阶保持(zoh)电路,系统的输入是分段常数。现在去掉这个电路,考虑一个真正连续的系统。输入和输出信号仍然以2hz采样,其他一切都是一样的:

open_system (“iddemsl3”) sim卡(“iddemsl3”) dat2e = iddata(y,u,0.5);

离散时间模型仍然可以很好地处理这些数据,因为当它们调整到测量值时,它们将包含抽样属性和样本间输入行为(对于当前输入)。然而,在构建连续时间模型时,了解样本间的属性是必不可少的。首先建立一个模型,就像ZOH案例一样:

m6 = ss (dat2e 1“引线”假的,“InputDelay”, 1“形式”“规范”);idtf (m6)
ans =从输入“u1”到输出“y1”:0.1119 exp(-1*s) * ---------- s + 0.5607连续时间识别传递函数。参数化:极点数:1零数:0自由系数数:2参数及其不确定性使用"tfdata", "getpvec", "getcov"。状态:由idss模型转换创建。

让我们比较估计的模型(m6)与真实模型(m0):

步骤(m6 m0)%与真正的系统比较

现在的协议不太好。但是,我们可以在数据对象中包含关于输入的信息。作为一种近似,我们可以将其描述为采样瞬时之间的分段线性(一阶保持,FOH)。然后,估计器使用该信息进行适当的采样:

dat2e。Intersample =“呸”;m7 = ss (dat2e 1“引线”假的,“InputDelay”, 1“形式”“规范”);%具有正确样本间行为的新估计idtf (m7)
ans =从输入“u1”到输出“y1”:0.09937 exp(-1*s) * ---------- s + 0.4957连续时间识别传递函数。参数化:极点数:1零数:0自由系数数:2参数及其不确定性使用"tfdata", "getpvec", "getcov"。状态:由idss模型转换创建。

让我们再来看看阶跃响应的比较:

步骤(m7、m0)%与真正的系统比较

这个模型(m7)给出的结果比m6.这个例子到此结束。

bdclose (“iddemsl1”);bdclose (“iddemsl3”);
Baidu
map