023卡尔曼滤波方程的推导

  博主参考严恭敏老师的讲义进行学习卡尔曼滤波,在讲义的基础上加以详细推导与说明。

  首先给出随机系统状态空间模型(注意该模型没有给出控制部分):
(1) { X k = Φ k / k − 1 X k − 1 + Γ k / k − 1 W k − 1 Z k = H k X k + V k \tag{1} \begin{cases} X_k = \varPhi_{k/k-1} X_{k-1} + \varGamma_{k/k-1} W_{k-1}\\ Z_k = H_k X_k + V_k \end{cases} {Xk=Φk/k1Xk1+Γk/k1Wk1Zk=HkXk+Vk(1)

注意:k/k-1表示从时刻k-1到k时刻的一步转移。


1、k-1时刻

目标:求解k-1时刻真值与状态估计的协方差

  真值: X k − 1 X_{k-1} Xk1
  状态估计: X ^ k − 1 \hat X_{k-1} X^k1 ,我们求得的状态估计基本不会等于真值,所以我们的状态估计就是最后求得的、可以用的状态;
  状态估计误差(为了便于区分,在此用e):
(2) e k − 1 = X k − 1 − X ^ k − 1 \tag{2} e_{k-1} = X_{k-1} - \hat X_{k-1} \\ ek1=Xk1X^k1(2)
  真值与k-1时刻状态估计的协方差: P k − 1 P_{k-1} Pk1
(3) 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 ] \tag{3} 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] Pk1=E[ek1ek1T]=E[(Xk1X^k1)Xk1X^k1T](3)


2、由k-1时刻预测k时刻状态

目标:求解真值与一步预测状态的协方差

  对k时刻的状态作预测:
(4) X ^ k / k − 1 = Φ k / k − 1 X ^ k − 1 \tag{4} \hat X_{k/k-1} = \varPhi_{k/k-1} \hat X_{k-1} X^k/k1=Φk/k1X^k1(4)
  零均值白噪声不会影响预测。另外注意 X ^ k / k − 1 \hat X_{k/k-1} X^k/k1还不是最终的系统状态,说白了现在预测的这个状态还是不能用的,必须经过后面的修正得到 X ^ k \hat X_{k} X^k才能用,这也是他们下标的区别所在了。
  预测误差:
(5) e k / k − 1 = X k − X ^ k / k − 1 \tag{5} e_{k/k-1} = X_k - \hat X_{k/k-1} \\ ek/k1=XkX^k/k1(5)
  真值与一步预测状态的协方差: P k / k − 1 P_{k/k-1} Pk/k1
(6) P k / k − 1 = E [ e k / k − 1 e k / k − 1 T ] = E [ ( X k − X ^ k / k − 1 ) ( X k − 1 − X ^ k / k − 1 ) T ] \tag{6} \begin{aligned} P_{k/k-1} &= E[e_{k/k-1} e_{k/k-1}^T] \\ &= E[(X_k - \hat X_{k/k-1}) ( X_{k-1} - \hat X_{k/k-1})^T] \end{aligned} Pk/k1=E[ek/k1ek/k1T]=E[(XkX^k/k1)(Xk1X^k/k1)T](6)
  由公式(1)和公式(4),并结合公式(2)可知:
X k − X ^ k / k − 1 = Φ k / k − 1 X k − 1 + Γ k / k − 1 W k − 1 − Φ k / k − 1 X ^ k − 1 = Φ k / k − 1 e k − 1 + Γ k / k − 1 W k − 1 \begin{aligned} X_k - \hat X_{k/k-1} &= \varPhi_{k/k-1} X_{k-1} + \varGamma_{k/k-1} W_{k-1} - \varPhi_{k/k-1} \hat X_{k-1}\\ &= \varPhi_{k/k-1} e_{k-1} + \varGamma_{k/k-1} W_{k-1} \end{aligned} XkX^k/k1=Φk/k1Xk1+Γk/k1Wk1Φk/k1X^k1=Φk/k1ek1+Γk/k1Wk1

注意:是 e k − 1 e_{k-1} ek1而不是 e k / k − 1 e_{k/k-1} ek/k1

  所以:
