卡尔曼滤波与组合导航原理笔记(一)卡尔曼滤波方程的推导 第二部分

news2024/10/6 23:21:58

文章目录

    • 三、卡尔曼滤波
      • 1、随机系统状态空间模型
      • 2、状态预测
      • 3、状态量测
      • 4、增益矩阵K与状态估计
      • 5、Kalman滤波公式汇总
      • 6、Kalman滤波流程图
        • 1.划分为左右两部分(一阶矩和二阶矩)
        • 2.划分为上下两部分(时间更新、量测更新)
      • 7、Kalman滤波计算系统回路图
      • 8、Kalman编程计算流程图
      • 9、Kalman滤波特性
        • 1.状态估计时量测的线性组合
        • 2.正交投影性质
        • 3.新息向量是零矩阵白噪声序列
      • 10、带确定性输入的Kalman滤波

三、卡尔曼滤波

1、随机系统状态空间模型

{ X k = Φ k / k − 1 X k − 1 + Γ k − 1 W k − 1 Z k = H k X k + V k \left\{\begin{array}{l}\boldsymbol{X}_{k}=\boldsymbol{\Phi}_{k / k-1} \boldsymbol{X}_{k-1}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{W}_{k-1} \\ \boldsymbol{Z}_{k}=\boldsymbol{H}_{k} \boldsymbol{X}_{k}+\boldsymbol{V}_{k}\end{array}\right. {Xk=Φk/k1Xk1+Γk1Wk1Zk=HkXk+Vk

关于噪声的基本假设:系统噪声 W k \boldsymbol{W}_{k} Wk 和量测噪声 V k \boldsymbol{V}_{k} Vk 都是零均值高斯白噪声,且不相关;系统噪声协方差阵 Q k \boldsymbol{Q}_{k} Qk 对称非负定,观测噪声协方差阵 R k \boldsymbol{R}_{k} Rk 对称正定。

  • 其实改系统噪声前面系数 Γ k \Gamma_{k} Γk 可以使 Q k \boldsymbol{Q}_{k} Qk 总正定。
  • 必须是高斯白噪声,多个高斯白噪声线性组合还是高斯白噪声,零均值均匀分布噪声线性组合不一定还是零均值均匀分布噪声。

{ E [ W k ] = 0 , E [ W k W j T ] = Q k δ k j E [ V k ] = 0 , E [ V k V j T ] = R k δ k j E [ W k V j T ] = 0 Q k ≥ 0 , R k > 0 ,或 Q k > 0 , R k > 0 \begin{array}{l}\left\{\begin{array}{l}\mathrm{E}\left[\boldsymbol{W}_{k}\right]=\mathbf{0}, \quad \mathrm{E}\left[\boldsymbol{W}_{k} \boldsymbol{W}_{j}^{\mathrm{T}}\right]=\boldsymbol{Q}_{k} \delta_{k j} \\ \mathrm{E}\left[\boldsymbol{V}_{k}\right]=\mathbf{0}, \quad \mathrm{E}\left[\boldsymbol{V}_{k} \boldsymbol{V}_{j}^{\mathrm{T}}\right]=\boldsymbol{R}_{k} \delta_{k j} \\ \mathrm{E}\left[\boldsymbol{W}_{k} \boldsymbol{V}_{j}^{\mathrm{T}}\right]=\mathbf{0}\end{array}\right. \\ \boldsymbol{Q}_{k} \geq 0, \quad \boldsymbol{R}_{k}>0,或\boldsymbol{Q}_{k} > 0, \quad \boldsymbol{R}_{k}>0 \end{array} E[Wk]=0,E[WkWjT]=QkδkjE[Vk]=0,E[VkVjT]=RkδkjE[WkVjT]=0Qk0,Rk>0,或Qk>0,Rk>0

2、状态预测

**状态一步预测:**预测下一时刻最有可能的那个值,由于高斯白噪声对状态预测的一阶矩不起作用(线性最小方差估计):
X ^ k / k − 1 = Φ k / k − 1 X ^ k − 1 \hat{\boldsymbol{X}}_{k / k-1}={\boldsymbol{\Phi}}_{k / k-1} \hat{\boldsymbol{X}}_{k-1} X^k/k1=Φk/k1X^k1
状态预测误差:真值-预测
X ~ k / k − 1 = X k − X ^ k / k − 1 = ( Φ k / k − 1 X k − 1 + Γ k − 1 W k − 1 ) − Φ k / k − 1 X ^ k − 1 = Φ k / k − 1 ( X k − 1 − X ^ k − 1 ) + Γ k − 1 W k − 1 = Φ k / k − 1 X ~ k − 1 + Γ k − 1 W k − 1 \begin{array}{r}\tilde{\boldsymbol{X}}_{k / k-1}=\boldsymbol{X}_{k}-\hat{\boldsymbol{X}}_{k / k-1}=\left(\boldsymbol{\Phi}_{k / k-1} \boldsymbol{X}_{k-1}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{W}_{k-1}\right)-\boldsymbol{\Phi}_{k / k-1} \hat{\boldsymbol{X}}_{k-1} \\ \quad=\boldsymbol{\Phi}_{k / k-1}\left(\boldsymbol{X}_{k-1}-\hat{\boldsymbol{X}}_{k-1}\right)+\boldsymbol{\Gamma}_{k-1} \boldsymbol{W}_{k-1}=\boldsymbol{\Phi}_{k / k-1} \tilde{\boldsymbol{X}}_{k-1}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{W}_{k-1}\end{array} X~k/k1=XkX^k/k1=(Φk/k1Xk1+Γk1Wk1)Φk/k1X^k1=Φk/k1(Xk1X^k1)+Γk1Wk1=Φk/k1X~k1+Γk1Wk1
状态预测方差阵:一步预测误差相乘的期望,乘出来有四项,由于两时刻噪声不相关,其中两项为0。所以预测的方差就是上一时刻的方差传递过来 Φ k / k − 1 P k − 1 Φ k / k − 1 T \boldsymbol{\Phi}_{k / k-1} \boldsymbol{P}_{k-1} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}} Φk/k1Pk1Φk/k1T,加上当前误差 Γ k − 1 Q k − 1 Γ k − 1 T \boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}} Γk1Qk1Γk1T
P k / k − 1 = E [ X ~ k / k − 1 X ~ k / k − 1 T ] = E [ ( Φ k / k − 1 X ~ k − 1 + Γ k − 1 W k − 1 ) ( Φ k / k − 1 X ~ k − 1 + Γ k − 1 W k − 1 ) T ] = Φ k / k − 1 E [ X ~ k − 1 X ~ k − 1 T ] Φ k / k − 1 T + Γ k − 1 E [ W k − 1 W k − 1 T ] Γ k − 1 T = Φ k / k − 1 P k − 1 Φ k / k − 1 T + Γ k − 1 Q k − 1 Γ k − 1 T \begin{aligned} \boldsymbol{P}_{k / k-1} & =\mathrm{E}\left[\tilde{\boldsymbol{X}}_{k / k-1} \tilde{\boldsymbol{X}}_{k / k-1}^{\mathrm{T}}\right] \\ & =\mathrm{E}\left[\left(\boldsymbol{\Phi}_{k / k-1} \tilde{\boldsymbol{X}}_{k-1}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{W}_{k-1}\right)\left(\boldsymbol{\Phi}_{k / k-1} \tilde{\boldsymbol{X}}_{k-1}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{W}_{k-1}\right)^{\mathrm{T}}\right] \\ & =\boldsymbol{\Phi}_{k / k-1} \mathrm{E}\left[\tilde{\boldsymbol{X}}_{k-1} \tilde{\boldsymbol{X}}_{k-1}^{\mathrm{T}}\right] \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}}+\boldsymbol{\Gamma}_{k-1} \mathrm{E}\left[\boldsymbol{W}_{k-1} \boldsymbol{W}_{k-1}^{\mathrm{T}}\right] \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}} \\ & =\boldsymbol{\Phi}_{k / k-1} \boldsymbol{P}_{k-1} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}} \end{aligned} Pk/k1=E[X~k/k1X~k/k1T]=E[(Φk/k1X~k1+Γk1Wk1)(Φk/k1X~k1+Γk1Wk1)T]=Φk/k1E[X~k1X~k1T]Φk/k1T+Γk1E[Wk1Wk1T]Γk1T=Φk/k1Pk1Φk/k1T+Γk1Qk1Γk1T

