卡尔曼滤波(Kalman Filtering)是一种用于估计系统状态的数学方法,特别适用于动态系统和含有噪声的测量。该滤波器由数学家Rudolf E. Kálmán于1960年提出,被广泛应用于控制系统、导航、信号处理等领域。
卡尔曼滤波的主要目标是通过融合系统的动态模型和实际测量,提供对系统状态的最优估计。它假设系统的状态是线性动态的,且测量中可能存在噪声。卡尔曼滤波器通过递归地更新状态估计,动态地调整权重以平衡系统模型和测量之间的不确定性。
实际场景的应用场景是充满不确定性:
1、不存在完美的数学模型;
2、系统的扰动是不可控的,同时也很难建模;
3、传感器的测量值是存在误差的。
在对一个物体进行次测量,每次测量结果记为
,希望通过这
次测量数据,估计一个接近物体实际的值
,最容易想到最简单的就是对多次测量结果求平均值,那么就有一下公式:
随着测量次数的增加,测量值
将变的不再重要,当
趋近于无穷大时,
趋近于0,当
较小时,测量值
的作用将对较大,当
等于1时
。若使用
替换
,则上述公式整理可得:
此时就是所谓的卡尔曼增益(Kalman Gain),由上述公式可知卡尔曼滤波的本次预测结果仅与上次预测值有关,与更早之前的预测值并没有直接关系。
一个系统中,对结果进行估计,使用传感器测量均会引入误差,估计误差:,测量误差:
,则卡尔曼增益:
。
在时刻,
时,
则,
;在
时刻,
时,
则,
。
此时我们得到3个公式,
(1)
(2)
(3)
公式(1)和(3)在后面学习中会有详细的推导过程。
由上面3个公式我们就可以做一些对结果估计的事情了,例如,一个物体实际长度50cm,现在有一把尺子来测量其长度,每次测量误差为±3cm,我们来使用上述公式对该物体长度进行估计。
k | Z(k) | e(MEAk) | x(hatk) | K(k) | e(ESTk) |
0 | 35 | 5 | |||
1 | 51 | 3 | 45 | 0.625 | 1.875 |
2 | 53 | 3 | 48.07692308 | 0.384615385 | 1.153846154 |
3 | 47 | 3 | 47.77777778 | 0.277777778 | 0.833333333 |
4 | 49 | 3 | 48.04347826 | 0.217391304 | 0.652173913 |
5 | 52 | 3 | 48.75 | 0.178571429 | 0.535714286 |
6 | 47 | 3 | 48.48484848 | 0.151515152 | 0.454545455 |
7 | 51 | 3 | 48.81578947 | 0.131578947 | 0.394736842 |
8 | 48 | 3 | 48.72093023 | 0.11627907 | 0.348837209 |
9 | 49 | 3 | 48.75 | 0.104166667 | 0.3125 |
10 | 53 | 3 | 49.1509434 | 0.094339623 | 0.283018868 |
11 | 47 | 3 | 48.96551724 | 0.086206897 | 0.25862069 |
12 | 48 | 3 | 48.88888889 | 0.079365079 | 0.238095238 |
13 | 48 | 3 | 48.82352941 | 0.073529412 | 0.220588235 |
14 | 52 | 3 | 49.04109589 | 0.068493151 | 0.205479452 |
15 | 51 | 3 | 49.16666667 | 0.064102564 | 0.192307692 |
16 | 47 | 3 | 49.03614458 | 0.060240964 | 0.180722892 |
17 | 49 | 3 | 49.03409091 | 0.056818182 | 0.170454545 |
18 | 53 | 3 | 49.24731183 | 0.053763441 | 0.161290323 |
19 | 52 | 3 | 49.3877551 | 0.051020408 | 0.153061224 |
20 | 52 | 3 | 49.51456311 | 0.048543689 | 0.145631068 |
由上述表格和折线图可见,预测结果随着次数不断增加在不断靠近物体长度的真实值。
学习笔记,参考资料【【卡尔曼滤波器】1_递归算法_Recursive Processing】 https://www.bilibili.com/video/BV1ez4y1X7eR/?share_source=copy_web&vd_source=c29456ffa88bc7559f8ffbe6f8e8f7a5