卡尔曼滤波详细推导

卡尔曼滤波

1、递归算法

1、引出估计问题

由一个硬币测量问题推导出
x ^ k = 1 k ( x ^ 1 + x ^ 2 + ⋯ + x ^ k − 1 + Z k ) = 1 k ( x ^ 1 + x ^ 2 + ⋯ + x ^ k − 1 + Z k ) = 1 k ( x ^ 1 + x ^ 2 + ⋯ + x ^ k − 1 ) + 1 k Z k = 1 k k − 1 k − 1 ( x ^ 1 + x ^ 2 + ⋯ + x ^ k − 1 ) + 1 k Z k = k − 1 k x ^ k − 1 + 1 k Z k = x ^ k − 1 + 1 k ( Z k − x ^ k − 1 ) \begin{align*} \hat{x}_{k}&=\frac{1}{k}(\hat{x}_{1}+\hat{x}_{2}+\cdots+\hat{x}_{k-1}+Z_k)\\ &=\frac{1}{k}(\hat{x}_{1}+\hat{x}_{2}+\cdots+\hat{x}_{k-1}+Z_k)\\ &=\frac{1}{k}(\hat{x}_{1}+\hat{x}_{2}+\cdots+\hat{x}_{k-1})+\frac{1}{k}Z_k\\ &=\frac{1}{k}\frac{k-1}{k-1}(\hat{x}_{1}+\hat{x}_{2}+\cdots+\hat{x}_{k-1})+\frac{1}{k}Z_k\\ &=\frac{k-1}{k}\hat{x}_{k-1}+\frac{1}{k}Z_k\\ &=\hat{x}_{k-1}+\frac{1}{k}(Z_k-\hat{x}_{k-1}) \end{align*} x^k=k1(x^1+x^2++x^k1+Zk)=k1(x^1+x^2++x^k1+Zk)=k1(x^1+x^2++x^k1)+k1Zk=k1k1k1(x^1+x^2++x^k1)+k1Zk=kk1x^k1+k1Zk=x^k1+k1(Zkx^k1)
其中 1 k \frac{1}{k} k1可以定义为一个不断更新的系数 K k K_k Kk,上述式子表征为
x ^ k = x ^ k − 1 + K k ( Z k − x ^ k − 1 ) \hat{x}_{k}=\hat{x}_{k-1}+K_k(Z_k-\hat{x}_{k-1}) x^k=x^k1+Kk(Zkx^k1)
定义这个不断更新的系数为卡尔曼系数
K k = e E S T k − 1 e E S T k − 1 + e M S A k K_k=\frac{e_{EST_{k-1}}}{e_{EST_{k-1}}+e_{MSA_k}} Kk=eESTk1+eMSAkeESTk1
当估计误差 e E S T e_{EST} eEST 很大时, K k K_k Kk接近1, x ^ k \hat{x}_{k} x^k取测量值 Z k Z_k Zk,

当测量误差 e E S T e_{EST} eEST 很大时, K k K_k Kk接近0, x ^ k \hat{x}_{k} x^k取估计值 x ^ k − 1 \hat{x}_{k-1} x^k1忽略测量值 Z k Z_k Zk.

具体为什么这么定义接下来会详细推导。

2、应用一下

step1 计算卡尔曼系数
K k = e E S T k − 1 e E S T k − 1 + e M S A k K_k=\frac{e_{EST_{k-1}}}{e_{EST_{k-1}}+e_{MSA_k}} Kk=eESTk1+eMSAkeESTk1
step2 计算当前估计值
x ^ k = x ^ k − 1 + K k ( Z k − x ^ k − 1 ) \hat{x}_{k}=\hat{x}_{k-1}+K_k(Z_k-\hat{x}_{k-1}) x^k=x^k1+Kk(Zkx^k1)
step3 更新估计误差 e E S T k e_{EST_k} eESTk
e E S T k = ( 1 − K k ) e E S T k − 1 e_{EST_k}=(1-K_k)e_{EST_{k-1}} eESTk=(1Kk)eESTk1

