在命令行上估计Hammerstein-Wiener模型
在执行以下任务后,您可以估计Hammerstein-Wiener模型:
如中所述,准备数据为非线性识别准备数据.
(可选)选择非线性估计器Hammerstein-Wiener模型的可用非线性估计量.
(可选)估计或构造输出误差(OE)结构的输入输出多项式模型(
idpoly
)或无干扰分量的状态空间模型(中的难点
与K = 0)进行Hammerstein-Wiener模型的初始化。看到使用线性模型初始化Hammerstein-Wiener估计.
评估模型的使用nlhw
使用nlhw
来构建和估计Hammerstein-Wiener模型。每次估算之后,验证模型通过与其他模型比较,模拟或预测模型响应。
基本的估计
从使用最简单的估计开始M = nlhw(data,[nb nf nk])
.例如:
负载iddata3;% nb = nf = 2, nk = 1M = nlhw(z3,[2 2 1])
m = 1输出1输入的Hammerstein-Wiener模型对应于阶数nb = 2, nf = 2, nk = 1的线性传递函数输入非线性:10个断点分段线性输出非线性:10个断点分段线性采样时间:1秒状态:终止条件:达到的最大迭代次数。迭代次数:20,函数求值次数:185在时域数据“z3”上使用NLHW估计。拟合估计数据:75.31% FPE: 2.019, MSE: 1.472更多信息在模型的“报告”属性。
第二个输入参数[注
nf
nk
]表示线性传递函数的阶数,其中注
就是0的个数加1,nf
是极点的数目,和nk
是输入延迟。默认情况下,输入和输出非线性估计器都是分段线性函数(参见idPiecewiseLinear
参考页面)。米
是一个idnlhw
对象。
对于MIMO系统,注
,nf
,nk
是纽约——- - - - - -ν矩阵。看到nlhw
有关MIMO估计的更多信息,请参阅参考页。
配置非线性估计器
您可以指定一个不同于默认分段线性估计器的非线性估计器。
m = nlhw(data,[nb,nf,nk],InputNL,OutputNL)
InputNL
而且OutputNL
是非线性估计器对象。如果输入信号是二进制的,请设置InputNL
来idUnitGain
.
若要使用默认设置的非线性估计器,请指定InputNL
而且OutputNL
使用不带输入参数或其名称作为字符向量的构造函数(如'idWaveletNetwork'用于小波网络或'idSigmoidNetwork'用于sigmoid网络)。
负载iddata3;M = nlhw(z3,[2 2 1],“idSigmoidNetwork”,“idDeadZone”);
如果需要配置非线性估计器的属性,请使用它的对象表示。例如,要估计一个Hammerstein-Wiener模型,该模型以饱和度作为输入非线性,以3次一维多项式作为输出非线性:
M = nlhw(z3,[2 2 1],“idSaturation”, idPolynomial1D (3));
第三个输入“idSaturation”
使用默认属性值指定饱和非线性。idPolynomial1D (3)
创建一个3次的一维多项式对象。当然,你可以直接使用构造函数id饱和度来代替字符向量“id饱和度”。
对于MIMO模型,使用对象或表示非线性名称的字符向量的单元格数组指定非线性。如果使用单个名称(字符向量),则将相同的值应用于所有通道。
这个表总结了指定非线性估计器的值。
非线性 | 值(默认非线性配置) | 类 |
---|---|---|
分段线性 (默认) |
“idPiecewiseLinear” |
idPiecewiseLinear |
一层sigmoid网络 | “idSigmoidNetwork” |
idSigmoidNetwork |
小波网络 | “idWaveletNetwork” |
idWaveletNetwork |
饱和 | “idSaturation” |
idSaturation |
死区 | “idDeadZone” |
idDeadZone |
一个- - - - - - 维多项式 |
“idPolynomial1D” |
idPolynomial1D |
单位增益 | “idUnitGain” 或[] |
idUnitGain |
其他可用的非线性包括您创建的自定义网络。通过定义函数来指定自定义网络gaussunit.m
,详见idCustomNetwork
参考页面。定义自定义网络对象CNetw
为:
CNetw = idCustomNetwork(@gaussunit);M = nlhw(z3,[2 2 1],“idSaturation”, CNetw);
有关更多信息,请参见Hammerstein-Wiener模型的可用非线性估计量.
排除输入或输出非线性
属性来排除特定通道的非线性idUnitGain
的值。InputNonlinearity
或OutputNonlinearity
属性。
如果输入信号为二进制,则设置InputNL
来idUnitGain
.
有关模型估计和属性的更多信息,请参见nlhw
而且idnlhw
参考页面。
有关每个非线性估计器的描述,请参见Hammerstein-Wiener模型的可用非线性估计量.
迭代细化模型
估计一个Hammerstein-Wiener模型,然后使用nlhw
命令迭代地细化模型。
负载iddata3;m1 = nlhw(z3,[2 2 1],idSigmoidNetwork, idWaveletNetwork);M2 = nlhw(z3,m1);
另外,使用pem
完善模型。
M2 = pem(z3,m1);
中检查搜索终止条件m.Report.Termination.WhyStop
.如果WhyStop
指示估计达到了最大迭代次数,请尝试重复估计并可能为MaxIterations
.
从模型开始运行30多个迭代m1
.
opt = nlhwOptions;opt.SearchOptions.MaxIterations = 30;M2 = nlhw(z3,m1,opt);
当m.Report.Termination.WhyStop
值是接近(局部)最小值,(范数(g) < tol
或直线搜索在搜索方向上没有改善
,验证你的模型,看看这个模型是否足够适合数据。否则,解决方案可能会卡在成本函数曲面的局部最小值中。试着调整SearchOptions。宽容
或者是SearchMethod
选项nlhw
选项集,并重复估计。
您还可以尝试使用扰动最后一个模型的参数初始化
,然后对模型进行优化nlhw
命令。
对原始模型参数进行随机扰动m1
关于名义价值。
M1p = init(m1);
对扰动模型参数进行估计。
M2 = nlhw(z3,m1p);
注意使用初始化
并不能保证在进一步细化时得到更好的解决方案。
使用初始状态改进估计结果
如果您估计的Hammerstein-Wiener模型与测量数据的拟合不佳,则可以使用从数据中估计的初始状态值重复估计。默认情况下,Hammerstein-Wiener模型的线性块对应的初始状态为零。
指定在模型估计期间估计初始状态:
负载iddata3;opt = nlhwOptions(“InitialCondition”,“估计”);m = nlhw(z3,[2 2 1],idSigmoidNetwork,[],opt);
排除估计
如果在使用各种模型结构和估计选项进行多次试验后仍未得到令人满意的模型,则可能是数据质量较差。例如,您的数据可能缺少重要的输入或输出变量,并且不能充分覆盖系统的所有操作点。
非线性黑盒系统辨识通常需要比线性模型辨识更多的数据才能获得足够的系统信息。另请参阅故障诊断模型估计.
估计多个Hammerstein-Wiener模型
这个例子展示了如何使用测量的输入-输出数据估计和比较多个Hammerstein-Wiener模型。
负载估计和验证数据。
负载twotankdataZ = iddata(y,u,0.2);Ze = z(1:1000);Zv = z(1001:3000);
使用估计数据估计几个模型泽
以及不同的模型顺序,延迟和非线性设置。
M1 = nlhw(ze,[2 3 1]);M2 = nlhw(ze,[2 2 3]);m3 = nlhw(ze,[2 2 3], idpiecewislinear (“NumberofUnits”、13)idPiecewiseLinear (“NumberofUnits”, 10));m4 = nlhw(ze,[2 2 3],idSigmoidNetwork(“NumberofUnits”2)、idPiecewiseLinear (“NumberofUnits”, 10));
执行估计的另一种方法是首先使用配置模型结构idnlhw
,然后对模型进行估计。
m5 = idnlhw([2 2 3],idDeadZone,idSaturation);M5 = nlhw(ze, M5);
通过绘制模型输出和验证数据中的测量输出来比较结果模型zv
.
比较(zv、m1、m2、m3、m4、m5)
利用Hammerstein-Wiener结构改进线性模型
这个例子展示了如何使用Hammerstein-Wiener模型结构来改进先前估计的线性模型。
在估计线性模型之后,将其插入到包含输入或输出非线性的Hammerstein-Wiener结构中。
估计一个线性模型。
负载iddata1LM = arx(z1,[2 2 1]);
从线性模型中提取传递函数系数。
[Num,Den] = tfdata(LM);
创建Hammerstein-Wiener模型,在其中初始化线性块属性B
而且F
使用全国矿工工会
而且窝
,分别。
Nb = 1;通常,nb = ones(ny,nu)% ny是输出的数量,nu是输入的数量Nf = nb;Nk = 0;一般情况下,nk = 0 (ny,nu)% ny是输出的数量,nu是输入的数量M = idnlhw([nb nf nk],[],“idPiecewiseLinear”);M.B = Num;M.F = Den;
对模型系数进行估计,对线性模型系数进行细化全国矿工工会
而且窝
.
M = nlhw(z1,M);
根据实测数据比较线性和非线性模型的响应。
比较(z1, LM, M);