( X k − X ^ k / k − 1 ) ( X k − 1 − X ^ k / k − 1 ) T = ( Φ k / k − 1 e k − 1 + Γ k / k − 1 W k − 1 ) ( Φ k / k − 1 e k − 1 + Γ k / k − 1 W k − 1 ) T = ( Φ k / k − 1 e k − 1 + Γ k / k − 1 W k − 1 ) ( e k − 1 T Φ k / k − 1 T + W k − 1 T Γ k / k − 1 T ) = Φ k / k − 1 e k − 1 e k − 1 T Φ k / k − 1 T + Φ k / k − 1 e k − 1 W k − 1 T Γ k / k − 1 T + Γ k / k − 1 W k − 1 e k − 1 T Φ k / k − 1 T + Γ k / k − 1 W k − 1 W k − 1 T Γ k / k − 1 T \begin{aligned} (X_k - \hat X_{k/k-1}) ( X_{k-1} -\hat X_{k/k-1})^T &= (\varPhi_{k/k-1} e_{k-1} + \varGamma_{k/k-1} W_{k-1})(\varPhi_{k/k-1} e_{k-1} + \varGamma_{k/k-1} W_{k-1})^T\\ &= (\varPhi_{k/k-1} e_{k-1} + \varGamma_{k/k-1} W_{k-1}) (e_{k-1}^T \varPhi_{k/k-1}^T + W_{k-1}^T \varGamma_{k/k-1}^T)\\ &= \varPhi_{k/k-1} e_{k-1} e_{k-1}^T \varPhi_{k/k-1}^T + \varPhi_{k/k-1} e_{k-1} W_{k-1}^T \varGamma_{k/k-1}^T \\ &+ \varGamma_{k/k-1} W_{k-1}e_{k-1}^T \varPhi_{k/k-1}^T + \varGamma_{k/k-1} W_{k-1}W_{k-1}^T \varGamma_{k/k-1}^T \end{aligned} (XkX^k/k1)(Xk1X^k/k1)T=(Φk/k1ek1+Γk/k1Wk1)(Φk/k1ek1+Γk/k1Wk1)T=(Φk/k1ek1+Γk/k1Wk1)(ek1TΦk/k1T+Wk1TΓk/k1T)=Φk/k1ek1ek1TΦk/k1T+Φk/k1ek1Wk1TΓk/k1T+Γk/k1Wk1ek1TΦk/k1T+Γk/k1Wk1Wk1TΓk/k1T

偷偷地把下标去掉再看一看:
( X k − X ^ k / k − 1 ) ( X k − 1 − X ^ k / k − 1 ) T = ( Φ e + Γ W ) ( Φ e + Γ W ) T = ( Φ e + Γ W ) ( e T Φ T + W T Γ T ) = Φ e e T Φ T + Φ e W T Γ T + Γ W e T Φ T + Γ W W T Γ T \begin{aligned} (X_k - \hat X_{k/k-1}) ( X_{k-1} -\hat X_{k/k-1})^T &= (\varPhi e + \varGamma W)(\varPhi e + \varGamma W)^T\\ &= (\varPhi e + \varGamma W)(e^T \varPhi^T + W^T \varGamma^T )\\ &= \varPhi e e^T \varPhi^T + \varPhi e W^T \varGamma^T + \varGamma W e^T \varPhi^T + \varGamma W W^T \varGamma^T \end{aligned} (XkX^k/k1)(Xk1X^k/k1)T=(Φe+ΓW)(Φe+ΓW)T=(Φe+ΓW)(eTΦT+WTΓT)=ΦeeTΦT+ΦeWTΓT+ΓWeTΦT+ΓWWTΓT

  再考虑公式(3),并设噪声W的协方差阵为Q,这样公式(6)便有:

(7) P k / k − 1 = Φ k / k − 1 E [ e k − 1 e k − 1 T ] Φ k / k − 1 T + Γ k / k − 1 E [ W k − 1 W k − 1 T ] Γ k / k − 1 T = Φ k / k − 1 P k − 1 Φ k / k − 1 T + Γ k / k − 1 Q k − 1 Γ k / k − 1 T \tag{7} \begin{aligned} P_{k/k-1} &= \varPhi_{k/k-1} E[e_{k-1} e_{k-1}^T] \varPhi_{k/k-1}^T + \varGamma_{k/k-1} E[W_{k-1} W_{k-1}^T] \varGamma_{k/k-1}^T\\ &= \varPhi_{k/k-1} P_{k-1} \varPhi_{k/k-1}^T + \varGamma_{k/k-1} Q_{k-1} \varGamma_{k/k-1}^T\\ \end{aligned} Pk/k1=Φk/k1E[ek1ek1T]Φk/k1T+Γk/k1E[Wk1Wk1T]Γk/k1T=Φk/k1Pk1Φk/k1T+Γk/k1Qk1Γk/k1T(7)

