在前两节的内容中,我们学习了两种用于目标跟踪的滤波器
,并对其进行了MATLAB
的仿真验证,今天我们将进一步学习另外一种跟踪滤波器–卡尔曼滤波器
,关于卡尔曼滤波的原理,在网上有很多人的讲述,而且也讲述的非常好,因此我就不献丑了,只从我自己的角度来浅浅的叙述以下我对于卡尔曼滤波器的理解,主要从卡尔曼滤波器要干什么和如何干两个角度进行简要叙述
。
卡尔曼滤波要干什么
通过前面的学习,你应该知道为什么要进行滤波操作,其主要目的就是从复杂的环境中得到更加准确的有用信息
。今天我们就详细说一下为什么要这样做。
假设C国发射一枚导弹攻击敌方A国某固定位置的基地目标,那么就需要每隔一秒开雷达测量以下离目标的距离。但是由于雷达有误差
,我们不能得到100%准确
的数据
,所以需要融合上个时刻的位置、速度等信息来更准确的确定当前时刻离目标的距离,这就是滤波需要解决的事,也就是
α
−
β
\alpha-\beta
α−β滤波器、
α
−
β
−
γ
\alpha-\beta-\gamma
α−β−γ滤波器以及卡尔曼滤波器等等,需要做的事情。
首先,我们是知道“当前时刻雷达测量的导弹离目标的距离(不妨称它为测量值
,比如雷达直接测量导弹离目标距离7m
)”,“上个时刻导弹离目标距离”和“导弹在上一时刻的速度”这三个数据。那么根据“上个时刻导弹离目标距离”和“导弹在上一时刻的速度”可以预测
出当前时刻导弹离目标的距离(我们称它为预测值
)。比如:上一时刻离目标10m,速度是4m/s,那么所预测
的下一时刻就离目标距离是6m
。
那我们就有了两个数据,你说我信哪个数据呢,我是相信雷达测量的7m还是相信预测的6m呢,最合理的情况下,那肯定是谁的准确度大就相信谁
喽,也就是对两个值给予加权
,
比如此时雷达测量值的准确度是0.28
,根据速度预测出的那个6m准确度是0.01
,那么最终我会肯定会偏向于相信测量值
,但我又不能全部相信它,因此我需要做出权衡如下:
r
e
s
u
l
t
=
(
1
−
0.28
0.01
+
0.28
)
∗
6
+
0.28
0.01
+
0.28
∗
7
result=(1-\frac{0.28}{0.01+0.28})*6+\frac{0.28}{0.01+0.28}*7
result=(1−0.01+0.280.28)∗6+0.01+0.280.28∗7
这个公式其实就是我们所说的卡尔曼滤波增益,在关于卡尔曼滤波得文章中应该都会提到,我就不再赘述了。
卡尔曼滤波如何做
那么我们知道了卡尔曼滤波是要干什么,下一步就是要知道如何干,从上文中我们进行抽离主要步骤,可以发现无非就是两个步骤:
1、根据上一秒导弹的位置和导弹的的速度预测出下一时刻导弹的位置理论预测值
。
2、将下一时刻雷达测得导弹位置测量值
和我们计算出的导弹位置理论预测值根据这两种数据可信度来进行线性加权
和得到准确的导弹位置估计值。
简而言之,就是:
上一时刻预测下一时刻的值----得到下一时刻的测量值---两个值进行加权---得到最有可能即可信度最高的值
算法框图
其基本的滤波流程如下所示:
循环往复,其中的公式等不在此处叙述,大家可以自行查看资料,几个比较不错的讲解文章:
卡尔曼滤波文章1
卡尔曼滤波文章2
老外写的卡尔曼滤波文章
仿真验证
下面就是一个对于对于一维位置数据的简单滤波代码,代码如下所示:
clc;
clear all;
close all;
Tcpi = 0.01;
T = Tcpi;
N = 100;
%真实位置
x_true = 13;
%过程噪声方差
Q = 0.01;
%测量噪声方差
R = 100;
z = zeros(1,N);
%测量值
z = x_true + sqrt(R)*randn(1,N);
%初始化状态值和不确定性
xk = 0;
pk = 1000;
%开始滤波
for k = 2:N
xk = xk;%状态预测
pk = pk + Q;%不确定性预测
K = pk/(pk + R); %卡尔曼滤波增益
%状态更新
x_filter(1,k) = (1-K)*xk + K*z(1,k);
p_filter = (1-K)*pk;
% %下一个状态初始化
xk = x_filter(1,k);
pk = p_filter;
end
figure
x_plot(1,1:N) = x_true;
plot(1:N,x_plot,'b',1:N,z,'r',1:N,x_filter,'g')
legend("真实值","测量值","滤波值");
ylabel("位置/m")
xlabel("step")
运行查看结果:
从结果中,可以看到,如果单从测量值中我们将很难得到有关目标的位置信息
,但经过卡尔曼滤波后,就可以很明显的得到目标的位置信息了
,因此,卡尔曼滤波起到了非常大的作用。
上述内容即使今天的全部内容了,感谢大家的观看。
如果方便,辛苦大家点个赞和关注哦!
您的点赞或评论或关注是对我最大的肯定,谢谢大家!!!