最近在学习卡尔曼滤波相关内容,在此做些整理。
卡尔曼滤波是什么?
卡尔曼滤波(Kalman filter)是一种高效的自回归滤波器,它能在存在诸多不确定性情况的组合信息中估计动态系统的状态,是一种强大的、通用性极强的工具,主要针对线性系统。它通过综合考虑估计值和测量值,迭代给出不确定性最小的数值。
按照我的理解,卡尔曼滤波实质就是
将基于前一时间点的系统状态的给出当前时间点的系统状态的高斯分布预测P1和基于当前时间点的观测量的概率分布Q给出另一组对当前时间点系统状态的高斯分布预测P2,进行数据融合,生成一个新的高斯分布预测,新的预测为更正后的当前时刻下的系统状态的高斯分布,其中新的高斯分布的均值和方差是两个独立的高斯分布的相关参量的加权,这个加权就是卡尔曼增益。不断迭代预测和更正的步骤。
卡尔曼滤波公式一共5条。分为两条预测和三条更正,分别为:
(1)
(2)
(3)
(4)
(5)
卡尔曼滤波的计算步骤如下:
在给定初值的基础上,
基于式(1)式(2)得到先验估计和先验误差的协方差矩阵
将代入式(3)得到卡尔曼增益
将代入式(4)更新得到系统的后验估计
将代入式(5)更新得到后验误差的协方差矩阵
不断迭代向前。
下面是具体的推导过程:
1.首先是系统的先验估计公式
预测方程可以表达为如下状态空间形式
(6)
其中x为状态向量,A为状态转移矩阵,B为控制变量矩阵,u为状态控制向量,对于轮轨振动方程而言,u可以视为外激励向量,w为控制系统噪声,且服从高斯分布。
测量方程可以表示为如下形式:
(7)
其中z为测量向量,H为转化矩阵,v为控制系统噪声,且服从高斯分布
由于w,v为未知量,将其去掉,可以得到系统的先验估计与测量估计为
(1-1)
(1-2)
由于去掉了过程噪声,式(1)并非完整预测矩阵和测量方程的,头顶加上^表达结果为估计值,未经处理在右上加上-表示先验,合起来就叫先验估计。
2.其次是系统的后验估计公式
系统的后验估计可以表示为
(8)
其中。不难发现当G=0时,,当G=1时,
令,对式(8)进行变换则有
(4)
3.下面推导先验误差的协方差矩阵,对先验误差做如下数学变换:
(9)
将式(9)代入协方差矩阵,有:
4.下面推导卡尔曼增益
卡尔曼滤波器的目标是寻找合适的卡尔曼增益,使得后验误差最小,误差满足
。
易得方差越小,误差越小,而方差最小,也就是协方差矩阵的迹最小。(注1)
推导如下:
对于任意的,其协方差为
,
因此,其中ki为k时刻的后验误差的第i个分量。
对做如下数学变换:
(11)
其中为先验误差。
将式(11)代入后验误差的协方差矩阵,有:
(12)
由于独立分布,且期望均为0则式(12)中间两项为0,化简后式(12)可表示为
(13)
值得注意的是,所以式(13)可表示为
(14)
进而
(15)
欲使最小,也就是令对求导为0,即
(16)
将式(15)代入可得
(15)
此处用到了矩阵迹的运算公式
(16)
通过对式(15)进行数学变换可得最终的
(17)
5.最后是后验误差的协方差矩阵
在得到最优的卡尔曼增益后,将式(17)代入到式(14),可以发现:
(5)
此即卡尔曼滤波的数学原理。
注1的推导如下:
对于任意的,其协方差为
,
因此,其中ki为k时刻的后验误差的第i个分量。