主要内容

卡尔曼滤波

此示例显示如何执行Kalman筛选。首先,使用使用的稳态滤波器卡尔曼命令。然后,您模拟系统以展示它如何降低测量噪声的错误。该示例还示出了如何实现时变滤波器,这对于具有非间断噪声源的系统非常有用。

稳态卡尔曼滤波器

考虑以下具有高斯噪声的离散植物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 0 0 1.0000 0];B = [-0.3832 0.5919 0.5191];c = [1 0 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 b],c,d,ts,“InputName”, {“u”' w '},'outputname'“y”);%植物动力学和添加剂输入噪声W

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

Q = 2.3;R = 1;

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

[kalmf,l,〜,mx,z] =卡尔曼(sys,q,r);

这个命令设计了卡尔曼滤波器,kalmf,实现时间更新和测量更新方程的状态空间模型。滤波器输入是工厂输入u和嘈杂的工厂输出y.的第一个输出kalmf是估计 y 真正的植物输出,剩余的产出是国家估计 x

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

: kalmf = kalmf (1);

使用过滤器

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

要模拟这个系统,使用sumblk为测量噪声创建一个输入v.然后,使用连接加入SYS.卡尔曼滤清器一起过滤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 = OUT(: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)
Esterrcov = 0.3479

时变卡尔曼滤波器设计

以前的设计假设噪音CovariRces不会随着时间的推移而改变。即使当噪声协方差没有静止时,也可以更改的卡尔曼滤波器表现良好。

时变卡尔曼滤波器的更新方程如下:在时变滤波器中,两者的误差都是协方差的 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,[u w]);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--')包含(样品的数量), ylabel (“输出”) 标题('响应时变卡尔曼滤波器') 传奇('真的''过滤')次要情节(212)、图(t yt-y'G',t,yt-ye,'r--'),包含(样品的数量), ylabel (“错误”) 传奇(“真正衡量”“真-过滤”

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

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

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

图中包含一个轴对象。axis对象包含一个类型为line的对象。

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

如在稳态情况下,过滤器由于测量噪声而降低了误差。为了确认这种减少,计算滤波前的误差协方差(测量误差协方差)和滤波后的误差协方差(估计误差协方差)。

MeasErr = yt - y;MeasErrCov = (MeasErr。* MeasErr)之和/长度(MeasErr)
MEARERRCOV = 0.9871.
EstErr = yt - ye;EstErrCov = (EstErr。* EstErr)之和/长度(EstErr)
Esterrcov = 0.3479

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

mx,mxn.
mx =3×10.5345 0.0101-0.4776
mxn =3×10.5345 0.0101-0.4776

另请参阅

相关话题

外部网站