这个例子展示了如何在MATLAB命令行中使用递归估计算法对线性拟合执行在线参数估计。你可以捕捉一个无级变速器的液压阀的时变输入输出行为。
该系统是受参考文献[1]的启发,采用液压阀驱动的无级变速器(CVT)。气门压力与无级变速器相连,使其能够改变速比,并将扭矩从发动机传递到车轮。阀门的输入输出特性可近似为:
这里t为当前时间,y(t)为阀压,以巴表示,u(t)为[0,1]范围内的无单位输入。的条件 是阀门的死区。
斜率k(t)和偏移量b(t)依赖于系统温度。它们随着系统从冷启动到典型工作温度的升温而变化。你想根据u(t)和y(t)的噪声测量来估计k(t)和b(t)
t=0s时刻的真实斜率和偏移量参数为k(0)=70, b(0)=-15。在t=50时,发动机启动。参数随时间变化,直到在t=950时达到k(950)=50和b(950)=-13。采样时间Ts=0.1s。
输入信号U的内容对于参数估计至关重要。考虑一个u,它,并且因此y是恒定的。然后有无限的k和b值,满足y = k u + b。U(t)必须持续激励系统以成功估计k(t)和b(t)。在此示例中,输入U:
从t=0到t=50。
从t=50秒到t=950秒,每100秒阶跃变化为0.40,0.45,0.50,0.55,0.60,0.55,0.50,0.45,0.40。
从t=50s到950s,每步增加一个均值为零的高斯随机变量,0.02个标准差,为识别提供额外的系统动力学激励。
输出由前面提到的k(t), b(t)和输入信号u(t)的真值产生,使用y(t) = k(t) u(t) + b(t) + e(t)。测量噪声e(t)是一个均值为零、标准差为0.05的高斯随机变量。
负载LineFittingRLSExampleuykbt;图();次要情节(2,1,1);情节(t, u);ylabel ('输入信号,U,[无单位]');次要情节(2,1,2);情节(t、y);ylabel (“阀门压力,y, [bar]”);包含(“时间[s]”);
使用矢量表示编写阀门输入输出模型:
在哪里 是回归和 是要估计的参数。E (t)是未知噪声。您可以使用recursiveLS估计命令创建一个System对象来进行在线参数估计。然后使用step命令根据H(t)和y(t)在每个时间步长更新参数估计值x(t)。
您指定以下recursiveLS系统对象属性:
参数数量:2.
EstimationMethod:“ForgettingFactor”(默认)。这个方法只有一个标量参数forttingfactor,它需要有限的关于参数值的先验信息。
ForgettingFactor:0.95。预计参数将随时间变化,因此小于1。 是对估计影响最大的过去数据样本的数量。
初始参数:(70;-15],参数值的初始猜测。可选,但建议用于减少初始瞬态。
InitialParameterCovariance:你估计的不确定性在初始参数猜测。如果你对初始参数的猜测有信心,把它设为一个很小的值,初始参数绝对值的1%。可选,但推荐使用,特别是在指定InitialParameters时。这只与遗忘因子和卡尔曼滤波估计方法一起使用。
X = recursiveLS (2...% 2=估计参数的数量“EstimationMethod”,“ForgettingFactor”,...“ForgettingFactor”, 0.95,...“InitialParameters”, 70;-15年),...“InitialParameterCovariance”[0.7 - 0.15]);
这个例子通过每次为估计器提供一对(y(t),H(t))来模拟估计器的在线操作。调用step命令更新每个新对的参数。只有当输入u在死带(u>0.3)之外时,参数适配才被启用。
θ= 0(元素个数(u), 2);yHat = 0(元素个数(u), 1);太好了= 0(元素个数(u), 2, 2);为kk = 1:元素个数(u)%仅当u在死带之外时启用参数估计如果u(kk)>=0.3 X.EnableAdaptation = true();其他的x.enableAdaptation = false();结束[theta(kk,:),yHat(kk)] = step(X,y(kk),[u(kk) 1]);%得到估计参数和输出太好了(kk,:,) = X.ParameterCovariance;%得到参数的估计不确定性%使用参数执行任何需要的任务结束
参数的真值和估计值为:
图();次要情节(2,1,1);绘图(t,theta(:,1),t,k);估计和实际斜率分别ylabel (“坡”);包含(“时间”);ylim ([49 71]);传奇(“估计”,“真实”的,'地点',“最佳”);次要情节(2,1,2);情节(t,θ(:,2),t, b);估计和实际补偿分别ylabel ('抵消');包含(“时间”);ylim ([-15.25 - -12.75]);
估计器提供以下两个工具来判断参数估计的质量:
输出估计 :step方法的第二个输出参数是 .相对误差和绝对误差之间 和 是适合度的衡量标准。
协方差参数估计 :这是可用的遗忘因子和卡尔曼滤波算法。它存储在估计器的parametercovariancmatrix属性中。的对角线 为参数的估计方差。越低越好。
输出测量和估计,以及相关的绝对和相对误差时,发动机是:
engineOn = t>50 & t<950;图();次要情节(2,1,1);absoluteError = y-yHat;情节(t (engineOn) absoluteError (engineOn));ylim ([-0.15 - 0.15]);ylabel (“Abs错误(酒吧)。”);次要情节(2,1,2);relativeError = (y-yHat)。/ y;情节(t (engineOn) relativeError (engineOn));ylim ([-0.025 - 0.025]);ylabel (“Rel错误(无单位)”。);包含(“时间[s]”);
绝对误差约为0.1巴。相对误差在2%以下。两个量都很小。
参数协方差矩阵的对角线,按残差的方差按比例缩放 ,获取参数估计的方差。方差的平方根是参数估计值的标准差。
noiseVariance = var (y (engineOn) -yHat (engineOn));图();次要情节(2,1,1);持有上;情节(t)√酷毙了:,1,1)* noiseVariance));ylim ([0 1]);ylabel ('std。开发。坡度K');次要情节(2,1,2);情节(t)√酷毙了:,2,2)* noiseVariance));ylim ([0 1]);ylabel ('Std. dev. of offset b');包含(“时间[s]”);持有上;
斜率k的标准差在0.7左右波动。这相对于k[50,70]的取值范围很小。这为参数估计提供了信心。偏移量b的情况类似,在[-15 -13]范围内。
注意,参数标准差也是估计值。它们是基于残差的假设 是白色的。这取决于估计方法、其相关参数、估计模型的结构和输入信号u。假设和实际模型结构之间的差异、缺乏持续的输入激励或不现实的估计方法设置会导致过于乐观或悲观的不确定性估计。
您使用递归最小二乘进行直线拟合,以捕获液压阀的时变输入输出行为。您通过观察两个信号来评估拟合质量:估计的和测量的系统输出之间的误差,以及参数协方差估计。
[1] Gauthier,Jean-Philippe和Philippe Micheau。“正规化的RLS和DHOBE:用于电磁阀的自适应馈送。”控制系统技术,IEEE交易于20.5(2012):1311-1318
克隆
|isLocked
|recursiveAR
|recursiveARMA
|recursiveARMAX
|recursiveARX
|recursiveBJ
|recursiveLS
|recursiveOE
|释放
|重置
|一步