2、数学基础

  1. 数据融合

    拿两个误差不一样的秤去称一个30kg的物品,秤1称出来的结果为 Z 1 = 30 k g Z_1=30kg Z1=30kg,称1的方差为 δ 1 = 2 \delta_1=2 δ1=2 ,秤2称出来的结果为 Z 2 = 34 k g Z_2=34kg Z2=34kg,秤2的方差为 δ 2 = 4 \delta_2=4 δ2=4,问:根据两个秤的测量值如何得到一个更准确的估计值 Z ^ \hat{Z} Z^

    估计值 Z ^ \hat{Z} Z^
    Z ^ = Z 1 + K ( Z 2 − Z 1 ) \hat{Z}=Z_1 + K(Z_2-Z_1) Z^=Z1+K(Z2Z1)
    估计值的方差 V a r ( Z ^ ) Var(\hat{Z}) Var(Z^)
    V a r ( Z ^ ) = V a r ( Z 1 + K ( Z 2 − Z 1 ) ) = V a r ( Z 1 ( 1 − K ) + K Z 2 ) = ( 1 − K ) 2 V a r ( Z 1 ) + K 2 V a r ( Z 2 ) = δ 1 2 ( 1 − K ) 2 + δ 2 2 K 2 \begin{align*} Var(\hat{Z})&=Var(Z_1+K(Z_2-Z_1))\\ &=Var(Z_1(1-K)+KZ_2)\\ &=(1-K)^2Var(Z_1)+K^2Var(Z_2)\\ &=\delta_1^2(1-K)^2 +\delta_2^2K^2 \end{align*} Var(Z^)=Var(Z1+K(Z2Z1))=Var(Z1(1K)+KZ2)=(1K)2Var(Z1)+K2Var(Z2)=δ12(1K)2+δ22K2
    根据上一章的方法,我们求一个最优的 K K K,使得估计值的方差 V a r ( Z ^ ) Var(\hat{Z}) Var(Z^)最小
    min ⁡ K V a r ( Z ^ ) \begin{equation} \begin{aligned} \min_{K} \quad & Var(\hat{Z}) \\ \end{aligned} \end{equation} KminVar(Z^)
    V a r ( Z ^ ) ˙ = 0 \dot{Var(\hat{Z})}=0 Var(Z^)˙=0时最小
    − 8 ( 1 − K ) + 32 K = 0 K = 0.2 \begin{align*} -8(1-K)+32K&=0\\ K&=0.2 \end{align*} 8(1K)+32KK=0=0.2
    带入 V a r ( Z ^ ) = 4 ∗ 0.64 + 16 ∗ 0.04 = 3.2 Var(\hat{Z})=4*0.64+16*0.04=3.2 Var(Z^)=40.64+160.04=3.2 Z ^ = 30.8 k g \hat{Z}=30.8kg Z^=30.8kg δ 3 = 1.79 \delta_{3}=1.79 δ3=1.79

  2. 协方差矩阵

    方差:
    V a r ( x ) = δ x 2 = 1 n ( ( x 1 − x ‾ ) 2 + ( x 2 − x ‾ ) 2 + ⋯ + ( x n − x ‾ ) 2 ) Var(x)=\delta_x^2=\frac{1}{n}((x_1-\overline{x})^2+(x_2-\overline{x})^2+\cdots+(x_n-\overline{x})^2) Var(x)=δx2=n1((x1x)2+(x2x)2++(xnx)2)
    协方差:
    V a r ( x y ) = δ x δ y = 1 n ( ( x 1 − x ‾ ) ( y 1 − y ‾ ) + ( x 2 − x ‾ ) ( y 2 − y ‾ ) + ⋯ + ( x n − x ‾ ) ( y n − y ‾ ) ) Var(xy)=\delta_x\delta_y=\frac{1}{n}((x_1-\overline{x})(y_1-\overline{y})+(x_2-\overline{x})(y_2-\overline{y})+\cdots+(x_n-\overline{x})(y_n-\overline{y})) Var(xy)=δxδy=n1((x1x)(y1y)+(x2x)(y2y)++(xnx)(yny))
    协方差矩阵:
    P = [ δ x 2 δ x δ y δ x δ z δ x δ y δ y 2 δ y δ z δ z δ x δ z δ y δ z 2 ] P= \begin{bmatrix} \delta_x^2&\delta_x\delta_y&\delta_x\delta_z\\ \delta_x\delta_y&\delta_y^2&\delta_y\delta_z\\ \delta_z\delta_x&\delta_z\delta_y&\delta_z^2\\ \end{bmatrix} P= δx2δxδyδzδxδxδyδy2δzδyδxδzδyδzδz2
    写代码的时候如何求协方差矩阵

    先求出过度矩阵
    a = [ x 1 y 1 z 1 x 2 y 2 z 2 ⋮ ⋮ ⋮ x n y n z n ] − 1 n [ 1 1 1 1 1 1 ⋮ ⋮ ⋮ 1 1 1 ] [ x 1 y 1 z 1 x 2 y 2 z 2 ⋮ ⋮ ⋮ x n y n z n ] a=\begin{bmatrix} x_1&y_1&z_1\\ x_2&y_2&z_2\\ \vdots&\vdots&\vdots\\ x_n&y_n&z_n \end{bmatrix} -\frac{1}{n} \begin{bmatrix} 1&1&1\\ 1&1&1\\ \vdots&\vdots&\vdots\\ 1&1&1 \end{bmatrix} \begin{bmatrix} x_1&y_1&z_1\\ x_2&y_2&z_2\\ \vdots&\vdots&\vdots\\ x_n&y_n&z_n \end{bmatrix} a= x1x2xny1y2ynz1z2zn n1 111111111 x1x2xny1y2ynz1z2zn
    然后求协方差矩阵
    P = 1 n a T a P=\frac{1}{n}a^Ta P=n1aTa

  3. 状态空间方程

    状态空间方程
    x k = A x k − 1 + B u k − 1 + ω k − 1 Z k = H x k + ν k x_k=Ax_{k-1}+Bu_{k-1}+\omega_{k-1}\\ Z_k=Hx_k+\nu_k xk=Axk1+Buk1+ωk1Zk=Hxk+νk
    其中 ω k − 1 \omega_{k-1} ωk1是过程误差, ν k \nu_k νk是测量误差。

3、卡尔曼增益详细推导

模型

有状态空间方程
x k = A x k − 1 + B u k − 1 + ω k − 1 Z k = H x k + ν k x_k=Ax_{k-1}+Bu_{k-1}+\omega_{k-1}\\ Z_k=Hx_k+\nu_k xk=Axk1+Buk1+ωk1Zk=Hxk+νk
其中 ω k − 1 \omega_{k-1} ωk1是过程误差,服从正态分布 p ( ω ) = ( 0 , Q ) p(\omega)=(0,Q) p(ω)=(0,Q) Q Q Q是协方差矩阵, Q = E ( ω ω T ) Q=\mathbb{E}(\omega\omega^T) Q=E(ωωT) ν k \nu_k νk是测量误差,也服从正态分布 p ( ν ) = ( 0 , R ) p(\nu)=(0,R) p(ν)=(0,R) R = E ( ν ν T ) R=\mathbb{E}(\nu\nu^T) R=E(ννT)

为什么 Q = E ( ω ω T ) Q=\mathbb{E}(\omega\omega^T) Q=E(ωωT)???

