主要内容

电动相机-多输入多输出非线性ARX和Hammerstein-Wiener模型

这个例子展示了如何从数据估计多输入多输出(MIMO)非线性黑盒模型。系统识别工具箱™提供了两种类型的非线性黑盒模型-非线性ARX和Hammerstein-Wiener模型。

测量数据集

数据保存在文件机动相机。在本例中将使用Mat。它包含188个数据样本,从电动相机收集,采样时间为0.02秒。输入向量u(t)由6个变量组成:固定在相机上的X-Y-Z正交坐标系中的3个平移速度分量[m/s],以及围绕X-Y-Z轴的3个旋转速度分量[rad/s]。输出向量y(t)包含两个变量:一个点的位置(像素),这个点是相机在3D空间中一个固定点拍摄的图像。我们创建一个IDDATA对象z保存加载的数据:

负载motorizedcameraZ = iddata(y, u, 0.02,“名字”“机动相机”“TimeUnit”“年代”);

非线性ARX (IDNLARX)模型选择回归量

让我们首先尝试非线性ARX模型。需要选择两个重要的元素:模型回归函数和非线性映射函数。

回归量是基于时间延迟I/O变量的简单公式,最简单的情况是变量被一小组连续值延迟。例如,如果“u”是输入变量的名称,“y”是输出变量的名称,那么一个示例回归集可以是{y(t-1), y(t-2), u(t), u(t-1), u(t-2)},其中“t”表示时间变量。另一个涉及多项式项的例子可能是{y(t-2)^4, y(t-2)*u(t-1), u(t-4)^2}。延迟变量中更复杂、任意的公式也是可能的。

指定线性回归函数最简单的方法是使用“顺序矩阵”。这个矩阵的形式为NN = [na nb nk],它指定了每个输出(na)和每个输入变量(nb, nk)的延迟时间。这与估计线性ARX模型时使用的思想是相同的(参见ARX, IDPOLY)。例如,NN =[2 3 4]表示回归集{y(t-2), u(t-4), u(t-5), u(t-6)}。在有NY输出和NU输入的模型的一般情况下,NN是一个有NY行和NY+2*NU行的矩阵。

非线性ARX (IDNLARX)模型-基于小波网络的初步估计

首先,让我们选择NN = [na nb nk] = [ones(2,2), ones(2,6), ones(2,6)]的顺序。这意味着每个输出变量都是由所有输出和输入变量预测的,每个变量都被延迟了一个样本。模型方程可以写成y_i(t) = F_i(y1(t-1), y2(t-1), u1(t-1), u2(t-1), u3(t-1)), i = 1,2。让我们选择一个小波网络(idWaveletNetwork对象)作为两个输出的非线性映射函数。函数NLARX估计非线性ARX模型的参数。

NN = [ones(2,2), ones(2,6), ones(2,6)];%订单mw1 = nlarx(z, NN, idWaveletNetwork);

通过将模拟输出与估计模型的输出和实测数据中的输出进行比较来检验结果z

比较(z, mw1)

非线性ARX模型-尝试高阶

让我们看看高阶是否能做得更好。请注意,当使用基函数展开来表示非线性时,模型参数的数量可能超过数据样本的数量。在这种情况下,一些估计指标如噪声方差和最终预测误差(FPE)不能可靠地确定。对于当前的示例,我们关闭了通知我们这个限制的警告。

Ws =警告(“关闭”鉴别:估计:NparGTNsamp);mw2 = nlarx(z, [ones(2,2), 2*ones(2,6), ones(2,6)], idWaveletNetwork) compare(z,mw2)
mw2 =  2输出6输入的非线性ARX模型输入:u1, u2, u3, u4, u5, u6输出:y1, y2, u1, u2, u3, u4, u5, u6回归函数:变量y1, y2, u1, u2, u3, u4, u5, u6输出函数:输出1:27单元的小波网络输出2:25单元的小波网络采样时间:0.02秒状态:在时域数据“机动相机”上使用NLARX估计。拟合估计数据:[99.22;99.15]%(预测焦点)FPE: 0.1262, MSE: 0.4453更多信息在模型的“报告”属性。

第二种型号mw2相当不错。所以让我们在下面的例子中保持这种模型顺序的选择。

Nanbnk = [ones(2,2), 2*ones(2,6), ones(2,6)];最终订单百分比

要查看由此顺序选择所隐含的回归函数集,使用GETREG命令:

