主要内容

磁流变液阻尼器的非线性建模

这个例子显示了磁流变液阻尼器动态行为的非线性黑箱建模。它展示了如何创建非线性ARX和Hammerstein-Wiener模型的阻尼器使用其速度和阻尼力的测量。

本例中使用的数据由Akira Sano博士(日本庆应义塾大学)和王建东博士(中国北京大学)提供,他们在庆应义塾大学的实验室进行了实验。有关实验系统和相关研究的更详细描述,请参阅下面的参考文献。

王俊杰,佐野a,陈涛,黄b。没有明确非线性参数化的Hammerstein系统辨识。《国际控制杂志》,2008年出版。DOI: 10.1080 / 00207170802382376。

实验装置

磁流变(MR)流体阻尼器是一种半主动控制装置,用于降低各种动态结构的振动。MR流体的粘度取决于设备的输入电压/电流,可以提供可控的阻尼力。

为了研究这种装置的性能,磁流变阻尼器一端固定在地面上,另一端连接到产生振动的振动台。阻尼器的电压设置为1.25 v,阻尼力f(t)每0.005 s采样一次。位移每0.001 s采样一次,然后用它来估计0.005 s采样周期内的速度v(t)。

输入输出数据

包含输入和输出测量值的数据集存储在名为mrdamper.mat的MAT文件中。输入v(t)为阻尼器的速度[cm/s],输出f(t)为阻尼力[N]。MAT文件包含3499个样本数据,对应的采样率为0.005 s。此数据将用于本示例中执行的所有估计和验证任务。

让我们从加载和检查数据开始。负载(fullfile (matlabroot“工具箱”“识别”“iddemos”“数据”“mrdamper.mat”));谁
变量是F Ts V

将加载变量F(输出力)、V(输入速度)和Ts(采样时间)打包到IDDATA对象中。

z = iddata(F, V, Ts,“名字”MR阻尼器的...“InputName”“v”“OutputName”“f”...“InputUnit”“cm / s”“OutputUnit”“N”);

估计和验证的数据准备

将这个数据集z分成两个子集,前2000个样本用于估计(ze),其余样本用于结果验证(zv)。

Ze = z(1:2000);%估计数据Zv = z(2001:结束);%验证数据

让我们把这两个数据集画在一起,以直观地验证它们的时间范围:

