Kalman滤波二

卡尔曼滤波5大公式的推导

首先,我们回顾一下,在上一节中,我们得到了一个“计算结果 X k \pmb{X}_{k} XXXk和“测量结果 Z k \pmb{Z}_k ZZZk
X k = A X k − 1 + B u k − 1 + ω k − 1 Z k = H X k + μ k \begin{aligned} \pmb{X}_{k} &= A\pmb{X}_{k-1} + B\pmb{u}_{k-1} + \pmb{\omega}_{k-1} \\ \pmb{Z}_k &= H\pmb{X}_k+\pmb{\mu}_k \end{aligned} XXXkZZZk=AXXXk1+Buuuk1+ωωωk1=HXXXk+μμμk

然而,在我们实际过程中,由于过程噪声和测量噪声的不可辨识性(我们将世界中无法表示且会对状态变量带来不确定性的影响视作噪声(KF中通常为白噪声),因此我们实际可以得到的部分为:

X k = A X k − 1 + B u k − 1 Z k = H X k \begin{aligned} \pmb{X}_{k} &= A\pmb{X}_{k-1} + B\pmb{u}_{k-1} \\ \pmb{Z}_k &= H\pmb{X}_k \end{aligned} XXXkZZZk=AXXXk1+Buuuk1=HXXXk

我们此时可以将, X ^ k − \hat{\pmb{X}}_{k}^{-} XXX^k称为先验估计值,也就是我们可直接计算得出的值; X ^ k − 1 \hat{\pmb{X}}_{k-1} XXX^k1为上一次我们得到的估计值,也就是我们上一次的后验估计值;而 X k m e a \pmb{X}_{k_{mea}} XXXkmea称为测量值。
即上面的式子可以化为:
X ^ k − = A X ^ k − 1 + B u k − 1 X k m e a = H − 1 Z k \begin{aligned} \hat{\pmb{X}}_{k}^{-} &= A\hat{\pmb{X}}_{k-1} + B\pmb{u}_{k-1} \\ \pmb{X}_{k_{mea}} &= H^{-1}\pmb{Z}_k \end{aligned} XXX^kXXXkmea=AXXX^k1+Buuuk1=H1ZZZk

而我们可以再回顾一下数据融合的观点,如何得到我们更加准确的结果 X ^ k \hat{\pmb{X}}_k XXX^k(也称为后验结果),即:
X ^ k = X ^ k − + G ( X k m e a − X ^ k − ) = X ^ k − + K k ( Z k − H X ^ k − ) \begin{aligned} \hat{\pmb{X}}_k &= \hat{\pmb{X}}^{-}_k + \pmb{G}(\pmb{X}_{k_{mea}} - \hat{\pmb{X}}^{-}_k) \\ &= \hat{\pmb{X}}^{-}_k + \pmb{K}_k(\pmb{Z}_k - H\hat{\pmb{X}}^{-}_k) \end{aligned} XXX^k=XXX^k+GGG(XXXkmeaXXX^k)=XXX^k+KKKk(ZZZkHXXX^k)

这里 G = K k H \pmb{G} = \pmb{K}_kH GGG=KKKkH,而 K k \pmb{K}_k KKKk称为卡尔曼增益

与之前一样,如果 G → 1 \pmb{G}\rightarrow 1 GGG1估计值更加相信测量结果,而若 G → 0 \pmb{G}\rightarrow 0 GGG0,估计值更加相信计算结果!

我们接着明确我们的目标:如何使得我们所估计的结果更加趋近实际的真实值?
其实也就是使得 e k = X k − X ^ k \pmb{e}_k = \pmb{X}_k - \hat{\pmb{X}}_k eeek=XXXkXXX^k的协方差矩阵 P k \pmb{P}_k PPPk的迹( t r ( P k ) tr(\pmb{P}_k) tr(PPPk))最小(联系一下之前我们使得估计值的总体的方差是最小的!)

其实这个与我们的最小二乘法紧密相关!!

在这里,我们假设过程噪声 P ( ω ) ∼ N ( 0 , Q ) P(\pmb{\omega})\sim N(0,\pmb{Q}) P(ωωω)N(0,QQQ)测量噪声 P ( μ ) ∼ N ( 0 , R ) P(\pmb{\mu})\sim N(0,\pmb{R}) P(μμμ)N(0,RRR),并且两者相互独立的! P \pmb{P} PPP R \pmb{R} RRR分别为对应的协方差矩阵。
我们继续化简误差 e k \pmb{e}_k eeek
e k = X k − X ^ k = X k − ( X ^ k − + K k ( Z k − H X ^ k − ) ) = X k − X ^ k − − K k ( H X k + μ k ) + K k H X ^ k − = ( I − K k H ) ( X k − X ^ k − ) − K k μ k = ( I − K k H ) e k − − K k μ k \begin{aligned} \pmb{e}_k &= \pmb{X}_k - \hat{\pmb{X}}_k \\ &= \pmb{X}_k - (\hat{\pmb{X}}^{-}_k + \pmb{K}_k(\pmb{Z}_k - H\hat{\pmb{X}}^{-}_k)) \\ &= \pmb{X}_k - \hat{\pmb{X}}^{-}_k - \pmb{K}_k(H\pmb{X}_k+\pmb{\mu}_k) + \pmb{K}_kH\hat{\pmb{X}}^{-}_k \\ &= (\pmb{I}-\pmb{K}_kH)(\pmb{X}_k - \hat{\pmb{X}}^{-}_k) - \pmb{K}_k\pmb{\mu}_k \\ &= (\pmb{I}-\pmb{K}_kH)\pmb{e}_k^{-} - \pmb{K}_k\pmb{\mu}_k \end{aligned} eeek=XXXkXXX^k=XXXk(XXX^k+KKKk(ZZZkHXXX^k))=XXXkXXX^kKKKk(HXXXk+μμμk)+KKKkHXXX^k=(IIIKKKkH)(XXXkXXX^k)KKKkμμμk=(IIIKKKkH)eeekKKKkμμμk

这里我们称 e k − \pmb{e}_k^{-} eeek先验误差

为了后面我们能够更加流畅的推导,先补充一些小知识点:
假设多变量 ω = [ ω 1 ω 2 ] T \pmb{\omega} = [\omega_1 \quad \omega_2]^T ωωω=[ω1ω2]T,并且 ω 1 \omega_1 ω1 ω 2 \omega_2 ω2之间是相互独立的,那么其协方差矩阵 P ( ω ) = E ( ω ω T ) P(\pmb{\omega})=E(\pmb{\omega}\pmb{\omega}^T) P(ωωω)=E(ωωωωωωT)
证:
E ( ω ω T ) = E ( ω 1 2 ω 1 ω 2 ω 2 ω 1 ω 2 2 ) = ( E ( ω 1 2 ) E ( ω 1 ω 2 ) E ( ω 2 ω 1 ) E ( ω 2 2 ) ) = ( σ 1 2 σ 1 σ 2 σ 2 σ 1 σ 2 2 ) \begin{aligned} E(\pmb{\omega}\pmb{\omega}^T) &= E\begin{pmatrix} {\omega_1^2} & {\omega_1\omega_2} \\ {\omega_2\omega_1} & {\omega_2^2} \end{pmatrix} \\ &= \begin{pmatrix} {E(\omega_1^2)} & {E(\omega_1\omega_2)} \\ {E(\omega_2\omega_1)} & {E(\omega_2^2)} \end{pmatrix} \\ &= \begin{pmatrix} {\sigma_1^2} & {\sigma_1\sigma_2} \\ {\sigma_2\sigma_1} & {\sigma_2^2} \end{pmatrix} \end{aligned} E(ωωωωωωT)=E(ω12ω2ω1ω1ω2ω22)=(E(ω12)E(ω2ω1)E(ω1ω2)E(ω22))=(σ12σ2σ1σ1σ2σ22)

正因为我们之前的假设:“变量都满足无偏的正态分布”,所以我们的 E ( ω 1 ) = 0 , E ( ω 2 ) = 0 E(\omega_1)=0,E(\omega_2)=0 E(ω1)=0,E(ω2)=0,而由于我们的方差:
V a r ( ω 1 ) = E { ( ω 1 − E ( ω 1 ) ) 2 } = E ( ω 1 2 ) − E 2 ( ω 1 ) = E ( ω 1 2 ) \begin{aligned} Var(\omega_1) &=E\{(\omega_1 - E(\omega_1))^2\} \\ &= E(\omega_1^2) - E^2(\omega_1) \\ &= E(\omega_1^2) \end{aligned} Var(ω1)=E{(ω1E(ω1))2}=E(ω12)E2(ω1)=E(ω12)

两个变量之间的协方差也是这样的:
V a r ( ω 1 , ω 2 ) = E { ( ω 1 − E ( ω 1 ) ( ω 2 − E ( ω 2 ) } = E ( ω 1 ω 2 ) − E ( ω 1 ) E ( ω 2 ) = E ( ω 1 ω 2 ) \begin{aligned} Var(\omega_1,\omega_2) &= E\{(\omega_1 - E(\omega_1)(\omega_2 - E(\omega_2)\} \\ &= E(\omega_1\omega_2)-E(\omega_1)E(\omega_2) \\ &= E(\omega_1\omega_2) \end{aligned} Var(ω1,ω2)=E{(ω1E(ω1)(ω2E(ω2)}=E(ω1ω2)E(ω1)E(ω2)=E(ω1ω2)

协方差矩阵非对角元素,反应的是不同元素之间的关系。

下面我们就正式的进行推导了:
P k = P ( e k ) = E ( e k e k T ) = E ( ( ( I − K k H ) e k − − K k μ k ) ( ( I − K k H ) e k − − K k μ k ) T ) = E ( ( I − K k H ) e k − e k − T ( I − K k H ) T − ( I − K k H ) ) e k − μ k T K k T − K k μ k e k − T ( I − K k H ) T + K k μ k μ k T K k T = ( I − K k H ) E ( e k − e k − T ) ( I − K k H ) T + K k E ( μ k μ k T ) K k T = ( I − K k H ) P k − ( I − K k H ) T + K k R K k T = ( I − K k H ) P k − ( I − H T K k 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 K k T + K k R K k T \begin{aligned} \pmb{P}_k &= P(\pmb{e}_k) \\ &= E(\pmb{e}_k\pmb{e}_k^T) \\ &= E(((\pmb{I}-\pmb{K}_kH)\pmb{e}_k^{-} - \pmb{K}_k\pmb{\mu}_k) ((\pmb{I}-\pmb{K}_kH)\pmb{e}_k^{-} - \pmb{K}_k\pmb{\mu}_k)^T) \\ &= E((\pmb{I}-\pmb{K}_kH)\pmb{e}_k^{-}\pmb{e}_k^{-T}(\pmb{I}-\pmb{K}_kH)^T - (\pmb{I}-\pmb{K}_kH))\pmb{e}_k^{-}\pmb{\mu}_k^T\pmb{K}_k^T - \pmb{K}_k\pmb{\mu}_k\pmb{e}_k^{-T}(\pmb{I}-\pmb{K}_kH)^T + \pmb{K}_k\pmb{\mu}_k\pmb{\mu}_k^T\pmb{K}_k^T \\ &= (\pmb{I}-\pmb{K}_kH)E(\pmb{e}_k^{-}\pmb{e}_k^{-T})(\pmb{I}-\pmb{K}_kH)^T + \pmb{K}_kE(\pmb{\mu}_k\pmb{\mu}_k^T)\pmb{K}_k^T \\ &= (\pmb{I}-\pmb{K}_kH)\pmb{P}_k^{-}(\pmb{I}-\pmb{K}_kH)^T + \pmb{K}_k\pmb{R}\pmb{K}_k^T \\ &= (\pmb{I}-\pmb{K}_kH)\pmb{P}_k^{-}(\pmb{I}-H^T\pmb{K}_k^T) + \pmb{K}_k\pmb{R}\pmb{K}_k^T \\ &= \pmb{P}_k^{-} -\pmb{K}_kH\pmb{P}_k^{-} - \pmb{P}_k^{-}H^T\pmb{K}_k^T + \pmb{K}_kH\pmb{P}_k^{-}H^T\pmb{K}_k^T + \pmb{K}_k\pmb{R}\pmb{K}_k^T \\ \end{aligned} PPPk=P(eeek)=E(eeekeeekT)=E(((IIIKKKkH)eeekKKKkμμμk)((IIIKKKkH)eeekKKKkμμμk)T)=E((IIIKKKkH)eeekeeekT(IIIKKKkH)T(IIIKKKkH))eeekμμμkTKKKkTKKKkμμμkeeekT(IIIKKKkH)T+KKKkμμμkμμμkTKKKkT=(IIIKKKkH)E(eeekeeekT)(IIIKKKkH)T+KKKkE(μμμkμμμkT)KKKkT=(IIIKKKkH)PPPk(IIIKKKkH)T+KKKkRRRKKKkT=(IIIKKKkH)PPPk(IIIHTKKKkT)+KKKkRRRKKKkT=PPPkKKKkHPPPkPPPkHTKKKkT+KKKkHPPPkHTKKKkT+KKKkRRRKKKkT

注意,这里我们有两个关键点需要注意一下哦,变量之间假设是相互独立的,并且我们的噪声是服从无偏的正态分布的。
即: E ( e k − μ k T ) = E ( e k − ) E ( μ k T ) = 0 = E ( μ k e k − T ) E(\pmb{e}_k^{-}\pmb{\mu}_k^T) = E(\pmb{e}_k^{-})E(\pmb{\mu}_k^T) = 0 = E(\pmb{\mu}_k\pmb{e}_k^{-T}) E(eeekμμμkT)=E(eeek)E(μμμkT)=0=E(μμμkeeekT)

下面,再一次明确我们的目的:如何找到最优的卡尔曼增益使得我们的 t r ( P k ) tr(\pmb{P}_k) tr(PPPk)最小?(也就是使得我们的估计值更加接近真实值)
我们可以直接利用求极值的方法,来获得最小的误差(因为误差可以无限大,也就是所误差是没有最大值的,因此我们仅可能得到极小值)
t r ( P ) = t r ( P k − − K k H P k − − P k − H T K k T + K k H P k − H T K k T + K k R K k T ) = t r ( P k − ) − 2 t r ( K k H P k − ) + t r ( K k H P k − H T K k T ) + t r ( K k R K k T ) ) \begin{aligned} tr(\pmb{P}) &= tr(\pmb{P}_k^{-} -\pmb{K}_kH\pmb{P}_k^{-} - \pmb{P}_k^{-}H^T\pmb{K}_k^T + \pmb{K}_kH\pmb{P}_k^{-}H^T\pmb{K}_k^T + \pmb{K}_k\pmb{R}\pmb{K}_k^T) \\ &= tr(\pmb{P}_k^{-}) - 2tr(\pmb{K}_kH\pmb{P}_k^{-}) + tr(\pmb{K}_kH\pmb{P}_k^{-}H^T\pmb{K}_k^T) + tr(\pmb{K}_k\pmb{R}\pmb{K}_k^T)) \\ \end{aligned} tr(PPP)=tr(PPPkKKKkHPPPkPPPkHTKKKkT+KKKkHPPPkHTKKKkT+KKKkRRRKKKkT)=tr(PPPk)2tr(KKKkHPPPk)+tr(KKKkHPPPkHTKKKkT)+tr(KKKkRRRKKKkT))

  • 要明确我们协方差矩阵是一个对称阵,而且要知道转置并不会改变我们所求的迹
  • 引入几个矩阵分析的公式:
    d t r ( A B ) d A = B T d t r ( A B A T ) d A = 2 A B \begin{aligned} \frac{dtr(AB)}{dA} &= B^T \\ \frac{dtr(ABA^T)}{dA} &= 2AB \end{aligned} dAdtr(AB)dAdtr(ABAT)=BT=2AB

所以我们可以令 d t r ( P k ) d K k = 0 \frac{dtr(\pmb{P}_k)}{d\pmb{K}_k} = 0 dKKKkdtr(PPPk)=0,求得我们得到最小值的时候, K k \pmb{K}_k KKKk的取值啦!
d t r ( P k ) d K k = t r ( P k − ) − 2 t r ( K k H P k − ) + t r ( K k H P k − H T K k T ) + t r ( K k R K k T ) ) d K k = 0 − 2 ( H P k − ) T + 2 K k H P k − H T + 2 K k R = 0 \begin{aligned} \frac{dtr(\pmb{P}_k)}{d\pmb{K}_k} &= \frac{tr(\pmb{P}_k^{-}) - 2tr(\pmb{K}_kH\pmb{P}_k^{-}) + tr(\pmb{K}_kH\pmb{P}_k^{-}H^T\pmb{K}_k^T) + tr(\pmb{K}_k\pmb{R}\pmb{K}_k^T))}{d\pmb{K}_k} \\ &= 0 - 2(H\pmb{P}_k^{-})^T + 2\pmb{K}_kH\pmb{P}_k^{-}H^T + 2\pmb{K}_k\pmb{R} = 0 \end{aligned} dKKKkdtr(PPPk)=dKKKktr(PPPk)2tr(KKKkHPPPk)+tr(KKKkHPPPkHTKKKkT)+tr(KKKkRRRKKKkT))=02(HPPPk)T+2KKKkHPPPkHT+2KKKkRRR=0
因此,我们可以得到卡尔曼增益 K k \pmb{K}_k KKKk
K k = P k − H T ( H P k − H T + R ) − 1 \pmb{K}_k = \pmb{P}_k^{-}H^T(H\pmb{P}_k^{-}H^T + \pmb{R})^{-1} KKKk=PPPkHT(HPPPkHT+RRR)1

至此,我们现在已经得到了卡尔曼滤波的:

  • 先验估计 X ^ k − = A X ^ k − 1 + B u k − 1 \hat{\pmb{X}}_{k}^{-} = A\hat{\pmb{X}}_{k-1} + B\pmb{u}_{k-1} XXX^k=AXXX^k1+Buuuk1
  • 后验估计 X ^ k = X ^ k − + K k ( Z k − H X ^ k − ) \hat{\pmb{X}}_k = \hat{\pmb{X}}^{-}_k + \pmb{K}_k(\pmb{Z}_k - H\hat{\pmb{X}}^{-}_k) XXX^k=XXX^k+KKKk(ZZZkHXXX^k)
  • 卡尔曼增益 K k = P k − H T ( H P k − H T + R ) − 1 \pmb{K}_k = \pmb{P}_k^{-}H^T(H\pmb{P}_k^{-}H^T + \pmb{R})^{-1} KKKk=PPPkHT(HPPPkHT+RRR)1

然而我们仔细想想,上述的公式中还有一个参数 P k − \pmb{P}_k^{-} PPPk未知的,因而下面我们接着求这个参数:
(有一个更加简单的理解方式:不过感觉有点牵强, x ^ k − 1 → P k − 1 \hat{\pmb{x}}_{k-1} \rightarrow \pmb{P}_{k-1} xxx^k1PPPk1,而 x ^ k − → P k − \hat{\pmb{x}}_{k}^{-} \rightarrow \pmb{P}_{k} ^{-} xxx^kPPPk,并且因为 X ^ k − = A X ^ k − 1 \hat{\pmb{X}}_{k}^{-} = A\hat{\pmb{X}}_{k-1} XXX^k=AXXX^k1,就可以根据协方差矩阵的性质,我们就可以得到 P k − = A P k − 1 A T \pmb{P}_k^{-} = A\pmb{P}_{k-1}A^T PPPk=APPPk1AT,而由于有外界的干扰,所以我们需要在加上 Q \pmb{Q} QQQ,即: P k − = A P k − 1 A T + Q \pmb{P}_k^{-} = A\pmb{P}_{k-1}A^T + \pmb{Q} PPPk=APPPk1AT+QQQ
P k − = E ( e k − e k − T ) = E ( ( A e k − 1 + ω k − 1 ) ( A e k − 1 + ω k − 1 ) T ) = E ( ( A e k − 1 + ω k − 1 ) ( e k − 1 T A T + ω k − 1 T ) ) = A P k − 1 A T + Q \begin{aligned} \pmb{P}_k^{-} &= E(\pmb{e}_k^{-}\pmb{e}_k^{-T}) \\ &= E((A\pmb{e}_{k-1}+\pmb{\omega}_{k-1})(A\pmb{e}_{k-1}+\pmb{\omega}_{k-1})^T) \\ &= E((A\pmb{e}_{k-1}+\pmb{\omega}_{k-1})(\pmb{e}_{k-1}^TA^T+\pmb{\omega}_{k-1}^T)) \\ &= A\pmb{P}_{k-1}A^T+\pmb{Q} \end{aligned} PPPk=E(eeekeeekT)=E((Aeeek1+ωωωk1)(Aeeek1+ωωωk1)T)=E((Aeeek1+ωωωk1)(eeek1TAT+ωωωk1T))=APPPk1AT+QQQ

在这里尽管我们给出了参数 P k − \pmb{P}_{k}^{-} PPPk,但是我们还引入了参数了 P k − 1 \pmb{P}_{k-1} PPPk1
为此我们还需要来得到我们的参数 P k − 1 \pmb{P}_{k-1} PPPk1的更新值:
P k = P k − − K k H P k − − P k − H T K k T + K k H P k − H T K k 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 = P k − − K k H P k − − P k − H T K k T + P k − H T K k T = P k − − K k H P k − = ( I − K k H ) P k − \begin{aligned} \pmb{P}_k &= \pmb{P}_k^{-} -\pmb{K}_kH\pmb{P}_k^{-} - \pmb{P}_k^{-}H^T\pmb{K}_k^T + \pmb{K}_kH\pmb{P}_k^{-}H^T\pmb{K}_k^T + \pmb{K}_k\pmb{R}\pmb{K}_k^T \\ &= \pmb{P}_k^{-} -\pmb{K}_kH\pmb{P}_k^{-} - \pmb{P}_k^{-}H^T\pmb{K}_k^T + \pmb{K}_k(H\pmb{P}_k^{-}H^T + \pmb{R})\pmb{K}_k^T \\ &= \pmb{P}_k^{-} -\pmb{K}_kH\pmb{P}_k^{-} - \pmb{P}_k^{-}H^T\pmb{K}_k^T + \pmb{P}_k^{-}H^T\pmb{K}_k^T \\ &= \pmb{P}_k^{-} -\pmb{K}_kH\pmb{P}_k^{-} \\ &= (\pmb{I} - \pmb{K}_kH)\pmb{P}_k^{-} \end{aligned} PPPk=PPPkKKKkHPPPkPPPkHTKKKkT+KKKkHPPPkHTKKKkT+KKKkRRRKKKkT=PPPkKKKkHPPPkPPPkHTKKKkT+KKKk(HPPPkHT+RRR)KKKkT=PPPkKKKkHPPPkPPPkHTKKKkT+PPPkHTKKKkT=PPPkKKKkHPPPk=(IIIKKKkH)PPPk
至此,我们完成了卡尔曼滤波器的所有的推导,下面我们来进行总结:

先验估计 校正 备注
X ^ k − = A X ^ k − 1 + B u k − 1 \hat{\pmb{X}}_{k}^{-} = A\hat{\pmb{X}}_{k-1} + B\pmb{u}_{k-1} XXX^k=AXXX^k1+Buuuk1 K k = P k − H T ( H P k − H T + R ) − 1 \pmb{K}_k = \pmb{P}_k^{-}H^T(H\pmb{P}_k^{-}H^T + \pmb{R})^{-1} KKKk=PPPkHT(HPPPkHT+RRR)1 需要初始值 X ^ 0 \hat{\pmb{X}}_0 XXX^0
P k − = A P k − 1 A T + Q \pmb{P}_k^{-} = A\pmb{P}_{k-1}A^T + Q PPPk=APPPk1AT+Q X ^ k = X ^ k − + K k ( Z k − H X ^ k − ) \hat{\pmb{X}}_k = \hat{\pmb{X}}^{-}_k + \pmb{K}_k(\pmb{Z}_k - H\hat{\pmb{X}}^{-}_k) XXX^k=XXX^k+KKKk(ZZZkHXXX^k) 需要初始值 P 0 \pmb{P}_0 PPP0
P k = ( I − K k H ) P k − \pmb{P}_k = (\pmb{I} - \pmb{K}_kH)\pmb{P}_k^{-} PPPk=(IIIKKKkH)PPPk

工作流程如下:
Kalman滤波二_第1张图片

参考资料

卡尔曼滤波算法
细致入微的Kalman滤波算法
细致入微的Kalman滤波算法,翻译

补充资料

卡尔曼滤波算法与最小二乘

你可能感兴趣的:(Kalman滤波,算法)