getreg(对象)
ans = 14 x1单元阵列{y1 (t - 1)的}{y2 (t - 1)的}{u1 (t - 1)的}{的u1(2)}{“u2 (t - 1)”}{“u2(2)”}{‘u3 (t - 1)}{‘u3 (2)} {u4 (t - 1)的}{‘u4 (2)} {u5 (t - 1)的}{‘u5 (2)} {u6 (t - 1)的}{‘u6 (2)}

估计算法自动选择了两个idWaveletNetwork函数的单元(“小波”)的数量。这些数字如下所示。

mw2.OutputFcn (1) .NonlinearFcn。NumberOfUnits mw2.OutputFcn .NonlinearFcn.NumberOfUnits (2)
Ans = 27 Ans = 25

非线性ARX模型-非线性函数单元数的调整

idWaveletNetwork函数中的单元数可以显式指定,而不是由估计算法自动选择。假设我们想在第一个非线性映射函数中使用10个单位,在第二个非线性映射函数中使用5个单位(注意,每个输出的模型都使用自己的映射函数;所有映射函数的数组都存储在模型的“OutputFcn”属性中)。

Fcn1 = idWaveletNetwork(10);% output函数用于第一个输出Fcn2 = idWaveletNetwork(5);% output函数用于第二个输出mw3 = nlarx(z, nanbnk, [Fcn1;Fcn2])
mw3 =  2输出6输入的非线性ARX模型输入:u1, u2, u3, u4, u5, u6输出:y1, y2, u1, u2, u3, u4, u5, u6回归函数:变量y1, y2, u1, u2, u3, u4, u5, u6输出函数:输出1:10单元小波网络输出2:5单元小波网络采样时间:0.02秒状态:在时域数据“机动相机”上使用NLARX估计。拟合估计数据:[99.01;98.89]%(预测焦点)FPE: 0.2273, MSE: 0.7443更多信息在模型的“报告”属性。

非线性ARX模型-尝试其他非线性映射函数

在idWaveletNetwork函数的地方,也可以使用其他非线性函数。让我们为这两个输出尝试idTreePartition。

mt1 = nlarx(z, nanbnk, idTreePartition);

在上面的调用中,两个输出都使用了具有默认配置的树分区映射函数。

类似地,我们可以使用SigmoidNetwork (idSigmoidNetwork对象)作为映射函数。方法可以指定诸如最大迭代(MaxIterations)和迭代显示等估计选项nlarxOptions命令。

选择nlarxOptions(“显示”“上”);opt.SearchOptions.MaxIterations = 5;ms1 = nlarx(z, nanbnk, idSigmoidNetwork, opt);

NLARX的调用语法与之前使用的非常相似——指定数据、顺序和非线性映射函数作为主要输入参数。然而,为了从默认值修改评估选项,我们构造了一个选项集,选择,使用nlarxOptions命令,并将其作为额外的输入参数传递给NLARX命令。

含混合非线性函数的非线性ARX模型

在同一个模型中,可以在不同的输出通道上使用不同的非线性函数。假设我们想要使用一个树分形函数来描述第一个输出,而使用一个小波网络来描述第二个输出。模型估计如下所示。第三个输入参数(非线性映射函数)现在是两个不同函数的数组。

Fcn1 = idTreePartition;Fcn2 = id小波网络;mtw = nlarx(z, nanbnk, [Fcn1;Fcn2]);

有时,将回归量映射到模型输出的函数不一定是非线性的;它可以简单地是回归向量的加权和,加上一个可选的偏移量。这类似于线性ARX模型(除了偏移项)。输出通道中不存在非线性可以通过选择idLinear函数来表示。下面的例子意味着,在model_output(t) = F(y(t-1), u(t-1), u(t-2))中,函数F由第一个输出的线性分量和第二个输出的非线性分量(idSigmoidNetwork)组成。

