推导思路一:
(1) 混合高斯
一维高斯函数形式:
N(x,μ,σ)=σ2π
1e−2σ2(x−μ)2(1)
两个高斯函数相乘(未归一化):
N(x,μ0,σ0)×N(x,μ1,σ1)=?N(x,μ′,σ′)(2)
混合后高斯函数其均值和方差求解如下:
μ′σ′2=μ0+σ02+σ12σ02(μ1−μ0)=σ02−σ02+σ12σ04(3)
则上式可简化如下:
kμ′σ′2=σ02+σ12σ02=μ0+k(μ1−μ0)=σ02−kσ02(4)
将上式改写为矩阵形式:
Kμ
′Σ′=Σ0(Σ0+Σ1)−1=u0
+K(μ1
−u0
)=Σ0−KΣ0(5)
其中
Σi表示协方差矩阵,
μi
表示均值。
K表示卡尔曼增益。
(2)卡尔曼滤波
假定现有两个分布,一个是预测分布和观测分布:
(μ0,Σ0)(μ1,Σ1)=(Hkxk^,HkPkHkK)=(zk
,Rk)(6)
结合公式5,可得如下:
Hkxk′
HkPk′HkT=Hkxk
+K(zk
−Hkxk^)=HkPkHkT−KHkPkHkT(7)
卡尔曼增益如下:
K=HkPkHkT(HkPkHkT+Rk)−1(8)
式(7)、式(8)等式左右约去
Hk,注意约去
K中隐藏的
Hk,可将式(7)、式(8)写为如下:
x
k′Pk′K=xk
+K′(zk
−Hkxk^)=Pk−K′HkPk=PkHkT(HkPkHkT+Rk)−1(9)
扫描二维码关注公众号,回复:
10368876 查看本文章
式(9)便给了我们完整的更新步骤。
同时,我们附上一下的两个公式:
x^kPk=Fkx^k−1+Bkμ
k=FkPk−1FkT+Qk(10)
以上便是经典卡尔曼滤波中相关的5个公式。式(9)和式(10)中部分定义如下:
-
Hk为转换矩阵
-
Bk为控制矩阵
-
Rk为测量误差
-
Qk为系统误差
-
μ
k为控制向量
流程图如下:
推导思路一细节参见:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/#mjx-eqn-update
推导思路二:
由博文可知有预测方程和测量方程如下:
{xk=Axk−1+Buk−1+wk−1zk=Hxk+vk(1)
公式1中,
A表示状态转换矩阵,
B表示控制矩阵,
H也表示转换矩阵,
xk表示预测值,
zk表示测量值,
uk表示控制向量,
wk−1表示系统噪声,
vk表示测量噪声。
针对小车加速运行问题,上式可表示为:
⎩⎪⎪⎨⎪⎪⎧[xtx˙t]=[10Δt1][xt−1x˙t−1]+[2Δt2Δt]×αzk=[10][xkx˙k](2)
公式2中
α表示加速度。
假定系统噪声
wk和测量噪声
vk皆服从于高斯分布,即
p(w)∼N(0,Q)和
p(v)∼N(0,R)。以
Q=[0000.01]为例,
Q表明系统误差的协方差速度的方差为0.01,位移上标准差为0,速度和方差之间无关联。
现有
xk^′为预测值(先验),
x^k为估计值,
z^k为观测值(后验)。由一般的反馈思想有:
x^k=x^k′+Kk(zk−z^k)=x^k′+Kk(zk−Hx^k′)(3)
其中
zk为真实值,
(zk−Hx^k′)为测量值与真实值之间的残差,其中求取
Kk为关键。
假定估计值与真实值之间的协方差为:
Pk=E[ekekT]=E[(xk−x^k)(xk−x^k)T]=[E(SerrSerrT)E(VerrSerrT)E(SerrVerrT)E(VerrVerrT)](4)
上式中
Serr表示位移误差,
Verr表示速度误差。
将式(3)代入式(4)得:
Pk=[(I−KkH)(xk−x^k′)−Kkvk][(I−KkH)(xk−x^k′)−Kkvk]T(5)
同理得到预测值与真实值之间的协方差。
Pk′=E[ek′ek′T]=E[(xk−x^k′)(xk−x^k′)T](6)
注意系统状态
xk与测量噪声
vk之间是相互独立的。
将式(5)展开可得:
Pk=(I−KkH)E[(xk−x^k′)(xk−x^k′)T](I−KkH)T+KkE[vkvkT]KkT=(I−KkH)Pk′(I−KkH)T+KkRKkT=Pk′−KkHPk′−Pk′HTKkT+Kk(HPk′HT+R)KkT(7)
结合均方差的意义,利用矩阵的迹对式(7)进行操作得:
T[Pk]=T[Pk′]−2T[KkHPk′]+T[Kk(HPk′HT+R)KkT](8)
最小均方差,对
Kk进行求导,令导函数为0。则有下式:
dKkdT[Pk]∴Kk=−2(HPk′)T+2Kk(HPk′HT+R)=0=Pk′HT(HPk′HT+R)−1(9)
其中
R为测量噪声协方差矩阵。假定上面的所有维度都为
1×1维,令
H=1,且
Pk′̸=0,则公式(9)可以简化如下:
Kk=Pk′+RPk′=1+Pk′R1
分析上式可得以下结论:
- 若
Kk随着
Pk′增大而增大,说明卡尔曼增益越大,越重视反馈。
- 若
Pk′=0,说明预测值等于真实值。
- 若
Kk=0,说明估计值等于预测值。
- 注意,
Pk为估计值与真实值之间的协方差,
Pk′为预测值与真实值之间的误差。
将计算出的
Kk反代入公式 7中,化简可得:
Pk=Pk′−Pk′HT(HPk′HT+R−1)HPk′=Pk′−KkHPk′=(I−KkH)Pk′(10)
上式中
Pk′的递推计算如下,注意
Pk′为预测值与真实值之间的协方差矩阵。
首先有预测值的递推形式:
x^′k+1=Axk^+Buk,结合公式(1)可得:
P′k+1=E[e′k+1e′k+1T]=E[(xk+1−x^′k+1)(xk+1−x^′k+1)T]=E[[A(xk−x^k)+wk][A(xk−x^k)+wk]T](11)
注意系统状态
xk和系统噪声之间相互独立。
所以公式(11)可简化如下:
P′k+1=E[(Aek+1)(Aek+1)T]+E[wkwkT]=APkAT+Q(12)
由此,也获得了
P′k+1的递推公式。仅需设置最初的
Pk,便能迭代下去。其中
Q表示系统噪声协方差矩阵。
现将卡尔曼滤波推导思路二总结如下:
{x^k−=Ax^k−1+Buk−1Pk−=APk−1AT+Q(13)
由公式(13)便可计算卡尔曼增益和估计值如下:
{Kk=Pk−HT(HPk−HT+R)−1x^k=x^k−+Kk(zk−Hxk−)(14)
最后计算估计值和真实值之间的误差协方差矩阵为下次递推作准备:
Pk=(I−KkH)Pk−
推导思路一细节参见:https://blog.csdn.net/heyijia0327/article/details/17487467#commentBox
以上便是对卡尔曼滤波公式推导的两种总结。。。