卡尔曼滤波推导思路总结

推导思路一:
(1) 混合高斯
一维高斯函数形式:
(1) N ( x , μ , σ ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 \mathcal N(x,\mu,\sigma)=\frac{1}{\sigma\sqrt{2\pi}}e^-\frac{(x-\mu)^2}{2\sigma^2}\tag1 N(x,μ,σ)=σ2π 1e2σ2(xμ)2(1)

两个高斯函数相乘(未归一化):
(2) N ( x , μ 0 , σ 0 ) × N ( x , μ 1 , σ 1 ) = ? N ( x , μ ′ , σ ′ ) \mathcal N(x,\mu_{0},\sigma_{0})\times\mathcal N(x,\mu_{1},\sigma_{1})=^?\mathcal N(x,\mu{'},\sigma{'})\tag2 N(x,μ0,σ0)×N(x,μ1,σ1)=?N(x,μ,σ)(2)

混合后高斯函数其均值和方差求解如下:

(3) μ ′ = μ 0 + σ 0 2 ( μ 1 − μ 0 ) σ 0 2 + σ 1 2 σ ′ 2 = σ 0 2 − σ 0 4 σ 0 2 + σ 1 2 \begin{aligned} \mu{'}&=\mu_{0}+\frac{\sigma_{0}^{2}(\mu_{1}-\mu_{0})}{\sigma_{0}^{2}+\sigma_{1}^{2}}\\ \sigma{'}^2&=\sigma_{0}^2-\frac{\sigma_{0}^4}{\sigma_{0}^{2}+\sigma_{1}^{2}} \end{aligned}\tag3 μσ2=μ0+σ02+σ12σ02(μ1μ0)=σ02σ02+σ12σ04(3)

则上式可简化如下:
(4) k = σ 0 2 σ 0 2 + σ 1 2 μ ′ = μ 0 + k ( μ 1 − μ 0 ) σ ′ 2 = σ 0 2 − k σ 0 2 \begin{aligned} k&=\frac{\sigma_{0}^2}{\sigma_{0}^{2}+\sigma_{1}^{2}}\\ \mu{'}&=\mu_{0}+k{(\mu_{1}-\mu_{0})}\\ \sigma{'}^2&=\sigma_{0}^2-k\sigma_{0}^2 \end{aligned}\tag4 kμσ2=σ02+σ12σ02=μ0+k(μ1μ0)=σ02kσ02(4)

将上式改写为矩阵形式:
(5) K = Σ 0 ( Σ 0 + Σ 1 ) − 1 μ ⃗ ′ = u 0 ⃗ + K ( μ 1 ⃗ − u 0 ⃗ ) Σ ′ = Σ 0 − K Σ 0 \begin{aligned} K&=\Sigma_{0}(\Sigma_{0}+\Sigma_1)^{-1}\\ \vec{\mu}{'}&=\vec{u_0}+ K(\vec{\mu_1}-\vec{u_{0}})\\ \Sigma{'}&=\Sigma_{0}-K\Sigma_{0} \end{aligned}\tag{5} Kμ Σ=Σ0(Σ0+Σ1)1=u0 +K(μ1 u0 )=Σ0KΣ0(5)

其中 Σ i \Sigma_{i} Σi表示协方差矩阵, μ i ⃗ \vec{\mu_{i}} μi 表示均值。 K K K表示卡尔曼增益。

(2)卡尔曼滤波
假定现有两个分布,一个是预测分布和观测分布:
(6) ( μ 0 , Σ 0 ) = ( H k x k ^ , H k P k H k K ) ( μ 1 , Σ 1 ) = ( z k ⃗ , R k ) \begin{aligned} (\mu_0,\Sigma_{0})&=(H_{k}\hat{x_{k}},H_kP_kH_{k}^{K})\\ (\mu_1,\Sigma_1)&=(\vec{z_{k}},R_{k}) \end{aligned}\tag6 (μ0,Σ0)(μ1,Σ1)=(Hkxk^HkPkHkK)=(zk ,Rk)(6)
结合公式5,可得如下:
(7) H k x k ′ ⃗ = H k x k ⃗ + K ( z k ⃗ − H k x k ^ ) H k P k ′ H k T = H k P k H k T − K H k P k H k T \begin{aligned} H_k\vec{x_k{'}}&=H_k\vec{x_k}+K(\vec{z_k}-H_k \hat {x_k})\\ H_kP_k{'}H_k^{T}&=H_kP_kH_k^{T}-KH_kP_kH_k^{T} \end{aligned}\tag7 Hkxk HkPkHkT=Hkxk +K(zk Hkxk^)=HkPkHkTKHkPkHkT(7)

卡尔曼增益如下:
(8) K = H k P k H k T ( H k P k H k T + R k ) − 1 K=H_kP_kH_k^{T}(H_kP_kH_k^{T}+R_k)^{-1}\tag8 K=HkPkHkT(HkPkHkT+Rk)1(8)

式(7)、式(8)等式左右约去 H k H_k Hk,注意约去 K K K中隐藏的 H k H_k Hk,可将式(7)、式(8)写为如下:

(9) x ⃗ k ′ = x k ⃗ + K ′ ( z k ⃗ − H k x k ^ ) P k ′ = P k − K ′ H k P k K = P k H k T ( H k P k H k T + R k ) − 1 \begin{aligned} \vec{x}_k{'}&=\vec{x_k}+K{'}(\vec{z_k}-H_k \hat {x_k})\\ P_k{'}&=P_k-K{'}H_kP_k\\ K&=P_kH_k^{T}(H_kP_kH_k^{T}+R_k)^{-1} \end{aligned}\tag9 x kPkK=xk +K(zk Hkxk^)=PkKHkPk=PkHkT(HkPkHkT+Rk)1(9)

式(9)便给了我们完整的更新步骤。

同时,我们附上一下的两个公式:
(10) x ^ k = F k x ^ k − 1 + B k μ ⃗ k P k = F k P k − 1 F k T + Q k \begin{aligned} \hat x_{k}&=F_k\hat{x}_{k-1}+B_k\vec\mu_k\\ P_k&=F_kP_{k-1}F_k^{T}+ Q_k \end{aligned}\tag{10} x^kPk=Fkx^k1+Bkμ k=FkPk1FkT+Qk(10)

以上便是经典卡尔曼滤波中相关的5个公式。式(9)和式(10)中部分定义如下:

  • H k H_k Hk为转换矩阵
  • B k B_k Bk为控制矩阵
  • R k R_k Rk为测量误差
  • Q k Q_k Qk为系统误差
  • μ ⃗ k \vec\mu_k μ k为控制向量

流程图如下:

推导思路一细节参见:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/#mjx-eqn-update


推导思路二:
由博文可知有预测方程和测量方程如下:
(1) { x k = A x k − 1 + B u k − 1 + w k − 1 z k = H x k + v k \begin{cases} x_k=Ax_{k-1}+Bu_{k-1}+w_{k-1}\\ z_k=Hx_k+v_k \end{cases}\tag1 {xk=Axk1+Buk1+wk1zk=Hxk+vk(1)

公式1中, A A A表示状态转换矩阵, B B B表示控制矩阵, H H H也表示转换矩阵, x k x_k xk表示预测值, z k z_k zk表示测量值, u k u_k uk表示控制向量, w k − 1 w_{k-1} wk1表示系统噪声, v k v_k vk表示测量噪声。

针对小车加速运行问题,上式可表示为:

(2) { [ x t x ˙ t ] = [ 1 Δ t 0 1 ] [ x t − 1 x ˙ t − 1 ] + [ Δ t 2 2 Δ t ] × α z k = [ 1 0 ] [ x k x ˙ k ] \begin{cases} \begin{bmatrix} x_t\\ \dot x_t\end{bmatrix}=\begin{bmatrix}1&\Delta t \\0&1\end{bmatrix}\begin{bmatrix} x_{t-1} \\ \dot x_{t-1}\end{bmatrix}+\begin{bmatrix} \frac{\Delta t^2}{2} \\ \Delta t \end{bmatrix}\times \alpha\\ z_k=\begin{bmatrix} 1&0\end{bmatrix}\begin{bmatrix} x_k\\ \dot x_k\end{bmatrix} \end{cases}\tag2 [xtx˙t]=[10Δt1][xt1x˙t1]+[2Δt2Δt]×αzk=[10][xkx˙k](2)

公式2中 α \alpha α表示加速度。

假定系统噪声 w k w_k wk和测量噪声 v k v_k vk皆服从于高斯分布,即 p ( w ) ∼ N ( 0 , Q ) p(w)\sim N(0,Q) p(w)N(0,Q) p ( v ) ∼ N ( 0 , R ) p(v)\sim N(0,R) p(v)N(0,R)。以 Q = [ 0 0 0 0.01 ] Q=\begin{bmatrix}0&0\\0&0.01\end{bmatrix} Q=[0000.01]为例, Q Q Q表明系统误差的协方差速度的方差为0.01,位移上标准差为0,速度和方差之间无关联。

现有 x k ^ ′ \hat{x_k}{'} xk^为预测值(先验), x ^ k \hat{x}_k x^k为估计值, z ^ k \hat z_k z^k为观测值(后验)。由一般的反馈思想有:

(3) x ^ k = x ^ k ′ + K k ( z k − z ^ k ) = x ^ k ′ + K k ( z k − H x ^ k ′ ) \begin{aligned} \hat x_k&=\hat x_k{'}+K_k(z_k-\hat z_k)\\&=\hat x_k{'}+K_k(z_k-H\hat x_k{'}) \end{aligned}\tag3 x^k=x^k+Kk(zkz^k)=x^k+Kk(zkHx^k)(3)

其中 z k z_k zk为真实值, ( z k − H x ^ k ′ ) (z_k-H\hat x_k{'}) (zkHx^k)为测量值与真实值之间的残差,其中求取 K k K_k Kk为关键。

假定估计值与真实值之间的协方差为:

(4) P k = E [ e k e k T ] = E [ ( x k − x ^ k ) ( x k − x ^ k ) T ] = [ E ( S e r r S e r r T ) E ( S e r r V e r r T ) E ( V e r r S e r r T ) E ( V e r r V e r r T ) ] \begin{aligned} P_k&=E[e_ke_k^{T}]=E[(x_k-\hat x_k)(x_k-\hat x_k)^T]\\ &=\begin{bmatrix}E(S_{err}S_{err}^T)&E(S_{err}V_{err}^T)\\ E(V_{err}S_{err}^T)&E(V_{err}V_{err}^T)\end{bmatrix} \end{aligned}\tag4 Pk=E[ekekT]=E[(xkx^k)(xkx^k)T]=[E(SerrSerrT)E(VerrSerrT)E(SerrVerrT)E(VerrVerrT)](4)

上式中 S e r r S_{err} Serr表示位移误差, V e r r V_{err} Verr表示速度误差。

将式(3)代入式(4)得:
(5) P k = [ ( I − K k H ) ( x k − x ^ k ′ ) − K k v k ] [ ( I − K k H ) ( x k − x ^ k ′ ) − K k v k ] T P_k=[(I-K_kH)(x_k-\hat x_k{'})-K_kv_k][(I-K_kH)(x_k-\hat x_k{'})-K_kv_k]^{T}\tag{5} Pk=[(IKkH)(xkx^k)Kkvk][(IKkH)(xkx^k)Kkvk]T(5)

同理得到预测值与真实值之间的协方差。

(6) P k ′ = E [ e k ′ e k ′ T ] = E [ ( x k − x ^ k ′ ) ( x k − x ^ k ′ ) T ] P_k{'}=E[e_k{'}e_k{'}^{T}]=E[(x_k-\hat x_k{'})(x_k-\hat x_k{'})^{T}]\tag6 Pk=E[ekekT]=E[(xkx^k)(xkx^k)T](6)

注意系统状态 x k x_k xk与测量噪声 v k v_k vk之间是相互独立的。

将式(5)展开可得:

(7) P k = ( I − K k H ) E [ ( x k − x ^ k ′ ) ( x k − x ^ k ′ ) T ] ( I − K k H ) T + K k E [ v k v k T ] K k T = ( I − K k H ) P k ′ ( I − K k H ) T + K k R K k T = P k ′ − K k H P k ′ − P k ′ H T K k T + K k ( H P k ′ H T + R ) K k T \begin{aligned} P_k&=(I-K_kH)E[(x_k-\hat x_k{'})(x_k-\hat x_k{'})^{T}](I-K_kH)^{T}+K_kE[v_kv_k^{T}]K_k^{T}\\ &=(I-K_kH)P_k{'}(I-K_kH)^{T}+K_kRK_k^{T}\\ &=P_k{'}-K_kHP_k{'}-P_k{'}H^{T}K_k^{T}+K_k(HP_k{'}H^T+R)K_k^{T} \end{aligned}\tag7 Pk=(IKkH)E[(xkx^k)(xkx^k)T](IKkH)T+KkE[vkvkT]KkT=(IKkH)Pk(IKkH)T+KkRKkT=PkKkHPkPkHTKkT+Kk(HPkHT+R)KkT(7)

结合均方差的意义,利用矩阵的迹对式(7)进行操作得:

(8) T [ P k ] = T [ P k ′ ] − 2 T [ K k H P k ′ ] + T [ K k ( H P k ′ H T + R ) K k T ] \begin{aligned} T[P_k]=T[P_k{'}]-2T[K_kHP_k{'}]+T[K_k(HP_k{'}H^T+R)K_k^{T}] \end{aligned}\tag8 T[Pk]=T[Pk]2T[KkHPk]+T[Kk(HPkHT+R)KkT](8)

最小均方差,对 K k K_k Kk进行求导,令导函数为0。则有下式:

(9) d T [ P k ] d K k = − 2 ( H P k ′ ) T + 2 K k ( H P k ′ H T + R ) = 0 ∴ K k = P k ′ H T ( H P k ′ H T + R ) − 1 \begin{aligned} \frac{dT[P_k]}{dK_k}&=-2(HP_k{'})^{T}+2K_k(HP_k^{'}H^T+R)=0\\ \therefore K_k&=P_k{'}H^{T}(HP_{k}'H^{T}+R)^{-1} \end{aligned}\tag9 dKkdT[Pk]Kk=2(HPk)T+2Kk(HPkHT+R)=0=PkHT(HPkHT+R)1(9)

其中 R R R为测量噪声协方差矩阵。假定上面的所有维度都为 1 × 1 1\times1 1×1维,令 H = 1 H=1 H=1,且 P k ′ ≠ 0 P_{k}{'}\neq0 Pk̸=0,则公式(9)可以简化如下:
K k = P k ′ P k ′ + R = 1 1 + R P k ′ K_k=\frac{P_k{'}}{P_k{'}+R}=\frac{1}{1+\frac{R}{P_k{'}}} Kk=Pk+RPk=1+PkR1

分析上式可得以下结论:

  • K k K_k Kk随着 P k ′ P_k{'} Pk增大而增大,说明卡尔曼增益越大,越重视反馈。
  • P k ′ = 0 P_k{'}=0 Pk=0,说明预测值等于真实值。
  • K k = 0 K_k=0 Kk=0,说明估计值等于预测值。
  • 注意, P k P_k Pk为估计值与真实值之间的协方差, P k ′ P_k{'} Pk为预测值与真实值之间的误差。

将计算出的 K k K_k Kk反代入公式 7中,化简可得:

(10) P k = P k ′ − P k ′ H T ( H P k ′ H T + R − 1 ) H P k ′ = P k ′ − K k H P k ′ = ( I − K k H ) P k ′ \begin{aligned} P_k&=P_k{'}-P_k{'}H^T(HP_k{'}H^{T}+R^{-1})HP_k{'}\\ &=P_k{'}-K_kHP_k{'}\\ &=(I-K_kH)P_k{'} \end{aligned}\tag{10} Pk=PkPkHT(HPkHT+R1)HPk=PkKkHPk=(IKkH)Pk(10)

上式中 P k ′ P_k{'} Pk的递推计算如下,注意 P k ′ P_k{'} Pk为预测值与真实值之间的协方差矩阵。

首先有预测值的递推形式: x ^ ′ k + 1 = A x k ^ + B u k \hat x{'}_{k+1}=A\hat{x_k}+Bu_k x^k+1=Axk^+Buk,结合公式(1)可得:

(11) P ′ k + 1 = E [ e ′ k + 1 e ′ k + 1 T ] = E [ ( x k + 1 − x ^ ′ k + 1 ) ( x k + 1 − x ^ ′ k + 1 ) T ] = E [ [ A ( x k − x ^ k ) + w k ] [ A ( x k − x ^ k ) + w k ] T ] \begin{aligned} P{'}_{k+1}&=E[e{'}_{k+1}e{'}_{k+1}^{T}]=E[(x_{k+1}-\hat{x}{'}_{k+1})(x_{k+1}-\hat{x}{'}_{k+1})^{T}]\\ &=E[[A(x_k-\hat x_k)+w_k][A(x_k-\hat x_k)+w_k]^T] \end{aligned}\tag{11} Pk+1=E[ek+1ek+1T]=E[(xk+1x^k+1)(xk+1x^k+1)T]=E[[A(xkx^k)+wk][A(xkx^k)+wk]T](11)

注意系统状态 x k x_k xk和系统噪声之间相互独立。

所以公式(11)可简化如下:

(12) P ′ k + 1 = E [ ( A e k + 1 ) ( A e k + 1 ) T ] + E [ w k w k T ] = A P k A T + Q \begin{aligned} P{'}_{k+1}&=E[(Ae_{k+1})(Ae_{k+1})^{T}]+E[w_kw_k^T]\\ &=AP_kA^T+Q \end{aligned}\tag{12} Pk+1=E[(Aek+1)(Aek+1)T]+E[wkwkT]=APkAT+Q(12)

由此,也获得了 P ′ k + 1 P{'}_{k+1} Pk+1的递推公式。仅需设置最初的 P k P_k Pk,便能迭代下去。其中 Q Q Q表示系统噪声协方差矩阵。

现将卡尔曼滤波推导思路二总结如下:

(13) { x ^ k − = A x ^ k − 1 + B u k − 1 P k − = A P k − 1 A T + Q \begin{cases} \hat x_k^-=A\hat x_{k-1}+Bu_{k-1}\\ P_k^-=AP_{k-1}A^{T}+Q \end{cases}\tag{13} {x^k=Ax^k1+Buk1Pk=APk1AT+Q(13)

由公式(13)便可计算卡尔曼增益和估计值如下:

(14) { K k = P k − H T ( H P k − H T + R ) − 1 x ^ k = x ^ k − + K k ( z k − H x k − ) \begin{cases} K_k=P_k^{-}H^T(HP_k^{-}H^T+R)^{-1}\\ \hat x_k=\hat x_k^{-}+K_k(z_k-Hx_k^{-}) \end{cases}\tag{14} {Kk=PkHT(HPkHT+R)1x^k=x^k+Kk(zkHxk)(14)

最后计算估计值和真实值之间的误差协方差矩阵为下次递推作准备:

P k = ( I − K k H ) P k − P_k=(I-K_kH)P_k^- Pk=(IKkH)Pk

推导思路一细节参见:https://blog.csdn.net/heyijia0327/article/details/17487467#commentBox


以上便是对卡尔曼滤波公式推导的两种总结。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值