假设
ω = [ ω 1 ω 2 ] \omega=\begin{bmatrix}\omega_1\\ \omega_2\end{bmatrix} ω=[ω1ω2]
那么
Q = E ( [ ω 1 ω 2 ] [ ω 1 ω 2 ] ) = E [ ω 1 2 ω 1 ω 2 ω 1 ω 2 ω 2 2 ] = [ E ( ω 1 2 ) E ( ω 1 ω 2 ) E ( ω 1 ω 2 ) E ( ω 2 2 ) ] Q=\mathbb{E}(\begin{bmatrix}\omega_1\\ \omega_2\end{bmatrix}\begin{bmatrix}\omega_1& \omega_2\end{bmatrix})=\mathbb{E}\begin{bmatrix}\omega_1^2& \omega_1\omega_2\\ \omega_1\omega_2& \omega_2^2\end{bmatrix}=\begin{bmatrix}\mathbb{E}(\omega_1^2)& \mathbb{E}(\omega_1\omega_2)\\ \mathbb{E}(\omega_1\omega_2)& \mathbb{E}(\omega_2^2)\end{bmatrix} Q=E([ω1ω2][ω1ω2])=E[ω12ω1ω2ω1ω2ω22]=[E(ω12)E(ω1ω2)E(ω1ω2)E(ω22)]
对于 ω 1 \omega_1 ω1的方差 V a r ( ω 1 ) = E ( ( ω 1 − E ( ω 1 ) ) 2 ) = E [ ω 1 2 ] − ( E [ ω 1 ] ) 2 Var(\omega_1)=\mathbb{E}((\omega_1-\mathbb{E}(\omega_1))^2)= \mathbb{E}[\omega_1^2] - (\mathbb{E}[\omega_1])^2 Var(ω1)=E((ω1E(ω1))2)=E[ω12](E[ω1])2,其中 E [ ω 1 ] = 0 \mathbb{E}[\omega_1]=0 E[ω1]=0,因此 V a r ( ω 1 ) = E [ ω 1 2 ] = δ ω 1 2 Var(\omega_1)=\mathbb{E}[\omega_1^2]=\delta_{\omega_1}^2 Var(ω1)=E[ω12]=δω12

因此
Q = [ E ( ω 1 2 ) E ( ω 1 ω 2 ) E ( ω 1 ω 2 ) E ( ω 2 2 ) ] = [ δ ω 1 2 δ ω 1 δ ω 2 δ ω 1 δ ω 2 δ ω 2 2 ] Q=\begin{bmatrix}\mathbb{E}(\omega_1^2)& \mathbb{E}(\omega_1\omega_2)\\ \mathbb{E}(\omega_1\omega_2)& \mathbb{E}(\omega_2^2)\end{bmatrix}=\begin{bmatrix}\delta_{\omega_1}^2& \delta_{\omega_1}\delta_{\omega_2}\\ \delta_{\omega_1}\delta_{\omega_2}& \delta_{\omega_2}^2\end{bmatrix} Q=[E(ω12)E(ω1ω2)E(ω1ω2)E(ω22)]=[δω12δω1δω2δω1δω2δω22]
注:为什么 V a r ( ω 1 ) = E [ ω 1 2 ] − ( E [ ω 1 ] ) 2 Var(\omega_1)= \mathbb{E}[\omega_1^2] - (\mathbb{E}[\omega_1])^2 Var(ω1)=E[ω12](E[ω1])2???

定义方差为:
Var ( X ) = E [ ( X − E [ X ] ) 2 ] \text{Var}(X) = \mathbb{E}[(X - \mathbb{E}[X])^2] Var(X)=E[(XE[X])2]
展开括号:
( X − E [ X ] ) 2 = X 2 − 2 X E [ X ] + ( E [ X ] ) 2 (X - \mathbb{E}[X])^2 = X^2 - 2X\mathbb{E}[X] + (\mathbb{E}[X])^2 (XE[X])2=X22XE[X]+(E[X])2
对两边取期望:
Var ( X ) = E [ X 2 ] − 2 E [ X ] E [ X ] + ( E [ X ] ) 2 \text{Var}(X) = \mathbb{E}[X^2] - 2\mathbb{E}[X]\mathbb{E}[X] + (\mathbb{E}[X])^2 Var(X)=E[X2]2E[X]E[X]+(E[X])2
由于期望是线性的:
E [ X E [ X ] ] = E [ X ] ⋅ E [ X ] = ( E [ X ] ) 2 \mathbb{E}[X\mathbb{E}[X]] = \mathbb{E}[X] \cdot \mathbb{E}[X] = (\mathbb{E}[X])^2 E[XE[X]]=E[X]E[X]=(E[X])2
因此:
Var ( X ) = E [ X 2 ] − ( E [ X ] ) 2 \text{Var}(X) = \mathbb{E}[X^2] - (\mathbb{E}[X])^2 Var(X)=E[X2](E[X])2

已知

算出来的:先验
x ^ k − = A x ^ k − 1 + B u k \hat{x}_k^-=A\hat{x}_{k-1}+Bu_k\\ x^k=Ax^k1+Buk
测出来的:测量
Z k − = H x k → x ^ k m e a = H − Z k Z_k^-=Hx_k\rightarrow \hat{x}_{kmea}=H^-Z_k Zk=Hxkx^kmea=HZk

如何用两个不准的结果估计出一个准确值???

后验
x ^ k = x ^ k − + G ( H − Z k − x ^ k − ) \hat{x}_k=\hat{x}_{k}^-+G(H^-Z_k-\hat{x}_{k}^-)\\ x^k=x^k+G(HZkx^k)
其中的 G = K k H G=K_kH G=KkH

因此后验还可写成
x ^ k = x ^ k − + K k ( Z k − H x ^ k − ) \hat{x}_k=\hat{x}_{k}^-+K_k(Z_k-H\hat{x}_{k}^-)\\ x^k=x^k+Kk(ZkHx^k)
直观理解:当先验的估计误差比较大的时候 K k K_k Kk H − H^- H,此时后验估计的值为 x ^ k m e a \hat{x}_{kmea} x^kmea

,当先验测量的误差比较大时 K k K_k Kk 0 0 0,此时后验估计的值为 x ^ k − \hat{x}_k^- x^k

找一个最优的 K k K_k Kk,估计出一个准确值

用误差来量化准确这个概念
e k = x k − x ^ k e_k=x_k-\hat{x}_k ek=xkx^k
e k e_k ek的期望为0,因此当 e k e_k ek的方差最小时,误差最小, t r P ( e k ) trP(e_k) trP(ek)