3、状态量测

量测:量测值带入量测方程,同样忽略高斯白噪声的影响:
Z ^ k / k − 1 = H k X ^ k / k − 1 \hat{\boldsymbol{Z}}_{k / k-1}=\boldsymbol{H}_{k} \hat{\boldsymbol{X}}_{k / k-1} Z^k/k1=HkX^k/k1
量测误差
Z ~ k / k − 1 = Z k − Z ^ k / k − 1 = ( H k X k + V k ) − H k X ^ k / k − 1 = H k X ~ k / k − 1 + V k \begin{aligned} \tilde{\boldsymbol{Z}}_{k / k-1} & =\boldsymbol{Z}_{k}-\hat{\boldsymbol{Z}}_{k / k-1}=\left(\boldsymbol{H}_{k} \boldsymbol{X}_{k}+\boldsymbol{V}_{k}\right)-\boldsymbol{H}_{k} \hat{\boldsymbol{X}}_{k / k-1} =\boldsymbol{H}_{k} \tilde{\boldsymbol{X}}_{k / k-1}+\boldsymbol{V}_{k}\end{aligned} Z~k/k1=ZkZ^k/k1=(HkXk+Vk)HkX^k/k1=HkX~k/k1+Vk
量测方差阵
P Z Z , k / k − 1 = E [ Z ~ k / k − 1 Z ~ k / k − 1 T ] = E [ ( H k X ~ k / k − 1 + V k ) ( H k X ~ k / k − 1 + V k ) T ] = H k E [ X ~ k / k − 1 X ~ k / k − 1 T ] H k T + E [ V k V k T ] = H k P k / k − 1 H k T + R k \begin{aligned} \boldsymbol{P}_{Z Z, k / k-1} & =\mathrm{E}\left[\tilde{\boldsymbol{Z}}_{k / k-1} \tilde{\boldsymbol{Z}}_{k / k-1}^{\mathrm{T}}\right] \\ & =\mathrm{E}\left[\left(\boldsymbol{H}_{k} \tilde{\boldsymbol{X}}_{k / k-1}+\boldsymbol{V}_{k}\right)\left(\boldsymbol{H}_{k} \tilde{\boldsymbol{X}}_{k / k-1}+\boldsymbol{V}_{k}\right)^{\mathrm{T}}\right] \\ & =\boldsymbol{H}_{k} \mathrm{E}\left[\tilde{\boldsymbol{X}}_{k / k-1} \tilde{\boldsymbol{X}}_{k / k-1}^{\mathrm{T}}\right] \boldsymbol{H}_{k}^{\mathrm{T}}+\mathrm{E}\left[\boldsymbol{V}_{k} \boldsymbol{V}_{k}^{\mathrm{T}}\right] \\ & =\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\end{aligned} PZZ,k/k1=E[Z~k/k1Z~k/k1T]=E[(HkX~k/k1+Vk)(HkX~k/k1+Vk)T]=HkE[X~k/k1X~k/k1T]HkT+E[VkVkT]=HkPk/k1HkT+Rk
量测互协方差XZ 之间,状态的一步预测误差和量测之间的互协方差