注意:不相关的量期望为0


3、量测方程修正状态估计

目标:建立状态修正方程

  利用公式(1)-2中的量测方程k-1时刻预测k时刻的量测向量:
(8) Z ^ k / k − 1 = H k X ^ k / k − 1 \tag{8} \hat Z_{k/k-1} = H_k \hat X_{k/k-1} Z^k/k1=HkX^k/k1(8)
  相对于量测值,预测有误差:
(9) Z ~ k / k − 1 = Z k − Z ^ k / k − 1 \tag{9} \tilde Z_{k/k-1} = Z_k - \hat Z_{k/k-1} Z~k/k1=ZkZ^k/k1(9)

  构造:
X ^ k = X ^ k / k − 1 + K k Z ~ k / k − 1 \hat X_k=\hat X_{k/k-1} + K_k \tilde Z_{k/k-1} X^k=X^k/k1+KkZ~k/k1

注意: Z ~ k / k − 1 \tilde Z_{k/k-1} Z~k/k1是误差

  将公式(9)代入上式,并结合公式(4)和公式(8)可得状态修正方程:
(10) X ^ k = X ^ k / k − 1 + K k ( Z k − Z ^ k / k − 1 ) = X ^ k / k − 1 + K k ( Z k − H k X ^ k / k − 1 ) = ( I − K k H k ) X ^ k / k − 1 + K k Z k = ( I − K k H k ) Φ k / k − 1 X ^ k − 1 + K k Z k \tag{10} \begin{aligned} \hat X_k &= \hat X_{k/k-1} + K_k (Z_k - \hat Z_{k/k-1}) \\ &= \hat X_{k/k-1} + K_k (Z_k - H_k \hat X_{k/k-1}) \\ &= (I - K_k H_k)\hat X_{k/k-1} + K_k Z_k \\ &= (I - K_k H_k)\varPhi_{k/k-1} \hat X_{k-1} + K_k Z_k \\ \end{aligned} X^k=X^k/k1+Kk(ZkZ^k/k1)=X^k/k1+Kk(ZkHkX^k/k1)=(IKkHk)X^k/k1+KkZk=(IKkHk)Φk/k1X^k1+KkZk(10)


4、k时刻

目标:求解k时刻真值与状态估计的协方差

  状态方程k时刻的状态误差为:
e k = X k − X ^ k e_k = X_k - \hat X_k ek=XkX^k
  将公式(10)第二个等号之后项代入上式并结合公式(5)和公式(1)-2可得:
(11) e k = X k − [ X ^ k / k − 1 + K k ( Z k − H k X ^ k / k − 1 ) ] = e k / k − 1 − K k [ Z k − H k X ^ k / k − 1 ] = e k / k − 1 − K k ( H k X k + V k − H k X ^ k / k − 1 ) = e k / k − 1 − K k [ ( H k X k − H k X ^ k / k − 1 ) + V k ] = e k / k − 1 − K k H k e k / k − 1 − K k V k = ( I − K k H k ) e k / k − 1 − K k V k \tag{11} \begin{aligned} e_k &= X_k - [\hat X_{k/k-1} + K_k (Z_k - H_k \hat X_{k/k-1})]\\ &= e_{k/k-1} - K_k[Z_k - H_k \hat X_{k/k-1}]\\ &= e_{k/k-1} - K_k(H_k X_k + V_k - H_k \hat X_{k/k-1})\\ &= e_{k/k-1} - K_k[(H_k X_k - H_k \hat X_{k/k-1}) + V_k ]\\ &= e_{k/k-1} - K_kH_k e_{k/k-1} - K_k V_k \\ &= (I - K_kH_k) e_{k/k-1} - K_k V_k \\ \end{aligned} ek=Xk[X^k/k1+Kk(ZkHkX^k/k1)]=ek/k1Kk[ZkHkX^k/k1]=ek/k1Kk(HkXk+VkHkX^k/k1)=ek/k1Kk[(HkXkHkX^k/k1)+Vk]=ek/k1KkHkek/k1KkVk=(IKkHk)ek/k1KkVk(11)
  结合公式(6)并设噪声V的协方差阵为R,k时刻真值与状态估计的协方差阵为:
