主要内容

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

该示例显示了磁流变流体阻尼器的动态行为的非线性黑匣子建模。它显示了如何使用速度和阻尼力的测量来创建阻尼器的非线性ARX和HAMPerstein-Wiener模型。

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

王俊杰,佐野a,陈涛,黄斌。无非线性显式参数化的Hammerstein系统的辨识。国际控制杂志,出版,2008。DOI: 10.1080 / 00207170802382376。

实验装置

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

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

输入输出数据

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

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

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

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

数据准备估算和验证

将此数据SET SET Z分为两个子集,将用于估计(ZE)的前2000个样本,其余用于验证结果(ZV)。

泽= z (1:20 00);%估计数据zv z =(2001:结束);%验证数据

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

情节(泽,zv)传说(“泽”“zv”

模型顺序选择

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

  • 对于线性和非线性ARX模型,订单由三个数字表示:NA,NB和NK,它定义过去输出的数量,过去的输入和输入延迟,用于预测给定时间的输出值。订单定义的时间延迟I / O变量集称为“回归器”。

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

通常通过试验和错误选择模型订单。然而,可以使用诸如的功能自动计算线性ARX模型的订单arxstrucSelstruc.由此获得的订单暗示了对非线性模型的可能订单。因此,让我们首先尝试确定线性ARX模型的最佳订单。

V = ARXSTRUC(ZE,ZV,Struc(1:5,1:5,1:5));对于na, nb, nk, % try值在1:5范围内ORDER = SELSTRUC(v,“另类投资会议”akaike的信息标准%选择订单
1 .单词conduct联想记忆

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)预测。

有关模型顺序选择的更多信息,请参阅标题为“模型结构选择:确定模型顺序和输入延迟”的示例(iddemo4.m)。

初步分析:创建线性模型

建议首先尝试线性模型,因为它们更简单创建。如果线性模型不提供令人满意的结果,则结果为非线性模型提供了探索的基础。

让我们估计由上述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 = ssest(ze);%创建了一个状态空间模型3

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

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

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

比较(zv,linmod1,linmod2,linmod3)与验证数据的比较

正如所观察到的,这些最好的线性模型对验证数据集的拟合率为51%。

建立非线性ARX模型

线性模型识别表明,ARX模型对验证数据的拟合小于50%。为了取得更好的结果,我们现在探索使用非线性ARX (IDNLARX)模型。该方法还建议对这些数据建立非线性模型建议实用程序,可用于检查数据,以确定使用非线性模型比线性模型的潜在优势。

建议(ZE,“非线性”
数据中存在非线性的指示。订单的非线性ARX模型[4 4 1]和树桩非线性估计器比相同顺序的相应ARX模型更好地预测输出。考虑使用非线性模型,例如idnlarx或idnlhw。您也可以使用“isnlarx”命令用更多选项来测试非线性的非线性。

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

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

  2. 除了ARX模型采用的时间延迟变量值之外,回归器本身可以是I / O变量的任意(可能的非线性)函数。

为非线性ARX模型创建回归

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

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

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

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

选项= nlarxoptions(“SearchMethod”“lm”);选项.SearchOptions.maxIterations = 50;narx1 = nlarx(ze,[2 4 1],'sigmoidnet',选项)
 Inputs: v Outputs: f regression: variable f, v Linear regression output function: Sigmoid Network with 10 units Sample time: 0.005 seconds Status: using NLARX on time domain data“MR damping”拟合估计数据:95.8%(预测焦点)FPE: 6.648, MSE: 6.08

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

disp (Narx1.OutputFcn)
 sigmoid网络输入:f(t-1),f(t-2),v(t-1),v(t-2),v(t-3),v(t-4)输出:F非线性功能:Sigmoid网络,10个单位。线性函数:初始化为[48.3 -3.38 -3.34 -2.7 -1.38 2.15]输出偏移量:初始化为-18.9输入:[1×1 idpack.channel]输出:[1×1 idpack.channel] linearfcn:[1×1nlidernal.USEPROJECTEDLINEARFCN] nonlinearfcn:[1×1 nlident.internal.ridgenetfcn]偏移量:[1×1 nlident.internal.chooseableOffset]

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

比较(ze,narx1);%与估计数据比较

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

尝试各种模型订单

与相同订单的线性模型相比,我们看到更好的合适。接下来,我们可以尝试Selstruc建议的那些附近的其他订单。

narx2 {1} = nlarx(ze,[3 4 1],'sigmoidnet'、选择);%使用na = 3,nb = 4,nk = 1。narx2 {1} .name =“Narx2_1”;Narx2{2} = nlarx(ze, [2 5 1],'sigmoidnet'、选择);Narx2{2}。Name =“Narx2_2”;Narx2{3} = nlarx(ze, [3 5 1],'sigmoidnet'、选择);narx2 {3} .name =“Narx2_3”;Narx2{4} = nlarx(ze, [1 4 1],'sigmoidnet'、选择);narx2 {4} .name =“Narx2_4”;Narx2{5} = nlarx(ze, [2 3 1],'sigmoidnet'、选择);Narx2{5}。Name =“Narx2_5”;Narx2{6} = nlarx(ze, [1 3 1],'sigmoidnet'、选择);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 Network函数的结构。这个估计量最相关的性质是它使用的s形单位数。为了能够指定单位的数量,我们在NLARX命令(第三个输入参数)中使用构造函数创建的对象来指定非线性:SIGMOIDNET..在对象形式中,我们可以查询和配置估计器的各种属性。

Sig = sigmoidnet (12);%创建一个SIGMOIDNET对象,使用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个单元。

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

通常,非线性函数(SigmoidNet)使用由所选顺序(此处[111])定义的所有回归器。如果回归器的数量很大,这可能会增加模型复杂性。可以在不修改模型订单的情况下选择要由SigmoidNet的组件使用的回归器子集。这是由称为“重返罗朗”的财产促进。它的值是一个表,它指定由哪些组件使用的回归。例如,我们可以仅使用由SIGMOID函数的非线性组件来使用的输入变量供助的那些回归器探索。这可以如下所示:

sig = sigmoidnet(10);narxinit = idnlarx(ze.outputname,ze.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)被s型单位函数使用。没有使用基于回归器的输出变量f(t-1)。注意,sigmoidnet估计量也包含一个由所有回归量的加权和表示的线性项。线性项使用完整的回归器集。

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

使用=假(4,1);使用([1 3 4])=真;narxinit.reigressorusage {:,2} =使用;narx5 = nlarx(ze,narxinit,选项);

Narx5模型似乎在估计和验证数据集上都表现得很好。

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

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

尝试各种非线性映射函数

到目前为止,我们已经探索了各种模型的阶数,在Sigmoid网络估计器中使用的单位数,以及由Sigmoid网络的非线性分量使用的回归器子集的规格。接下来,我们尝试使用其他类型的非线性函数。例如,为了使用具有默认属性的函数,我们可以将其名称指定为estimation命令的字符向量'wavenet'.但是,如果我们想调整这些函数的属性(例如单位数或其参数的初始值),必须使用对象形式 - 创建封装非线性映射函数的对象,然后设置其属性。

使用具有默认属性的小波网络函数。与SigmoidNet一样,WOVENET通过使用线性和非线性组件的总和将回收器映射到输出;非线性组件使用小波和。

NarxInit = idnlarx(泽。OutputName,泽。InputName, [1 3 1],'wavenet');%仅使用Wavenet的非线性分量的回归1和3NarxInit.RegressorUsage。(“f:nonlinearfcn”)([2 4]) = false;Narx6 = nlarx(ze, NarxInit, Options);

使用20个单位的树划分非线性函数:

TreeNet = treepartition;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()是一个s形网络。要探索作为回归器函数的F()输出的形状,请在模型上使用PLOT命令:

情节(Narx5)

绘图窗口提供用于选择横截面回归的工具及其范围。有关更多信息,请参阅“帮助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模型。对于输入非线性和输出非线性,我们将使用s形网络作为非线性。估计是容易的nlhw.命令。它类似于oe用于线性OE模型估计的命令。然而,除了模型顺序之外,我们还必须指定I/O非线性的名称或对象。

选择= nlhwOptions (“SearchMethod”“lm”);Nhw1 = nlhw(ze, [4 2 1],'sigmoidnet''sigmoidnet',选择)
Nhw1 = Hammerstein-Wiener模型1输出和输入的线性传递函数对应订单nb = 4, nf = 2, nk = 1输入非线性:乙状结肠网络10单元输出非线性:乙状结肠网络10单元样品时间:0.005秒状态:估计使用NLHW时域数据“MR阻尼器”。拟合估计数据:83.72% FPE: 97.72, MSE: 91.2

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

clf比较(泽Nhw1);%与估计数据比较

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

我们观察到约70%的数据符合Nhw1模型的验证数据。

分析估计的IDNLHW模型

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

情节(Nhw1)

默认情况下,绘制输入非线性,显示它可能只是饱和函数。

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

单击线性块图标并在下拉菜单中选择杆零映射,然后观察到零和极限彼此非常接近,指示它们可以被移除,从而减少模型订单。

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

尝试各种非线性功能和模型订单

输入非线性使用饱和,输出非线性使用s形网络,保持线性分量的阶数不变:

nhw2 = nlhw(ze,[4 2 1],'饱和''sigmoidnet'、选择);

使用分段 - 线性非线性用于输出和SIGMOID网络进行输入:

[4 2 1],'sigmoidnet'“pwlinear”、选择);

使用低阶线性模型:

Nhw4 = nlhw(ze, [3 1 1],'sigmoidnet'“pwlinear”、选择);

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

Nhw5 = nlhw(ze, [3 1 1],'sigmoidnet'[],选择);

比较所有的模型

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

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

通过与验证数据的比较,Nhw1仍然是所有模型中最好的,但其他模型,除了Nhw5,具有相似的性能。

结论

我们探索了各种非线性模型,用于描述电压输入和阻尼力输出之间的关系。有人看出来,在非线性ARX模型中,NARX2 {6}和NARX5表现最佳,而NHW1型号是Hammersein-Wiener模型中最好的。我们还发现非线性ARX模型提供了用于描述MR DAMPER的动态的最佳选择(最佳配合)。

Narx5。Name =“Narx5”;Nhw1。Name ='nhw1';比较(zv,linmod2,narx2 {6},narx5,nhw1)

我们发现,每个型号类型都有多种选项可用于微调结果的质量。对于非线性ARX模型,我们不仅可以指定模型订单和非线性函数的类型,还可以配置如何使用回收器和调整所选功能的属性。对于Hammerstein-Wiener模型,我们可以选择输入和输出非线性功能的类型,以及线性组件的顺序。对于这两种模型类型,我们可以随时提供许多非线性功能的选择,以便尝试使用。缺乏对模型结构或对潜在动态的了解的特殊偏好,建议尝试各种选择并分析它们对所得模型的质量的影响。