一般不为0,为0就没有滤波的必要了

P X Z , k / k − 1 = E [ X ~ k / k − 1 Z ~ k / k − 1 T ] = E [ X ~ k / k − 1 ( H k X ~ k / k − 1 + V k ) T ] = P k / k − 1 H k T \begin{array}{l}\boldsymbol{P}_{X Z, k / k-1}=\mathrm{E}\left[\tilde{\boldsymbol{X}}_{k / k-1} \tilde{\boldsymbol{Z}}_{k / k-1}^{\mathrm{T}}\right] \\ \quad=\mathrm{E}\left[\tilde{\boldsymbol{X}}_{k / k-1}\left(\boldsymbol{H}_{k} \tilde{\boldsymbol{X}}_{k / k-1}+\boldsymbol{V}_{k}\right)^{\mathrm{T}}\right] \\ \quad=\boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}\end{array} PXZ,k/k1=E[X~k/k1Z~k/k1T]=E[X~k/k1(HkX~k/k1+Vk)T]=Pk/k1HkT

4、增益矩阵K与状态估计

假设滤波方程可以写成 状态预测+K量测修正 形式, K {\color{red}K} K 矩阵先待定

状态估计
X ^ k = X ^ k / k − 1 + K k Z k ~ = X ^ k / k − 1 + K k ( Z k − H k X ^ k / k − 1 ) \hat{\boldsymbol{X}}_{k}=\hat{\boldsymbol{X}}_{k / k-1}+{\color{red}\boldsymbol{K}_{k} }\tilde{{\boldsymbol{Z}}_{k}}=\hat{\boldsymbol{X}}_{k / k-1}+{\color{red}\boldsymbol{K}_{k}}\left(\boldsymbol{Z}_{k}-\boldsymbol{H}_{k} \hat{\boldsymbol{X}}_{k / k-1}\right) X^k=X^k/k1+KkZk~=X^k/k1+Kk(ZkHkX^k/k1)
状态估计误差
X ~ k = X k − X ^ k = X k − [ X ^ k / k − 1 + K k ( Z k − H k X ^ k / k − 1 ) ] = X ~ k / k − 1 − K k ( H k X k + V k − H k X ^ k / k − 1 ) = ( I − K k H k ) X ~ k / k − 1 − K k V k \begin{aligned} \tilde{\boldsymbol{X}}_{k} & =\boldsymbol{X}_{k}-\hat{\boldsymbol{X}}_{k}=\boldsymbol{X}_{k}-\left[\hat{\boldsymbol{X}}_{k / k-1}+{\color{red}\boldsymbol{K}_{k}}\left(\boldsymbol{Z}_{k}-\boldsymbol{H}_{k} \hat{\boldsymbol{X}}_{k / k-1}\right)\right] \\ & =\tilde{\boldsymbol{X}}_{k / k-1}-{\color{red}\boldsymbol{K}_{k}}\left(\boldsymbol{H}_{k} \boldsymbol{X}_{k}+\boldsymbol{V}_{k}-\boldsymbol{H}_{k} \hat{\boldsymbol{X}}_{k / k-1}\right)=\left(\boldsymbol{I}-\boldsymbol{K}_{k} \boldsymbol{H}_{k}\right) \tilde{\boldsymbol{X}}_{k / k-1}-{\color{red}\boldsymbol{K}_{k}} \boldsymbol{V}_{k}\end{aligned} X~k=XkX^k=Xk[X^k/k1+Kk(ZkHkX^k/k1)]=X~k/k1Kk(HkXk+VkHkX^k/k1)=(IKkHk)X~k/k1KkVk
状态估计方差阵
P k = E [ X ~ k X ~ k T ] = E { [ ( I − K k H k ) X ~ k / k − 1 − K k V k ] [ ( I − K k H k ) X ~ k / k − 1 − K k V k ] T } = ( I − K k H k ) E [ X ~ k / k − 1 X ~ 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 \begin{aligned} \boldsymbol{P}_{k} &= \mathrm{E}\left[\tilde{\boldsymbol{X}}_{k} \tilde{\boldsymbol{X}}_{k}^{\mathrm{T}}\right] \\ & =\mathrm{E}\left\{\left[\left(\boldsymbol{I}-{\color{red}\boldsymbol{K}_{k}} \boldsymbol{H}_{k}\right) \tilde{\boldsymbol{X}}_{k / k-1}-{\color{red}\boldsymbol{K}_{k}} \boldsymbol{V}_{k}\right]\left[\left(\boldsymbol{I}-\boldsymbol{K}_{k} \boldsymbol{H}_{k}\right) \tilde{\boldsymbol{X}}_{k / k-1}-{\color{red}\boldsymbol{K}_{k} }\boldsymbol{V}_{k}\right]^{\mathrm{T}}\right\} \\ & =\left(\boldsymbol{I}-{\color{red}\boldsymbol{K}_{k}}\boldsymbol{H}_{k}\right) \mathrm{E}\left[\tilde{\boldsymbol{X}}_{k / k-1} \tilde{\boldsymbol{X}}_{k / k-1}^{\mathrm{T}}\right]\left(\boldsymbol{I}-{\color{red}\boldsymbol{K}_{k}} \boldsymbol{H}_{k}\right)^{\mathrm{T}}+{\color{red}\boldsymbol{K}_{k}} \mathrm{E}\left[\boldsymbol{V}_{k} \boldsymbol{V}_{k}^{\mathrm{T}}\right] {\color{red}\boldsymbol{K}_{k}^{\mathrm{T}}} \\ & =\left(\boldsymbol{I}-{\color{red}\boldsymbol{K}_{k}} \boldsymbol{H}_{k}\right) \boldsymbol{P}_{k / k-1}\left(\boldsymbol{I}-{\color{red}\boldsymbol{K}_{k}} \boldsymbol{H}_{k}\right)^{\mathrm{T}}+{\color{red}\boldsymbol{K}_{k}} \boldsymbol{R}_{k} {\color{red}\boldsymbol{K}_{k}^{\mathrm{T}}}\end{aligned} Pk=E[X~kX~kT]=E{[(IKkHk)X~k/k1KkVk][(IKkHk)X~k/k1KkVk]T}=(IKkHk)E[X~k/k1X~k/k1T](IKkHk)T+KkE[VkVkT]KkT=(IKkHk)Pk/k1(IKkHk)T+KkRkKkT
到此,都是假设,在待定 K {\color{red}K} K 的情况下进行状态预测,并算出方差阵,下面就是要求 K {\color{red}K} K

K {\color{red}K} K 矩阵可以取某个值,使状态估计方差 P k \boldsymbol{P}_{k} Pk 达到最小,且保持 P k \boldsymbol{P}_{k} Pk 对称正定。

要理解矩阵最小的含义,得先理解 A A A 矩阵小于 B B B 矩阵的含义: B − A B-A BA 正定

由最优估计的含义可知,等价于求 P k \boldsymbol{P}_{k} Pk 的迹,最小,先展开:
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 \begin{aligned} \boldsymbol{P}_{k} & =\left(\boldsymbol{I}-\boldsymbol{K}_{k} \boldsymbol{H}_{k}\right) \boldsymbol{P}_{k / k-1}\left(\boldsymbol{I}-\boldsymbol{K}_{k} \boldsymbol{H}_{k}\right)^{\mathrm{T}}+\boldsymbol{K}_{k} \boldsymbol{R}_{k} \boldsymbol{K}_{k}^{\mathrm{T}} \\ & =\boldsymbol{P}_{k / k-1}-\boldsymbol{K}_{k} \boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1}-\left(\boldsymbol{K}_{k} \boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1}\right)^{\mathrm{T}}+\boldsymbol{K}_{k}\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right) \boldsymbol{K}_{k}^{\mathrm{T}}\end{aligned} Pk=(IKkHk)Pk/k1(IKkHk)T+KkRkKkT=Pk/k1KkHkPk/k1(KkHkPk/k1)T+Kk(HkPk/k1HkT+Rk)KkT
再求迹,分解开,就是一个单输入多输出的多元函数:
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 ) \begin{aligned} \operatorname{tr}\left(\boldsymbol{P}_{k}\right)= & \operatorname{tr}\left(\boldsymbol{P}_{k / k-1}\right)-\operatorname{tr}\left(\boldsymbol{K}_{k} \boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1}\right) \\ & -\operatorname{tr}\left(\left(\boldsymbol{K}_{k} \boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1}\right)^{\mathrm{T}}\right)+\operatorname{tr}\left(\boldsymbol{K}_{k}\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right) \boldsymbol{K}_{k}^{\mathrm{T}}\right)\end{aligned} tr(Pk)=tr(Pk/k1)tr(KkHkPk/k1)tr((KkHkPk/k1)T)+tr(Kk(HkPk/k1HkT+Rk)KkT)
要求多元函数的极值,就是找求导等于 0 0 0 的点,由求导规则:
d d X [ tr ⁡ ( X B ) ] = d d X [ tr ⁡ ( ( X B ) T ) ] = B T d d X [ tr ⁡ ( X A X T ) ] = 2 X A , A 为对称阵时 \begin{array}{l}\frac{\mathrm{d}}{\mathrm{d} \boldsymbol{X}}[\operatorname{tr}(\boldsymbol{X} \boldsymbol{B})]=\frac{\mathrm{d}}{\mathrm{d} \boldsymbol{X}}\left[\operatorname{tr}\left((\boldsymbol{X} \boldsymbol{B})^{\mathrm{T}}\right)\right]=\boldsymbol{B}^{\mathrm{T}} \\ \frac{\mathrm{d}}{\mathrm{d} \boldsymbol{X}}\left[\operatorname{tr}\left(\boldsymbol{X} \boldsymbol{A} \boldsymbol{X}^{\mathrm{T}}\right)\right]=2 \boldsymbol{X} \boldsymbol{A},A为对称阵时\end{array} dXd[tr(XB)]=dXd[tr((XB)T)]=BTdXd[tr(XAXT)]=2XAA为对称阵时
求导得:
d d K k [ tr ⁡ ( 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 ) = 0 \frac{\mathrm{d}}{\mathrm{d} \boldsymbol{K}_{k}}\left[\operatorname{tr}\left(\boldsymbol{P}_{k}\right)\right]=\mathbf{0}{\color{green}-\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1}\right)^{\mathrm{T}}-\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1}\right)^{\mathrm{T}}}+2 {\color{red}\boldsymbol{K}_{k}}\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right)=\mathbf{0} dKkd[tr(Pk)]=0(HkPk/k1)T(HkPk/k1)T+2Kk(HkPk/k1HkT+Rk)=0
绿色的部分为移到左边,两边除以 2 得:
P k / k − 1 H k T = K k ( H k P k / k − 1 H k T + R k ) \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}={\color{red}\boldsymbol{K}_{k}}\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right) Pk/k1HkT=Kk(HkPk/k1HkT+Rk)

