主要内容

Magneto-Rheological流体阻尼器的非线性建模

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

博士在本例中使用的数据是由彰佐李建东王博士(日本庆应义塾大学)和(北京大学、中国)执行庆应义塾大学的实验室实验。参见下面参考实验系统的更详细的描述和一些相关的研究。

J。Wang Sano a t·陈,黄。汉默斯坦系统没有显式参数化非线性的识别。国际期刊的控制,在出版社,2008年。DOI: 10.1080 / 00207170802382376。

实验装置

Magneto-Rheological (MR)流体阻尼器半主动控制装置用于减少各种动态结构的振动。液体,其粘度依赖于输入电压/电流的设备,提供可控阻尼力。

研究这类设备的行为,MR阻尼器是一端固定在地上,另一端连接到瓶表产生振动。阻尼器设置为1.25 v的电压阻尼力f (t)是每0.005秒采样。位移是采样每0.001年代,当时用来估计速度v (t)在0.005秒的采样周期。

输入输出数据

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

%让我们首先加载和检查数据。负载(fullfile (matlabroot“工具箱”,“识别”,“iddemos”,“数据”,“mrdamper.mat”));谁
你的变量是:F t V

包变量加载F(输出的力),V(输入速度)和Ts(采样时间)成一个IDDATA对象。

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

数据准备的评估和验证

这个数据集z分割成两个子集,前2000个样本用于估计(泽),剩下的用于验证的结果(zv)。

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

让我们一起画出两个数据集来直观地验证他们的时间范围:

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

模型顺序选择

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

  • 对于线性和非线性ARX模型,订单是由三个数字:na, nb和nk定义的过去的输出数目,过去的输入和输入延迟用于预测在给定的时间输出的价值。时滞的I / O变量定义的命令被称为“解释”。创造更灵活的解释变量,您可以使用回归量规范对象(见linearRegressor polynomialRegressor customRegressor)。

  • Hammerstein-Wiener模型,代表线性模型与非线性静态I / O,命令定义极点和零点的数量和输入延迟的线性组件。他们是由数字nb (0 + 1)、nf(极数),和nk(输入延迟滞后)的数量。

通常模型试验和错误选择的订单。然而,线性ARX模型的订单可能会被自动计算使用等功能arxstrucselstruc。给一个提示可能获得的订单因此订单用于非线性模型。让我们首先尝试确定最好的一个线性ARX模型。

V = arxstruc(泽、zv struc (1:5, 1:5, 1:5));%值范围1:5的na, nb, nk订单= selstruc (V,“另类投资会议”)%的订单由Akaike的信息标准
订单= 2 4 1

AIC准则选择了顺序= (na nb nk) =(2 4 1),即在选定的ARX模型结构、阻尼力f (t)是6解释变量预测的f (t - 1), f (2)、v (t - 1), v(2),(条t - 3)和v(第四节)。

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

初步分析:创建线性模型

先试着线性模型是明智的,因为他们是简单的创建。如果线性模型不能提供令人满意的结果,结果探索非线性模型提供了依据。

我们估计线性ARX和输出误差的订单(OE)模型提出了SELSTRUC上面的输出。

LinMod1 = arx(泽(2 4 1));% ARX模型Ay = Bu + eLinMod2 = oe(泽(4 2 1));% OE模型y = B / F u + e

同样,我们可以创建一个线性状态空间模型的顺序(=数量的州)将自动确定:

LinMod3 = ss(泽);%的状态空间模型创建一个订单3

现在让我们比较这些模型的响应在泽测量输出数据:

比较(泽、LinMod1 LinMod2 LinMod3)%比较估计数据

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

比较(zv LinMod1、LinMod2 LinMod3)%的比较来验证数据

观察到,这些线性模型的最佳的51%验证数据集。

创建非线性ARX模型

线性模型识别显示ARX模型提供不到50%适合验证数据。实现更好的结果我们现在探索使用非线性ARX模型(IDNLARX)。非线性模型的必要性也建议的数据建议实用程序可以用来检查数据的潜在的优势使用非线性模型线性模型。

建议(泽,“非线性”)
有一个迹象的非线性数据。非线性ARX模型的顺序(4 4 1)和idTreePartition函数执行比相应的ARX模型更好的预测输出相同的顺序。考虑使用非线性模型,如IDNLARX或IDNLHW。你也可以使用非线性的“isnlarx”命令来测试更多的选择。

