主要内容

电动镜头——多输入多输出非线性ARX和Hammerstein-Wiener模型

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

测量的数据集

数据保存在文件motorizedcamera。垫将用于这个例子。它包含188个数据样本,收集从一个机动摄像头样品时间为0.02秒。输入向量u (t)是由6个变量:3正交x y z坐标系统中的翻译速度组件固定在相机(米/秒),和3个旋转速度组件x y z轴(rad / s)。输出向量y (t)包含两个变量:一个点的位置(以像素为单位)是由相机定点的三维空间。我们创建一个IDDATA对象z把加载数据:

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

非线性ARX (IDNLARX)模型,选取解释变量

让我们先试着非线性ARX模型。需要选择两个重要元素:模型的解释变量和非线性映射功能。

解释很简单公式基于时滞I / O变量,最简单的情况下被少量的连续变量滞后值。例如,如果“u”在输入变量的名称,和“y”输出变量的名称,然后一个例子解释变量集可以{y y (t - 1), (2), u (t), u (t - 1), u (2)},“t”表示时间变量的地方。另一个例子包括多项式条款可能是{y (2) ^ 4, y (2) * u (t - 1), u(第四节)^ 2}。更复杂,任意延迟变量的公式也成为可能。

指定线性解释变量的简单的方法是通过使用一个“订单矩阵”。这个矩阵的NN = (na nb nk),它指定多少滞后每个输出(na)和每个输入变量(nb, nk)被推迟。这是同样的想法,当估计线性ARX模型(见IDPOLY ARX)。例如,NN =[2 3 4]意味着回归量集{y (2), u(第四节),u (t-5), u (t-6)}。在一般情况下与纽约的模型输出和ν输入,神经网络是一个矩阵与纽约行和纽约+ 2 *ν行。

非线性ARX (IDNLARX)模型,初步估计使用小波网络

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

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

检查结果通过比较输出与估计模型模拟和测量的输出数据z:

比较(z, mw1)

非线性ARX模型——尝试更高的订单

让我们检查是否我们可以做得更好更高的订单。注意,当使用基函数扩展识别模型表达的非线性,模型参数的数量可以超过数据样本的数量。在这种情况下,一些评估指标如噪声方差和最终的预测误差(消防工程)不能确定可靠。对于当前的例子,我们关闭警告通知我们关于这个限制。

ws =警告(“关闭”,鉴别:估计:NparGTNsamp);%对象= nlarx (z,[(2, 2), 2 * 1(2,6)的(2,6)],idWaveletNetwork)比较(z,对象)
对象= < >强非线性ARX模型2输出和6输入< /强>输入:u1, u2, u3,愉快,u5, u6输出:y1, y2解释变量:线性解释变量y1, y2, u1, u2, u3,愉快,u5, u6输出功能:输出1:小波网络与27个单位输出2:小波网络与25单位样品时间:0.02秒状态:估计使用NLARX时域数据“机动相机”。适合估算数据:[99.22,99.15]%(预测聚焦)消防工程:0.1262,MSE: 0.4453在模型的“报告”属性的更多信息。

第二个模型对象很好。所以让我们保持这个订单在下面的例子中选择模型。

nanbnk =[(2, 2), 2 * 1(2,6)的(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)
= 27岁= 25

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

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

Fcn1 = idWaveletNetwork (10);%输出函数的输出Fcn2 = idWaveletNetwork (5);%输出函数的第二输出mw3 = nlarx (z, nanbnk Fcn1;Fcn2])
mw3 = < >强非线性ARX模型2输出和6输入< /强>输入:u1, u2, u3,愉快,u5, u6输出:y1, y2解释变量:线性解释变量y1, y2, u1, u2, u3,愉快,u5, u6输出功能:输出1:小波网络10单元输出2:小波网络5单位样品时间:0.02秒状态:估计使用NLARX时域数据“机动相机”。适合估算数据:[99.01,98.89]%(预测聚焦)消防工程:0.2273,MSE: 0.7443在模型的“报告”属性的更多信息。