图(ze, zv)图例(“泽”“zv”

型号顺序选择

估计黑盒模型的第一步是选择模型顺序。顺序的定义取决于模型的类型。

  • 对于线性和非线性ARX模型,顺序由三个数字表示:na, nb和nk,它们定义了用于预测给定时间输出值的过去输出,过去输入和输入延迟的数量。由顺序定义的延时I/O变量集称为“回归量”。为了更灵活地创建回归器,您可以使用回归器规范对象(参见linearRegressor,多项式回归器,customRegressor)。

  • 对于Hammerstein-Wiener模型,表示具有静态I/O非线性的线性模型,阶数定义了线性分量的极点和零的数量以及输入延迟。它们由数字nb(零的数量+1),nf(极点的数量)和nk(滞后数量中的输入延迟)定义。

典型的模型顺序是通过试错来选择的。然而,线性ARX模型的阶数可以使用函数自动计算arxstruc而且selstruc.由此得到的阶数也为非线性模型可能使用的阶数提供了提示。因此,让我们首先尝试确定线性ARX模型的最佳顺序。

V = arxstruc(ze,zv,struc(1:5, 1:5,1:5));na, nb, nk的% try值在1:5的范围内顺序= selstruc(V,“另类投资会议”%的订单选择赤池的信息标准
顺序= 2 4

AIC准则选择Order = [na nb nk] =[2 4 1],这意味着在所选ARX模型结构中,阻尼力f(t)由6个回归量f(t-1)、f(t-2)、v(t-1)、v(t-2)、v(t-3)和v(t-4)预测。

有关模型顺序选择的更多信息,请参见“模型结构选择:确定模型顺序和输入延迟”示例。

初步分析:创建线性模型

首先尝试线性模型是明智的,因为它们更容易创建。如果线性模型不能提供令人满意的结果,则结果为非线性模型的探索提供了基础。

让我们估计由上面SELSTRUC的输出所建议的订单的线性ARX和输出误差(OE)模型。

LinMod1 = arx(ze, [2 4 1]);% ARX型号Ay = Bu + eLinMod2 = oe(ze, [4 2 1]);% OE型号y = B/F u + e

类似地,我们可以创建一个线性状态空间模型,其顺序(=状态数)将自动确定:

LinMod3 = sest(ze);%创建一个阶为3的状态空间模型

现在让我们将这些模型的响应与ze中的测量输出数据进行比较:

比较(ze, LinMod1, LinMod2, LinMod3)%与估计数据的比较

一个更好的模型质量测试是用一个独立的数据集来验证它。因此,我们将模型响应与数据集zv进行比较。

比较(zv, LinMod1, LinMod2, LinMod3)%与验证数据的比较

正如观察到的那样,这些线性模型中的最佳模型在验证数据集上的拟合率为51%。

创建非线性ARX模型

线性模型识别显示,ARX模型提供不到50%的拟合验证数据。为了获得更好的结果,我们现在探索非线性ARX (IDNLARX)模型的使用。对这些数据的非线性模型的需求也由建议实用程序,可以用来检查数据的潜在优势,使用非线性模型比线性模型。

建议(泽,“非线性”
数据中有非线性的迹象。阶[4 4 1]和idTreePartition函数的非线性ARX模型对输出的预测效果比相应的同阶ARX模型更好。考虑使用非线性模型,如IDNLARX或IDNLHW。你也可以使用“isnlarx”命令测试更多的非线性选项。

非线性ARX模型可以被认为是ARX模型的非线性对应物,通过以下两种方式提供了更大的建模灵活性:

  1. 回归量可以使用非线性函数组合,而不是ARX模型采用的加权和。非线性函数如s型网络、二叉树和小波网络可以被使用。在识别上下文中,这些函数称为“非线性映射函数”。

  2. 回归量本身可以是I/O变量的任意(可能是非线性)函数,以及ARX模型使用的时滞变量值。

为非线性ARX模型创建回归量

当线性连续滞后时,回归量最容易使用顺序矩阵[na nb nk]创建,如上所述。在具有任意滞后的回归量的最一般情况下,或者当回归量基于变量的绝对值时,使用linearRegressor对象提供了更大的灵活性。如果回归量是时滞变量的多项式,则可以使用polynomialRegressor对象。对于使用任意用户指定公式的回归器,customRegressor可以使用对象。

我们将探讨使用不同的模型阶数和使用不同的非线性映射函数。没有探讨多项式或自定义回归器的使用。有关在IDNLARX模型中指定自定义回归量的方法,请参阅题为“使用非线性和自定义回归量构建非线性ARX模型”的示例。

估算一个默认的非线性ARX模型

首先,让我们估计一个阶[2 4 1]的IDNLARX模型和一个sigmoid网络作为非线性类型。我们将使用MaxIterations = 50和Levenberg-Marquardt搜索方法作为下面所有估计的估计选项。

选项= nlarxOptions(“SearchMethod”“lm”);Options.SearchOptions.MaxIterations = 50;Narx1 = nlarx(ze, [2 4 1], idSigmoidNetwork, Options)
输入:v输出:f回归函数:变量f, v中的线性回归函数输出函数:10个单位的Sigmoid网络采样时间:0.005秒状态:在时域数据“MR阻尼器”上使用NLARX估计。与估计数据拟合:95.8%(预测焦点)FPE: 6.648, MSE: 6.08

nlarx是用于估计非线性ARX模型的命令。Narx1是一个非线性ARX模型,回归量R:= [f(t-1), f(t-2), v(t-1)…v(第四节)]。非线性是一个Sigmoid网络,它使用Sigmoid单位函数和回归函数线性加权和的组合来计算输出。映射函数存储在OutputFcn模型的属性。

disp (Narx1.OutputFcn)
Sigmoid网络输入:f(t-1), f(t-2), v(t-1), v(t-2), v(t-3), v(t-4)输出:f(t)非线性函数:10单元Sigmoid网络线性函数:初始化为[48.3 -3.38 -3.34 -2.7 -1.38 2.15]输出偏移量:初始化为-21.4输入:{'f(t-1)' 'f(t-2)' 'v(t-2)' 'v(t-3)' 'v(t-4)'}输出:{'f(t)'}非线性fcn: ''线性函数参数>'偏移量:'<偏移量参数>'

通过将模拟输出与估计和验证的数据集ze和zv进行比较,检查模型质量:

比较(泽Narx1);%与估计数据的比较

比较(zv Narx1);%与验证数据的比较

尝试各种型号订单

与相同阶数的线性模型相比,我们看到了更好的拟合。接下来,我们可以尝试SELSTRUC建议的附近的其他订单。

NL = idSigmoidNetwork;Narx2{1} = nlarx(ze, [3 4 1], NL, Options);%使用na = 3, nb = 4, nk = 1。Narx2{1}。Name =“Narx2_1”;Narx2{2} = nlarx(ze, [2 5 1], NL, Options);Narx2{2}。Name =“Narx2_2”;Narx2{3} = nlarx(ze, [3 5 1], NL, Options);Narx2{3}。Name =“Narx2_3”;Narx2{4} = nlarx(ze, [1 4 1], NL, Options);Narx2{4}。Name =“Narx2_4”;Narx2{5} = nlarx(ze, [2 3 1], NL, Options);Narx2{5}。Name =“Narx2_5”;Narx2{6} = nlarx(ze, [1 3 1], NL, Options);Narx2{6}。Name =“Narx2_6”

评估这些模型在估计和验证数据集上的性能:

比较(ze, Narx1, Narx2{:});%与估计数据的比较

比较(zv, Narx1, Narx2{:});%与验证数据的比较

模型Narx2{6}似乎对估计和验证数据集都提供了很好的拟合,但其阶数小于Narx1。基于这一观察,让我们使用[1 3 1]作为后续试验的顺序,并保留Nlarx2{6}进行拟合比较。这种顺序的选择对应于使用[f(t-1), v(t-1), v(t-2), v(t-3)]作为回归量集。

指定Sigmoid网络函数的单元数

接下来,让我们探索Sigmoid网络函数的结构。这个估计器最相关的性质是它使用的sigmoid单位的数量。创建一个使用12个sigmoid单位的函数。

Sig = idSigmoidNetwork(12);创建一个使用12个单位的网络Narx3 = nlarx(ze, [1 3 1], Sig, Options);

我们将该模型与Narx1和Narx2{6}在估计和验证数据集上进行比较:

比较(ze, Narx3, Narx1, Narx2{6});%与估计数据的比较

比较(zv, Narx3, Narx1, Narx2{6});%与验证数据的比较

新模型Narx3并不比Narx2{6}更适合。因此,在随后的试验中,我们将单位数量保留为10个。

非线性映射函数回归子集的选择

通常,非线性函数(sigmoid网络)使用所有由选定的阶数定义的回归量(此处[1 3 1])。如果回归量很大,可能会增加模型的复杂性。在不修改模型顺序的情况下,可以选择一个回归量的子集以供sigmoid网络的组件使用。这是通过名为'RegressorUsage'的属性来实现的。它的值是一个表,用于指定哪些组件使用哪些回归器。例如,我们可以探索只使用由输入变量贡献的回归量,以供sigmoid函数的非线性分量使用。可以这样做:

Sig = idSigmoidNetwork(10);NarxInit = idnlarx(ze;OutputName,泽。InputName, [1 3 1], Sig);NarxInit.RegressorUsage。(“f: NonlinearFcn”)(1) = false;disp(NarxInit. regressorusage) Narx4 = nlarx(ze, NarxInit, Options);
f: LinearFcn f: NonlinearFcn  ___________ ______________ f (t - 1)真的假的v (t - 1)真的真的v(2)真的真的v(条t - 3)真的真的

这使得回归量v(t-1), v(t-2)和v(t-3)被sigmoid单位函数使用。没有使用基于输出变量的回归函数f(t-1)。请注意,idSigmoidNetwork函数还包含一个线性项,该项由所有回归量的加权和表示。线性项使用完整的回归量集。

创建另一个模型,使用回归量{y1(t-1), u1(t-2), u1(t-3)}作为非线性分量。

使用= false(4,1);Use([1 3 4]) = true;NarxInit。RegressorUsage{:,2} =使用;Narx5 = nlarx(ze, NarxInit, Options);

模型Narx5似乎对估计和验证数据集都表现得非常好。

比较(泽Narx5);%与估计数据的比较

比较(zv Narx5);%与验证数据的比较

尝试各种非线性映射函数

到目前为止,我们已经探索了各种模型阶数,在Sigmoid网络函数中使用的单位数量,以及由Sigmoid网络的非线性组件使用的回归量子集的规范。接下来,我们尝试使用其他类型的非线性函数。

使用具有默认属性的小波网络函数。像sigmoid网络一样,小波网络通过使用线性和非线性分量的和将回归量映射到输出;非线性分量使用小波的和。

NarxInit = idnlarx(ze;OutputName,泽。InputName, [1 3 1], idWaveletNetwork);对于网络的非线性分量,只使用回归量1和3NarxInit.RegressorUsage。(“f: NonlinearFcn”)([2 4]) = false;Narx6 = nlarx(ze, NarxInit, Options);

使用20个单元的树分割非线性函数:

TreeNet = idTreePartition;TreeNet.NonlinearFcn.NumberOfUnits = 20;NarxInit。OutputFcn= TreeNet; Narx7 = nlarx(ze, NarxInit, Options);

将结果与Narx3和Narx5进行比较

比较(ze, Narx3, Narx5, Narx6, Narx7)%与估计数据的比较

比较(zv, Narx3, Narx5, Narx6, Narx7)%与验证数据的比较

模型Narx6和Narx7的表现似乎比Narx5差,尽管我们还没有探索与它们的估计相关的所有选项(如非线性回归量的选择,单位数和其他模型顺序)。

分析估计的IDNLARX模型

方法确定并验证了模型之后比较命令时,我们可以试探性地选择提供最佳结果而不增加太多额外复杂性的方法。然后可以使用命令进一步分析所选模型,例如情节而且渣油

为了深入了解模型的非线性性质,检查估计模型F(t) = F(F(t-1), F(t-2), v(t-1),…,v(t-4))中的非线性函数F()的截面。例如,在Narx5模型中,函数F()是一个sigmoid网络。为了探究F()输出作为回归函数的形状,在模型上使用PLOT命令:

情节(Narx5)

绘图窗口提供了选择横截面回归函数及其范围的工具。有关更多信息,请参见“help idnlarx/plot”。

残差检验可用于模型的进一步检验。该检验揭示了预测误差是否为白色且与输入数据不相关。

集(gcf,“DefaultAxesTitleFontSizeMultiplier”, 1...“DefaultAxesTitleFontWeight”“正常”...“位置”,[100 100 780 520]);残基(zv, Narx3, Narx5)

残差测试的失败可能指向模型没有捕捉到的动态。对于Narx3模型,残差似乎大多在99%的置信范围内。

创建Hammerstein-Wiener模型

先前估计的非线性模型均为非线性ARX (IDNLARX)类型。现在让我们试试Hammerstein-Wiener (IDNLHW)模型。这些模型表示静态非线性元素与线性模型的串联。我们可以认为它们是线性输出误差(OE)模型的扩展,其中我们将线性模型的输入和输出信号置于静态非线性中,如饱和或死区。

估计一个与线性OE模型同阶的IDNLHW模型

线性OE模型LinMod2的估计顺序为nb = 4, nf = 2和nk = 1。让我们使用相同的阶数来估计一个IDNLHW模型。我们将使用sigmoid网络作为输入和输出非线性的非线性。的方法便于进行估计nlhw命令。它类似于oe命令用于线性OE模型估计。然而,除了模型顺序之外,我们还必须指定I/O非线性的名称或对象。

Opt = nlhwOptions(“SearchMethod”“lm”);UNL = idSigmoidNetwork;YNL = idSigmoidNetwork;Nhw1 = nlhw(ze, [4 2 1], UNL, YNL, Opt)
Nhw1 = 1输出1输入Hammerstein-Wiener模型对应阶数nb = 4, nf = 2, nk = 1的线性传递函数输入非线性:10单元Sigmoid网络输出非线性:10单元Sigmoid网络采样时间:0.005秒状态:在时域数据“MR阻尼器”上使用NLHW估计。拟合估计数据:83.98% FPE: 94.66, MSE: 88.34

将此模型的响应与估计和验证数据集进行比较:

clf compare(ze, Nhw1);%与估计数据的比较

比较(zv Nhw1);%与验证数据的比较

使用Nhw1模型,我们观察到约70%与验证数据拟合。

分析估计的IDNLHW模型

对于非线性ARX模型,可以使用PLOT命令检查Hammerstein-Wiener模型的I/O非线性性质和线性组件的行为。如需了解更多信息,请在MATLAB命令窗口中键入“帮助idnlhw/plot”。

情节(Nhw1)

默认情况下,输入非线性被绘制出来,表明它可能只是一个饱和函数。

通过单击Y_NL图标,输出非线性看起来像一个分段线性函数。

点击Linear Block图标,在下拉菜单中选择pole - zero Map,可以看到一个零点和一个极点离得很近,说明它们可以被移除,从而减少模型的顺序。

我们将使用这些信息来配置模型的结构,如下所示。

尝试各种非线性函数和模型阶

输入非线性采用饱和,输出非线性采用sigmoid网络,保持线性分量顺序不变:

Nhw2 = nlhw(ze, [4 2 1], idSaturation, idSigmoidNetwork, Opt);

输出采用分段线性非线性,输入采用sigmoid网络:

Nhw3 = nlhw(ze, [4 2 1], idSigmoidNetwork, idpiecewislinear, Opt);

使用低阶线性模型:

Nhw4 = nlhw(ze, [3 1 1], idSigmoidNetwork, idpiecewislinear, Opt);

我们也可以选择“去除”输入、输出或两者的非线性。例如,为了只使用输入非线性(这样的模型被称为Hammerstein模型),我们可以指定[]作为输出非线性:

Nhw5 = nlhw(ze, [3 1 1],idSigmoidNetwork, [], Opt);

比较所有模型

比较(ze, Nhw1, Nhw2, Nhw3, Nhw4, Nhw5)%与估计数据的比较

比较(zv, Nhw1, Nhw2, Nhw3, Nhw4, Nhw5)%与验证数据的比较

通过与验证数据的比较可以看出,Nhw1仍然是所有模型中最好的,但除了Nhw5之外,其他模型的性能都很相似。

结论

我们探索了各种非线性模型来描述电压输入和阻尼力输出之间的关系。可以看出,在非线性ARX模型中,Narx2{6}和Narx5的表现最好,而在Hammerstein-Wiener模型中,Nhw1的表现最好。我们还发现,非线性ARX模型提供了描述磁流变阻尼器动力学的最佳选择(最佳拟合)。

Narx5。Name =“Narx5”;Nhw1。Name =“Nhw1”;比较(zv, LinMod2, Narx2{6}, Narx5, Nhw1)

我们发现每种模型类型都有多个选项可以微调结果的质量。对于非线性ARX模型,我们不仅可以指定模型阶数和非线性函数的类型,还可以配置如何使用回归函数并调整所选函数的属性。对于Hammerstein-Wiener模型,我们可以选择输入和输出非线性函数的类型,以及线性分量的阶数。对于这两种模型类型,我们有许多可供我们尝试和使用的非线性函数选择。在缺乏对模型结构的特殊偏好或对潜在动态的知识的情况下,建议尝试各种选择并分析它们对结果模型质量的影响。