主要内容

使用系统辨识工具箱构建结构化和用户定义的模型

这个例子展示了如何估计参数定义的模型结构。这样的结构是由IDGREY指定(线性状态方程)或IDNLGREY非线性状态空间模型。我们将研究如何分配结构,修复参数并创建它们之间的依赖关系。

实验数据

我们将调查数据(模拟)产生的直流电机。我们第一次加载数据:

负载dcmdatayu

矩阵y包含两个输出:日元电机轴角位置和吗y2是角速度。有400个数据样本和样品时间是0.1秒。中包含的输入向量u。这是电机的输入电压。

z = iddata (y、u, 0.1);% IDDATA对象z。InputName =“电压”;z。OutputName = {“角”;“AngVel”};情节(z (: 1:))

图:测量数据:电压角度

情节(z (: 2:))

图:测量数据:电压角速度

模型结构选择

d / dt x = x + u + K B e C y = x + d u + e

我们应当建立一个直流电机的模型。电动机的动态是众所周知的。如果我们选择x1角位置和x2的角速度很容易建立一个下列字符忽视干扰:状态空间模型(见例4.1 Ljung (1999):

1 | 0 | | 0 | d / dt x = | | x + | | u | 0 th1 | | th2 |
1 | 0 | y = | | | x | 0 1

的参数th1电动机的逆时间常数和吗th2是这样的,th1 / th2是静态输入角速度。(见Ljung(1987)如何th1th2与电动机的物理参数)。我们将从观测数据估计这两个参数。上述模型结构(参数化状态空间)可以在MATLAB®使用ids和IDGREY模型。这些模型让你使用实验数据进行参数估计。

规范的名义(初始)模型

如果我们想这th1 = 1, th2 = 0.28我们获得名义或初始模型

(0 = 1;0 1];%初始猜测(2,2)是1B = [0;0.28);%初始猜测B(2)是0.28C =眼(2);D = 0 (2, 1);

我们包成一个ids模型对象:

= idss女士(A, B, C, D);

该模型的特点是它的矩阵,它们的值,哪些元素是免费的(估计)的上限和下限:

ms.Structure.a
ans =名字:A值:[2 x2双]最低:[2 x2双]最大:[2 x2双]自由:[2 x2逻辑]:[2 x2双]信息:[2 x2 struct] 1 x1 param.Continuous
ms.Structure.a。价值ms.Structure.a.Free
= 0 1 0 1岁= 2 x2逻辑数组1 1 1 1

规范的自由(独立)使用IDSS模型参数

所以我们现在应该标记,只有一个(2,2)和B(2, 1)自由参数估计。

ms.Structure.a。自由= [0 0;0 1];ms.Structure.b。自由= [0;1);ms.Structure.c。自由= 0;%标量扩展使用ms.Structure.d。自由= 0;ms.Ts = 0;%这个定义了模型是连续的

最初的模型

女士%初始模型
=连续时间状态空间模型确定女士:dx / dt = x (t) + B u e (t) + K (t) y (t) = C x (t) + D u (t) + e (t) = (x1, x2) x1 0 1 x2 0 1 B = u1 x1 0 x2 0.28 C y2 = (x1, x2)日元1 0 0 1 D = u1 y1 y2 0 K = y₁y2 x1 0 0 x2 0 0参数化:结构化形式(一些固定系数A、B、C)。引线:没有干扰组件:没有很多免费的系数:2使用“idssdata”、“getpvec”、“getcov”参数及其不确定性。状态:由直接建设或转换。不估计。

自由参数估计的IDSS模型

预测误差(最大似然)现在估计的参数计算:

dcmodel = ss (z,女士,ssestOptions (“显示”,“上”));dcmodel
dcmodel =连续时间状态空间模型发现:dx / dt = x (t) + B u e (t) + K (t) y (t) = C x (t) + D u (t) + e (t) = (x1, x2) x1 0 1 x2 0 x1 0 x2 1.002 C = -4.013 B =电压(x1, x2)角1 0 AngVel 0 1 D =电压角0 AngVel 0 K =角AngVel x1 0 0 x2 0 0参数化:结构化形式(一些固定系数A、B、C)。引线:没有干扰组件:没有很多免费的系数:2使用“idssdata”、“getpvec”、“getcov”参数及其不确定性。状态:估计使用党卫军时域数据“z”。适合估算数据:[98.35,84.42]%消防工程:0.001071,MSE: 0.1192

估计的参数值很接近,数据模拟时使用(4和1)。评估模型的质量我们可以模拟模型与实际输入,比较它与实际输出。

比较(z, dcmodel);

我们现在可以,例如情节0和两极地区及其不确定性。我们将画3个标准差对应的区域,由于该模型是相当准确的。注意,钢管在原点是绝对肯定的,因为它是模型结构的一部分;角速度的积分器的位置。

clf showConfidence (iopzplot (dcmodel), 3)

现在,我们可以进行各种修改。1,2-element矩阵(固定为1)告诉我们x2的导数是x1。假设传感器没有校准,所以可能会有一个未知的比例常数。包括一个常数的估算我们只是“释放”(1、2)和重新评估:

dcmodel2 = dcmodel;dcmodel2.Structure.a.Free (1、2) = 1;dcmodel2 = pem (z, dcmodel2);

由此产生的模型

dcmodel2
dcmodel2 =连续时间状态空间模型发现:dx / dt = x (t) + B u e (t) + K (t) y (t) = C x (t) + D u (t) + e (t) = (x1, x2) x1 0.9975 0 x2 0 x1 0 x2 1.004 C = -4.011 B =电压(x1, x2)角1 0 AngVel 0 1 D =电压角0 AngVel 0 K =角AngVel x1 0 0 x2 0 0参数化:结构化形式(一些固定系数A、B、C)。引线:没有干扰组件:没有很多免费的系数:3使用“idssdata”、“getpvec”、“getcov”参数及其不确定性。状态:估计使用PEM时域数据“z”。适合估算数据:[98.35,84.42]%消防工程:0.001077,MSE: 0.1192

我们发现估计(1、2)接近1。比较两个模型我们使用比较命令:

比较(z, dcmodel dcmodel2)

规范使用IDGREY对象模型的耦合参数

假设我们准确了解直流电机的静态增益(从输入电压到角速度,如从先前的阶跃响应实验。如果静态增益G,电动机的时间常数t,然后变成了状态空间模型

1 | 0 | | 0 | d / dt x = | | x + | | u | 0 1 / t | | G / t |
1 | 0 | y = | | | x | 0 1

G知道,有一个不同的矩阵中的条目之间的依赖。为了描述,早些时候与“免费”方式使用参数将是不够的。我们因此需要编写一个MATLAB文件生产,B, C和D,也可选K和X0矩阵输出,对于每一个给定的参数向量作为输入。也有辅助参数作为输入,这样用户可以改变某些事情在模型结构,而无需编辑该文件。在这种情况下我们已知的静态增益G是进入了这样一个论点。已经写的文件名称“motorDynamics.m”。

类型motorDynamics
函数[A, B, C, D, K, X0] = motorDynamics (par, ts,辅助)% motorDynamics ODE文件代表一个发动机的动力。% % [A, B, C, D, K, X0] = motorDynamics(τ,Ts, G) %返回的直流电机的状态空间矩阵%时间常数τ(τ= par)和已知的静态增益G .示例Ts %时间。% %这个文件返回连续时间表示如果输入参数Ts %是零。如果t > 0,将返回一个离散时间表示。让% IDGREY模型,使用这个文件意识到这种灵活性,设置%值的结构。FcnType财产“cd”。这种灵活性是有用的% %连续和离散域之间的转换需要估计和仿真。% %参见IDGREY IDDEMO7。% l . Ljung %版权1986 - 2015 MathWorks公司t =(1)相当;G =辅助(1);A = (0 0 1; 1 / t);B = (0; G / t); C = eye(2); D = [0;0]; K = zeros(2); X0 = [0;0]; if ts>0 % Sample the model with sample time Ts s = expm([[A B]*ts; zeros(1,3)]); A = s(1:2,1:2); B = s(1:2,3); end

现在我们创建一个IDGREY模型对象对应于该模型结构:假定的时间常数

par_guess = 1;

我们也给0.25辅助变量的值G(增益)和样品时间。

辅助= 0.25;dcmm = idgrey (“motorDynamics”par_guess,“cd”辅助0);

目前估计时间常数

dcmm =感动(z, dcmm greyestOptions (“显示”,“上”));

我们现在就直接估计电机的时间常数。它的值是在良好的协议与以前的估计。

dcmm
dcmm =连续时间线性灰箱模型定义为“motorDynamics”功能:dx / dt = x (t) + B u e (t) + K (t) y (t) = C x (t) + D u (t) + e (t) = (x1, x2) x1 0 1 x2 0 x1 0 x2 1.001 C = -4.006 B =电压(x1, x2)角1 0 AngVel 0 1 D =电压角0 AngVel 0 K =角AngVel x1 0 0 x2 0 0模型参数:Par1 = 0.2496参数化:颂歌功能:motorDynamics(用参数表示连续和离散方程)干扰组件:由ODE函数参数化的初始状态:参数化ODE功能很多免费的系数:1使用“getpvec”、“getcov”参数及其不确定性。状态:估计使用老龄化最严重的时域数据“z”。适合估算数据:[98.35,84.42]%消防工程:0.00107,MSE: 0.1193

这个模型我们可以继续测试各个方面。所有命令的语法与以前相同的情况。例如,我们可以比较idgrey模型状态空间模型与其他:

比较(z, dcmm dcmodel)

他们显然是非常接近。

估计多元ARX模型

状态方程的一部分工具箱还处理多变量(几个输出)ARX模型。由多元ARX-model我们指的是以下几点:

(问)y (t) = B (q) u (t) + e (t)

在这里(q)是纽约|纽约在延迟算子多项式矩阵的条目1 / q。k-l元素用:

$ $现代{kl} (q) $ $

地点:

$ $现代{kl} (q) = 1 + a_1问^ {1}+ ....+现代{nakl}问^ {-nakl} $ $

因此一个多项式1 /问的程度nakl

同样B (q)是一个纽约|ν矩阵,其kj-element是:

$ $ b_ {kj} (q) = b_0问^ {nkk} + b_1问^ {-nkkj-1} +……+ b_ {nbkj}问^ {-nkkj-nbkj} $ $

因此推迟nkkj从输入数j输出数量k。最常见的方式来创建这些是使用ARX-command。指定的订单:nn = (na nb nk)na作为一个ny-by-ny矩阵的kj进口是nakj;nk类似的定义。

让我们来测试一些ARX-models dc-data。首先我们可以简单地建立一个一般的二阶模型:

dcarx1 = arx (z,“na”,2,2,2,2,“注”(2,2),“朝鲜”(1,1))
dcarx1 =离散ARX模型:模型输出“角”:一个(z) y_1 (t) = - ai (z) y_i (t) + B (z) u (t) + e_1 (t) (z) = 1 - 0.5545 z ^ 1 - 0.4454 z ^ 2 A₂(z) = -0.03548 z ^ 1 - 0.06405 z ^ 2 B (z) = 0.004243 z ^ 1 + 0.006589 z ^ 2模型输出“AngVel”:一个(z) y_2 (t) = - ai (z) y_i (t) + B (z) u (t) + e_2 (t) (z) = 1 - 0.2005 z ^ 1 - 0.2924 z ^ 2 A_1 (z) = 0.01849 z ^ 1 - 0.01937 z ^ 2 B (z) = 0.08642 z ^ 1 + 0.03877 z ^ 2样品时间:0.1秒参数化:多项式订单:na = [2 2; 2 2] nb = (2, 2) nk =[1; 1]很多免费的系数:12使用“polydata”、“getpvec”、“getcov”参数及其不确定性。状态:估计使用ARX时域数据“z”。适合估算数据:[97.87,83.44]%(预测聚焦)消防工程:0.002157,MSE: 0.1398

结果,dcarx1存储为一个IDPOLY模型,和以前所有命令适用。例如我们可以显式地列出ARX-polynomials:

dcarx1.a
ans = 2 x2单元阵列{[1 -0.5545 - -0.4454]}{[0 -0.0355 - -0.0640]}{[0 0.0185 - -0.0194]}{[1 -0.2005 - -0.2924]}

细胞阵列,如dcarx1的{1,2}元素。是多项式(1、2)所述,有关y2日元。

我们也可以测试结构,我们知道日元通过过滤y2通过一阶滤波器。(角是角速度的积分)。我们还可以假设一阶动力学从输入到输出2号:

na = [1 1;0 1];nb = [0;1);nk = [1;1);dcarx2 = arx (z, (na nb nk))
dcarx2 =离散ARX模型:模型输出“角”:一个(z) y_1 (t) = - ai (z) y_i (t) + B (z) u (t) + e_1 (t) (z) = 1 - 0.9992 z ^ 1 A₂(z) = -0.09595 z ^ 1 B (z) = 0模型输出“AngVel”:一个(z) y_2 B (t) = (z) u (t) + e_2 (t) (z) = 1 - 0.6254 z ^ 1 B (z) = 0.08973 z ^ 1样品时间:0.1秒参数化:多项式订单:na = [1 1; 0 1] nb = [0, 1] nk =[1; 1]很多免费的系数:4使用“polydata”、“getpvec”、“getcov”参数及其不确定性。状态:估计使用ARX时域数据“z”。适合估算数据:[97.52,81.46]%(预测聚焦)消防工程:0.003452,MSE: 0.177

我们使用比较不同模型获得

比较(z, dcmodel dcmm dcarx2)

最后,我们可以比较bodeplots从输入到输出获得通过使用一个不同的模型波德:首先输出:

dcmm2 = ids (dcmm);%转换为subreferencing IDSS波德(dcmodel (1, 1),“r”dcmm2 (1,1),“b”dcarx2 (1,1),‘g’)

第二个输出:
波德(dcmodel (2, 1),“r”dcmm2 (1),“b”dcarx2 (1),‘g’)

一分之二的模型或多或少在具体协议。ARX-models不太好,由于偏见造成的非白人方程误差噪声。(我们在模拟测量白噪声)。

结论

估计模型与预先确定的结构可以使用系统辨识工具箱。在状态空间形式,参数可能对他们的已知值或固定约束躺在规定的范围内。如果需要指定参数之间的关系或其他约束,IDGREY对象可以使用。IDGREY模型评估用户指定的MATLAB文件状态空间系统参数估计。多元ARX模型提供另一种选择与指定的快速估算多输出模型结构。