Fcn1 = idLinear;Fcn2 = idSigmoidNetwork(2);opt.Display =“关闭”%不再显示评估进度mls = nlarx(z, nanbnk, [Fcn1;Fcn2】,选择)
mls =  2输出6输入的非线性ARX模型输入:u1, u2, u3, u4, u5, u6输出:y1, y2回归量:变量y1, y2, u1, u2, u3, u4, u5, u6输出函数:输出1:线性偏移输出2:2单元Sigmoid网络采样时间:0.02秒状态:终止条件:达到的最大迭代次数。迭代次数:5次,功能评估次数:60次,在时域数据“机动相机”上使用NLARX估计。拟合估计数据:[98.72;98.8]%(预测焦点)FPE: 0.5481, MSE: 1.041更多信息在模型的“报告”属性。

第一个输出的模型中没有非线性。然而,由于存在偏移项,它不是纯线性的。

disp (mls.OutputFcn (1))
线性函数输入:y1(t-1), y2(t-1), u1(t-1), u1(t-2), u2(t-1), u3(t-1), u4(t-2), u5(t-1), u5(t-2), u5(t-1), u5(t-2), u5(t-1), u5(t-2), u6(t-1), u6(t-2)输出:y1(t)非线性函数:线性偏移线性函数:初始化到[48.3 -32.2 -0.229 -0.0706 -0.113 -0.0516 -0.182 0.297 0.199 -0.133 -0.337 0.583 -0.448 0.167]输出偏移量:初始化到-9.03e-06输入:{1x14单元}输出:{'y1(t)'}线性fcn: '<线性函数参数>'偏移量:'<偏移量参数>'

我们可以选择不使用偏置项,使它成为纯线性的。这种选择可以通过在估计之前将偏移量固定为零来实现。

Fcn1.Offset。值= 0;Fcn1.Offset。Free = false;mlsNoOffset = nlarx(z, nanbnk, [Fcn1;Fcn2],选择);

使用回归算法从统计和机器学习工具箱

如果您可以访问统计和机器学习工具箱™,您还可以使用高斯过程(GP)函数和袋装或增强树集成来创建您的非线性ARX模型。GPs由idGaussianProcess对象表示,而回归树集合由idTreeEnsemble对象表示。GPs默认使用平方指数核。在创建对象时可以指定其他内核类型。在本例中,我们使用基于'ARDMatern52'内核的GP进行第一个输出,使用袋装树集成进行第二个输出。

如果存在(“fitrgp”“文件”) = = 2警告(“关闭”“统计数据:套索:MaxIterReached”);NL1 = idGaussianProcess(“ardmatern52”);NL2 = idTreeEnsemble;%估计模型mML = nlarx(z, nanbnk, [NL1;NL2])结束
mML =  2输出6输入的非线性ARX模型输入:u1, u2, u3, u4, u5, u6输出:y1, y2, u1, u2, u3, u4, u5, u6回归函数:变量y1, y2, u1, u2, u3, u4, u5, u6输出函数:输出1:使用ARDMatern52核的高斯过程函数输出2:Bagged回归树集合采样时间:0.02秒状态:在时域数据“机动相机”上使用NLARX估计。拟合估计数据:[99.29;98.44]%(预测焦点)MSE: 0.968模型的“报告”属性中的更多信息。

评估结果的检查

可以在同一个COMPARE命令中比较不同的模型。例如,将模型mw2、ms1、mls和mlsNoOffset的模拟输出与数据集“z”中的测量输出进行比较。

比较(z, mw2, ms1, mls, mlsNoOffset)

函数图可以用来查看各种模型的非线性映射函数“形状”。

情节(mtw, mt1 ms1、美国职业足球大联盟)

注意,图右侧的控制面板允许回归器选择和配置。

其他函数,如RESID、PREDICT和PE,可以用与线性模型相同的方式用于估计模型。

Hammerstein-Wiener (IDNLHW)模型-初步估计

Hammerstein-Wiener模型最多由3个块组成:一个线性传递函数块前面是一个非线性静态块和/或后面是另一个非线性静态块。如果第一个非线性静态块不存在,则称为Wiener模型,如果第二个非线性静态块不存在,则称为Hammerstein模型。

IDNLHW模型通常使用以下语法进行估计:

M = NLHW(数据,订单,输入非线性,输出非线性)。

其中Orders = [nb nf nk]表示线性传递函数的阶数和时延。input非线性和output非线性指定了两个非线性块的非线性函数。线性输出误差(OE)模型对应于平凡(单位增益映射)非线性的情况。

Hammerstein模型的估计(无输出非线性)

让我们选择Orders = [nb bf nk] = [ones(2,6), ones(2,6), ones(2,6)]。这意味着,在线性块中,每个输出是由6个输入驱动的6个一阶传递函数的和。尝试用分段线性函数描述输入非线性的Hammerstein模型(无输出非线性)。注意,输入的单个idpiecewislinear对象会自动扩展到所有6个输入通道。idUnitGain表示非线性缺失。

opt = nlhwOptions();opt.SearchOptions.MaxIterations = 15;NN = [ones(2,6), ones(2,6), ones(2,6)];InputNL = idpiecewislinear;%输入非线性OutputNL = idUnitGain;%输出非线性mhw1 = nlhw(z, NN, InputNL, OutputNL, opt)
mhw1 =  2输出6输入Hammerstein-Wiener模型对应阶数为:nb = [1 1 1 1 1 1 1;1 1 1 1 1 1 1] nf = [1 1 1 1 1 1 1 1;1 1 1 1 1 1 1] nk = [1 1 1 1 1 1 1;输入非线性:输入1:分段线性,10个断点输入2:分段线性,10个断点输入3:分段线性,10个断点输入4:分段线性,10个断点输入6:分段线性,10个断点输出非线性:输出1:无输出2:无采样时间:0.02秒状态:终止条件:达到最大迭代次数迭代次数:15次,功能评估次数:280次,在时域数据“机动相机”上使用NLHW估计。拟合估计数据:[98.46;97.93]% FPE: 7.928, MSE: 2.216更多信息在模型的“报告”属性。

使用COMPARE检查结果。

比较(z, mhw1);

模型属性可以通过PLOT命令可视化。

单击方框图,选择输入非线性(UNL)、线性块或输出非线性(YNL)视图。

当选择线性块视图时,默认情况下所有12个通道都以非常小的尺寸显示。选择其中一个通道可以看得更清楚。可以在阶跃响应、波德图、脉冲响应和零极图中选择图的类型。

情节(mhw1)

COMPARE显示的结果很好,所以我们在接下来的试验中保持相同的模型订单。

NBNFNK = [ones(2,6), ones(2,6), ones(2,6)];

Wiener模型的估计(无输入非线性)

让我们试试维纳模型。注意,输入非线性的缺失可以用“[]”而不是idUnitGain对象表示。

opt.SearchOptions.MaxIterations = 10;mhw2 = nlhw(z, nbnfnk, [], idpiecewislinear, opt)
mhw2 =  2输出6输入Hammerstein-Wiener模型对应阶数为:nb = [1 1 1 1 1 1 1;1 1 1 1 1 1 1] nf = [1 1 1 1 1 1 1 1;1 1 1 1 1 1 1] nk = [1 1 1 1 1 1 1;1 1 1 1 1 1 1]输入非线性:输入1:无输入2:无输入3:无输入4:无输入5:无输入6:无输出非线性:输出1:分段线性,有10个断点输出2:分段线性,有10个断点采样时间:0.02秒状态:终止条件:达到最大迭代次数。迭代次数:10次,功能评估次数:331次,在时域数据“机动相机”上使用NLHW估计。拟合估计数据:[73.85;71.36]% FPE: 1.314e+05, MSE: 503.8更多信息在模型的“报告”属性。

Hammerstein-Wiener模型的估计(输入和输出非线性)

表示Hammerstein-Wiener模型的输入和输出非线性。

mhw3 = nlhw(z, nbnfnk,idSaturation, idpiecewislinear, opt)
mhw3 =  2输出6输入Hammerstein-Wiener模型对应阶数为:nb = [1 1 1 1 1 1 1;1 1 1 1 1 1 1] nf = [1 1 1 1 1 1 1 1;1 1 1 1 1 1 1] nk = [1 1 1 1 1 1 1;1 1 1 1 1 1 1]输入非线性:输入1:线性区间饱和:[0.0103 0.0562]输入2:线性区间饱和:[-0.00143 0.000909]输入3:线性区间饱和:[-0.0947 -0.0185]输入5:线性区间饱和:[0.0195 0.13]输入6:线性区间饱和:[-0.00302 0.000387]输出非线性:输出1:分段线性10个断点输出2:分段线性,10个断点采样时间:0.02秒状态:终止条件:达到最大迭代次数迭代次数:10次,功能评估次数:341次,在时域数据“机动相机”上使用NLHW估计。拟合估计数据:[86.88;84.55]% FPE: 1.111e+04, MSE: 137.3更多信息在模型的“报告”属性。

idSaturation函数的限值可以通过以下方式访问:

mhw3.InputNonlinearity (1) .LinearInterval% view饱和函数的线性间隔
Ans = 0.0103 0.0562

类似地,idpiecewislinear函数的断点可以通过如下方式访问:

mhw3.OutputNonlinearity (1) .BreakPoints
ans =列1至列7 17.1233 34.2491 51.3726 68.4968 85.6230 102.7478 119.8742 2.6184 16.0645 45.5178 41.9621 62.3246 84.9038 112.2970列8至列10 136.9991 154.1238 171.2472 135.4543 156.1016 173.2701

Hammerstein-Wiener模型-使用混合非线性函数

不同的非线性函数可以混合在同一个模型中。假设我们想要一个模型:-任何输出通道上没有非线性(“Hammerstein模型”)-输入通道#1上的分段线性非线性3输入通道#2上的饱和非线性输入通道#3上的死区非线性输入通道#4上的Sigmoid网络非线性-输入通道#5上没有非线性(由单位增益对象指定)-输入通道#6上的Sigmoid网络非线性5个单元

我们可以创建一个选择类型的非线性映射函数对象数组,并将其传递给估计函数NLHW作为输入非线性。

inputNL = [idpiecewislinear;...idSaturation;...idDeadZone;...idSigmoidNetwork;...idUnitGain;...idSigmoidNetwork (5)];inputNL(1)。NumberOfUnits = 3;opt.SearchOptions.MaxIterations = 25;mhw4 = nlhw(z, nbnfnk, inputNL, [], opt);% "[]"作为第四个输入参数表示没有输出非线性

Hammerstein-Wiener模型-指定饱和和死区初始猜想

饱和的线性区间和死区零区间的初始猜测可以在这些对象创建时直接表示出来;您还可以对这些值指定约束,例如它们是否固定于指定的值(通过将Free属性设置为false),或者它们的估计是否服从最小/最大边界(使用minimum和maximum属性)。

假设我们想要将饱和度的线性区间设置为[10 200],将死区零区间设置为[11 12]作为初始猜测。此外,我们希望饱和度的上限保持固定。我们可以通过以下方式实现此配置。

用属性的初始猜测创建非线性函数。OutputNL1 = idSaturation([10 200]);OutputNL1.Free(2) = false;%上限为固定值OutputNL2 = idDeadZone([11 12]);mhw5 = idnlhw(nbnfnk, [], [OutputNL1;OutputNL2),“t”, z.Ts);

注意IDNLHW模型对象构造函数的使用idnlhw,而不是估计量nlhw.得到的模型对象mhw5还没有从数据中估计出来。饱和度和死区函数的限值可以被访问。它们仍然有初始值,因为它们还没有从数据中估计出来。

mhw5.OutputNonlinearity (1) .LinearInterval%查看估计后第一个输出通道饱和度的线性区间mhw5.OutputNonlinearity .ZeroInterval (2)%查看估计后第二个输出通道死区上的零间隔
Ans = 10 200 Ans = 11 12

估计后这些极限的值是多少?

opt.SearchOptions.MaxIterations = 15;Mhw5 = nlhw(z, Mhw5, opt)从数据估计模型mhw5.OutputNonlinearity (1) .LinearInterval%在估计后的第一个输出通道上显示饱和度的线性区间mhw5.OutputNonlinearity .ZeroInterval (2)%显示零区间死区在第二个输出通道估计后
mhw5 =  2输出6输入Hammerstein-Wiener模型对应阶数为:nb = [1 1 1 1 1 1 1;1 1 1 1 1 1 1] nf = [1 1 1 1 1 1 1 1;1 1 1 1 1 1 1] nk = [1 1 1 1 1 1 1;11 11 11 11]输入非线性:输入1:无输入2:无输入3:无输入4:无输入5:无输入6:无输出非线性:输出1:饱和线性间隔:[10 200]输出2:死区零间隔:[11 12]采样时间:0.02秒状态:终止条件:达到的最大迭代次数。迭代次数:15次,函数评估次数:386次,在时域数据“机动相机”上使用NLHW估计。拟合估计数据:[27.12;6.857]% FPE: 3.373e+06, MSE: 4666更多信息在模型的“报告”属性。Ans = 9.9974 200.0000 Ans = 11.0020 12.0011

后估计分析-比较不同的模型

不同性质的模型(IDNLARX和IDNLHW)可以在同一个COMPARE命令中进行比较。

比较(z,对象,mhw1)警告(ws)重置警告状态