卡尔曼滤波是一种高效率的递归滤波器(自回归滤波器),它能够从一系列的不完全包含噪声的测量中,估计动态系统的状态。
简单来说,卡尔曼滤波器是一个“optimal recursivedata processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。
首先我们要利用系统的过程模型,来预测下一状态的系统。假设现在的系统状态是k,根据系统的模型,可以基于系统的上一状态而预测出现在状态:
X(k|k-1)=A X(k-1|k-1)+B U(k) ……… (1)
式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。
到现在为止,我们的系统结果已经更新了,可是,对应于X(k|k-1)的covariance还没更新。我们用P表示covariance:
P(k|k-1)=A P(k-1|k-1) A’+Q ……… (2)
式(2)中,P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应的covariance,A’表示A的转置矩阵,Q是系统过程的covariance。式子1,2就是
卡尔曼滤波器
5个公式当中的前两个,也就是对系统的预测。
现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k):
X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) ……… (3)
其中Kg为卡尔曼增益(Kalman Gain):
Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) ……… (4)
到现在为止,我们已经得到了k状态下最优的估算值X(k|k)。但是为了要令卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k)的covariance:
P(k|k)=(I-Kg(k) H)P(k|k-1) ……… (5)
卡尔曼滤波器的原理基本描述了,式子1,2,3,4和5就是他的5个基本公式。根据这5个公式,可以很容易用计算机编程实现。
在百度百科上有个队室内温度卡尔曼滤波预测,讲解非常详细。
最重要的是对描述的对象进行建模。
首先选好状态变量,比如:室内温度s=[s];预测一个点的位置,可以有s=[x,y,vx,vy,ax,ay];预测一个区域,s=[x,y,vx,vy,ax,ay,w,h];w,h表示区域的长宽;
再通过系统间的关系,确立状态转移矩阵A;
再就是观测矩阵H的确立,主要看测量值与系统变量间的关系;
然后,使用高斯白噪声模型,建立预测值和测量值的偏差关系,确立Q,R;
最后,计算当前可信度P(k|k-1),并且更新可信度P(k|k)。
具体的运算步骤是,由(1)算出预测值X(k|k-1),然后由(2)计算当前的可信度P(k|k-1),再由(4)计算卡尔曼增益Kg(k),再由(3)汇总预测值X(k|k-1)和测量值Z(k),计算出最可信的值X(k|k)(可以认为是真实值),最后由(5)更新可信度P(k|k),用作下一轮计算。