非线性ARX模型,尝试其他非线性映射功能

idWaveletNetwork函数,也可以使用其他非线性函数。让我们尝试的idTreePartition输出。

mt1 = nlarx (z, nanbnk, idTreePartition);

在上面的电话,一个树分区映射函数使用默认配置用于输出。

同样的,我们可以使用一个s形的网络映射函数(idSigmoidNetwork对象)。估计选项,例如最大迭代(MaxIterations)和迭代显示可以指定使用nlarxOptions命令。

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

这个调用语法NLARX非常类似于使用的指定数据之前,订单和非线性映射函数作为他们的主要输入参数。然而,为了修改评估选项的默认值,我们构造了一个选项,选择,使用nlarxOptions命令并通过NLARX命令作为一个额外的输入参数。

非线性ARX模型与混合非线性函数

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

Fcn1 = idTreePartition;Fcn2 = idWaveletNetwork;mtw = nlarx (z, nanbnk Fcn1;Fcn2]);

有时将解释变量映射到模型输出的函数不需要非线性;它可以使此向量的加权和,加上一个可选的偏移量。这是类似于线性ARX模型(抵消项除外)。没有的非线性输出通道可以通过选择一个idLinear函数表示。下面的例子就意味着,在model_output (t) = F (y (t - 1), u (t - 1), u(2)),线性组件的函数F是由第一输出和一个非线性组件(idSigmoidNetwork)第二输出。

Fcn1 = idLinear;Fcn2 = idSigmoidNetwork (2);opt.Display =“关闭”;%不显示估计的进展了mls = nlarx (z, nanbnk Fcn1;Fcn2】,选择)
mls = < >强非线性ARX模型2输出和6输入< /强>输入:u1, u2, u3,愉快,u5, u6输出:y1, y2解释变量:线性解释变量y1, y2, u1, u2, u3,愉快,u5, u6输出功能:输出1:线性与抵消输出2:乙状结肠网络2单位样品时间:0.02秒状态:终止条件:最大迭代次数达到. .迭代次数:5、功能评估:60估计使用NLARX时域数据“机动相机”。适合估算数据:[98.72,98.8]%(预测聚焦)消防工程:0.5481,MSE: 1.041在模型的“报告”属性的更多信息。

没有第一个输出的非线性模型。然而,它不是纯粹的线性,因为存在一个偏移量的术语。

disp (mls.OutputFcn (1))
<强> < /强>输入:线性函数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)输出:日元(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.03 e-06输入:{1 x14细胞}输出:{“y1 (t)”} LinearFcn:“<线性函数参数>”抵消:“<偏移量参数>”

我们可以选择让它纯粹的线性选择不使用偏移量。这个选择可以通过固定偏移量估计前一个零值。

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

利用统计回归算法和机器学习工具

如果你有访问统计和机器学习工具箱™还可以使用高斯过程(GP)函数和袋装或乐团创建非线性ARX模型提高了树。GPs idGaussianProcess所代表的对象,而回归树乐团由idTreeEnsemble对象。GPs使用squared-exponential默认内核。其他类型的内核可能是在创建对象时指定。在这里的例子中,我们使用一个基于“ARDMatern52”内核GP第一输出和袋装树合奏第二输出。

如果存在(“fitrgp”,“文件”)= = 2警告(“关闭”,“统计数据:套索:MaxIterReached”);NL1 = idGaussianProcess (“ardmatern52”);NL2 = idTreeEnsemble;%估计模型mML = nlarx (z, nanbnk NL1;NL2])结束
mML = < >强非线性ARX模型2输出和6输入< /强>输入:u1, u2, u3,愉快,u5, u6输出:y1, y2解释变量:线性解释变量y1, y2, u1, u2, u3,愉快,u5, u6输出功能:输出1:高斯过程函数使用一个ARDMatern52内核输出2:袋装回归树合奏样品时间:0.02秒状态:估计使用NLARX时域数据“机动相机”。适合估算数据:[99.29,98.44]%(预测聚焦)MSE: 0.968在模型的“报告”属性的更多信息。