非线性ARX模型可以视为非线性同行ARX模型由两个意思是:建模提供更大的灵活性

  1. 解释变量可能结合使用非线性函数,而不是一个加权和受雇于ARX模型。如乙状结肠网络非线性函数,可以使用二叉树和小波网络。在识别背景下,这些函数被称为“非线性映射函数”。

  2. 解释变量本身就可以任意的I / O(可能是非线性)函数变量除了时滞变量值采用ARX模型。

为非线性ARX模型解释变量

在线性连续滞后时,解释变量是最容易使用命令创建矩阵(na nb nk),如上所述。在解释变量的最一般情况下任意滞后,或者当解释变量是基于变量的绝对值,使用linearRegressor对象提供了更大的灵活性。在解释变量时滞变量的多项式,他们可以使用创建polynomialRegressor对象。为解释变量使用任意的,指定的公式,customRegressor对象可能被使用。

我们将探讨使用各种模型订单和使用各种非线性映射功能。使用多项式或自定义解释变量不是探索。指定自定义IDNLARX模型中的解释变量的方式,查看示例题为“构建非线性ARX模型与非线性和自定义解释”。

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

开始,我们估计一个IDNLARX模型的订单(2 4 1)和乙状结肠网络非线性的类型。我们将使用MaxIterations = 50, Levenberg-Marquardt搜索方法如下所有估计估计选项。

选择= nlarxOptions (“SearchMethod”,“lm”);Options.SearchOptions。MaxIterations = 50;Narx1 = nlarx(泽(2 4 1)idSigmoidNetwork,选项)
Narx1 = < >强非线性ARX模型与1输出和输入< /强>输入:v输出:f解释变量:f线性解释变量,v输出功能:乙状结肠网络10单元样品时间:0.005秒状态:终止条件:最大迭代次数达到. .迭代次数:50、功能评估:393估计使用NLARX时域数据“MR阻尼器”。适合估算数据:95.8%(预测聚焦)消防工程:6.648,MSE: 6.08在模型的“报告”属性的更多信息。

nlarx该命令用于估计非线性ARX模型。Narx1非线性ARX模型解释变量R: = [f f (t - 1), (2)、v (t - 1)……v(第四节)]。非线性是乙状结肠的乙状结肠网络使用一个组合单元功能和解释变量的线性加权和来计算输出。存储在映射函数OutputFcn模型的属性。

disp (Narx1.OutputFcn)
< /强> <强>乙状结肠网络输入:f (t - 1), f (2)、v (t - 1), (2), v(条t - 3), v(第四节)输出:f (t)非线性函数:乙状结肠网络10单元线性函数:初始化(48.3 -3.38 -3.34 -2.7 -1.38 2.15)输出抵消:初始化为-21.4输入:{“f (t - 1)”“f (2)”“v (t - 1)”“v (2)”“v(条t - 3)”“v(第四节)”}输出:{“f (t)”} NonlinearFcn:“<乙状结肠单位及其参数>”LinearFcn:“<线性函数参数>”抵消:“<偏移量参数>”

检查模型质量通过比较模拟输出与估计和验证数据集泽和zv:

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

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

尝试不同的模型的订单

我们看到一个更好的选择比线性模型相同的订单。接下来,我们可以尝试其他的订单由SELSTRUC附近的那些建议。

问= idSigmoidNetwork;Narx2 {1} = nlarx(泽(3 4 1)问,选项);%利用na = 3, nb = 4, nk = 1。Narx2 {1}。Name =“Narx2_1”;Narx2 {2} = nlarx(泽(2 5 1)问,选项);Narx2 {2}。Name =“Narx2_2”;Narx2 {3} = nlarx(泽,[3 5 1],问,选项);Narx2 {3}。Name =“Narx2_3”;Narx2 {4} = nlarx(泽(1 4 1)问,选项);Narx2 {4}。Name =“Narx2_4”;Narx2 {5} = nlarx(泽(1 2 3)问,选项);Narx2 {5}。Name =“Narx2_5”;Narx2 {6} = nlarx(泽,[1 3 1],问,选项);Narx2 {6}。Name =“Narx2_6”;

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

比较(泽、Narx1 Narx2 {:});%比较估计数据

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

模型Narx2{6}似乎提供良好的适合评估和验证数据集而订单小于Narx1。在此基础上观察,让我们使用[1 3 1]作为订单后续试验,并留住Nlarx2{6}为适合比较。这个选择对应的订单使用[f (t - 1), v (t - 1), v (2)、v(条t - 3)]作为解释变量的集合。

