主要内容

卡尔曼滤波

此示例演示如何执行卡尔曼滤波。首先,使用卡尔曼然后,模拟系统以显示它如何减少测量噪声引起的误差。此示例还显示如何实现时变滤波器,这对于具有非平稳噪声源的系统非常有用。

稳态卡尔曼滤波器

考虑高斯噪声下的离散对象w对输入和测量噪声v关于输出:

x n + 1 一个 x n + B u n + G w n y n C x n + D u n + H u n + v n

目标是设计一个卡尔曼滤波器来估计真实的植物输出 y t n y n - v n 基于噪声测量 y n .这个稳态卡尔曼滤波器使用下面的方程来进行估计。

时间更新:

x ˆ n + 1 | n 一个 x ˆ n | n - 1 + n + 吉瓦 n

测量更新:

x ˆ n | n x ˆ n | n - 1 + x y n - C x ˆ n | n - 1 - D u n y ˆ n | n C x ˆ n | n - 1 + D u n + y y n - C x ˆ n | n - 1 - D u n

在这里

  • x ˆ n | n - 1 x n ,根据过去的测量结果 y n - 1

  • x ˆ n | n y ˆ n | n 估算的状态值和测量值是否根据上次的测量值进行更新 y n

  • x y 在给定噪声协方差的情况下,选择最佳新息增益以最小化估计误差的稳态协方差 E w n w n T E v n v n T R , N E w n v n T 0 (有关如何选择这些增益的详细信息,请参阅卡尔曼.)

(这些更新方程描述了一个现在的类型估计器。有关现在的估计和延迟估计值,见卡尔曼.)

设计滤波器

你可以使用卡尔曼函数来设计稳态卡尔曼滤波器。这个函数决定了最佳稳态滤波器增益基于过程噪声协方差对某一特定设备进行分析传感器噪声协方差R你提供的。对于本例,使用下列值作为该植物的状态空间矩阵。

A=[1.1269-0.4940 0.1129 1.0000 0 1.0000 0];B=[-0.3832 0.5919 0.5191];C=[1 0];D=0;

对于本例,设置GB,意味着过程噪音w为附加输入噪声。同时,设置H=0,表示输入噪声w对产量没有直接影响y.这些假设得出了一个更简单的植物模型:

x n + 1 一个 x n + B u n + B w n y n C x n + v n

H=0,可以表明 y C x (见卡尔曼).同时,这些假设也简化了卡尔曼滤波器的更新方程。

时间更新:

x ˆ n + 1 | n 一个 x ˆ n | n - 1 + n + Bw n

测量更新:

x ˆ n | n x ˆ n | n - 1 + x y n - C x ˆ n | n - 1 y ˆ n | n C x ˆ n | n

要设计这个过滤器,首先要创建带有输入的植物模型w.将示例时间设置为-1将设备标记为离散(无特定采样时间)。

Ts=-1;sys=ss(A[B],C,D,Ts,“InputName”,{“u”' w '},“OutputName”“y”);%植物动力学与加性输入噪声

过程噪声协方差传感器噪声协方差R是通常从系统研究或测量中获得的大于零的值。对于本例,请指定以下值。

Q = 2.3;R = 1;

使用卡尔曼命令来设计过滤器。

[kalmf,L,~,Mx,Z]=kalman(sys,Q,R);

这个命令设计了卡尔曼滤波器,kalmf,一种状态空间模型,用于实现时间更新和测量更新方程。过滤器输入为设备输入u和嘈杂的工厂输出y.的第一个输出kalmf这是估计数吗 y ˆ 真实电厂输出的一部分,其余输出为状态估计值 x ˆ

对于本例,放弃状态估计,只保留第一个输出, y ˆ

: kalmf = kalmf (1);

使用过滤器

为了了解这个过滤器是如何工作的,生成一些数据,并将过滤后的响应与真正的植物响应进行比较。完整的系统如下图所示。

要模拟这个系统,使用萨姆布尔克为测量噪声创建一个输入v.然后,使用连接加入系统和卡尔曼滤波器结合在一起,这样u是否共享输入和嘈杂的工厂输出y输入到另一个滤波器输入。结果是一个带有输入的仿真模型wv,u和输出yt(真正的反应)(过滤或估计的反应 y ˆ ).的信号yt分别是设备和过滤器的输出。

sys。我nputName = {“u”' w '};sys.OutputName={“yt”};vIn=sumblk(‘y=yt+v’);kalmf。我nputName = {“u”“y”};kalmf。OutputName =“叶”;kalmf SimModel =连接(sys, vIn, {“u”' w '“v”},{“yt”“叶”});

为了模拟滤波器的行为,生成一个已知的正弦输入向量。

t =(0:100)”;u =罪(t / 5);

使用相同的噪声协方差值生成过程噪声和传感器噪声矢量R您用来设计过滤器的。

rng(10,“旋风”);w = sqrt (Q) * randn(长度(t), 1);v = sqrt (R) * randn(长度(t), 1);

最后,使用lsim

out=lsim(SimModel,[u,w,v]);

lsim在输出处生成响应yt而ye是应用于wv,u.提取yt和ye通道,并计算测量的响应。

yt=输出(:,1);%真实反应ye=out(:,2);%过滤反应y=yt+v;%测量响应