问题建模:
min ⁡ K k t r P ( e k ) \begin{aligned} \min_{K_k} \quad & trP(e_k) \\ \end{aligned} KkmintrP(ek)
前置处理
P ( e k ) = E ( e k e k T ) = ( x k − x k ^ ) ( x k − x k ^ ) T \begin{align*} P(e_k)&=\mathbb{E}(e_k{e_k}^T)\\ &=(x_k-\hat{x_k})(x_k-\hat{x_k})^T \end{align*} P(ek)=E(ekekT)=(xkxk^)(xkxk^)T
( 18 ) (18) (18) ( 20 ) (20) (20)带入 ( 22 ) (22) (22)得到
e k = x k − A x ^ k − 1 − B u k − K k ( Z k − H x ^ k − ) e_k=x_k-A\hat{x}_{k-1}-Bu_k-K_k(Z_k-H\hat{x}_{k}^-) ek=xkAx^k1BukKk(ZkHx^k)
带入 ( 14 ) (14) (14)得到
e k = x k − x ^ k − − K k ( H x k + ν k − H x ^ k − ) = ( I − K k H ) x k − K k ν k − x ^ k − + K k H x ^ k − = ( I − K k H ) ( x k − x ^ k − ) − K k ν k \begin{align*} e_k&=x_k-\hat{x}_{k}^--K_k(Hx_k+\nu_k-H\hat{x}_{k}^-)\\ &=(I-K_kH)x_k-K_k\nu_k-\hat{x}_{k}^-+K_kH\hat{x}_{k}^-\\ &=(I-K_kH)(x_k-\hat{x}_{k}^-)-K_k\nu_k \end{align*} ek=xkx^kKk(Hxk+νkHx^k)=(IKkH)xkKkνkx^k+KkHx^k=(IKkH)(xkx^k)Kkνk
x k − x ^ k − x_k-\hat{x}_k^- xkx^k定义为先验误差 e k − e_k^- ek
e k = ( I − K k H ) e k − − K k ν k e_k=(I-K_kH)e_k^--K_k\nu_k ek=(IKkH)ekKkνk
将式子 ( 24 ) (24) (24)带入到 P ( e k ) P(e_k) P(ek)
P ( e k ) = E ( e k e k T ) = E [ ( x k − x k ^ ) ( x k − x 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 − − K k ν k ] [ e k − T ( I − K k H ) T − ν k T 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 ] \begin{align*} P(e_k)&=\mathbb{E}(e_k{e_k}^T)\\ &=\mathbb{E}[(x_k-\hat{x_k})(x_k-\hat{x_k})^T]\\ &=\mathbb{E}[[(I-K_kH)e_k^--K_k\nu_k][(I-K_kH)e_k^--K_k\nu_k]^T]\\ &=\mathbb{E}[(I-K_kH)e_k^--K_k\nu_k][{e_k^-}^T(I-K_kH)^T-\nu_k^TK_k^T]\\ &=\mathbb{E}[(I-K_kH)e_k^-{e_k^-}^T(I-K_kH)^T-(I-K_kH)e_k^-\nu_k^TK_k^T-K_k\nu_k{e_k^-}^T(I-K_kH)^T+K_k\nu_k\nu_k^TK_k^T] \end{align*} P(ek)=E(ekekT)=E[(xkxk^)(xkxk^)T]=E[[(IKkH)ekKkνk][(IKkH)ekKkνk]T]=E[(IKkH)ekKkνk][ekT(IKkH)TνkTKkT]=E[(IKkH)ekekT(IKkH)T(IKkH)ekνkTKkTKkνkekT(IKkH)T+KkνkνkTKkT]
其中 E ( ( I − K k H ) e k − ν k T K k T ) = ( I − K k H ) E ( e k − ) E ( ν k T ) K k T \mathbb{E}((I-K_kH)e_k^-\nu_k^TK_k^T)=(I-K_kH)\mathbb{E}(e_k^-)\mathbb{E}(\nu_k^T)K_k^T E((IKkH)ekνkTKkT)=(IKkH)E(ek)E(νkT)KkT E ( e k − ) = 0 \mathbb{E}(e_k^-)=0 E(ek)=0 E ( ν k T ) = 0 \mathbb{E}(\nu_k^T)=0 E(νkT)=0且相互独立,因此
P ( e k ) = E [ ( I − K k H ) e k − e k − T ( I − K k H ) T + K k ν k ν k T K k T ] P(e_k)=\mathbb{E}[(I-K_kH)e_k^-{e_k^-}^T(I-K_kH)^T+K_k\nu_k\nu_k^TK_k^T] P(ek)=E[(IKkH)ekekT(IKkH)T+KkνkνkTKkT]
P ( e k ) − = E [ e k − e k − T ] P(e_k)^-=\mathbb{E}[e_k^-{e_k^-}^T] P(ek)=E[ekekT],对 P ( e k ) P(e_k) P(ek)进行展开
P ( e k ) = ( I − K k H ) P ( e k ) − ( I − K k H ) T + K k ν k ν k T K k T = ( P ( e k ) − − K k H P ( e k ) − ) ( I − K k H ) T + K k ν k ν k T K k T = P ( e k ) − − P ( e k ) − H T K k T − K k H P ( e k ) − + K k H P ( e k ) − H T K k T + K k E [ ν k ν k T ] K k T \begin{align*} P(e_k)&=(I-K_kH)P(e_k)^-(I-K_kH)^T+K_k\nu_k\nu_k^TK_k^T\\ &=(P(e_k)^--K_kHP(e_k)^-)(I-K_kH)^T+K_k\nu_k\nu_k^TK_k^T\\ &=P(e_k)^--P(e_k)^-H^TK_k^T-K_kHP(e_k)^-+K_kHP(e_k)^-H^TK_k^T+K_k\mathbb{E}[\nu_k\nu_k^T]K_k^T\\ \end{align*} P(ek)=(IKkH)P(ek)(IKkH)T+KkνkνkTKkT=(P(ek)KkHP(ek))(IKkH)T+KkνkνkTKkT=P(ek)P(ek)HTKkTKkHP(ek)+KkHP(ek)HTKkT+KkE[νkνkT]KkT
然后我们求 P ( e k ) P(e_k) P(ek)的迹
t r P ( e k ) = t r P ( e k ) − − 2 t r ( P ( e k ) − H T K k T ) + t r ( K k H P ( e k ) − H T K k T ) + t r ( K k E [ ν k ν k T ] K k T ) = t r P ( e k ) − − 2 t r ( K k H P ( e k ) − ) + t r ( K k H P ( e k ) − H T K k T ) + t r ( K k R K k T ) \begin{align*} trP(e_k) &=trP(e_k)^--2tr(P(e_k)^-H^TK_k^T)+tr(K_kHP(e_k)^-H^TK_k^T)+tr(K_k\mathbb{E}[\nu_k\nu_k^T]K_k^T)\\ &=trP(e_k)^--2tr(K_kHP(e_k)^-)+tr(K_kHP(e_k)^-H^TK_k^T)+tr(K_kRK_k^T)\\ \end{align*} trP(ek)=trP(ek)2tr(P(ek)HTKkT)+tr(KkHP(ek)HTKkT)+tr(KkE[νkνkT]KkT)=trP(ek)2tr(KkHP(ek))+tr(KkHP(ek)HTKkT)+tr(KkRKkT)
然后求令 P ( e k ) P(e_k) P(ek)的迹最小的 K k K_k Kk,令
d t r P ( e k ) d K k = 0 \frac{dtrP(e_k)}{dK_k}=0 dKkdtrP(ek)=0

d t r P ( e k ) d K k = 0 − 2 ( H P ( e k ) − ) T + 2 K k H P ( e k ) − H T + 2 K k R = 0 → − ( H P ( e k ) − ) T + K k H P ( e k ) − H T + K k R = 0 → K k = ( H P ( e k ) − ) T H P ( e k ) − H T + R \frac{dtrP(e_k)}{dK_k}=0-2(HP(e_k)^-)^T+2K_kHP(e_k)^-H^T+2K_kR=0\\ \rightarrow-(HP(e_k)^-)^T+K_kHP(e_k)^-H^T+K_kR=0\\ \rightarrow K_k=\frac{(HP(e_k)^-)^T}{HP(e_k)^-H^T+R} dKkdtrP(ek)=02(HP(ek))T+2KkHP(ek)HT+2KkR=0(HP(ek))T+KkHP(ek)HT+KkR=0Kk=HP(ek)HT+R(HP(ek))T

注: d t r ( A B ) d A = B T \frac{dtr(AB)}{dA}=B^T dAdtr(AB)=BT d t r ( A B A T ) d A = A ( B + B T ) \frac{dtr(ABA^T)}{dA}=A(B+B^T) dAdtr(ABAT)=AB+BT

结论


K k = ( H P ( e k ) − ) T H P ( e k ) − H T + R K_k=\frac{(HP(e_k)^-)^T}{HP(e_k)^-H^T+R} Kk=HP(ek)HT+R(HP(ek))T
时误差最小。

直观理解:当 R R R测量的协方差很大时, K k K_k Kk取0此时取估计的结果,当 R R R很小时,K_k 取 取 H − H^- H此时取测量的结果

4、卡尔曼滤波器公式推导

已知状态空间方程
x k = A x k − 1 + B u k − 1 + ω k − 1 Z k = H x k + ν k x_k=Ax_{k-1}+Bu_{k-1}+\omega_{k-1}\\ Z_k=Hx_k+\nu_k xk=Axk1+Buk1+ωk1Zk=Hxk+νk
先验
x ^ k − = A x ^ k − 1 + B u k − 1 \hat{x}_k^-=A\hat{x}_{k-1}+Bu_{k-1}\\ x^k=Ax^k1+Buk1
卡尔曼增益
K k = ( H P ( e k ) − ) T H P ( e k ) − H T + R K_k=\frac{(HP(e_k)^-)^T}{HP(e_k)^-H^T+R} Kk=HP(ek)HT+R(HP(ek))T
求后验
x ^ k = x ^ k − + K k ( Z k − H x ^ k − ) \hat{x}_k=\hat{x}_{k}^-+K_k(Z_k-H\hat{x}_{k}^-)\\ x^k=x^k+Kk(ZkHx^k)
其中的 P ( e k ) − P(e_k)^- P(ek)未知,求 P ( e k ) − P(e_k)^- P(ek)
P ( e k ) − = E [ e k − e k − T ] P(e_k)^-=\mathbb{E}[e_k^-{e_k^-}^T]\\ P(ek)=E[ekekT]
e k − e_k^- ek定义为
e k − = x k − x ^ k − e_k^-=x_k-\hat{x}_k^- ek=xkx^k
带入式 ( 34 ) (34) (34) ( 35 ) (35) (35)
e k − = x k − x ^ k − = A x k − 1 + B u k − 1 + ω k − 1 − A x ^ k − 1 − B u k − 1 = A ( x k − 1 − x ^ k − 1 ) + ω k − 1 \begin{align*} e_k^-&=x_k-\hat{x}_k^-\\ &=Ax_{k-1}+Bu_{k-1}+\omega_{k-1}-A\hat{x}_{k-1}-Bu_{k-1}\\ &=A(x_{k-1}-\hat{x}_{k-1})+\omega_{k-1} \end{align*} ek=xkx^k=Axk1+Buk1+ωk1Ax^k1Buk1=A(xk1x^k1)+ωk1
e k − e_k^- ek带入到 P ( e k − ) P(e_k^-) P(ek)
P ( e k ) − = E [ e k − e k − T ] = E [ ( A ( x k − 1 − x ^ k − 1 ) + ω k − 1 ) ( A ( x k − 1 − x ^ k − 1 ) + ω k − 1 ) T ] = E [ A ( x k − 1 − x ^ k − 1 ) ( x k − 1 − x ^ k − 1 ) T A T + A ( x k − 1 − x ^ k − 1 ) ω k − 1 T + ω k − 1 ( x k − 1 − x ^ k − 1 ) T A T + ω k − 1 ω k − 1 T ] = A P ( e k − 1 ) A T + E [ A ( e k − 1 ) ω k − 1 T ] + E [ ω k − 1 ( e k − 1 ) T A T ] + E [ ω k − 1 ω k − 1 T ] = A P ( e k − 1 ) A T + Q \begin{align*} P(e_k)^-&=\mathbb{E}[e_k^-{e_k^-}^T]\\ &=\mathbb{E}[(A(x_{k-1}-\hat{x}_{k-1})+\omega_{k-1})(A(x_{k-1}-\hat{x}_{k-1})+\omega_{k-1})^T]\\ &=\mathbb{E}[A(x_{k-1}-\hat{x}_{k-1})(x_{k-1}-\hat{x}_{k-1})^TA^T+A(x_{k-1}-\hat{x}_{k-1})\omega_{k-1}^T+\omega_{k-1}(x_{k-1}-\hat{x}_{k-1})^TA^T+\omega_{k-1}\omega_{k-1}^T]\\ &=AP(e_{k-1})A^T+\mathbb{E}[A(e_{k-1})\omega_{k-1}^T]+\mathbb{E}[\omega_{k-1}(e_{k-1})^TA^T]+\mathbb{E}[\omega_{k-1}\omega_{k-1}^T]\\ &=AP(e_{k-1})A^T+Q \end{align*} P(ek)=E[ekekT]=E[(A(xk1x^k1)+ωk1)(A(xk1x^k1)+ωk1)T]=E[A(xk1x^k1)(xk1x^k1)TAT+A(xk1x^k1)ωk1T+ωk1(xk1x^k1)TAT+ωk1ωk1T]=AP(ek1)AT+E[A(ek1)ωk1T]+E[ωk1(ek1)TAT]+E[ωk1ωk1T]=AP(ek1)AT+Q
注: e k − 1 = x k − 1 − x ^ k − 1 e_{k-1}=x_{k-1}-\hat{x}_{k-1} ek1=xk1x^k1 P ( e k − 1 ) = E [ e k − 1 e k − 1 T ] P(e_{k-1})=\mathbb{E}[e_{k-1}{e_{k-1}}^T] P(ek1)=E[ek1ek1T] E [ A ( e k − 1 ) ω k − 1 T ] = E [ ω k − 1 ( e k − 1 ) T A T ] = 0 \mathbb{E}[A(e_{k-1})\omega_{k-1}^T]=\mathbb{E}[\omega_{k-1}(e_{k-1})^TA^T]=0 E[A(ek1)ωk1T]=E[ωk1(ek1)TAT]=0

ω k − 1 \omega_{k-1} ωk1 e k − 1 e_{k-1} ek1相互独立。

结论:

1、先预测

先验
x ^ k − = A x ^ k − 1 + B u k − 1 \hat{x}_k^-=A\hat{x}_{k-1}+Bu_{k-1}\\ x^k=Ax^k1+Buk1
先验误差的协方差
P ( e k ) − = A P ( e k − 1 ) A T + Q P(e_k)^-=AP(e_{k-1})A^T+Q P(ek)=AP(ek1)AT+Q
2、后矫正

卡尔曼增益
K k = ( H P ( e k ) − ) T H P ( e k ) − H T + R K_k=\frac{(HP(e_k)^-)^T}{HP(e_k)^-H^T+R} Kk=HP(ek)HT+R(HP(ek))T
求后验
x ^ k = x ^ k − + K k ( Z k − H x ^ k − ) \hat{x}_k=\hat{x}_{k}^-+K_k(Z_k-H\hat{x}_{k}^-)\\ x^k=x^k+Kk(ZkHx^k)
3、然后为下一次的预测准备

计算 P ( e k ) P(e_k) P(ek)
P ( e k ) = P ( e k ) − − P ( e k ) − H T K k T − K k H P ( e k ) − + K k H P ( e k ) − H T K k T + K k E [ ν k ν k T ] K k T = P ( e k ) − − P ( e k ) − H T K k T − K k H P ( e k ) − + K k ( H P ( e k ) − H T + R ) K k T = P ( e k ) − − P ( e k ) − H T K k T − K k H P ( e k ) − + P ( e k ) − H T K k T = P ( e k ) − − K k H P ( e k ) − = ( I − K k H ) P ( e k ) − \begin{align*} P(e_k) &=P(e_k)^--P(e_k)^-H^TK_k^T-K_kHP(e_k)^-+K_kHP(e_k)^-H^TK_k^T+K_k\mathbb{E}[\nu_k\nu_k^T]K_k^T\\ &=P(e_k)^--P(e_k)^-H^TK_k^T-K_kHP(e_k)^-+K_k(HP(e_k)^-H^T+R)K_k^T\\ &=P(e_k)^--P(e_k)^-H^TK_k^T-K_kHP(e_k)^-+P(e_k)^-H^TK_k^T\\ &=P(e_k)^--K_kHP(e_k)^-\\ &=(I-K_kH)P(e_k)^- \end{align*} P(ek)=P(ek)P(ek)HTKkTKkHP(ek)+KkHP(ek)HTKkT+KkE[νkνkT]KkT=P(ek)P(ek)HTKkTKkHP(ek)+Kk(HP(ek)HT+R)KkT=P(ek)P(ek)HTKkTKkHP(ek)+P(ek)HTKkT=P(ek)KkHP(ek)=(IKkH)P(ek)
其中的 R R R Q Q Q矩阵未知,需要根据实际传感器调优。

5、扩展卡尔曼滤波

正态分布的随机变量经过非线性系统之后就不在服从正态分布了

对于一个非线性系统如何估计出一个准确值??

非线性系统
x k = f ( x k − 1 , u k − 1 , ω k − 1 ) Z k = h ( x k , ν k ) x_k=f(x_{k-1},u_{k-1},\omega_{k-1})\\ Z_k=h(x_{k},\nu_{k}) xk=f(xk1,uk1,ωk1)Zk=h(xk,νk)
其中过程噪声 w k − 1 \mathbf{w}_{k-1} wk1 被视为状态的一个附加输入,其线性化效果也需要考虑。这时对整个状态转移方程进行线性化:
f ( x k − 1 + δ x k − 1 , u k − 1 ) + w k − 1 ≈ f ( x ^ k − 1 , u k − 1 ) + A k − 1 ( x k − 1 − x ^ k − 1 ) + W k − 1 w k − 1 f(\mathbf{x}_{k-1} + \delta \mathbf{x}_{k-1},\mathbf{u}_{k-1}) + \mathbf{w}_{k-1} \approx f(\hat{\mathbf{x}}_{k-1}, \mathbf{u}_{k-1}) + \mathbf{A}_{k-1} ({x}_{k-1}-\hat{x}_{k-1}) + \mathbf{W}_{k-1} \mathbf{w}_{k-1} f(xk1+δxk1,uk1)+wk1f(x^k1,uk1)+Ak1(xk1x^k1)+Wk1wk1
其中:

  • $\mathbf{W}{k-1} = \left. \frac{\partial f}{\partial \mathbf{w}} \right|{\mathbf{x} = \hat{\mathbf{x}}_{k-1}} $是对噪声的灵敏度矩阵(通常为单位矩阵,假设噪声直接叠加在状态上)。
  • 其中 A k − 1 \mathbf{A}_{k-1} Ak1 是状态转移函数的雅可比矩阵: A k − 1 = ∂ f ∂ x ∣ x = x ^ k − 1 , u = u k − 1 \mathbf{A}_{k-1} = \left. \frac{\partial f}{\partial \mathbf{x}} \right|_{\mathbf{x} = \hat{\mathbf{x}}_{k-1}, \mathbf{u} = \mathbf{u}_{k-1}} Ak1=xf x=x^k1,u=uk1

于是,状态预测模型可以线性化为:
x k = f ( x ~ k − 1 , u k − 1 , 0 ) + A k − 1 ( x k − 1 − x ~ k − 1 ) + W k − 1 w k − 1 , \mathbf{x}_k = f(\tilde{\mathbf{x}}_{k-1}, \mathbf{u}_{k-1}, 0) + \mathbf{A}_{k-1} (\mathbf{x}_{k-1} - \tilde{\mathbf{x}}_{k-1}) + \mathbf{W}_{k-1} \mathbf{w}_{k-1}, xk=f(x~k1,uk1,0)+Ak1(xk1x~k1)+Wk1wk1,
f ( x ^ k − 1 , u k − 1 , 0 ) = x k ~ f(\hat{\mathbf{x}}_{k-1}, \mathbf{u}_{k-1}, 0)=\tilde{x_k} f(x^k1,uk1,0)=xk~

然后对测量结果进行线性化

类似地,对于观测函数 h ( x k ) h(\mathbf{x}_k) h(xk),在当前预测点 x ~ k \tilde{\mathbf{x}}_{k} x~k 附近展开:
Z k = h ( x ~ k , 0 ) + H k ( x k − x ~ k ) + V ν k , Z_k=h(\tilde{\mathbf{x}}_{k},0) + \mathbf{H}_k (\mathbf{x}_k - \tilde{\mathbf{x}}_{k})+V\nu_k, Zk=h(x~k,0)+Hk(xkx~k)+Vνk,
其中:
H k = ∂ h ∂ x ∣ x = x ~ k V k = ∂ h ∂ ν ∣ x = x ~ k \mathbf{H}_k = \left. \frac{\partial h}{\partial \mathbf{x}} \right|_{\mathbf{x} = \tilde{\mathbf{x}}_{k}}\\ \mathbf{V}_k = \left. \frac{\partial h}{\partial \mathbf{\nu}} \right|_{\mathbf{x} = \tilde{\mathbf{x}}_{k}} Hk=xh x=x~kVk=νh x=x~k
是观测函数的雅可比矩阵。

线性化之后

x k = f ( x ~ k − 1 , u k − 1 , 0 ) + A k − 1 ( x k − 1 − x ~ k − 1 ) + W k − 1 ω k − 1 , Z k = h ( x ~ k , 0 ) + H k ( x k − x ~ k ) + V ν k , \mathbf{x}_k = f(\tilde{\mathbf{x}}_{k-1}, \mathbf{u}_{k-1}, 0) + \mathbf{A}_{k-1} (\mathbf{x}_{k-1} - \tilde{\mathbf{x}}_{k-1}) + \mathbf{W}_{k-1} \omega_{k-1},\\ Z_k=h(\tilde{\mathbf{x}}_{k},0) + \mathbf{H}_k (\mathbf{x}_k - \tilde{\mathbf{x}}_{k})+V\nu_k, xk=f(x~k1,uk1,0)+Ak1(xk1x~k1)+Wk1ωk1,Zk=h(x~k,0)+Hk(xkx~k)+Vνk,

其中 P ( ω ( k − 1 ) ) = ( 0 , Q ) P(\omega_(k-1))=(0,Q) P(ω(k1))=(0,Q) P ( W ω ) = ( 0 , W Q W T ) P(W\omega)=(0,WQW^T) P()=(0,WQWT) P ( V ν ) = ( 0 , V ν V T ) P(V\nu)=(0,V \nu V^T) P(Vν)=(0,VνVT)

扩展卡尔曼滤波

1、先预测

先验
x ^ k − = f ( x ^ k − 1 , u k − 1 , 0 ) \hat{x}_k^-=f(\hat{\mathbf{x}}_{k-1}, \mathbf{u}_{k-1}, 0)\\ x^k=f(x^k1,uk1,0)
先验误差的协方差
P ( e k ) − = A P ( e k − 1 ) A T + W Q W T P(e_k)^-=AP(e_{k-1})A^T+WQW^T P(ek)=AP(ek1)AT+WQWT
2、后矫正

卡尔曼增益
K k = ( H P ( e k ) − ) T H P ( e k ) − H T + V R V T K_k=\frac{(HP(e_k)^-)^T}{HP(e_k)^-H^T+VRV^T} Kk=HP(ek)HT+VRVT(HP(ek))T
求后验
x ^ k = x ^ k − + K k ( Z k − h ( x ~ k , 0 ) ) \hat{x}_k=\hat{x}_{k}^-+K_k(Z_k-h(\tilde{x}_k,0))\\ x^k=x^k+Kk(Zkh(x~k,0))
3、然后为下一次的预测准备

计算 P ( e k ) P(e_k) P(ek)
P ( e k ) = ( I − K k H ) P ( e k ) − \begin{align*} P(e_k) &=(I-K_kH)P(e_k)^- \end{align*} P(ek)=(IKkH)P(ek)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinForm 的Combox下拉框 在FlatStyle.Flat的边框设置

现象:Combox在设置FlatStyle.Flat时边框不见了 效果: 解决问题思路封装新控件: public class DBorderComboBox : ComboBox {private const int WM_PAINT 0xF;[Browsable(true)][Category("Appearance")][Description("边框…

Python 爬虫入门教程:从零构建你的第一个网络爬虫

网络爬虫是一种自动化程序,用于从网站抓取数据。Python 凭借其丰富的库和简单的语法,是构建网络爬虫的理想语言。本文将带你从零开始学习 Python 爬虫的基本知识,并实现一个简单的爬虫项目。 1. 什么是网络爬虫? 网络爬虫&#x…

使用UE5.5的Animator Kit变形器

UE5.5版本更新了AnimatorKit内置插件,其中包含了一些内置变形器,可以辅助我们的动画制作。 操作步骤 首先打开UE5.5,新建第三人称模板场景以便测试,并开启AnimatorKit组件。 新建Sequence,放入测试角色 点击角色右…

Uniapp 安装安卓、IOS模拟器并调试

一、安装Android模拟器并调试 1. 下载并安装 Android Studio 首先下载 Mac 环境下的 Android Studio 的安装包,为dmg 格式。 下载完将Android Studio 向右拖拽到Applications中,接下来等待安装完成就OK啦! 打开过程界面如下图所示&#xf…

shell(5)字符串运算符和逻辑运算符

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

【金蝶双线指标】以看资金进出操作为主,兼顾波段跟踪和短线低吸

如上图,个股副图指标,大佬资金监控短线低吸攻击线操盘线趋势红蝴蝶,五大功能于一体。下面慢慢给大家仔细分享。 大佬资金监控指标,红绿进出,绿色缩小到极致,接近零轴,红绿柱分界线,为…

多输入多输出 | Matlab实现TCN-GRU时间卷积神经网络结合门控循环单元多输入多输出预测

多输入多输出 | Matlab实现TCN-GRU时间卷积神经网络结合门控循环单元多输入多输出预测 目录 多输入多输出 | Matlab实现TCN-GRU时间卷积神经网络结合门控循环单元多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现TCN-GRU时间卷积…

HCIA笔记4--VLAN划分

1. vlan是什么 vlan: virtual lan; 虚拟局域网的简称。 主要目的是隔离广播域。 2. vlan报文格式 在普通的以太网数据帧开关的12字节后添加4字节的vlan tag。而来区分vlan的是其中的vid部分12个比特位,范围自然就是0~2^12-1(0~4095); 0 4095保留使用。实际使用的是…

蓝牙定位的MATLAB仿真程序|基于信号强度的定位,平面、四个蓝牙基站(附源代码)

这段代码通过RSSI信号强度实现了蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。它涵盖了信号衰减模型、距离计算和最小二乘法估计等基本概念。通过图形化输出,用户可以直观地看到真实位置与估计位置的关系。 文章目录 蓝牙定位原…

基于Springboot企业级工位管理系统【附源码】

基于Springboot企业级工位管理系统 效果如下: 系统登录页面 员工主页面 部门信息页面 员工管理页面 部门信息管理页面 工位信息管理页面 工位分配管理页面 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所。…

Spring Boot教程之十: 使用 Spring Boot 实现从数据库动态下拉列表

使用 Spring Boot 实现从数据库动态下拉列表 动态下拉列表(或依赖下拉列表)的概念令人兴奋,但编写起来却颇具挑战性。动态下拉列表意味着一个下拉列表中的值依赖于前一个下拉列表中选择的值。一个简单的例子是三个下拉框,分别显示…

SpringBoot源码-spring boot启动入口ruan方法主线分析(一)

一、SpringBoot启动的入口 1.当我们启动一个SpringBoot项目的时候,入口程序就是main方法,而在main方法中就执行了一个run方法。 SpringBootApplication public class StartApp {public static void main(String[] args) {// testSpringApplication.ru…

AI 助力开发新篇章:云开发 Copilot 深度体验与技术解析

本文 一、引言:技术浪潮中的个人视角1.1 AI 和低代码的崛起1.2 为什么选择云开发 Copilot? 二、云开发 Copilot 的核心功能解析2.1 自然语言驱动的低代码开发2.1.1 自然语言输入示例2.1.2 代码生成的模块化支持 2.2 实时预览与调整2.2.1 实时预览窗口功能…

vscode的markdown扩展问题

使用vscode编辑markdown文本时,我是用的是Office Viewer(Markdown Editor)这个插件 今天突然发现不能用了,点击切换编辑视图按钮时会弹出报错信息: command office.markdown.switch not found 在网上找了很久发现没有有关这个插件的文章………

从零开始学 Maven:简化 Java 项目的构建与管理

一、关于Maven 1.1 简介 Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。Maven 的设计目标是提供一种更加简单、一致的方法来构建和管理项目,它通过使用一个标准的目录布局和一…

去哪儿大数据面试题及参考答案

Hadoop 工作原理是什么? Hadoop 是一个开源的分布式计算框架,主要由 HDFS(Hadoop 分布式文件系统)和 MapReduce 计算模型两部分组成 。 HDFS 工作原理 HDFS 采用主从架构,有一个 NameNode 和多个 DataNode。NameNode 负…

守护进程

目录 守护进程 前台进程 后台进程 session(进程会话) 前台任务和后台任务比较好 本质 绘画和终端都关掉了,那些任务仍然在 bash也退了,然后就托孤了 ​编辑 守护进程化---不想受到任何用户登陆和注销的影响​编辑 如何…

element ui select绑定的值是对象的属性时,显示异常.

需要声明 value-key"value". el-select v-model"value" clearable placeholder"Select" value-key"value" style"width: 240px"><!-- <el-option v-for"item in options" :key"item.value" :…

SAAS美容美发系统架构解析

随着技术的不断发展&#xff0c;SAAS&#xff08;Software as a Service&#xff0c;软件即服务&#xff09;模式在各个行业的应用逐渐深化&#xff0c;美容美发行业也不例外。传统的美容美发店面通常依赖纸质记录、手动操作和复杂的管理流程&#xff0c;而随着SAAS平台的出现&…

[代码随想录Day24打卡] 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 一个合法的IP地址是什么样的&#xff1a; 有3个’.分割得到4个数&#xff0c;每个数第一个数不能是0&#xff0c;不能含有非法字符&#xff0c;不能大于255。 这个是否属于合法IP相当于一个分割问题&#xff0c;把一串字符串分割成4部分&#xff0c;分别判断每…