(12) P k = E [ e k e k T ] = E { [ ( I − K k H k ) e k / k − 1 − K k V k ] [ ( I − K k H k ) e k / k − 1 − K k V k ] T } = ( I − K k H k ) E [ e k / k − 1 e k / k − 1 T ] ( I − K k H k ) T + K k E [ V k V k T ] K k T = ( I − K k H k ) P k / k − 1 ( I − K k H k ) T + K k R k K k T \tag{12} \begin{aligned} P_k &= E[e_{k}e_{k}^T]\\ &= E \lbrace{ [(I - K_kH_k) e_{k/k-1} - K_k V_k] [(I - K_kH_k) e_{k/k-1} - K_k V_k]^T \rbrace}\\ &= (I - K_kH_k) E[e_{k/k-1} e_{k/k-1}^T] (I - K_kH_k)^T + K_k E[V_k V_k^T] K_k^T\\ &= (I - K_kH_k) P_{k/k-1} (I - K_kH_k)^T + K_k R_k K_k^T\\ \end{aligned} Pk=E[ekekT]=E{[(IKkHk)ek/k1KkVk][(IKkHk)ek/k1KkVk]T}=(IKkHk)E[ek/k1ek/k1T](IKkHk)T+KkE[VkVkT]KkT=(IKkHk)Pk/k1(IKkHk)T+KkRkKkT(12)


5、增益矩阵 K k K_k Kk

目标:求解增益矩阵 K k K_k Kk

  将公式(12)展开为:
(13) P k = ( I − K k H k ) P k / k − 1 ( I − K k H k ) T + K k R k K k T = P k / k − 1 − K k H k P k / k − 1 − ( K k H k P k / k − 1 ) T + K k ( H k P k / k − 1 H k T + R k ) K k T \tag{13} \begin{aligned} P_k &= (I - K_k H_k) P_{k/k-1} (I - K_k H_k)^T + K_k R_k K_k^T\\ &= P_{k/k-1}- K_k H_k P_{k/k-1} - (K_k H_k P_{k/k-1})^T \\ &+ K_k(H_k P_{k/k-1} H_k^T + R_k)K_k^T \end{aligned} Pk=(IKkHk)Pk/k1(IKkHk)T+KkRkKkT=Pk/k1KkHkPk/k1(KkHkPk/k1)T+Kk(HkPk/k1HkT+Rk)KkT(13)
  两边求迹运算:
t r ( P k ) = t r ( P k / k − 1 ) − t r ( K k H k P k / k − 1 ) − t r ( ( K k H k P k / k − 1 ) T ) + t r ( K k ( H k P k / k − 1 H k T + R k ) K k T ) tr(P_k )=tr(P_{k/k-1})-tr(K_k H_k P_{k/k-1})-tr((K_k H_k P_{k/k-1})^T)+tr(K_k(H_k P_{k/k-1} H_k^T + R_k)K_k^T) tr(Pk)=tr(Pk/k1)tr(KkHkPk/k1)tr((KkHkPk/k1)T)+tr(Kk(HkPk/k1HkT+Rk)KkT)
  将上式看作关于K的一元二次函数,求极小值:
d d K k [ t r ( P k ) ] = 0 − ( H k P k / k − 1 ) T − ( H k P k / k − 1 ) T + 2 K k ( H k P k / k − 1 H k T + R k ) = 2 [ K k ( H k P k / k − 1 H k T + R k ) − P k / k − 1 H k T ] = 0 \begin{aligned} \frac d {dK_k} [tr(P_k)] &= 0-(H_k P_{k/k-1})^T-(H_k P_{k/k-1})^T+2K_k(H_k P_{k/k-1} H_k^T + R_k)\\ &= 2[K_k(H_k P_{k/k-1} H_k^T + R_k)-P_{k/k-1} H_k^T]\\ &= 0 \end{aligned} dKkd[tr(Pk)]=0(HkPk/k1)T(HkPk/k1)T+2Kk(HkPk/k1HkT+Rk)=2[Kk(HkPk/k1HkT+Rk)Pk/k1HkT]=0
  所以:
P k / k − 1 H k T = K k ( H k P k / k − 1 H k T + R k ) P_{k/k-1} H_k^T = K_k(H_k P_{k/k-1} H_k^T + R_k) Pk/k1HkT=Kk(HkPk/k1HkT+Rk)
  增益矩阵即为:
