状态方程#
{xkzk=Axk−1+Buk−1+wk−1=Hxk+vk其中w是外界扰动,协方差记作Q=E[wwT]
v是观测误差,协方差记作R=E[vvT]
根据卡尔曼滤波的概率论假设,过程噪声和测量噪声必须是相互独立的白噪声,且服从高斯(正态)分布: w∼N(0,Q), v∼N(0,R)。
各种噪声相互独立,因此:E[ek−vkT]=0,E[vk(ek−)T]=0,E[ekwkT]=0
更新方程#
x^k=x^k−+Kk(zk−Hx^k−)
为什么更新方程长这样呢。考虑两个独立的信息源:一个是基于模型的先验预测分布 N(x^k−,Pk−),另一个是传感器的测量分布 N(zk,R)。根据贝叶斯定理,结合两个独立证据的后验概率等于两个高斯概率密度函数的乘积。两个高斯指数项相加后,
P∝e(−2σ12(x−μ1)2)×e(−2σ22(x−μ2)2)=e−(2σ12(x−μ1)2+2σ22(x−μ2)2)其均值必定呈现出一种线性加权的形式。因此,假设后验状态的线性更新结构:x^k=x^k−+Kk(zk−Hx^k−),接下来我们只需通过最小化方差来求解最优的权重矩阵 Kk。
x^k−=Ax^k−1+Buk−1
ek−=xk−x^k−=A(xk−1−x^k−1)+wk−1=Aek−1+wk−1
把e的协方差记作P=E[eeT],因此:
Pk−=E[ek−(ek−)T]=E[(Aek−1+wk−1)(Aek−1+wk−1)T]=E[Aek−1ek−1TAT+Aek−1wk−1T+wk−1ek−1TAT+wk−1wk−1T]=AE[ek−1ek−1T]AT+E[wk−1wk−1T]=APk−1AT+Q为计算后验Pk=E[ekekT],先算ek:
ek=xk−x^k=xk−(x^k−+Kk(zk−Hx^k−))=xk−(x^k−+Kk((Hxk+vk)−Hx^k−))=(I−KkH)ek−−KkvkPk=E[ekekT]=E[((I−KkH)ek−−Kkvk)((I−KkH)ek−−Kkvk)T]=(I−K_kH)E[ek−(e_k−)T](I−K_kH)T−(I−KkH)E[ek−vkT]KkT−KkE[vk(ek−)T](I−KkH)T+KkE[vkvkT]KkT=(I−KkH)Pk−(I−KkH)T−0−0+KkRKkT=(I−KkH)Pk−(I−KkH)T+KkRKkT我们希望系统各个状态变量的误差越小越好,协方差矩阵对角线上的元素是各个变量的方差。因此要让 Pk 对角线元素之和,即矩阵的迹最小化。
根据∂A∂Tr(AB)=BT,∂A∂Tr(ABAT)=2AB
J=Tr(Pk)=Tr(Pk−−KkHPk−−Pk−HTKkT+KkHPk−HTKkT+KkRKkT)=Tr(Pk−)−2Tr(KkHPk−)+Tr(Kk(HPk−HT+R)KkT)=−2Pk−HT+2Kk(HPk−HT+R)令∂Kk∂J=0,
Kk=Pk−HT(HPk−HT+R)−1这便是卡尔曼滤波的增益公式。