比较真实的响应和过滤后的响应。

clf子地块(211),地块(t,yt,“b”, t,你们,“r——”),包含(样品的数量), ylabel (“输出”)头衔(“卡尔曼滤波响应”)传奇(“真的”“过滤”)次要情节(212)、图(t yt-y“g”,t,yt-ye,“r——”),包含(样品的数量), ylabel (“错误”)传奇(“真正衡量”“真-过滤”

图中包含2个轴。标题为Kalman Filter Response的坐标轴1包含2个类型为line的对象。这些对象代表True, Filtered。axis 2包含2个类型为line的对象。这些对象代表真实测量,真实过滤。

如第二幅图所示,卡尔曼滤波器减小了误差yt-y由于测量噪声。为了确认这种减少,计算滤波前的误差协方差(测量误差协方差)和滤波后的误差协方差(估计误差协方差)。

MeasErr = yt-yt;MeasErrCov = (MeasErr。* MeasErr)之和/长度(MeasErr)
MeasErrCov = 0
EstErr = yt-ye;EstErrCov = (EstErr。* EstErr)之和/长度(EstErr)
埃斯特尔科夫=0.3479

时变卡尔曼滤波器设计

以前的设计假设噪声协方差不随时间变化,即使噪声协方差不是平稳的,时变卡尔曼滤波器也能很好地执行。

时变卡尔曼滤波器具有以下更新方程。在时变滤波器中,误差协方差 P n 创新的收益 x n 可以随时间而变化。您可以修改时间和测量更新方程来考虑时间的变化,如下所示。(见卡尔曼有关这些表达式的更多详细信息。)

时间更新:

x ˆ n + 1 | n 一个 x ˆ n | n + B u n + B w n P n + 1 | n 一个 P n | n 一个 T + B B T

测量更新:

x ˆ n | n x ˆ n | n - 1 + x n y n - C x ˆ n | n - 1 x n P n | n - 1 C T C P n | n - 1 C T + R n - 1 P n | n - x n C P n | n - 1 y ˆ n | n C x ˆ n | n

您可以在Simulink®中使用金宝app卡尔曼滤波器块。有关演示该块用法的示例,请参见基于时变卡尔曼滤波的状态估计.针对本例,在MATLAB®中实现时变滤波器。

为了建立时变卡尔曼滤波器,首先,产生噪声植物响应。模拟植物对输入信号的响应u工艺噪声w之前定义的。然后,添加测量噪声v模拟的真实响应yt以获得噪声响应y。在此示例中,噪声向量的协方差wv不要随时间而改变。但是,对于非平稳噪声也可以使用相同的方法。

yt=lsim(sys[uw]);y=yt+v;

中实现递归过滤器更新方程循环。

P = B * * B”;%初始误差协方差x = 0 (3,1);%状态的初始条件你们= 0(长度(t), 1);ycov = 0(长度(t), 1);errcov = 0(长度(t), 1);i = 1:长度(t)%测量更新Mxn=P*C'/(C*P*C'+R);x=x+Mxn*(y(i)-C*x);% x [n | n]P=(眼睛(3)-Mxn*C)*P;%P[n | n]你们(i) = C * x;errcov (i) = C * P * C ';%时间更新x = A*x + B*u(i);%x[n+1 | n]P=A*P*A'+B*Q*B';%P[n+1 | n]结束

比较真实的响应和过滤后的响应。

子地块(211),地块(t,yt,“b”, t,你们,“r——”)xlabel(样品的数量), ylabel (“输出”)头衔(“时变卡尔曼滤波器响应”)传奇(“真的”“过滤”)次要情节(212)、图(t yt-y“g”,t,yt-ye,“r——”),包含(样品的数量), ylabel (“错误”)传奇(“真正衡量”“真-过滤”

图中包含2个轴。带有标题的轴1带有时变卡尔曼滤波器响应包含2个类型为line的对象。这些对象代表True, Filtered。axis 2包含2个类型为line的对象。这些对象代表真实测量,真实过滤。

在估计过程中,时变滤波器也估计输出协方差。因为这个例子使用平稳的输入噪声,输出协方差趋向于一个稳定状态值。绘制输出协方差以确认滤波器已达到稳定状态。

图绘制(t, errcov)包含(样品的数量), ylabel (误差协方差的),

图中包含一个坐标轴。轴包含一个线型对象。

从协方差图中,您可以看到输出协方差在大约五个样本中达到稳定状态。从那时起,时变滤波器具有与稳定状态版本相同的性能。

与稳态情况一样,滤波器减小了测量噪声引起的误差。为了确认这种减小,计算滤波前误差的协方差(测量误差协方差)和滤波后误差的协方差(估计误差协方差)。

MeasErr = yt - y;MeasErrCov = (MeasErr。* MeasErr)之和/长度(MeasErr)
米瑟尔科夫=0.9871
EstErr = yt - ye;EstErrCov = (EstErr。* EstErr)之和/长度(EstErr)
埃斯特尔科夫=0.3479

最后,当时变滤波器达到稳态时,增益矩阵中的值麦根匹配由卡尔曼用于稳态滤波器。

Mx,Mxn
Mx=3×10.5345 0.0101 -0.4776
Mxn=3×10.5345 0.0101 -0.4776

另请参阅

相关话题

外部网站