Table of contents
Introduction
This post show how I understand the Kalman filter after learning some tutorials. Only the conception equations are introduced.
基本问题
什么是卡尔曼滤波?
它是一种思想(而非具体算法),用一个变量的过去值和现在的观测值,来最佳估计变量的现在的值。它有许多不同的具体算法形式,被广泛应用于信号处理、数据融合、运动估计、自动控制等领域。
什么时候使用卡尔曼滤波?
卡尔曼滤波应用场景的基础假设是:
- 我们有一个方法来观测变量现在的值。
- 我们同时也可以用变量的过去的值来预测它现在的值。
在一般应用中,我们常常直接使用假设1。但是如果假设2成立的话,我们就会想:不把假设2利用起来实在太可惜了。数学上也有严格证明,结合这两个假设的结果,肯定比单独使用一个要好。卡尔曼滤波正是使用在这种场景中。
相应的,不适用于卡尔曼滤波的场景就是:这个变量不存在时序结构。或者说,即便存在时序结构,它的某个时刻的状态与它之前的状态毫无关系,那么假设1便不成立。
为什么叫“滤波”
上面的说明中,滤波的操作其实已经出现了:把一个变量的真实值,按时间排序形成一个一维的矩阵,用一个滤波器在这个矩阵上从左到右滑动,来对这个序列进行滤波,获得我们计算出的变量值的一维矩阵。 我们可以把这个滤波器表示成[预测方程, 观测方程],就意味着对于每个真实值,我们都用其预测(前一个状态的值) + 观测(此刻状态的值)
来计算这个时刻的值,这反映的正是卡尔曼滤波的思想。
卡尔曼滤波与普通滤波的区别?
我们理解了为什么卡尔曼滤波是一种滤波,但肯定不能把所有的滤波都称为卡尔曼滤波。卡尔曼滤波到底卡尔曼在哪呢?卡尔曼滤波结合预测信息和观测信息来最优化估计变量的值,而这个结合的过程中考虑了两个信息的不确定性。
简单例子
在目标追踪的场景中,一个物体在某帧中的位置,显然与其在上一帧中的位置存在较强的关系。所以我们可以利用这个原理,来尝试优化目标追踪算法得到的检测框。对于每个检测框,我们先评估一下这个检测框的质量,再评估一下通过前一个检测框来预测这一个检测框的质量,然后综合考虑结合它们来更新检测框。
简单理解
参考源: