此示例显示如何执行Kalman筛选。首先,使用使用的稳态滤波器卡尔曼
命令。然后,您模拟系统以展示它如何降低测量噪声的错误。该示例还示出了如何实现时变滤波器,这对于具有非间断噪声源的系统非常有用。
考虑以下具有高斯噪声的离散植物w对输入和测量噪声v在输出上:
目标是设计一个卡尔曼滤波器来估计真实的植物输出 基于嘈杂的测量 .这个稳态卡尔曼滤波器使用以下方程进行估计。
时间更新:
测量更新:
这里,
是对 根据过去的测量结果 .
和 估计的状态值和测量值是否基于上次测量值进行更新 .
和
考虑到噪音协方差,是最佳的创新收益,以最大限度地减少估算误差的稳态协方差
,
,
.(有关如何选择这些收益的详细信息,请参阅卡尔曼
.)
(这些更新方程描述了一个当前的
类型估算器。有关差异之间的信息当前的
估计和延迟
估算器,参见卡尔曼
.)
你可以使用卡尔曼
函数来设计稳态卡尔曼滤波器。这个函数决定了最优稳态滤波器增益米针对某一特定设备的过程噪声协方差问以及传感器噪声协方差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;
对于此示例,设置G=B,意味着过程噪音w是加性输入噪声。同时,设置H= 0,意味着输入噪声w对产量没有直接影响吗y.这些假设产生了一个更简单的植物模型:
当H= 0,可以显示
(看卡尔曼
).总之,这些假设也简化了卡尔曼滤波器的更新方程。
时间更新:
测量更新:
要设计这个过滤器,首先创建带有输入的植物模型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
是估计
真正的植物输出,剩余的产出是国家估计
.
对于本例,丢弃状态估计,只保留第一个输出, .
: kalmf = kalmf (1);
要了解这个过滤器是如何工作的,请生成一些数据,并将过滤后的响应与真正的植物响应进行比较。完整系统如下图所示。
为了模拟这个系统,使用a萨伯克
为测量噪声创建一个输入v
.然后,使用连接
加入SYS.
卡尔曼滤清器一起过滤u
是否有一个共享的输入和嘈杂的工厂输出y
进入其他滤波器输入。结果是具有输入的仿真模型w
,v
,u
和输出yt.
(真正的反应)烨
(过滤或估计的回答
).的信号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.
和应用于。的输入w
,v
,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 (“错误”) 传奇(“真正衡量”,“真-过滤”)
当第二绘图显示时,卡尔曼滤波器会降低错误YT - Y.
由于测量噪声。为了确认这一减少,计算误差的协方差前滤波(测量误差协方差)和滤波后(估计误差协方差)。
MeasErr = yt-yt;MeasErrCov = (MeasErr。* MeasErr)之和/长度(MeasErr)
MeasErrCov = 0
EstErr = yt-ye;EstErrCov = (EstErr。* EstErr)之和/长度(EstErr)
Esterrcov = 0.3479
以前的设计假设噪音CovariRces不会随着时间的推移而改变。即使当噪声协方差没有静止时,也可以更改的卡尔曼滤波器表现良好。
时变卡尔曼滤波器的更新方程如下:在时变滤波器中,两者误差均存在协方差
还有创新收益
可以随时间变化。您可以修改时间和测量更新方程,以考虑时间变化如下。(见卡尔曼
有关这些表达式的更多详细信息。)
时间更新:
测量更新:
您可以使用Simulink®实现时变的卡尔曼滤波器使用金宝app卡尔曼筛选块。有关演示该块使用的示例,请参见基于时变卡尔曼滤波的状态估计.对于这个例子,在MATLAB®中实现时变滤波器。
要创建时变卡尔曼滤波器,首先要产生有噪声的电站响应。模拟植物对输入信号的响应u
和过程噪音w
之前定义的。然后,添加测量噪声v
模拟真实反应yt.
以获得噪声响应y
.在这个例子中,噪声向量的协方差w
和v
不随时间而改变。然而,你可以用同样的方法来处理非平稳噪声。
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--')Xlabel(样品的数量), ylabel (“输出”) 标题('响应时变卡尔曼滤波器') 传奇('真的','过滤')次要情节(212)、图(t yt-y'G',t,yt-ye,'r--'),包含(样品的数量), ylabel (“错误”) 传奇(“真正衡量”,“真-过滤”)
在估计过程中,时变滤波器还对输出协方差进行估计。因为这个例子使用了平稳的输入噪声,所以输出协方差趋向于一个稳态值。绘制输出协方差以确认滤波器已达到稳定状态。
图绘制(t, errcov)包含(样品的数量), ylabel (误差协方差的),
从协方差情节,您可以看到输出协方差在大约五个样本中达到稳态。从那时起,时变滤波器具有与稳态版本相同的性能。
如在稳态情况下,过滤器由于测量噪声而降低了误差。为了确认这一减少,计算误差的协方差前滤波(测量误差协方差)和滤波后(估计误差协方差)。
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