要求出 K {\color{red}K} K ,需要 K {\color{red}K} K 后面部分可逆,即量测噪声 R k \boldsymbol{R}_{k} Rk 要正定;前面的 H k P k / k − 1 H k \boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k} HkPk/k1Hk 由于 H k \boldsymbol{H}_{k} Hk 有很多 0 0 0 元素,可逆会不正定,如果加上一个总是正定 R k \boldsymbol{R}_{k} Rk,还能维持整体的正定,继续求逆。

K {\color{red}K} K 后面部分可逆乘到两边:
K k = P k / k − 1 H k T ( H k P k / k − 1 H k T + R k ) − 1 {\color{red}\boldsymbol{K}_{k}}=\boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right)^{-1} Kk=Pk/k1HkT(HkPk/k1HkT+Rk)1
将求出的增益矩阵 K K K 带回到最上面状态估计和方差的的方程中,得出Kalman滤波解。

消除一部分元素,可以得到短一些的方差: P k = ( I − K k H k ) P k / k − 1 \boldsymbol{P}_{k}=\left(\boldsymbol{I}-\boldsymbol{K}_{k} \boldsymbol{H}_{k}\right) \boldsymbol{P}_{k / k-1} Pk=(IKkHk)Pk/k1

5、Kalman滤波公式汇总

  1. 状态一步预测: X ^ k ∣ k − 1 = Φ k ∣ k − 1 X ^ k − 1 \hat{\boldsymbol{X}}_{k \mid k-1}=\boldsymbol{\Phi}_{k \mid k-1} \hat{\boldsymbol{X}}_{k-1} X^kk1=Φkk1X^k1

  2. 状态一步预测均方误差: P k / k − 1 = Φ k / k − 1 P k − 1 Φ k / k − 1 T + Γ k − 1 Q k − 1 Γ k − 1 T \boldsymbol{P}_{k / k-1}=\boldsymbol{\Phi}_{k / k-1} \boldsymbol{P}_{k-1} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}} Pk/k1=Φk/k1Pk1Φk/k1T+Γk1Qk1Γk1T

  3. 滤波增益: K k = P k / k − 1 H k T ( H k P k / k − 1 H k T + R k ) − 1 \boldsymbol{K}_{k}=\boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right)^{-1} Kk=Pk/k1HkT(HkPk/k1HkT+Rk)1

  4. 状态估计: X ^ k = X ^ k / k − 1 + K k ( Z k − H k X ^ k / k − 1 ) \hat{\boldsymbol{X}}_{k}=\hat{\boldsymbol{X}}_{k / k-1}+\boldsymbol{K}_{k}\left(\boldsymbol{Z}_{k}-\boldsymbol{H}_{k} \hat{\boldsymbol{X}}_{k / k-1}\right) X^k=X^k/k1+Kk(ZkHkX^k/k1)

  5. 状态估计均方误差: P k = ( I − K k H k ) P k / k − 1 \boldsymbol{P}_{k}=\left(\boldsymbol{I}-\boldsymbol{K}_{k} \boldsymbol{H}_{k}\right) \boldsymbol{P}_{k / k-1} Pk=(IKkHk)Pk/k1