指定数量的单位为乙状结肠网络功能

接下来,让我们探讨乙状网络结构的功能。最相关的属性的估计量是乙状结肠的数量单位使用。创建一个使用12乙状结肠单位。

Sig = idSigmoidNetwork (12);%创建一个网络,使用12个单位Narx3 = nlarx(泽,[1 3 1],团体,选项);

我们比较该模型对Narx1和Narx2{6},在评估和验证数据集:

比较(Narx3周泽Narx1 Narx2 {6});%比较估计数据

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

新模型Narx3没有提供更好的选择比Narx2 {6}。因此我们保留的数量单位10在后续试验。

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

通常,所有定义的解释变量选择订单([1 3 1])所使用的非线性函数(乙状结肠网络)。如果解释变量的数量很大,这可能会增加模型的复杂性。可以选择要使用的解释变量的子集乙状结肠网络无需修改模型的组件订单。这是通过属性称为“RegressorUsage”。它的值是一个表,用于指定哪些回归量由哪些组件使用。例如,我们可能探索只使用那些由解释变量使用的输入变量的非线性组件乙状结肠函数。可以如下:

Sig = idSigmoidNetwork (10);NarxInit = idnlarx(泽。OutputName,泽。InputName[1 3 1]、团体);NarxInit.RegressorUsage。(“f: NonlinearFcn”)(1)= false;disp (NarxInit.RegressorUsage) Narx4 = nlarx(泽、NarxInit选项);
f: LinearFcn f: f (t - 1) NonlinearFcn……* * *真的假的v (t - 1)真的真的v(2)真的真的v(条t - 3)真的真的

这导致解释变量v (t - 1)、(2)和v(条t - 3)乙状结肠单位所使用的功能。基于输出变量的回归量f (t - 1)是不习惯。注意,idSigmoidNetwork函数还包含线性项由所有解释变量的加权和表示。解释变量的线性项使用全套。

创建另一个模型,使用解释变量{u1 y1 (t - 1), (2), u1(条t - 3)}的非线性组件。

使用= false (4,1);使用([1 3 4])= true;NarxInit。RegressorUsage{: 2} =使用;Narx5 = nlarx(泽、NarxInit选项);

模型Narx5似乎能够很好地评估和验证数据集。

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

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

尝试不同的非线性映射功能

订单到目前为止,我们已经探索了各种模型,使用单位的数量在乙状结肠网络功能和规范的一个子集的解释变量的非线性组件使用乙状结肠网络。接下来,我们尝试使用其他类型的非线性函数。

使用小波网络函数使用默认属性。像乙状结肠网络,一个小波网络将解释变量映射到输出通过使用线性和非线性组件的总和;小波的非线性组件使用一笔。

NarxInit = idnlarx(泽。OutputName,泽。InputName [1 3 1], idWaveletNetwork);%只使用解释变量非线性组件1和3的网络NarxInit.RegressorUsage。(“f: NonlinearFcn”)([2 - 4])= false;Narx6 = nlarx(泽、NarxInit选项);

使用树分区非线性函数与20单位:

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

比较结果与Narx3 Narx5

比较(泽、Narx3 Narx5、Narx6 Narx7)%比较估计数据

比较(zv、Narx3 Narx5、Narx6 Narx7)%的比较来验证数据

模型Narx6和Narx7似乎比Narx5表现更糟,尽管我们没有探索与评估相关联的所有选项(如非线性解释变量的选择,许多单位和其他模型的订单)。

分析估计IDNLARX模型

一旦确定了一个模型和验证使用比较命令,我们可能暂时选择一个提供了最好的结果在不增加太多额外的复杂性。选择的模型可能会进一步使用命令等进行分析情节渣油