估计结果的检验

各种模型可以比较在相同的命令进行比较。例如,比较模型的模拟输出对象,ms1, mls, mlsNoOffset测量输出数据集“z”。

比较(z,对象,ms1、mls mlsNoOffset)

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

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

注意,控制面板右边的情节允许回归量选择和配置。

渣油等其他功能,预测和PE可能以同样的方式被用于估计模型的线性模型。

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

Hammerstein-Wiener模型由3块:一个线性传递函数块之前一个非线性静态块和/或另一个非线性静态块紧随其后。它被称为维纳模型非线性静态块缺席,如果第一个和汉默斯坦模型如果第二个非线性静态块缺席。

IDNLHW估计模型通常使用的语法:

M = NLHW(数据、订单、InputNonlinearity OutputNonlinearity)。

订单= (nb nf nk)指定订单和延迟的线性传递函数。InputNonlinearity和OutputNonlinearity指定两个非线性的非线性函数块。线性输出误差(OE)模型对应于琐碎的情况(单位获得映射)的非线性。

汉默斯坦估计模型(没有输出非线性)

让我们选择订单= [nb bf nk] =[(2,6),则(2,6)的(2,6)]。这意味着,在线性分组,每个输出的总和6一阶传递函数由6输入。试着汉默斯坦模型(没有输出非线性)与输入非线性分段线性函数描述。注意,输入单一idPiecewiseLinear对象自动扩展到所有的6个输入通道。idUnitGain表明缺乏非线性。

选择= nlhwOptions ();opt.SearchOptions。MaxIterations = 15;NN =[(2,6),则(2,6)的(2,6)];InputNL = idPiecewiseLinear;%输入非线性OutputNL = idUnitGain;%输出非线性mhw1 = nlhw (z, NN, InputNL OutputNL,选择)
mhw1 = <强> Hammerstein-Wiener模型2输出和6输入< / >强线性传递函数矩阵对应订单:nb = [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]nk = [1 1 1 1 1 1;1 1 1 1 1 1]输入非线性:输入1:分段线性输入2:10断点分段线性输入3:10断点分段线性输入4:10断点分段线性输入5:10断点分段线性输入6:10断点分段线性输出非线性:10断点输出1:没有输出2:没有一个样品时间:0.02秒状态:终止条件:最大迭代次数达到. .迭代次数:15、功能评估:280估计使用NLHW时域数据“机动相机”。适合估算数据:[98.46,97.93]%消防工程:7.928,MSE: 2.216在模型的“报告”属性的更多信息。

检查结果与比较。

比较(z, mhw1);

模型属性可以可视化绘制命令。

点击方块图选择输入非线性的观点(多人),线性块或输出非线性(YNL)。

当选择线性分组视图时,默认情况下所有的12通道非常减少尺寸所示。选择其中一个通道有一个更好的观点。可以选择类型的情节在阶跃响应,波德图、脉冲响应和Pole-zero地图。

情节(mhw1)

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

nbnfnk =[(2,6),则(2,6)的(2,6)];

维纳估计模型(没有输入非线性)

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

opt.SearchOptions。MaxIterations = 10;mhw2 = nlhw (z, nbnfnk, [], idPiecewiseLinear选择)
mhw2 = <强> Hammerstein-Wiener模型2输出和6输入< / >强线性传递函数矩阵对应订单:nb = [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]nk = [1 1 1 1 1 1;1 1 1 1 1 1]输入非线性:输入1:没有输入2:没有输入3:没有输入4:没有输入5:没有输入6:没有输出非线性:输出1:分段线性输出2:10断点分段线性样本10断点时间:0.02秒状态:终止条件:最大迭代次数达到. .迭代次数:10、功能评估:331估计使用NLHW时域数据“机动相机”。适合估算数据:[73.85,71.36]%消防工程:1.314 e + 05, MSE: 503.8在模型的“报告”属性的更多信息。

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

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

