卡尔曼滤波公式及其详细推导(不涉及矩阵求导)

2023-05-16

卡尔曼滤波公式及推导

1 前言

卡尔曼滤波 (Kalman Filter) 是一种关于线性离散系统滤波问题的递推算法。其使用递推的形式对系统的状态进行估计,以测量中产生的误差为依据对估计值进行校正,使被估计的状态不断接近真实值。

卡尔曼滤波的基本思想:根据系统的状态空间方程,利用前一时刻系统状态的估计值和当前时刻系统的观测值对状态变量进行最优估计,求出当前时刻系统状态的估计值。

假设线性离散系统的状态空间方程如下:

{ X ( k + 1 ) = A X ( k ) + v ( k ) Y ( k ) = H X ( k ) + w ( k ) (1.1) \left\{ \begin{aligned} X(k+1) &= AX(k) + v(k) \\ Y(k) &= HX(k) + w(k) \tag{1.1} \end{aligned} \right. {X(k+1)Y(k)=AX(k)+v(k)=HX(k)+w(k)(1.1)

式中, A A A 为状态矩阵, H H H 为输出矩阵。 X ( k ) X(k) X(k) k k k 时刻的系统状态, Y ( k ) Y(k) Y(k) k k k 时刻的系统输出,即系统的观测值。 v ( k ) v(k) v(k) 是过程噪声,服从均值为 0 0 0 ,方差为 Q k Q_k Qk 的高斯分布; w ( k ) w(k) w(k) 是传感器测量噪声,服从均值为 0 0 0 ,方差为 R k R_k Rk 的高斯分布。 v ( k ) v(k) v(k) w ( k ) w(k) w(k) 相互独立。 Q k Q_k Qk R k R_k Rk 都是协方差矩阵、对称半正定矩阵。 Q k = E { v ( k ) v T ( k ) } Q_k = E\left\{v(k)v^T(k)\right\} Qk=E{v(k)vT(k)} R k = E { w ( k ) w T ( k ) } R_k = E\left\{w(k)w^T(k)\right\} Rk=E{w(k)wT(k)}

2 卡尔曼滤波公式

2.1 预测

根据 k k k 时刻的最优状态估计预测 k + 1 k+1 k+1 时刻的状态和误差的协方差矩阵。

X ( k + 1 ∣ k ) = A X ( k ∣ k ) (2.1) X(k+1|k) = AX(k|k) \tag{2.1} X(k+1k)=AX(kk)(2.1)
P ( k + 1 ∣ k ) = A P ( k ∣ k ) A T + Q k (2.2) P(k+1|k) = AP(k|k)A^T + Q_k \tag{2.2} P(k+1k)=AP(kk)AT+Qk(2.2)

( 2.1 ) (2.1) (2.1) 是状态预测方程。其中, X ( k ∣ k ) X(k|k) X(kk) k k k 时刻系统状态的最优估计, X ( k + 1 ∣ k ) X(k+1|k) X(k+1k) 是根据 k k k 时刻的系统状态最优估计 X ( k ∣ k ) X(k|k) X(kk) k + 1 k+1 k+1 时刻系统状态的预测。

( 2.2 ) (2.2) (2.2) 是误差的协方差矩阵预测方程。其中, P ( k ∣ k ) P(k|k) P(kk) k k k 时刻系统状态的最优估计 X ( k ∣ k ) X(k|k) X(kk) 对应的误差协方差矩阵, P ( k + 1 ∣ k ) P(k+1|k) P(k+1k) 是系统状态的预测 X ( k + 1 ∣ k ) X(k+1|k) X(k+1k) 对应的误差协方差矩阵。 Q k Q_k Qk k k k 时刻系统过程噪声的协方差矩阵。

2.2 校正

根据系统 k + 1 k+1 k+1 时刻实际的观测值(系统输出)对上一步得到的 k + 1 k+1 k+1 时刻系统状态的预测进行校正,得到在 k + 1 k+1 k+1 时刻系统状态的最优估计。

X ( k + 1 ∣ k + 1 ) = X ( k + 1 ∣ k ) + K ( k + 1 ) [ Y ( k + 1 ) − H X ( k + 1 ∣ k ) ] (2.3) X(k+1|k+1) = X(k+1|k) + K(k+1) \left[Y(k+1) - HX(k+1|k)\right] \tag{2.3} X(k+1k+1)=X(k+1k)+K(k+1)[Y(k+1)HX(k+1k)](2.3)

其中, X ( k + 1 ∣ k + 1 ) X(k+1|k+1) X(k+1k+1) k + 1 k+1 k+1 时刻系统状态的最优估计; K ( k + 1 ) K(k+1) K(k+1) 是卡尔曼增益矩阵,其计算方法如下:

K ( k + 1 ) = P ( k + 1 ∣ k ) H T [ H P ( k + 1 ∣ k ) H T + R k + 1 ] − 1 (2.4) K(k+1) = P(k+1|k)H^T\left[HP(k+1|k)H^T + R_{k+1}\right]^{-1} \tag{2.4} K(k+1)=P(k+1k)HT[HP(k+1k)HT+Rk+1]1(2.4)

其中, R k + 1 R_{k+1} Rk+1 k + 1 k+1 k+1 时刻测量噪声的协方差矩阵。

为了能使递推算法继续进行,还需要更新 k + 1 k+1 k+1 时刻的误差协方差矩阵:

P ( k + 1 ∣ k + 1 ) = [ I − K ( k + 1 ) H ] P ( k + 1 ∣ k ) (2.5) P(k+1|k+1) = \left[I - K(k+1)H\right]P(k+1|k) \tag{2.5} P(k+1k+1)=[IK(k+1)H]P(k+1k)(2.5)

其中, I I I 为单位矩阵, P ( k + 1 ∣ k + 1 ) P(k+1|k+1) P(k+1k+1) k + 1 k+1 k+1 时刻系统状态的最优估计 X ( k + 1 ∣ k + 1 ) X(k+1|k+1) X(k+1k+1) 对应的误差协方差矩阵。

以上五个公式在推导过程中的对应关系:

  • ( 2.1 ) → ( 3.1 ) (2.1) \rightarrow (3.1) (2.1)(3.1)
  • ( 2.2 ) → ( 3.14 ) (2.2) \rightarrow (3.14) (2.2)(3.14)
  • ( 2.3 ) → ( 3.4 ) (2.3) \rightarrow (3.4) (2.3)(3.4)
  • ( 2.4 ) → ( 3.19 ) (2.4) \rightarrow (3.19) (2.4)(3.19)
  • ( 2.5 ) → ( 3.20 ) (2.5) \rightarrow (3.20) (2.5)(3.20)

3 推导过程

假设在系统运行的过程中,已经得到了 k k k 时刻系统状态的最优估计 X ( k ∣ k ) X(k|k) X(kk) 。那么如何得到 k + 1 k+1 k+1 时刻系统状态的最优估计呢?

根据系统的状态空间方程,式 ( 1.1 ) (1.1) (1.1) ,我们可以使用当前状态的最优估计 X ( k ∣ k ) X(k|k) X(kk) 预测下一时刻的系统状态 X ( k + 1 ∣ k ) X(k+1|k) X(k+1k) ,即:

X ( k + 1 ∣ k ) = A X ( k ∣ k ) (3.1) X(k+1|k) = AX(k|k) \tag{3.1} X(k+1k)=AX(kk)(3.1)

同时,也可以预测下一时刻的测量值,即系统输出:

Y ( k + 1 ∣ k ) = H X ( k + 1 ∣ k ) (3.2) Y(k+1|k) = HX(k+1|k) \tag{3.2} Y(k+1k)=HX(k+1k)(3.2)

当下一时刻到来时,我们可以得到实际的测量值 Y ( k + 1 ) Y(k+1) Y(k+1) 。显然,实际的测量值与预测的测量值之间存在误差:

Y ( k + 1 ) − Y ( k + 1 ∣ k ) = Y ( k + 1 ) − H X ( k + 1 ∣ k ) (3.3) Y(k+1) - Y(k+1|k) = Y(k+1) - HX(k+1|k) \tag{3.3} Y(k+1)Y(k+1k)=Y(k+1)HX(k+1k)(3.3)

根据 1 前言 中卡尔曼滤波的基本思想,我们要用式 ( 3.3 ) (3.3) (3.3) 表示的误差对系统状态的预测 X ( k + 1 ∣ k ) X(k+1|k) X(k+1k) 进行校正,从而得到系统状态的最优估计 X ( k + 1 ∣ k + 1 ) X(k+1|k+1) X(k+1k+1) ,即:

X ( k + 1 ∣ k + 1 ) = X ( k + 1 ∣ k ) + K ( k + 1 ) [ Y ( k + 1 ) − Y ( k + 1 ∣ k ) ] = X ( k + 1 ∣ k ) + K ( k + 1 ) [ Y ( k + 1 ) − H X ( k + 1 ∣ k ) ] (3.4) \begin{aligned} X(k+1|k+1) &= X(k+1|k) + K(k+1)\left[Y(k+1) - Y(k+1|k)\right] \\ &= X(k+1|k) + K(k+1)\left[Y(k+1) - HX(k+1|k)\right] \tag{3.4} \end{aligned} X(k+1k+1)=X(k+1k)+K(k+1)[Y(k+1)Y(k+1k)]=X(k+1k)+K(k+1)[Y(k+1)HX(k+1k)](3.4)

其中, K ( k + 1 ) K(k+1) K(k+1) 是待求的卡尔曼增益矩阵。

K ( k + 1 ) K(k+1) K(k+1) 的取值应该满足最优估计误差的协方差矩阵 P ( k + 1 ∣ k + 1 ) P(k+1|k+1) P(k+1k+1) 最小。

下面我们来求卡尔曼增益矩阵 K ( k + 1 ) K(k+1) K(k+1)

k + 1 k+1 k+1 时刻的系统状态真实值 X ( k + 1 ) X(k+1) X(k+1) 与系统状态的最优估计 X ( k + 1 ∣ k + 1 ) X(k+1|k+1) X(k+1k+1) 之间的误差为 e ( k + 1 ∣ k + 1 ) e(k+1|k+1) e(k+1k+1)
k + 1 k+1 k+1 时刻的系统状态真实值 X ( k + 1 ) X(k+1) X(k+1) 与系统状态的预测值 X ( k + 1 ∣ k ) X(k+1|k) X(k+1k) 之间的误差为 e ( k + 1 ∣ k ) e(k+1|k) e(k+1k)

有:

e ( k + 1 ∣ k + 1 ) = X ( k + 1 ) − X ( k + 1 ∣ k + 1 ) (3.5) e(k+1|k+1) = X(k+1) - X(k+1|k+1) \tag{3.5} e(k+1k+1)=X(k+1)X(k+1k+1)(3.5)

e ( k + 1 ∣ k ) = X ( k + 1 ) − X ( k + 1 ∣ k ) (3.6) e(k+1|k) = X(k+1) - X(k+1|k) \tag{3.6} e(k+1k)=X(k+1)X(k+1k)(3.6)

将状态空间方程 ( 1.1 ) (1.1) (1.1) 和式 ( 3.4 ) (3.4) (3.4)代入式 ( 3.5 ) (3.5) (3.5) ,得:

e ( k + 1 ∣ k + 1 ) = X ( k + 1 ) − X ( k + 1 ∣ k + 1 ) = A X ( k ) + v ( k ) − X ( k + 1 ∣ k ) − K ( k + 1 ) [ Y ( k + 1 ) − H X ( k + 1 ∣ k ) ] = A X ( k ) + v ( k ) − A X ( k ∣ k ) − K ( k + 1 ) [ H A X ( k ) + H v ( k ) + w ( k + 1 ) − H A X ( k ∣ k ) ] = A [ X ( k ) − X ( k ∣ k ) ] − K ( k + 1 ) H A [ X ( k ) − X ( k ∣ k ) ] + v ( k ) − K ( k + 1 ) H v ( k ) − K ( k + 1 ) w ( k + 1 ) = [ I − K ( k + 1 ) H ] A [ X ( k ) − X ( k ∣ k ) ] + [ I − K ( k + 1 ) H ] v ( k ) − K ( k + 1 ) w ( k + 1 ) = [ I − K ( k + 1 ) H ] A e ( k ∣ k ) + [ I − K ( k + 1 ) H ] v ( k ) − K ( k + 1 ) w ( k + 1 ) (3.7) \begin{aligned} e(k+1|k+1) =& X(k+1) - X(k+1|k+1) \\ =& AX(k) + v(k) - X(k+1|k) - K(k+1)\left[Y(k+1) - HX(k+1|k)\right] \\ =& AX(k) + v(k) - AX(k|k) \\ &- K(k+1)\left[HAX(k) + Hv(k) + w(k+1) - HAX(k|k)\right] \\ =& A\left[X(k) - X(k|k)\right] - K(k+1)HA\left[X(k) - X(k|k)\right] + v(k) \\ &- K(k+1)Hv(k) - K(k+1)w(k+1) \\ =& \left[I - K(k+1)H\right]A\left[X(k) - X(k|k)\right] + \left[I - K(k+1)H\right]v(k) - K(k+1)w(k+1) \\ =& \left[I - K(k+1)H\right]Ae(k|k) + \left[I - K(k+1)H\right]v(k) - K(k+1)w(k+1) \tag{3.7} \end{aligned} e(k+1k+1)======X(k+1)X(k+1k+1)AX(k)+v(k)X(k+1k)K(k+1)[Y(k+1)HX(k+1k)]AX(k)+v(k)AX(kk)K(k+1)[HAX(k)+Hv(k)+w(k+1)HAX(kk)]A[X(k)X(kk)]K(k+1)HA[X(k)X(kk)]+v(k)K(k+1)Hv(k)K(k+1)w(k+1)[IK(k+1)H]A[X(k)X(kk)]+[IK(k+1)H]v(k)K(k+1)w(k+1)[IK(k+1)H]Ae(kk)+[IK(k+1)H]v(k)K(k+1)w(k+1)(3.7)

将状态空间方程 ( 1.1 ) (1.1) (1.1) 和式 ( 3.1 ) (3.1) (3.1) 代入式 ( 3.6 ) (3.6) (3.6) ,得:

e ( k + 1 ∣ k ) = X ( k + 1 ) − X ( k + 1 ∣ k ) = A X ( k ) + v ( k ) − A X ( k ∣ k ) = A [ X ( k ) − X ( k ∣ k ) ] + v ( k ) = A e ( k ∣ k ) + v ( k ) (3.8) \begin{aligned} e(k+1|k) &= X(k+1) - X(k+1|k) \\ &= AX(k) + v(k) - AX(k|k) \\ &= A\left[X(k)- X(k|k)\right] + v(k) \\ &= Ae(k|k) + v(k) \tag{3.8} \end{aligned} e(k+1k)=X(k+1)X(k+1k)=AX(k)+v(k)AX(kk)=A[X(k)X(kk)]+v(k)=Ae(kk)+v(k)(3.8)

设:
系统过程噪声 v ( k ) v(k) v(k) 的协方差矩阵
Q k = E { v ( k ) v T ( k ) } (3.9) Q_k = E\left\{v(k)v^T(k)\right\} \tag{3.9} Qk=E{v(k)vT(k)}(3.9)
测量噪声 w ( k ) w(k) w(k) 的协方差矩阵
R k = E { w ( k ) w T ( k ) } (3.10) R_k = E\left\{w(k)w^T(k)\right\} \tag{3.10} Rk=E{w(k)wT(k)}(3.10)

因为卡尔曼滤波算法假设:系统状态最优估计误差 e ( k ∣ k ) e(k|k) e(kk) 、系统过程噪声 v ( k ) v(k) v(k) 、测量噪声 w ( k + 1 ) w(k+1) w(k+1) 两两不相关,即协方差矩阵为 0 0 0 ,有:

E { e ( k ∣ k ) v T ( k ) } = 0 E\left\{e(k|k)v^T(k)\right\} = 0 E{e(kk)vT(k)}=0
E { e ( k ∣ k ) w T ( k + 1 ) } = 0 E\left\{e(k|k)w^T(k+1)\right\} = 0 E{e(kk)wT(k+1)}=0
E { v ( k ) w T ( k + 1 ) } = 0 E\left\{v(k)w^T(k+1)\right\} = 0 E{v(k)wT(k+1)}=0

设最优估计误差的协方差矩阵:

P ( k + 1 ∣ k + 1 ) = E { e ( k + 1 ∣ k + 1 ) e T ( k + 1 ∣ k + 1 ) } (3.11) P(k+1|k+1) = E\left\{e(k+1|k+1)e^T(k+1|k+1)\right\} \tag{3.11} P(k+1k+1)=E{e(k+1k+1)eT(k+1k+1)}(3.11)

将式 ( 3.7 ) (3.7) (3.7) 、式 ( 3.9 ) (3.9) (3.9) 、式 ( 3.10 ) (3.10) (3.10) 代入式 ( 3.11 ) (3.11) (3.11) ,所有交叉项中期望部分都为 0 0 0 ,整理得:

P ( k + 1 ∣ k + 1 ) = E { e ( k + 1 ∣ k + 1 ) e T ( k + 1 ∣ k + 1 ) } = [ I − K ( k + 1 ) H ] A E { e ( k ∣ k ) e T ( k ∣ k ) } A T [ I − K ( k + 1 ) H ] T + [ I − K ( k + 1 ) H ] E { v ( k ) v T ( k ) } [ I − K ( k + 1 ) H ] T + K ( k + 1 ) E { w ( k + 1 ) w T ( k + 1 ) } K T ( k + 1 ) = [ I − K ( k + 1 ) H ] A P ( k ∣ k ) A T [ I − K ( k + 1 ) H ] T + [ I − K ( k + 1 ) H ] Q k [ I − K ( k + 1 ) H ] T + K ( k + 1 ) R k + 1 K T ( k + 1 ) = [ I − K ( k + 1 ) H ] [ A P ( k ∣ k ) A T + Q k ] [ I − K ( k + 1 ) H ] T + K ( k + 1 ) R k + 1 K T ( k + 1 ) (3.12) \begin{aligned} P(k+1|k+1) =& E\left\{e(k+1|k+1)e^T(k+1|k+1)\right\} \\ =& \left[I - K(k+1)H\right]AE\left\{e(k|k)e^T(k|k)\right\}A^T\left[I - K(k+1)H\right]^T \\ &+ \left[I - K(k+1)H\right]E\left\{v(k)v^T(k)\right\}\left[I - K(k+1)H\right]^T \\ &+ K(k+1)E\left\{w(k+1)w^T(k+1)\right\}K^T(k+1) \\ =& \left[I - K(k+1)H\right]AP(k|k)A^T\left[I - K(k+1)H\right]^T \\ &+ \left[I - K(k+1)H\right]Q_k\left[I - K(k+1)H\right]^T \\ &+ K(k+1)R_{k+1}K^T(k+1) \\ =& \left[I - K(k+1)H\right]\left[AP(k|k)A^T + Q_k\right]\left[I - K(k+1)H\right]^T \\ &+ K(k+1)R_{k+1}K^T(k+1) \tag{3.12} \end{aligned} P(k+1k+1)====E{e(k+1k+1)eT(k+1k+1)}[IK(k+1)H]AE{e(kk)eT(kk)}AT[IK(k+1)H]T+[IK(k+1)H]E{v(k)vT(k)}[IK(k+1)H]T+K(k+1)E{w(k+1)wT(k+1)}KT(k+1)[IK(k+1)H]AP(kk)AT[IK(k+1)H]T+[IK(k+1)H]Qk[IK(k+1)H]T+K(k+1)Rk+1KT(k+1)[IK(k+1)H][AP(kk)AT+Qk][IK(k+1)H]T+K(k+1)Rk+1KT(k+1)(3.12)

设预测误差的协方差矩阵:

P ( k + 1 ∣ k ) = E { e ( k + 1 ∣ k ) e T ( k + 1 ∣ k ) } (3.13) P(k+1|k) = E\left\{e(k+1|k)e^T(k+1|k)\right\} \tag{3.13} P(k+1k)=E{e(k+1k)eT(k+1k)}(3.13)

将式 ( 3.8 ) (3.8) (3.8) 、式 ( 3.9 ) (3.9) (3.9) 、式 ( 3.11 ) (3.11) (3.11) 代入式 ( 3.13 ) (3.13) (3.13) ,所有交叉项中期望部分都为 0 0 0 ,整理得:

P ( k + 1 ∣ k ) = E { e ( k + 1 ∣ k ) e T ( k + 1 ∣ k ) } = A E { e ( k ∣ k ) e T ( k ∣ k ) } A T + E { v ( k ) v T ( k ) } = A P ( k ∣ k ) A T + Q k (3.14) \begin{aligned} P(k+1|k) &= E\left\{e(k+1|k)e^T(k+1|k)\right\} \\ &= AE\left\{e(k|k)e^T(k|k)\right\}A^T + E\left\{v(k)v^T(k)\right\} \\ &= AP(k|k)A^T + Q_k \tag{3.14} \end{aligned} P(k+1k)=E{e(k+1k)eT(k+1k)}=AE{e(kk)eT(kk)}AT+E{v(k)vT(k)}=AP(kk)AT+Qk(3.14)

再将式 ( 3.14 ) (3.14) (3.14) 代入式 ( 3.12 ) (3.12) (3.12) ,得:

P ( k + 1 ∣ k + 1 ) = [ I − K ( k + 1 ) H ] P ( k + 1 ∣ k ) [ I − K ( k + 1 ) H ] T + K ( k + 1 ) R k + 1 K T ( k + 1 ) (3.15) P(k+1|k+1) = \left[I - K(k+1)H\right]P(k+1|k)\left[I - K(k+1)H\right]^T + K(k+1)R_{k+1}K^T(k+1) \tag{3.15} P(k+1k+1)=[IK(k+1)H]P(k+1k)[IK(k+1)H]T+K(k+1)Rk+1KT(k+1)(3.15)

将式 ( 3.15 ) (3.15) (3.15) 展开并整理,得:

P ( k + 1 ∣ k + 1 ) = P ( k + 1 ∣ k ) − K ( k + 1 ) H P ( k + 1 ∣ k ) − P ( k + 1 ∣ k ) H T K T ( k + 1 ) + K ( k + 1 ) H P ( k + 1 ∣ k ) H T K T ( k + 1 ) + K ( k + 1 ) R k + 1 K T ( k + 1 ) = P ( k + 1 ∣ k ) − K ( k + 1 ) H P ( k + 1 ∣ k ) − P ( k + 1 ∣ k ) H T K T ( k + 1 ) + K ( k + 1 ) [ H P ( k + 1 ∣ k ) H T + R k + 1 ] K T ( k + 1 ) (3.16) \begin{aligned} P(k+1|k+1) =& P(k+1|k) - K(k+1)HP(k+1|k) - P(k+1|k)H^TK^T(k+1) \\ &+ K(k+1)HP(k+1|k)H^TK^T(k+1) + K(k+1)R_{k+1}K^T(k+1) \\ =& P(k+1|k) - K(k+1)HP(k+1|k) - P(k+1|k)H^TK^T(k+1) \\ &+ K(k+1)\left[HP(k+1|k)H^T + R_{k+1}\right]K^T(k+1) \tag{3.16} \end{aligned} P(k+1k+1)==P(k+1k)K(k+1)HP(k+1k)P(k+1k)HTKT(k+1)+K(k+1)HP(k+1k)HTKT(k+1)+K(k+1)Rk+1KT(k+1)P(k+1k)K(k+1)HP(k+1k)P(k+1k)HTKT(k+1)+K(k+1)[HP(k+1k)HT+Rk+1]KT(k+1)(3.16)

P ( k + 1 ∣ k + 1 ) P(k+1|k+1) P(k+1k+1) 是关于 K ( k + 1 ) K(k+1) K(k+1) 的二次函数。

因为 H P ( k + 1 ∣ k ) H T + R k + 1 HP(k+1|k)H^T + R_{k+1} HP(k+1k)HT+Rk+1 为对称正定矩阵,所以存在非奇异矩阵 M M M ,使得 M M T = H P ( k + 1 ∣ k ) H T + R k + 1 MM^T = HP(k+1|k)H^T + R_{k+1} MMT=HP(k+1k)HT+Rk+1

于是式 ( 3.16 ) (3.16) (3.16) 可化为:

P ( k + 1 ∣ k + 1 ) = P ( k + 1 ∣ k ) − K ( k + 1 ) H P ( k + 1 ∣ k ) − P ( k + 1 ∣ k ) H T K T ( k + 1 ) + K ( k + 1 ) M M T K T ( k + 1 ) (3.17) \begin{aligned} P(k+1|k+1) =& P(k+1|k) - K(k+1)HP(k+1|k) - P(k+1|k)H^TK^T(k+1) \\ &+ K(k+1)MM^TK^T(k+1) \tag{3.17} \end{aligned} P(k+1k+1)=P(k+1k)K(k+1)HP(k+1k)P(k+1k)HTKT(k+1)+K(k+1)MMTKT(k+1)(3.17)

N = P ( k + 1 ∣ k ) H T M − T N = P(k+1|k)H^TM^{-T} N=P(k+1k)HTMT ,对式 ( 3.17 ) (3.17) (3.17) 配方,有:

P ( k + 1 ∣ k + 1 ) = P ( k + 1 ∣ k ) + [ K ( k + 1 ) M − N ] [ K ( k + 1 ) M − N ] T − N N T (3.18) P(k+1|k+1) = P(k+1|k) + \left[K(k+1)M - N\right]\left[K(k+1)M - N\right]^T - NN^T \tag{3.18} P(k+1k+1)=P(k+1k)+[K(k+1)MN][K(k+1)MN]TNNT(3.18)

因为式 ( 3.18 ) (3.18) (3.18) P ( k + 1 ∣ k ) P(k+1|k) P(k+1k) N N T NN^T NNT 两项均与 K ( k + 1 ) K(k+1) K(k+1) 无关,所以当 K ( k + 1 ) = N M − 1 K(k+1) = NM^{-1} K(k+1)=NM1 时, P ( k + 1 ∣ k + 1 ) P(k+1|k+1) P(k+1k+1) 最小。

即:

K ( k + 1 ) = P ( k + 1 ∣ k ) H T M − T M − 1 = P ( k + 1 ∣ k ) H T ( M M T ) − 1 = P ( k + 1 ∣ k ) H T [ H P ( k + 1 ∣ k ) H T + R k + 1 ] − 1 (3.19) \begin{aligned} K(k+1) &= P(k+1|k)H^TM^{-T}M^{-1} \\ &= P(k+1|k)H^T(MM^T)^{-1} \\ &= P(k+1|k)H^T\left[HP(k+1|k)H^T + R_{k+1}\right]^{-1} \tag{3.19} \end{aligned} K(k+1)=P(k+1k)HTMTM1=P(k+1k)HT(MMT)1=P(k+1k)HT[HP(k+1k)HT+Rk+1]1(3.19)

将式 ( 3.19 ) (3.19) (3.19) 代入式 ( 3.16 ) (3.16) (3.16) ,得:

P ( k + 1 ∣ k + 1 ) = P ( k + 1 ∣ k ) − K ( k + 1 ) H P ( k + 1 ∣ k ) − P ( k + 1 ∣ k ) H T K T ( k + 1 ) + K ( k + 1 ) [ H P ( k + 1 ∣ k ) H T + R k + 1 ] K T ( k + 1 ) = P ( k + 1 ∣ k ) − K ( k + 1 ) H P ( k + 1 ∣ k ) − P ( k + 1 ∣ k ) H T K T ( k + 1 ) + P ( k + 1 ∣ k ) H T K T ( k + 1 ) = [ I − K ( k + 1 ) H ] P ( k + 1 ∣ k ) (3.20) \begin{aligned} P(k+1|k+1) =& P(k+1|k) - K(k+1)HP(k+1|k) - P(k+1|k)H^TK^T(k+1) \\ &+ K(k+1)\left[HP(k+1|k)H^T + R_{k+1}\right]K^T(k+1) \\ =& P(k+1|k) - K(k+1)HP(k+1|k) - P(k+1|k)H^TK^T(k+1) \\ &+ P(k+1|k)H^TK^T(k+1) \\ =& \left[I - K(k+1)H\right]P(k+1|k) \tag{3.20} \end{aligned} P(k+1k+1)===P(k+1k)K(k+1)HP(k+1k)P(k+1k)HTKT(k+1)+K(k+1)[HP(k+1k)HT+Rk+1]KT(k+1)P(k+1k)K(k+1)HP(k+1k)P(k+1k)HTKT(k+1)+P(k+1k)HTKT(k+1)[IK(k+1)H]P(k+1k)(3.20)

回顾公式对应关系:

  • ( 2.1 ) → ( 3.1 ) (2.1) \rightarrow (3.1) (2.1)(3.1)
  • ( 2.2 ) → ( 3.14 ) (2.2) \rightarrow (3.14) (2.2)(3.14)
  • ( 2.3 ) → ( 3.4 ) (2.3) \rightarrow (3.4) (2.3)(3.4)
  • ( 2.4 ) → ( 3.19 ) (2.4) \rightarrow (3.19) (2.4)(3.19)
  • ( 2.5 ) → ( 3.20 ) (2.5) \rightarrow (3.20) (2.5)(3.20)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卡尔曼滤波公式及其详细推导(不涉及矩阵求导) 的相关文章

  • VScode中使用git终端,无法识别命令

    提示 xff1a vscode中使用git终端 xff0c 无法识别输入的命令 xff1a vscode版本 xff1a VSCodeUserSetup x64 1 60 1 exe git版本 xff1a 2 32 0 windows 2
  • Ubuntu18.04 VINS-Mono & Fast-Planner

    Ubuntu18 04 VINS Mono amp Fast Planner 官方GIthub 安装依赖 span class token comment 额外ros包 span span class token function sudo
  • Autoware Docker 安装

    1 Ubuntu20 04 Docker 官方教程安装 Docker 官方教程安装 2 安装 nvidia container runtime Access an NVIDIA GPU 官方参考 span class token comme
  • 卡尔曼滤波公式理解

    卡尔曼滤波 卡尔曼滤波适用于线性高斯系统 xff0c 即系统满足叠加性 齐次性 xff0c 噪声满足正态分布 其使用上一次的最优结果预测当前的值 xff08 先验估计 xff09 xff0c 同时使用观测值修正当前值 xff0c 得到最优结
  • 学习编程,API很重要么?

    学习编程 xff0c API的重要性几何 xff1f 在培训中 xff0c 很多人问到了 xff0c 学习Java xff0c 是否需要学习那些大量API的用法 xff0c 从而成为一个精通Java编程开发的coder xff1f 首先 x
  • App 后台架构设计方案 设计思想与最佳实践

    CSDN 2016博客之星评选结果公布 系列直播 零基础学习微信小程序 xff01 我的2016 主题征文活动 博客的神秘功能 App 后台架构设计方案 设计思想与最佳实践 标签 xff1a App后台架构设计用户验证方案后台架构的演进架构
  • 语音信号处理算法

    EQ DRC AEC NS
  • uIP与LWIP的区别

    uIP是专门为8位和16位控制器设计的一个非常小的TCP IP栈 完全用C编写 xff0c 因此可移植到各种不同的结构和操作系统上 xff0c 一个编译过的栈可以在几KB ROM或几百字节RAM中运行 uIP中还包括一个HTTP服务器作为服
  • C++基础用法—冒号的用法

    C 43 43 基础用法 冒号的用法 一 用法一 xff1a 继承1 1用法 xff1a 用在class或struct后面1 2示例代码 二 用法二 xff1a 赋值1 1用法 xff1a 用在成员函数 构造函数后面1 2示例代码1 2 1
  • 路由器相关开发流程

    路由器相关开发流程 宽带上网已经不是什么新鲜事 情 xff0c 人们对相关的网络器件已经不再陌生 xff0c 比如说常见的路由器 对于一般的网络用户 xff0c 他们能知道怎样使用路由器来上网 玩游戏等就已经感到很满足了 xff0c 通常情
  • 将Ubuntu终端的输出信息保存到log中

    参考website xff1a http www linuxidc com Linux 2011 04 34543 htm 执行以下命令 xff0c 开启保存 xff1a sudo script screen log 之后你在终端输入的相关
  • 《芯片介绍系列》之MT7628芯片详细介绍(MT7628平台处理器)

    有的家庭路由器拆开 xff0c 里面最显眼的芯片型号是 xff1a MT7628KN MT7628系列产品是新一代2T2R 802 11n Wi Fi AP 路由器 系统单芯片 xff08 摘自百度 xff09 更多介绍见此 xff1a M
  • python:函数传参是否会改变函数外参数的值

    参考链接 xff1a https blog csdn net u012614287 article details 57149290 https blog csdn net qq915697213 article details 66972
  • Catkin创建工程

    介绍 catin make编译过程 xff0c cmake指令依据你的CMakeLists txt 文件 生成cmakefiles和makefile文件 make再依据此cmakefiles和makefile文件编译链接生成可执行文件 ca
  • ros中使用serial包实现串口通信

    一 Ubuntu下的串口助手cutecom 1 安装cutecom并打开 xff1a sudo apt get install cutecom sudo cutecom 2 查看电脑链接的串口信息 xff08 名称 xff09 xff1a
  • 构造函数后冒号的作用

    构造函数后面的冒号起分割作用 xff0c 是类给成员变量赋值的方法 xff0c 初始化列表 xff0c 更适用于成员变量的常量const型 struct XXX XXX y 0xc0
  • 字节序(byte order)和位序(bit order)

    字节序 byte order 和位序 bit order 在网络编程中经常会提到网络字节序和主机序 xff0c 也就是说当一个对象由多个字节组成的时候需要注意对象的多个字节在内存中的顺序 以前我也基本只了解过字节序 xff0c 但是有一天当
  • __thread关键字

    thread是GCC内置的线程局部存储设施 xff0c 存取效率可以和全局变量相比 thread变量每一个线程有一份独立实体 xff0c 各个线程的值互不干扰 可以用来修饰那些带有全局性且值可能变 xff0c 但是又不值得用全局变量保护的变
  • SCRUM框架包括3个角色、3个工件、5个活动、5个价值

    转自http www scrumcn com agile scrum knowledge library scrum html SCRUM 是一个用于开发和维持复杂产品的框架 Scrum 是一个用于开发和维持复杂产品的框架 xff0c 是一
  • Hadoop伪分布式安装步骤

    Hadoop伪分布式安装步骤 目录 Hadoop伪分布式安装步骤 一 永久关闭防火墙 二 配置主机名 1 编辑network文件 xff1a vim etc sysconfig network 2 将HOSTNAME属性改为指定的主机名 x

随机推荐

  • MPU6050的一些问题及解决办法

    最近做的项目要用到MPU6050 xff0c 出现了以下这些问题 xff1a 当然 xff0c 也有一些奇怪的事 xff0c 我是在淘宝上买的现成的模块 xff0c 那个ADO无论接地还是高电平 xff0c MPU的地址都是用0xD0 xf
  • 程序员的期望与现实

    来自 xff1a 程序员最幽默 xff08 ID xff1a humor1024 xff09 0 我期望的代码 VS 实际代码的工作方式 1 我认为我的代码 VS 项目经理看到的代码 2 我心里想做的架构 VS 我真正写出来的架构 3 开发
  • PixHawk Bootloader

    在https github com PX4这里下载的Bootloader代码 xff0c 编译TARGET HW PX4 FMU V2这个版本的 xff0c 然后将代码烧录到STM32F4探索者这块开发板上 xff0c 代码能够正常运行 x
  • 解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本不匹配的问题

    解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本 xff08 同时内核存在问题 xff09 不匹配的问题 不要轻易升级显卡驱动版本 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xf
  • NVIDIA Jetson Xavier NX入门(1)——镜像烧写

    NVIDIA Jetson Xavier NX入门 xff08 1 xff09 镜像烧录 1 准备SD卡并且格式化 推荐使用SD Card Formater软件进行SD卡格式化 xff0c SD Card Formater软件下载地址 界面
  • NVIDIA Jetson Xavier NX入门(2)——系统设置;环境搭建

    NVIDIA Jetson Xavier NX入门 xff08 2 xff09 系统设置 环境搭建 1 NVIDIA Jetson Xavier NX连接显示器 键盘 鼠标 xff1b 2 Jetson Xavier NX连接电源后 xff
  • NVIDIA Jetson Xavier NX使用UART进行串口通信

    NVIDIA Jetson Xavier NX使用UART进行串口通信 一 NVIDIA Jetson Xavier NX的40pin接口 NVIDIA Jetson Xavier NX开发板俯视图 xff1a 2 开发板上打印出的UART
  • 远程服务器时Ubuntu报错:qt.qpa.xcb: could not connect to display

    远程服务器时Ubuntu报错 xff1a qt qpa xcb could not connect to display 远程服务器时Ubuntu报错 xff1a qt span class token punctuation span q
  • linux下USB设备编号固定

    linux下USB设备插入时系统自动分配编号 xff0c 多个相同设备时 xff0c 按插入顺序分配编号 以串口为例 xff0c 插入的USBtoSerial顺序不一样时 xff0c 系统分配的设备号是不一样的 但是每个USB接口对设备来说
  • Java进阶书籍推荐

    学习Java xff0c 书籍是必不可少的学习工具之一 xff0c 尤其是对于自学者而言 废话不多说 xff0c 下边就给大家推荐一些Java进阶的好书 第一部分 xff1a Java语言篇 1 Java编程规范 适合对象 xff1a 初级
  • GitHub+Docker Hub自动构建镜像

    一 什么是Dockerfile xff1f Dockerfile是一个包含用于构建镜像的命令的文本文档 可以使用在命令行中调用任何命令 Docker通过读取Dockerfile中的指令自动生成镜像 它们简化了从头到尾的流程并极大的简化了部署
  • 前端工程化 - 剖析npm的包管理机制(完整版)

    导读 现如今 xff0c 前端开发的同学已经离不开 npm 这个包管理工具 xff0c 其优秀的包版本管理机制承载了整个繁荣发展的NodeJS社区 xff0c 理解其内部机制非常有利于加深我们对模块开发的理解 各项前端工程化的配置以加快我们
  • GPRS模块开发初步(软件)

    文章来源 xff1a http blogold chinaunix net u1 56388 showart 1121149 html 1 AT 指令简介 AT 指令集一般指专门用来控制调制解调器的指令集 该指令集最初由美国 Hayes 公
  • 【安装库】matlab2020b安装及百度网盘提速

    安装库 matlab2020b安装及百度网盘提速 matlab2020b安装 一 xff0c 下载 百度网盘 链接 xff1a https pan baidu com s 18iLFaAbWt8IntUefX3eWfA 提取码 xff1a
  • FreeRTOS系统中CPU使用率统计方法分析

    FreeRTOS系统中CPU使用率统计方法分析 基本概念 操作系统中CPU使用率是在软件架构设计中必须要考虑的一个重要性能指标 它直接影响到程序的执行时间以及优先级更高的任务能否实时响应的问题 而CPU使用率也不能过高 xff0c 避免资源
  • NVIDIA GeForce 940M 设备是不可移动的,无法弹出或拔出问题解决办法

    上个月在新入手的笔记本上安装了一个CUDA的开发环境 xff0c 并选择安装了GeForce Experience工具 xff0c 前两天打开GeForce Experience工具浏览时 xff0c 工具提醒可以更新NVIDIA显卡驱动
  • 大学生职业规划要穿“营销三点式”

    我们现在就是这样的环境 xff0c 这样的 教育 xff0c 这样的模式 xff0c 这一切是无法改变的 xff0c 那你适应它吗 xff1f 不是 xff0c 你若适应它 xff0c 你只能茫然 xff01 为什么 xff1f 因为你适应
  • 网络与串口调试工具TCPCOM

    TCPCOM xff0c 网络与串口二合一调试助手 xff0c 将网络调试助手与串口调试助手合二为一 xff0c 绿色软件 xff0c 简单高效 软件特色 1 支持中英文双语言 xff0c 自动根据操作系统环境选择系统语言类型 xff1b
  • Cmake以及CmakeLists

    CMake使用 CMake1 gcc make和CMake的关系2 CMake一般使用流程2 1 生成构建系统2 2 执行构建 xff08 比如make xff09 xff0c 生成目标文件 xff1b 2 3 执行测试 安装或打包 3 C
  • 卡尔曼滤波公式及其详细推导(不涉及矩阵求导)

    卡尔曼滤波公式及推导 1 前言 卡尔曼滤波 Kalman Filter 是一种关于线性离散系统滤波问题的递推算法 其使用递推的形式对系统的状态进行估计 xff0c 以测量中产生的误差为依据对估计值进行校正 xff0c 使被估计的状态不断接近