得到一些洞察模型的非线性的性质,检查横截面上的估计模型中的非线性函数F () (t) = F (F F (t - 1), (2)、v (t - 1),…, v(第四节)。例如,在模型Narx5函数F()是一个s形的网络。探索的形状F()的输出作为解释变量,函数使用PLOT命令模式:

情节(Narx5)

情节窗口选择截面的解释提供了工具和他们的范围。有关更多信息,请参见“帮助idnlarx /阴谋”。

剩余的测试模型可以用于进一步检查。这个测试显示如果预测错误是白色的和不相关的输入数据。

集(gcf,“DefaultAxesTitleFontSizeMultiplier”,1“DefaultAxesTitleFontWeight”,“正常”,“位置”,(100 100 780 520));渣油(zv Narx3 Narx5)

剩余测试可能的失败点动力学模型中没有捕捉到。Narx3为模型,残差似乎大多在99%置信界限。

创建Hammerstein-Wiener模型

之前估计的非线性模型都是非线性ARX (IDNLARX)类型。现在让我们尝试Hammerstein-Wiener (IDNLHW)模型。这些模型是一个串联的静态非线性与线性模型元素。我们可以把它们作为扩展的线性输出误差(OE)模型,该模型中我们主题的输入和输出信号的线性模型静态非线性饱和或死区等。

估计一个IDNLHW模型线性OE模型的顺序相同

线性LinMod2 OE模型估计使用订单nb = 4, nf = 2和nk = 1。让我们使用相同的订单估计一个IDNLHW模型。我们将使用乙状结肠网络作为输入和输出非线性非线性。估计是促成的nlhw命令。它是类似于oe命令用于线性OE模型估计。然而,除了模型订单,我们还必须指定的名称,或I / O非线性对象。

选择= nlhwOptions (“SearchMethod”,“lm”);多人= idSigmoidNetwork;YNL = idSigmoidNetwork;Nhw1 = nlhw(泽(4 2 1),多人,YNL,选择)
Nhw1 = <强> Hammerstein-Wiener模型1输出和输入< / >强线性传递函数对应订单nb = 4, nf = 2, nk = 1输入非线性:乙状结肠网络10单元输出非线性:乙状结肠网络10单元样品时间:0.005秒状态:终止条件:最大迭代次数达到. .迭代次数:20、功能评估:89估计使用NLHW时域数据“MR阻尼器”。适合估算数据:83.98%消防工程:94.66,MSE: 88.34在模型的“报告”属性的更多信息。

比较该模型的响应对评估和验证数据集:

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

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

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

分析估计IDNLHW模型

至于非线性ARX模型,Hammerstein-Wiener模型可能检查的I / O的本质非线性和线性的行为组件使用绘图命令。欲了解更多信息,输入“帮助idnlhw /阴谋”MATLAB命令窗口。

情节(Nhw1)

默认输入非线性绘制,这表明它可能只是一个饱和函数。

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

点击线性分组图标并选择Pole-Zero地图的下拉菜单,然后发现一个零和一个极彼此非常接近,这表明他们可能被删除,从而减少模型的订单。

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

尝试不同的非线性函数和模型的命令

用饱和输入非线性和乙状结肠网络输出非线性、保持线性的顺序组件保持不变:

Nhw2 = nlhw(泽,[4 2 1],idSaturation idSigmoidNetwork,选择);

使用分段线性非线性输入输出和乙状结肠网络:

Nhw3 = nlhw(泽,[4 2 1],idSigmoidNetwork idPiecewiseLinear,选择);

使用一个低阶线性模型:

Nhw4 = nlhw(泽,[3 1 1],idSigmoidNetwork idPiecewiseLinear,选择);

我们也可以选择“删除”非线性的输入、输出或两者兼而有之。例如,为了使用只有一个输入非线性(这样的模型被称为汉默斯坦模型),我们可能会指定[]作为输出非线性:

Nhw5 = nlhw (idSigmoidNetwork泽,[3 1 1],[],选择);

比较所有的模型

比较(泽、Nhw1 Nhw2、Nhw3 Nhw4, Nhw5)%比较估计数据

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

Nhw1仍然是最好的在所有的模型,如图所示的验证数据相比,但是其他模型,除了Nhw5,有类似的表现。

结论

我们研究了各种非线性模型用于描述之间的关系电压输入和输出阻尼力。发现在非线性ARX模型,Narx2{6},和Narx5表现最好的,而模型Nhw1 Hammerstein-Wiener模型中是最好的。我们还发现,非线性ARX模型提供了最好的选择(最适合)描述MR阻尼器的动态。

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

我们发现与每个模型类型有多个选项来调整结果的质量。对于非线性ARX模型,我们不仅可以指定订单模型和非线性函数的类型,但也解释变量是如何使用和配置调整的属性选择功能。对于Hammerstein-Wiener模型,我们可以选择输入和输出的非线性函数的类型,以及线性组件的顺序。两种模型类型,我们有很多选择非线性函数可以在尝试处理和使用。在缺乏一个特定偏好模型结构或知识潜在的动力,建议尝试各种选择和分析其影响所产生的模型的质量。