(14) K k = P k / k − 1 H k T ( H k P k / k − 1 H k T + R k ) − 1 \tag{14} K_k = P_{k/k-1} H_k^T(H_k P_{k/k-1} H_k^T + R_k)^{-1} Kk=Pk/k1HkT(HkPk/k1HkT+Rk)1(14)


6、总结

目标:汇总卡尔曼滤波计算公式

  将公式(14)代入公式(13)可得:
P k = P k / k − 1 − K k H k P k / k − 1 − ( K k H k P k / k − 1 ) T + K k ( H k P k / k − 1 H k T + R k ) K k T = P k / k − 1 − K k H k P k / k − 1 − P k / k − 1 T H k T K k T + P k / k − 1 H k T K k T = P k / k − 1 − K k H k P k / k − 1 = ( I − K k H k ) P k / k − 1 \begin{aligned} P_k &= P_{k/k-1}- K_k H_k P_{k/k-1} - (K_k H_k P_{k/k-1})^T \\ &+ K_k(H_k P_{k/k-1} H_k^T + R_k)K_k^T \\ &= P_{k/k-1} - K_k H_k P_{k/k-1} - P_{k/k-1}^T H_k^T K_k^T + P_{k/k-1} H_k^T K_k^T \\ &= P_{k/k-1} - K_k H_k P_{k/k-1} \\ &= (I - K_k H_k ) P_{k/k-1} \end{aligned} Pk=Pk/k1KkHkPk/k1(KkHkPk/k1)T+Kk(HkPk/k1HkT+Rk)KkT=Pk/k1KkHkPk/k1Pk/k1THkTKkT+Pk/k1HkTKkT=Pk/k1KkHkPk/k1=(IKkHk)Pk/k1

注: P k / k − 1 T P_{k/k-1}^T Pk/k1T= P k / k − 1 P_{k/k-1} Pk/k1

综上所述,卡尔曼滤波计算公式:

①状态一步预测:
X ^ k / k − 1 = Φ k / k − 1 X ^ k − 1 \hat X_{k/k-1} = \varPhi_{k/k-1} \hat X_{k-1} X^k/k1=Φk/k1X^k1
②状态一步预测协方差阵:
P k / k − 1 = Φ k / k − 1 P k − 1 Φ k / k − 1 T + Γ k / k − 1 Q k − 1 Γ k / k − 1 T P_{k/k-1} = \varPhi_{k/k-1} P_{k-1} \varPhi_{k/k-1}^T + \varGamma_{k/k-1} Q_{k-1} \varGamma_{k/k-1}^T Pk/k1=Φk/k1Pk1Φk/k1T+Γk/k1Qk1Γk/k1T
③增益矩阵:
K k = P k / k − 1 H k T ( H k P k / k − 1 H k T + R k ) − 1 K_k = P_{k/k-1} H_k^T(H_k P_{k/k-1} H_k^T + R_k)^{-1} Kk=Pk/k1HkT(HkPk/k1HkT+Rk)1
④状态估计:
X ^ k = X ^ k / k − 1 + K k ( Z k − H k X ^ k / k − 1 ) \hat X_k = \hat X_{k/k-1} + K_k (Z_k - H_k \hat X_{k/k-1}) \\ X^k=X^k/k1+Kk(ZkHkX^k/k1)
⑤状态估计协方差阵:
P k = ( I − K k H k ) P k / k − 1 P_k = (I - K_k H_k ) P_{k/k-1} Pk=(IKkHk)Pk/k1


7、示例

Z = (1:100);
noise = randn(1, 100);
Z = Z +noise;

X = [0; 0];                %状态
P = [1 0; 0 1];            %状态协方差矩阵
F = [1 1; 0 1];            %状态转移矩阵
Q = [0.0001 0; 0 0.0001];  %状态转移协方差矩阵
H = [1 0];                 %观测矩阵
R = 1;

figure;
hold on;

for i = 1:100
    X_ = F*X;
    P_ = F*P*F' + Q;
    K = P_*H'/(H*P_*H' + R);
    X = X_ + K*( Z(i) - H*X );
    P = ( eye(2) - K*H ) * P_;
    
    plot(X(1), X(2), '.');  %横轴表示位置,纵轴表示速度
end

资源:一个轻松理解卡尔曼滤波的教学视频
卡尔曼滤波的原理以及在MATLAB中的实现-资源汇总页中下载

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值