6、Kalman滤波流程图

在这里插入图片描述

1.划分为左右两部分(一阶矩和二阶矩)

  • 左边一部分滤波计算回路是一阶矩的更新过程,
  • 右边增益计算回路是二阶矩的更新
  • 左边对右边没有影响,右边通过增益矩阵对左边产生影响。有时候数组不好左边计算都崩溃了,对右边都没有影响,还按照模型来计算

2.划分为上下两部分(时间更新、量测更新)

  • 上面是时间更新,之和状态方程有关系。
  • 下面是量测更新,只和量测方程有关系。

7、Kalman滤波计算系统回路图

  • 总的来说,是一个线性系统,输入 Z k Z_{k} Zk,输出 X ^ k \hat{{X}}_{k} X^k
  • 右边部分是时间更新,以系统上一时刻的输出为输入,输出当前时刻的预测状态
  • 左边部分是量测更新
  • Kalman滤波对线性系统来说,是最小方差线性无偏估计

8、Kalman编程计算流程图

  • 如果不是定常系统, Φ k / k − 1 , Γ k − 1 \boldsymbol{\Phi}_{k / k-1}, \boldsymbol{\Gamma}_{k-1} Φk/k1,Γk1, Q k − 1 \boldsymbol{Q}_{k-1} Qk1, H k , R k \boldsymbol{H}_{k}, \boldsymbol{R}_{k} Hk,Rk 都是时变的,需要给出;定常系统作为常数就行。
  • 如果系统非线性,是高阶系统,必须给出初始状态 X ^ 0 , P 0 \hat{\boldsymbol{X}}_{0} ,\boldsymbol{P}_{0} X^0,P0
  • 输出一阶矩、二阶矩
    • 一阶矩、二阶矩能代表系统的全部,随机信号需要时正态分布的
    • 二阶矩是为了下一时刻计算权重(增益矩阵 K K K
  • 量测更新和时间更新可能不同步;常见的是量测更新频率小于时间更新频率。

9、Kalman滤波特性

1.状态估计时量测的线性组合

Kalman滤波是一种递推的公式,,上一时刻可以递推当前时刻,不断递推。以预测和量测加权的方式表示:
X ^ k = X ^ k / k − 1 + K k ( Z k − H k X ^ k / k − 1 ) = ( I − K k H k ) Φ k / k − 1 X ^ k − 1 + K k Z k = G k X ^ k − 1 + K k Z k = G k ( G k − 1 X ^ k − 2 + K k − 1 Z k − 1 ) + K k Z k = G k G k − 1 X ^ k − 2 + G k K k − 1 Z k − 1 + K k Z k = G k G k − 1 G k − 2 X ^ k − 3 + G k G k − 1 K k − 2 Z k − 2 + G k K k − 1 Z k − 1 + K k Z k = ⋯ = ( ∏ i = 1 k G i ) X ^ 0 + ∑ i = 1 k ( ∏ j = i + 1 k G j ) K i Z i \begin{aligned} \hat{\boldsymbol{X}}_{k} & =\hat{\boldsymbol{X}}_{k / k-1}+\boldsymbol{K}_{k}\left(\boldsymbol{Z}_{k}-\boldsymbol{H}_{k} \hat{\boldsymbol{X}}_{k / k-1}\right) \\ & =\left(\boldsymbol{I}-\boldsymbol{K}_{k} \boldsymbol{H}_{k}\right) \boldsymbol{\Phi}_{k / k-1} \hat{\boldsymbol{X}}_{k-1}+\boldsymbol{K}_{k} \boldsymbol{Z}_{k}=\boldsymbol{G}_{k} \hat{\boldsymbol{X}}_{k-1}+\boldsymbol{K}_{k} \boldsymbol{Z}_{k} \\ & =\boldsymbol{G}_{k}\left(\boldsymbol{G}_{k-1} \hat{\boldsymbol{X}}_{k-2}+\boldsymbol{K}_{k-1} \boldsymbol{Z}_{k-1}\right)+\boldsymbol{K}_{k} \boldsymbol{Z}_{k} \\ & =\boldsymbol{G}_{k} \boldsymbol{G}_{k-1} \hat{\boldsymbol{X}}_{k-2}+\boldsymbol{G}_{k} \boldsymbol{K}_{k-1} \boldsymbol{Z}_{k-1}+\boldsymbol{K}_{k} \boldsymbol{Z}_{k} \\ & =\boldsymbol{G}_{k} \boldsymbol{G}_{k-1} \boldsymbol{G}_{k-2} \hat{\boldsymbol{X}}_{k-3}+\boldsymbol{G}_{k} \boldsymbol{G}_{k-1} \boldsymbol{K}_{k-2} \boldsymbol{Z}_{k-2}+\boldsymbol{G}_{k} \boldsymbol{K}_{k-1} \boldsymbol{Z}_{k-1}+\boldsymbol{K}_{k} \boldsymbol{Z}_{k} \\ & =\cdots \\ & =\left(\prod_{i=1}^{k} \boldsymbol{G}_{i}\right) \hat{\boldsymbol{X}}_{0}+\sum_{i=1}^{k}\left(\prod_{j=i+1}^{k} \boldsymbol{G}_{j}\right) \boldsymbol{K}_{i} \boldsymbol{Z}_{i}\end{aligned} X^k=X^k/k1+Kk(ZkHkX^k/k1)=(IKkHk)Φk/k1X^k1+KkZk=GkX^k1+KkZk=Gk(Gk1X^k2+Kk1Zk1)+KkZk=GkGk1X^k2+GkKk1Zk1+KkZk=GkGk1Gk2X^k3+GkGk1Kk2Zk2+GkKk1Zk1+KkZk==(i=1kGi)X^0+i=1k(j=i+1kGj)KiZi
如果初值 X ^ 0 \hat{\boldsymbol{X}}_{0} X^0 取值 0 0 0 ,当前的估计值就是前面所有量测值 Z i \boldsymbol{Z_i} Zi 的线性组合

2.正交投影性质

  • Kalman滤波估计就是预测和量测的加权平均。
  • 量测是一条矢量、预测也是一条矢量,前面乘上加权系数再相加。
  • 无论前面系数是多少,相加得到的估计值都在同一个平面上。
  • 真实的状态也是空间中一条矢量。
  • 要使估计值和真值直接的误差最小,即在平面上取到平面外一点距离最小的点,就是取正交投影点。

3.新息向量是零矩阵白噪声序列

{ E [ Z ~ k / k − 1 ] = 0 E [ Z ~ k / k − 1 Z ~ j / j − 1 T ] = ( H k P k / k − 1 H k T + R k ) δ k j \left\{\begin{array}{l}\mathrm{E}\left[\tilde{\boldsymbol{Z}}_{k / k-1}\right]=\mathbf{0} \\ \mathrm{E}\left[\tilde{\boldsymbol{Z}}_{k / k-1} \tilde{\boldsymbol{Z}}_{j / j-1}^{\mathrm{T}}\right]=\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right) \delta_{k j}\end{array}\right. E[Z~k/k1]=0E[Z~k/k1Z~j/j1T]=(HkPk/k1HkT+Rk)δkj

10、带确定性输入的Kalman滤波

状态空间模型:
{ X k = Φ k / k − 1 X k − 1 + B k − 1 u k − 1 + Γ k − 1 W k − 1 Z k = H k X k + Y k + V k \left\{\begin{array}{l}\boldsymbol{X}_{k}=\boldsymbol{\Phi}_{k / k-1} \boldsymbol{X}_{k-1}+{\color{red}\boldsymbol{B}_{k-1} \boldsymbol{u}_{k-1}}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{W}_{k-1} \\ \boldsymbol{Z}_{k}=\boldsymbol{H}_{k} \boldsymbol{X}_{k}+{\color{red}\boldsymbol{Y}_{k}}+\boldsymbol{V}_{k}\end{array}\right. {Xk=Φk/k1Xk1+Bk1uk1+Γk1Wk1Zk=HkXk+Yk+Vk
滤波方程,只有和一阶矩有关的部分需要改动:
{ X ^ k / k − 1 = Φ k / k − 1 X ^ k − 1 + B k − 1 u k − 1 P k / k − 1 = Φ k / k − 1 P k − 1 Φ k / k − 1 T + Γ k − 1 Q k − 1 Γ k − 1 T K k = P k / k − 1 H k T ( H k P k / k − 1 H k T + R k ) − 1 X ^ k = X ^ k / k − 1 + K k ( Z k − Y k − H k X ^ k / k − 1 ) P k = ( I − K k H k ) P k / k − 1 \left\{\begin{array}{l}\hat{\boldsymbol{X}}_{k / k-1}=\boldsymbol{\Phi}_{k / k-1} \hat{\boldsymbol{X}}_{k-1}+{\color{red}\boldsymbol{B}_{k-1} \boldsymbol{u}_{k-1}} \\ \boldsymbol{P}_{k / k-1}=\boldsymbol{\Phi}_{k / k-1} \boldsymbol{P}_{k-1} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}} \\ \boldsymbol{K}_{k}=\boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right)^{-1} \\ \hat{\boldsymbol{X}}_{k}=\hat{\boldsymbol{X}}_{k / k-1}+\boldsymbol{K}_{k}\left(\boldsymbol{Z}_{k}-{\color{red}\boldsymbol{Y}_{k}}-\boldsymbol{H}_{k} \hat{\boldsymbol{X}}_{k / k-1}\right) \\ \boldsymbol{P}_{k}=\left(\boldsymbol{I}-\boldsymbol{K}_{k} \boldsymbol{H}_{k}\right) \boldsymbol{P}_{k / k-1}\end{array}\right. X^k/k1=Φk/k1X^k1+Bk1uk1Pk/k1=Φk/k1Pk1Φk/k1T+Γk1Qk1Γk1TKk=Pk/k1HkT(HkPk/k1HkT+Rk)1X^k=X^k/k1+Kk(ZkYkHkX^k/k1)Pk=(IKkHk)Pk/k1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/610044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP8266开发阶段无线WIFI本地烧录升级 -- FOTA

【本文发布于https://blog.csdn.net/Stack_/article/details/130448713,未经允许不得转载,转载须注明出处】 前言 因为正在DIY一个WiFi计量插座,采用非隔离的方案,烧录时要拔掉220V插头,测试时要拔掉USB线,…

php获取文件的权限信息(获取权限信息、返回字符串涵义、二进制的转换方式、权限修改)

php获取文件的权限信息 说明1.获取文件的权限信息2.返回文件权限字符的解读3.转为二进制权限4.修改权限 说明 (图片来源于网络) 文件权限是指文件或目录对用户和其他进程的访问许可。在 Unix 和 Linux 系统中,文件和目录都有三个权限&#x…

高通 Camera HAL3:CamX、Chi-CDK 详解

网上关于高通CameraHAL3的介绍文档不多,之前做高通CameraHAL3的一些收集、总结,杂乱了一点,将就着看吧。 一.初步认知 高通CameraHAL3的架构很庞大,代码量也很巨大。 先对CamX、Chi-CDK的关键术语、目录等有个初步认知 1.1 术…

Servlet与Mybatis-2

过滤器 过滤器是一种代码重用的技术,它可以改变 HTTP 请求的内容,响应,及 header 信息。过滤器通常不产生响应或像 servlet 那样对请求作出响应,而是修改或调整到资源的请求,修改或调整来自资源的响应。 作用&#x…

Linux基础篇 使用SSH远程Ubuntu-03

目录 1.安装ssh服务器 2.启用SSH服务器 3.查看SSH服务运行状态 4.在Windows的CMD下进行验证 在默认情况下,外部设备是无法通过SSH远程Ubuntu的,因为Ubuntu没有启用ssh服务。 说明:当前Ubuntu系统为20.04 1.安装ssh服务器 sudo apt-get …

chatgpt赋能python:Python在一组数据中抽取数的方法

Python在一组数据中抽取数的方法 Python是一种非常流行的编程语言,因为它简单易学,可读性高,功能强大,适用于各种不同的应用场景。在数据科学领域,Python也非常受欢迎,因为它拥有广泛的数据处理和分析库。…

【Go LeetDay】总目录(1~88)

Leetcode Golang Day1~10 Golang每日一练(leetDay0001) 1. 两数之和 Two Sum 2. 两数相加 Add Two Numbers 3. 无重复字符的最长子串 Longest-substring-without-repeating-characters Golang每日一练(leetDay0002) 4. 寻找两个正序数组的中位数 Median of two sorted arra…

使用RP2040自制的树莓派pico—— [1/100] 烧录micropython固件

目录 开发环境烧录模式简介固件下载固件烧录验证阶段micropython初步了解 开发环境 软件:Thonny 烧录固件:micropython 烧录模式简介 正常插上电就启动,这是树莓派pico开发板的正常启动模式。 如果按住 bootset 按键再插上数据线&#xf…

Vue 设计模式

一、什么是设计模式? 设计模式是一套被反复使用、多数人知晓、经过分类编目的、代码设计经验的总结。它是为了可重用代码,让代码更容易的被他人理解并保证代码的可靠性。 设计模式实际上是“拿来主义”在软件领域的贯彻实践,它是一套现成的工…

Linux下配置Qt6安装开发环境

安装JDK 选择自己定义JDK安装路径 点击如下图按钮 安装SDK 提示TLS初始化失败 由于HTTPS问题造成无法下载,暂用Android Studio来安装Android SDK 成功安装SDK 安装NDK与命令行工具 正在下载NDK及命令行工具 NDK与工具下载完成 配置QT的Android SDK路径 配置NDK路径 选择ND…

卡尔曼滤波与组合导航原理笔记(一)卡尔曼滤波方程的推导 第一部分

文章目录 一、滤波的基本概念1、传统数字滤波器2、现代控制中的状态观测器3、最优估计的含义4、温度估计的例子1.问题描述2.分析 二、递推最小二乘 课程链接:https://www.bilibili.com/video/BV11K411J7gp/?p1 参考书目:《捷联惯导算法与组合导航原理》…

日志框架 --- Log4j

文章目录 1. 什么是log4j2. log4j的日志级别3. 日志层级4. log4j使用实例4.1 添加log4j依赖4.2 添加配置文件4.3 编写代码4.4 测试代码4.5 运行结果 5. 配置文件5.1 Logger 日志记录器5.2 Appender 附加器5.3 Layout 日志格式化器 6. 整体演示6.1 配置文件6.2 运行结果 1. 什么…

Linux学习(四)Docker构建Python_Web环境

目录 Docker 安装Docker 使用Docker 启停Docker 换源Docker 镜像Docker 容器Docker 创建内部网段Docker Python 镜像创建Docker MySQL 镜像创建Docker 补充 Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器…

vulnhub靶场渗透之DC-4渗透教程(超级详细)

vulnhub靶场渗透之DC-4渗透教程目录 0x01靶机概述 0x02靶场环境搭建 0x03靶机信息发现 0x04靶机渗透过程 0x05靶机提权 0x06渗透实验总结 0x01靶机概述 靶机基本信息: 靶机下载链接https://download.vulnhub.com/dc/DC-4.zip作者DCAU发布日期2019年4月…

DINO代码学习笔记(二)

在DINO代码学习笔记(一)中已经将输入transformer之前的参数处理给捋了一遍,接下就是将这些参数传给transformer。 DINO的transformer使用了Deformable-DETR中的可变性transformer(他们之前的工作也有用到) 这里还是使用…

chatgpt赋能python:Python回滚-避免代码灾难的有效措施

Python回滚-避免代码灾难的有效措施 什么是Python回滚 Python回滚是一种避免代码灾难的有效措施,它可以让你在代码出现问题之后及时回退到之前的版本,保证系统不会受到影响。 回滚是一项非常重要的工作,越是复杂的项目越需要进行回滚。Pyt…

​【指针与数组的恩怨情仇】

指针和数组的关系 指针指的是指针变量,不是数组,指针变量的大小是4/8个字节,是专门来存放地址的。数组也不是指针,数组是一块连续的空间,存放一组相同类型的数据的。 没有关系,但是它们之间有比较相似的地方…

java String类型对象转换为自定义类型对象

问题 java String类型对象转换为自定义类型对象 详细问题 对于java自定义类型对象提供了toString()方法,实现自定义类型对象转换为String类型对象,如何将String类型对象转换为自定义类型对象,譬如对于如下代码所定义的Class类 package co…

Android:Selector + Layer-lists 实现 AppCompatCheckBox

最近做项目涉及到一些UI相关的东东,虽然比较简单,但是也很有趣,写两篇简短的博客记录一下。 一."Selector 两张图片"实现 AppCompatCheckBox AppCompatCheckBox 是 androidx的一个widget:androidx.appcompat.widget.…

chatgpt赋能python:Python图中打字的SEO文章:让你的图片说出更多的话

Python图中打字的SEO文章:让你的图片说出更多的话 图片是传达信息的有力工具。不过,当你在网站上发布图片的时候,这张图片就很可能会被浏览器、机器学习算法、甚至是一些视觉障碍用户忽略。为了弥补这个缺陷,我们可以使用Python来…