“If you can’t explain it simply, you don’t understand it well enough.”
—— Albert Einstein
最近使用磁力计的过程中,需要用到卡尔曼滤波器对数据进行处理,但是网上很多资料的讲解都过于繁琐,有些教程只追求公式的暴力推导,全然不顾读者的阅读体验,对小白尤其是数学小白很不友好,自己也是在费了很大功夫之后才略知一二。因此这里记录一下自己的学习心得,希望能帮助到以后的自己以及同样想入门卡尔曼滤波的人。
本文默认大家具有高中以上的数学基础,因此对均值、数学期望、方差、标准差、正态分布(高斯分布)等最基本的概念不再进行解释
本文将从下面几个部分由浅入深的进行介绍
- 卡尔曼滤波器入门(1)介绍
- 卡尔曼滤波器入门(2)一维卡尔曼滤波
- 卡尔曼滤波器入门(3)多维卡尔曼滤波
- 卡尔曼滤波器入门(4)扩展卡尔曼滤波
- 卡尔曼滤波器入门(5)无迹卡尔曼滤波
关于卡尔曼滤波
卡尔曼滤波(Kalman filter)是一种高效率的递归滤波器(自回归滤波器),它能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态。卡尔曼滤波会根据各测量量在不同时间下的值,考虑各时间下的联合分布,再产生对未知变数的估计,因此会比只以单一测量量为基础的估计方式要准。
大多数现代系统都有许多传感器,这些传感器可以根据一系列测量来估计隐藏(未知)状态。例如,GPS 接收器提供位置和速度估计,其中位置和速度是隐藏状态,卫星信号到达的时间是测量值。
跟踪和控制系统的最大挑战之一是在存在不确定性的情况下提供准确和精确的隐藏状态估计。在 GPS 接收器中,测量不确定性取决于许多外部因素,例如热噪声、大气影响、卫星位置的微小变化、接收器时钟精度等等。
卡尔曼滤波器是最重要和最常见的估计算法之一。卡尔曼滤波器根据不准确和不确定的测量值生成隐藏变量的估计值。此外,卡尔曼滤波器可以根据过去的估计预测未来的系统状态。
该过滤器以 Rudolf E. Kálmán(1930 年 5 月 19 日 - 2016 年 7 月 2 日)的名字命名。1960 年,卡尔曼发表了他的著名论文,描述了离散数据线性过滤问题的递归解决方案。并在阿波罗登月计划中成功应用帮助NASA登上了月球。
今天,卡尔曼滤波器用于目标跟踪(雷达)、定位和导航系统、控制系统、计算机图形等等领域。
卡尔曼滤波器的作用
卡尔曼滤波的一个典型实例是从一组有限的,包含噪声的,通过对物体位置的观察序列(可能有偏差)预测出物体的位置的坐标及速度。在很多工程应用(如雷达、机器视觉)中都可以找到它的身影。同时,卡尔曼滤波也是控制理论以及控制系统工程中的一个重要课题。
第一次听到卡尔曼滤波器这个词的时候我下意识的反应应该是类似于数字信号处理领域的滤波器,即通过傅里叶变换在频域对信号进行处理,但随着了解的深入我认识到,卡尔曼滤波器不应该称之为一种滤波器,因为他跟我们传统意义上的FIR、IIR等滤波器有很大的区别,因为传统的滤波器去噪是一次性完成的即信号只需通过一次滤波器即可,而卡尔曼滤波器更应该称之为一种最优化递归数据处理算法,也就是说是通过迭代递归的方式对信号进行最优估计,使得测量到的信号(measurement value)逐渐逼近真实信号(true value)。
例如,对于雷达来说,人们感兴趣的是其能够跟踪目标。但目标的位置、速度、加速度的测量值往往在任何时候都有噪声。卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。
举例
这里给大家举一个简单的例子给大家引入一些相关概念在后续的章节中会用到
我们接着考虑上文中提到的雷达跟踪。假设雷达的发射周期为5s,跟踪雷达向跟踪物体发射锥形波束,简单来说就是每 5 秒,雷达通过向目标方向发送专用跟踪波束来重新访问目标。发送波束后,雷达估计当前目标位置和速度同时雷达还会预测下一个跟踪波束应该发送到的方向。
根据牛顿运动方程,我们可以很容易的计算出目标在下一个发射周期的位置
x
=
x
0
+
v
0
Δ
t
+
1
2
a
Δ
t
2
符号说明
x
:
目标位置
x
0
:
目标初始位置
v
0
:
目标初始速度
a
:
目标加速度
Δ
t
:
时间间隔(本例子中为
5
s
)
x=x_0+v_0\Delta t+\frac{1}{2}a\Delta t^2 \\ 符号说明 \\ x:目标位置 \\ x_0:目标初始位置 \\ v_0:目标初始速度 \\ a:目标加速度 \\ \Delta t:时间间隔(本例子中为5s)
x=x0+v0Δt+21aΔt2符号说明x:目标位置x0:目标初始位置v0:目标初始速度a:目标加速度Δt:时间间隔(本例子中为5s)
映射到三维空间后,我们将牛顿方程作为系统的运动方程
x
=
x
0
+
v
x
0
Δ
t
+
1
2
a
x
Δ
t
2
y
=
y
0
+
v
y
0
Δ
t
+
1
2
a
y
Δ
t
2
z
=
z
0
+
v
z
0
Δ
t
+
1
2
a
z
Δ
t
2
x=x_0+v_{x0}\Delta t+\frac{1}{2}a_x\Delta t^2\\ y=y_0+v_{y0}\Delta t+\frac{1}{2}a_y\Delta t^2\\ z=z_0+v_{z0}\Delta t+\frac{1}{2}a_z\Delta t^2
x=x0+vx0Δt+21axΔt2y=y0+vy0Δt+21ayΔt2z=z0+vz0Δt+21azΔt2
上面的方程被称为动态模型(空间状态模型),描述输入输出的关系。
而
x
、
y
、
z
、
v
x
、
v
y
、
v
z
、
a
x
、
a
y
、
a
z
x、y、z、v_x、v_y、v_z、a_x、a_y、a_z
x、y、z、vx、vy、vz、ax、ay、az等物理量被称为系统的系统状态。
这样我们就构建了一个最基本最理想的动态模型并很容易预测目标的下一个状态,然而事实并不是这样。
首先,雷达系统的测量数值不是完全可靠,它包含随机误差(或者这类型的不确定性)。这些随机错误的大小取决于很多因素,例如雷达自身的准确性,发射光束的宽度,返回信号强弱等等。这些测量误差被称为测量噪声。
其次, 因为有很多外部因素会造成干扰,使得目标运动并不是完全按着运动方程。例如:风向,空气扰动,等等。这个动态模型误差被称为过程噪声。
因为测量噪声和过程噪声的存在,这个根据上述系统方程估算出来的目标位置会和真实的目标位置相差很大。假如这样,雷达系统会向错误的方向发射跟踪射束并且丢失目标。
为了提高雷达跟踪系统的表现,这就需要能够将处理噪声和测量噪声考虑进来的预测算法。因此引出了卡尔曼滤波。