mhw3 = nlhw (z, nbnfnk, idSaturation idPiecewiseLinear,选择)
mhw3 = <强> Hammerstein-Wiener模型2输出和6输入< / >强线性传递函数矩阵对应订单:nb = [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]nk = [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]输入4:饱和线性区间:[-0.00385 - 0.00527]输入5:饱和线性区间:[0.0195 - 0.13]输入6:饱和线性区间:[-0.00302 - 0.000387]非线性输出:输出1:分段线性输出2:10断点分段线性样本10断点时间:0.02秒状态:终止条件:最大迭代次数达到. .迭代次数:10、功能评估:341估计使用NLHW时域数据“机动相机”。适合估算数据:[86.88,84.55]%消防工程:1.111 e + 04, MSE: 137.3在模型的“报告”属性的更多信息。

值的极限idSaturation函数可以访问如下:

mhw3.InputNonlinearity (1) .LinearInterval%视图饱和函数的线性区间
ans = 0.0103 - 0.0562

同样,idPiecewiseLinear函数可以访问的破发点如下:

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模式——使用复杂的非线性函数

可以混合不同的非线性函数在一个相同的模式。假设我们想要一个模型:任何没有非线性输出通道(“汉默斯坦模式”)——分段线性非线性输入通道与3 # 1单元——饱和非线性输入通道# 2 -死区非线性输入频道# 3 -乙状结肠网络非线性输入通道# 4——没有非线性(由unitgain对象指定)输入通道# 5 -乙状结肠网络非线性输入通道与5 # 6单位

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

inputNL = [idPiecewiseLinear;idSaturation;idDeadZone;idSigmoidNetwork;idUnitGain;idSigmoidNetwork (5)];inputNL (1)。NumberOfUnits = 3;opt.SearchOptions。MaxIterations = 25;mhw4 = nlhw (z, nbnfnk inputNL,[],选择);%“[]”4日输入参数表示没有输出非线性

Hammerstein-Wiener模型——指定初始猜测饱和度和死区

的初始猜测的饱和度和零的线性区间间隔死区可以直接显示在创建这些对象时;您还可以指定约束等这些值是否他们是固定的指定值(通过设置自由属性为false),或者如果他们估计受最小/最大范围(使用最小和最大属性)。

假设我们想要设置饱和的线性区间[200]和死区是零间隔12[11],最初的猜测。此外,我们想要的上限饱和度保持不变。我们可以实现这种配置如下。

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

注意使用IDNLHW模型对象的构造函数idnlhw,而不是估计量nlhw。由此产生的模型对象mhw5还没有从数据估计。极限的饱和度和死区值函数可以访问。他们仍然有初始值,因为他们还没有估计的数据。

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

这些限制后估计的值是什么?

opt.SearchOptions。MaxIterations = 15;mhw5 = nlhw (z, mhw5选择)%从数据估计模型mhw5.OutputNonlinearity (1) .LinearInterval%显示线性区间估计后的第一个输出通道饱和mhw5.OutputNonlinearity .ZeroInterval (2)%显示零区间估计后死区在第二个输出通道
mhw5 = <强> Hammerstein-Wiener模型2输出和6输入< / >强线性传递函数矩阵对应订单:nb = [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]nk = [1 1 1 1 1 1;1 1 1 1 1 1]输入非线性:输入1:没有输入2:没有输入3:没有输入4:没有输入5:没有输入6:没有输出非线性:1:输出饱和线性区间:[200]输出2:死区与零间隔:[11 12]样品时间:0.02秒状态:终止条件:最大迭代次数达到. .迭代次数:15、功能评估:386估计使用NLHW时域数据“机动相机”。适合估算数据:[27.12,6.857]%消防工程:3.373 e + 06, MSE: 4666模型的“报告”属性的更多信息。= 9.9974 - 200.0000岁= 11.0020 - 12.0011

后评估分析,比较不同模型

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

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