卡尔曼滤波与组合导航原理(七)平方根Kalman滤波:Potter平方根滤波、SVD分解滤波、UD分解滤波、平方根信息滤波SRIKF

news2024/11/28 14:17:56

文章目录

    • 一、平方根滤波基本形式
    • 二、Potter平方根滤波
      • 1、方差阵的量测更新
      • 2、方差阵的时间更新
      • 3、Potter平方根滤波流程
      • 4、向量量测情况下的方差阵量测更新
    • 三、奇异值(SVD)分解滤波
      • 1、时间更新方差方程的SVD分解
      • 2、量测更新方差方程的SVD分解
      • 3、SVD分解滤波流程
    • 四、UD分解滤波
      • 1、量测更新方差方程UD分解
      • 2、时间更新方差方程UD分解
        • 1.朴素算法
        • 2.快速算法
    • 五、平方根信息滤波SRIKF

常见矩阵分解简介:

  • LU分解 M = L U M=LU M=LU L L L 是下三角矩阵, U U U 是上三角矩阵。方便求矩阵的行列式和逆,解线性方程组。
  • Cholesky分解 M = L T L ​ M=L^TL​ M=LTL L ​ L​ L 是上三角矩阵。是LU分解的进阶版。但是不同于LU分解的是,Cholesky分解只适用于正定的对称阵。在复数域,Cholesky分解要求矩阵是正定的共轭对称矩阵。要求这么多,就是因为Cholesky分解可以看成是给矩阵开平方根。
  • QR分解 M = Q R M=QR M=QR ,其中 Q Q Q 是正交矩阵, R R R 是上三角矩阵。主要有三种方法:Gram-Schmidt正交化法(QR分解中的Q本身就可以看作是正交化构造出来的),Household变换法,Givens变换法。 可以用来求矩阵的特征值以及求解最小二乘法。
  • 特征值分解 M = V D V T M=VDV^T M=VDVT ,其中 V V V 是正交阵, D D D 是由 M M M 的特征值构成的对角矩阵。只适用于方阵,目的是提取出矩阵最重要的特征。
  • 奇异值分解(SVD分解) M = U S V T M=USV^T M=USVT ,其中 U U U V V V 是正交矩阵, S S S 是由 M M M 的奇异值构成的对角矩阵。特征值分解只适用于方阵,对于普通矩阵,则可以采用奇异值分解,提取出奇异值。
  • UD分解 M = U D U T M=UDU^T M=UDUT U U U 为上三角且对角线元素为 1 1 1 D D D 为对角阵

一、平方根滤波基本形式

img

在计算机中,单精度浮点数(float)有效数字为7位,双精度 (double)为16位,为了提高前者环境下的均方差阵计算精度,须采用平方根滤波。Kalman滤波计算过程中,有三个方差阵,分别可以记为:
P k − 1 = U k − 1 U k − 1 T P k / k − 1 = Δ k / k − 1 Δ k / k − 1 T P k = U k Δ k T \begin{array}{l} \boldsymbol{{P}_{k-1}}=\boldsymbol{U}_{k-1} \boldsymbol{U}_{k-1}^{\mathrm{T}}\\\boldsymbol{P}_{k / k-1}=\boldsymbol{\Delta}_{k / k-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \\\boldsymbol{P}_{k}=\boldsymbol{U}_{k} \boldsymbol{\Delta}_{k}^{\mathrm{T}} \end{array} Pk1=Uk1Uk1TPk/k1=Δk/k1Δk/k1TPk=UkΔkT

方差都可以表示成平方的形式,标量的平方直接拆成中误差的平方就行,矩阵的平方可以拆成一个矩阵乘以它的转置,最常见是表示成下三角阵乘上三角阵形式(Cholesky分解)。

标准Kalman滤波的流程图可以表示成:

将图中的 P 、 Q 、 R P、Q、R PQR 都用平方根形式替换 ,得:

  • 更新都用平方根,损失精度小。
  • 每一次滤波只计算一次增益矩阵 K K K ,用于左边的滤波计算回路,而对右边的增益计算回路无影响,可以损失一点精度。

二、Potter平方根滤波

1、方差阵的量测更新

考虑量测为标量的情况,由标准Kalman滤波方差阵递推公式:

如果不是标量量测,就用序贯滤波的方法,一个个做滤波

K k = P k / k − 1 H k T ( H k P k / k − 1 H k T + R k ) − 1 P k = ( I − K k H k ) P k / k − 1 \begin{array}{l}\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}}+R_{k}\right)^{-1} \\ \boldsymbol{P}_{k}=\left(\boldsymbol{I}-\boldsymbol{K}_{k} \boldsymbol{H}_{k}\right) \boldsymbol{P}_{k / k-1}\end{array} Kk=Pk/k1HkT(HkPk/k1HkT+Rk)1Pk=(IKkHk)Pk/k1

K K K 带入第二个公式:
P k = P k / k − 1 − P k / k − 1 H k T ( H k P k / k − 1 H k T + R k ) − 1 H k P k / k − 1 \boldsymbol{P}_{k}=\boldsymbol{P}_{k / k-1}-\boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+R_{k}\right)^{-1} \boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} Pk=Pk/k1Pk/k1HkT(HkPk/k1HkT+Rk)1HkPk/k1
将方差阵Cholesky分解,表示成平方根形式:
Δ k Δ k T = Δ k / k − 1 Δ k / k − 1 T − Δ k / k − 1 Δ k / k − 1 T H k T ( H k Δ k / k − 1 Δ k / k − 1 T H k T + R k ) − 1 H k Δ k / k − 1 Δ k / k − 1 T = Δ k / k − 1 [ I − Δ k / k − 1 T H k T ( H k Δ k / k − 1 Δ k / k − 1 T H k T + R k ) − 1 H k Δ k / k − 1 ] Δ k / k − 1 T \begin{array}{l} \boldsymbol{\Delta}_{k} \boldsymbol{\Delta}_{k}^{\mathrm{T}}=\boldsymbol{\Delta}_{k / k-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}}-\boldsymbol{\Delta}_{k / k-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}\left(\boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}+R_{k}\right)^{-1} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \\ =\boldsymbol{\Delta}_{k / k-1}\left[\boldsymbol{I}-\boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}{\color{red}\left(\boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}+R_{k}\right)}^{-1} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right] \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \\\end{array} ΔkΔkT=Δk/k1Δk/k1TΔk/k1Δk/k1THkT(HkΔk/k1Δk/k1THkT+Rk)1HkΔk/k1Δk/k1T=Δk/k1[IΔk/k1THkT(HkΔk/k1Δk/k1THkT+Rk)1HkΔk/k1]Δk/k1T
其中, H k Δ k / k − 1 Δ k / k − 1 T H k T + R k \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}+R_{k} HkΔk/k1Δk/k1THkT+Rk 是标量,记为 ρ k 2 \rho_{k}^{2} ρk2 ,可以在矩阵的前后随意移动,上式变为:
Δ k / k − 1 ( I − ρ k − 2 Δ k / k − 1 T H k T H k Δ k / k − 1 ) Δ k / k − 1 T \boldsymbol{\Delta}_{k / k-1}{\color{green}\left(\boldsymbol{I}-\rho_{k}^{-2} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right)} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \quad Δk/k1(Iρk2Δk/k1THkTHkΔk/k1)Δk/k1T

其中,绿色部分 ( I − ρ k − 2 Δ k / k − 1 T H k T H k Δ k / k − 1 ) \left(\boldsymbol{I}-{\color{brown}\rho_{k}^{-2}} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right) (Iρk2Δk/k1THkTHkΔk/k1) 的平方根分解:

γ k − 1 \gamma_{k}^{-1} γk1 为待 定系数,写成分解的形式:
( I − γ k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 ) ( I − γ k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 ) T = I − 2 γ k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 + γ k − 2 Δ k / k − 1 T H k T H k Δ k / k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 = I − 2 γ k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 + γ k − 2 Δ k / k − 1 T H k T ( ρ k 2 − R k ) H k Δ k / k − 1 = I − [ 2 γ k − 1 − ( ρ k 2 − R k ) γ k − 2 ] Δ k / k − 1 T H k T H k Δ k / k − 1 \begin{aligned}(\boldsymbol{I}- & \left.\gamma_{k}^{-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right)\left(\boldsymbol{I}-\gamma_{k}^{-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right)^{\mathrm{T}} \\ & =\boldsymbol{I}-2 \gamma_{k}^{-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}+\gamma_{k}^{-2} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1} \\ & =\boldsymbol{I}-2 \gamma_{k}^{-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}+\gamma_{k}^{-2} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}\left(\rho_{k}^{2}-R_{k}\right) \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1} \\ & =\boldsymbol{I}-{\color{brown}\left[2 \gamma_{k}^{-1}-\left(\rho_{k}^{2}-R_{k}\right) \gamma_{k}^{-2}\right]} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\end{aligned} (Iγk1Δk/k1THkTHkΔk/k1)(Iγk1Δk/k1THkTHkΔk/k1)T=I2γk1Δk/k1THkTHkΔk/k1+γk2Δk/k1THkTHkΔk/k1Δk/k1THkTHkΔk/k1=I2γk1Δk/k1THkTHkΔk/k1+γk2Δk/k1THkT(ρk2Rk)HkΔk/k1=I[2γk1(ρk2Rk)γk2]Δk/k1THkTHkΔk/k1
最后的式子和原式很相似,只差了棕色的部分,令棕色部分相等,可解待定系数 γ k − 1 \gamma_{k}^{-1} γk1
ρ k − 2 = 2 γ k − 1 − ( ρ k 2 − R k ) γ k − 2 \rho_{k}^{-2}=2 \gamma_{k}^{-1}-\left(\rho_{k}^{2}-R_{k}\right) \gamma_{k}^{-2} ρk2=2γk1(ρk2Rk)γk2
由:
ρ k − 2 = 2 γ k − 1 − ( ρ k 2 − R k ) γ k − 2 γ k 2 − 2 ρ k 2 γ k + ρ k 2 ( ρ k 2 − R k ) = 0 ρ k 2 = H k Δ k ∣ k − 1 Δ k ∣ k − 1 T H k T + R k \begin{array}{l} \rho_{k}^{-2}=2 \gamma_{k}^{-1}-\left(\rho_{k}^{2}-R_{k}\right) \gamma_{k}^{-2} \\ \gamma_{k}^{2}-2 \rho_{k}^{2} \gamma_{k}+\rho_{k}^{2}\left(\rho_{k}^{2}-R_{k}\right)=0 \quad \rho_{k}^{2}=\boldsymbol{H}_{k} \boldsymbol{\Delta}_{k \mid k-1} \boldsymbol{\Delta}_{k \mid k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}+R_{k} \end{array} ρk2=2γk1(ρk2Rk)γk2γk22ρk2γk+ρk2(ρk2Rk)=0ρk2=HkΔkk1Δkk1THkT+Rk
由于是二次,所以 γ k − 1 \gamma_{k}^{-1} γk1 有两个解:
γ k = 2 ρ k 2 ± 4 ρ k 4 − 4 ρ k 2 ( ρ k 2 − R k ) 2 = ρ k ( ρ k ± R k ) \gamma_{k}=\frac{2 \rho_{k}^{2} \pm \sqrt{4 \rho_{k}^{4}-4 \rho_{k}^{2}\left(\rho_{k}^{2}-R_{k}\right)}}{2}=\rho_{k}\left(\rho_{k} \pm \sqrt{R_{k}}\right) γk=22ρk2±4ρk44ρk2(ρk2Rk) =ρk(ρk±Rk )

将改部分进行分解:
Δ k Δ k T = Δ k / k − 1 ( I − ρ k − 2 Δ k / k − 1 T H k T H k Δ k / k − 1 ) Δ k / k − 1 T = Δ k / k − 1 ( I − γ k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 ) ( I − γ k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 ) T Δ k / k − 1 T = [ Δ k / k − 1 ( I − γ k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 ) ] [ Δ k / k − 1 ( I − γ k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 ) ] T \begin{aligned} \boldsymbol{\Delta}_{k} \boldsymbol{\Delta}_{k}^{\mathrm{T}} & =\boldsymbol{\Delta}_{k / k-1}\left(\boldsymbol{I}-\rho_{k}^{-2} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right) \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \\ & =\boldsymbol{\Delta}_{k / k-1}\left(\boldsymbol{I}-\gamma_{k}^{-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right)\left(\boldsymbol{I}-\gamma_{k}^{-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right)^{\mathrm{T}} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \\ & =\left[\boldsymbol{\Delta}_{k / k-1}\left(\boldsymbol{I}-\gamma_{k}^{-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right)\right]\left[\boldsymbol{\Delta}_{k / k-1}\left(\boldsymbol{I}-\gamma_{k}^{-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right)\right]^{\mathrm{T}} \end{aligned} ΔkΔkT=Δk/k1(Iρk2Δk/k1THkTHkΔk/k1)Δk/k1T=Δk/k1(Iγk1Δk/k1THkTHkΔk/k1)(Iγk1Δk/k1THkTHkΔk/k1)TΔk/k1T=[Δk/k1(Iγk1Δk/k1THkTHkΔk/k1)][Δk/k1(Iγk1Δk/k1THkTHkΔk/k1)]T
得到方差阵的分解:
Δ k = U k / k − 1 ( I − γ k − 1 Δ k / k − 1 T H k T H k Δ k / k − 1 ) \boldsymbol{\Delta}_{k}=\boldsymbol{U}_{k / k-1}\left(\boldsymbol{I}-\gamma_{k}^{-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{H}_{k} \boldsymbol{\Delta}_{k / k-1}\right) Δk=Uk/k1(Iγk1Δk/k1THkTHkΔk/k1)
实现方差阵的量测更新: Δ k / k − 1 , R k 1 / 2 ⟶ Δ k \boldsymbol{\Delta}_{k / k-1}, \boldsymbol{R}_{k}^{1 / 2} \longrightarrow \boldsymbol{\Delta}_{k} Δk/k1,Rk1/2Δk

2、方差阵的时间更新

由标准Kalman滤波的时间更新:
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
写成分解形式:
Δ k / k − 1 Δ k / k − 1 T = Φ k / k − 1 Δ k − 1 Δ k − 1 T Φ k / k − 1 T + Γ k − 1 Q k − 1 1 2 ( Q k − 1 1 2 ) T Γ k − 1 T = [ Φ k / k − 1 Δ k − 1 Γ k − 1 Q k − 1 1 2 ] [ Δ k − 1 T Φ k / k − 1 T ( Q k − 1 1 2 ) T Γ k − 1 T ] \begin{array}{c}\boldsymbol{\Delta}_{k / k-1} \boldsymbol{\Delta}_{k / k-1}^{\mathrm{T}}=\boldsymbol{\Phi}_{k / k-1} \boldsymbol{\Delta}_{k-1} \boldsymbol{\Delta}_{k-1}^{\mathrm{T}} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1}^{\frac{1}{2}}\left(\boldsymbol{Q}_{k-1}^{\frac{1}{2}}\right)^{\mathrm{T}} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}} \\ =\left[\begin{array}{ll}\boldsymbol{\Phi}_{k / k-1} \boldsymbol{\Delta}_{k-1} & \boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1}^{\frac{1}{2}}\end{array}\right]\left[\begin{array}{c}\boldsymbol{\Delta}_{k-1}^{\mathrm{T}} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}} \\ \left(\boldsymbol{Q}_{k-1}^{\frac{1}{2}}\right)^{\mathrm{T}} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}}\end{array}\right]\end{array} Δk/k1Δk/k1T=Φk/k1Δk1Δk1TΦk/k1T+Γk1Qk121(Qk121)TΓk1T=[Φk/k1Δk1Γk1Qk121] Δk1TΦk/k1T(Qk121)TΓk1T

不能直接将 Φ k / k − 1 Δ k − 1 Γ k − 1 Q k − 1 1 2 \boldsymbol{\Phi}_{k / k-1} \boldsymbol{\Delta}_{k-1} \boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1}^{\frac{1}{2}} Φk/k1Δk1Γk1Qk121 作为 Δ k / k − 1 \boldsymbol{\Delta}_{k / k-1} Δk/k1 ,因为 A A T = B B T AA^T=BB^T AAT=BBT 时,不能说 A = B A=B A=B

QR分解:列满秩矩阵 A m ∗ n A_{m*n} Amn 总可以做QR分解: A m × n = Q ^ m × n R ^ n × n \boldsymbol{A}_{m \times n}=\hat{\boldsymbol{Q}}_{m \times n} \hat{\boldsymbol{R}}_{n \times n} Am×n=Q^m×nR^n×n 且有 Q ^ m × n T Q ^ m × n = I \hat{\boldsymbol{Q}}_{m \times n}^{\mathrm{T}} \hat{\boldsymbol{Q}}_{m \times n}=\boldsymbol{I} Q^m×nTQ^m×n=I R ^ n × n \hat{\boldsymbol{R}}_{n \times n} R^n×n 是上三角可逆。

对上式QR分解:
( Q ^ 2 n × n R ^ n × n ) T ( Q ^ 2 n × n R ^ n × n ) = R n × n T R ^ n × n \left(\hat{\boldsymbol{Q}}_{2 n \times n} \hat{\boldsymbol{R}}_{n \times n}\right)^{\mathrm{T}}\left({\hat{\boldsymbol{Q}}_{2 n \times n} \hat{\boldsymbol{R}}_{n \times n}}\right)={\boldsymbol{R}}_{n \times n}^{\mathrm{T}} \hat{\boldsymbol{R}}_{n \times n} (Q^2n×nR^n×n)T(Q^2n×nR^n×n)=Rn×nTR^n×n

QR分解的改进:施密特正交化法,伪代码如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cc0WMdKk-1686126621082)(卡尔曼滤波与组合导航原理(七)平方根Kalman滤波.assets/1686048938976.png)]

核心就是每个新的矢量都减去它在已经正交化的矢量方向的投影,进而每次新增一个新的正交矢量。新的矢量只和之前的矢量有关,而与后面的矢量无关。

先把 [ Δ k − 1 T Φ k / k − 1 T ( Q k − 1 1 2 ) T Γ k − 1 T ] \left[\begin{array}{c}\boldsymbol{\Delta}_{k-1}^{\mathrm{T}} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}} \\ \left(\boldsymbol{Q}_{k-1}^{\frac{1}{2}}\right)^{\mathrm{T}} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}}\end{array}\right] Δk1TΦk/k1T(Qk121)TΓk1T 求出来,再用Gram-Schmidt法即可得到方差阵的时间更新 Δ k / k − 1 \boldsymbol{\Delta}_{k / k-1} Δk/k1

3、Potter平方根滤波流程

4、向量量测情况下的方差阵量测更新

改量测更新就行,时间更新没必要改

前述标量量测情形

同理,向量量测情形:

全流程:

  • 时间更新: Δ k − 1 ⟶ Q R Δ k / k − 1 \Delta_{k-1} \stackrel{\mathrm{QR}}{\longrightarrow} \Delta_{k / k-1} Δk1QRΔk/k1 ,要做一次QR分解
  • 量测更新: Δ k / k − 1 ⟶ Q R γ k ⟶  求逆  Δ k \boldsymbol{\Delta}_{k / k-1} \stackrel{\mathrm{QR}}{\longrightarrow} \gamma_{k} \stackrel{\text { 求逆 }}{\longrightarrow} \boldsymbol{\Delta}_{k} Δk/k1QRγk 求逆 Δk ,也要做一次QR分解(其实前面标量的开方也是QR分解)

三、奇异值(SVD)分解滤波

奇异值分解可以参考博客

M = U S V T M=USV^T M=USVT,其中 U U U V V V 是正交矩阵, S S S 是由 M M M 的奇异值构成的对角矩阵。我们用奇异值分解的是方差阵,它对称正定。对称所以 U U U V V V 相等,正定所以奇异值都大于 0 0 0

朴素分解方式:

上式每次更新要做两次QR分解,两次三角阵求逆;考虑用SVD分解,这样就只用做对角阵求逆。

1、时间更新方差方程的SVD分解

将方程的 P k / k − 1 P_{k/k-1} Pk/k1 分解为 U k / k − 1 Λ k / k − 1 U k / k − 1 T \boldsymbol{U}_{k / k-1} \boldsymbol{\Lambda}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} Uk/k1Λk/k1Uk/k1T P k − 1 P_{k-1} Pk1 分解为 U k − 1 Λ k − 1 U k − 1 T \boldsymbol{U}_{k-1} \boldsymbol{\Lambda}_{ k-1} \boldsymbol{U}_{ k-1}^{\mathrm{T}} Uk1Λk1Uk1T ,选择合适的 Γ \boldsymbol{\Gamma} Γ 噪声系数分配矩阵,可以认为 Q Q Q 是对角阵。
l U k / k − 1 Λ k / k − 1 U k / k − 1 T = Φ k / k − 1 U k − 1 Λ k − 1 U k − 1 T Φ k / k − 1 T + Γ k − 1 Q k − 1 Γ k − 1 T = [ Φ k / k − 1 U k − 1 Λ k − 1 1 2 Γ k − 1 Q k − 1 1 2 ] [ ( Λ k − 1 1 2 ) T U k − 1 T Φ k / k − 1 T ( Q k − 1 1 2 ) T Γ k − 1 T ] \begin{aligned}{l} \boldsymbol{U}_{k / k-1} {\color{brown}\boldsymbol{\Lambda}_{k / k-1}} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} & =\boldsymbol{\Phi}_{k / k-1} \boldsymbol{U}_{k-1} \boldsymbol{\Lambda}_{k-1} \boldsymbol{U}_{k-1}^{\mathrm{T}} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}} \\ & =\left[\begin{array}{lll}\boldsymbol{\Phi}_{k / k-1} \boldsymbol{U}_{k-1} \boldsymbol{\Lambda}_{k-1}^{\frac{1}{2}} & \boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1}^{\frac{1}{2}}\end{array}\right]\left[\begin{array}{c}\left(\boldsymbol{\Lambda}_{k-1}^{\frac{1}{2}}\right)^{\mathrm{T}} \boldsymbol{U}_{k-1}^{\mathrm{T}} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}} \\ \left(\boldsymbol{Q}_{k-1}^{\frac{1}{2}}\right)^{\mathrm{T}} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}}\end{array}\right] \end{aligned} lUk/k1Λk/k1Uk/k1T=Φk/k1Uk1Λk1Uk1TΦk/k1T+Γk1Qk1Γk1T=[Φk/k1Uk1Λk121Γk1Qk121] (Λk121)TUk1TΦk/k1T(Qk121)TΓk1T
再对矩阵做奇异值分解,得:
= ( S k / k − 1 D k / k − 1 V k / k − 1 T ) ( S k / k − 1 D k / k − 1 V k / k − 1 T ) T = S k / k − 1 D k / k − 1 D k / k − 1 T S k / k − 1 T \begin{array}{l} =\left(\boldsymbol{S}_{k / k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{V}_{k / k-1}^{\mathrm{T}}\right)\left(\boldsymbol{S}_{k / k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{V}_{k / k-1}^{\mathrm{T}}\right)^{\mathrm{T}} \\ =\boldsymbol{S}_{k / k-1} {\color{brown}\boldsymbol{D}_{k / k-1} \boldsymbol{D}_{k / k-1}}^{\mathrm{T}} \boldsymbol{S}_{k / k-1}^{\mathrm{T}} \end{array} =(Sk/k1Dk/k1Vk/k1T)(Sk/k1Dk/k1Vk/k1T)T=Sk/k1Dk/k1Dk/k1TSk/k1T
此式与原式形式一致,令:
U k / k − 1 = S k / k − 1 , Λ k / k − 1 1 2 = D k / k − 1 \boldsymbol{U}_{k / k-1}=\boldsymbol{S}_{k / k-1}, \boldsymbol{\Lambda}_{k / k-1}^{\frac{1}{2}}=\boldsymbol{D}_{k / k-1} Uk/k1=Sk/k1,Λk/k121=Dk/k1

2、量测更新方差方程的SVD分解

同样,将方程的 P k / k − 1 P_{k/k-1} Pk/k1 分解为 U k / k − 1 Λ k / k − 1 U k / k − 1 T \boldsymbol{U}_{k / k-1} \boldsymbol{\Lambda}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} Uk/k1Λk/k1Uk/k1T P k P_{k} Pk 分解为 U k Λ k U k T \boldsymbol{U}_{k} \boldsymbol{\Lambda}_{ k} \boldsymbol{U}_{ k}^{\mathrm{T}} UkΛkUkT ,得:
U k Λ k − 1 U k T = U k / k − 1 Λ k / k − 1 − 1 U k / k − 1 T + H k T R k − 1 H k = [ U k / k − 1 Λ k / k − 1 − 1 2 H k T R k − 1 2 ] [ ( Λ k / k − 1 − 1 2 ) T U k / k − 1 T ( R k − 1 2 ) T H k ] \boldsymbol{U}_{k} \boldsymbol{\Lambda}_{k}^{-1} \boldsymbol{U}_{k}^{\mathrm{T}} =\boldsymbol{U}_{k / k-1} \boldsymbol{\Lambda}_{k / k-1}^{-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}}+\boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{R}_{k}^{-1} \boldsymbol{H}_{k} \\ =\left[\begin{array}{ll}\boldsymbol{U}_{k / k-1} \boldsymbol{\Lambda}_{k / k-1}^{-\frac{1}{2}} & \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{R}_{k}^{-\frac{1}{2}}\end{array}\right]\left[\begin{array}{c}\left(\boldsymbol{\Lambda}_{k / k-1}^{-\frac{1}{2}}\right)^{\mathrm{T}} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \\ \left(\boldsymbol{R}_{k}^{-\frac{1}{2}}\right)^{\mathrm{T}} \boldsymbol{H}_{k}\end{array}\right] UkΛk1UkT=Uk/k1Λk/k11Uk/k1T+HkTRk1Hk=[Uk/k1Λk/k121HkTRk21] (Λk/k121)TUk/k1T(Rk21)THk
对矩阵做SVD分解,得:
= ( S k D k V k T ) ( S k D k V k T ) T = S k D k D k T S k T \begin{array}{l} =\left(\boldsymbol{S}_{k} \boldsymbol{D}_{k} \boldsymbol{V}_{k}^{\mathrm{T}}\right)\left(\boldsymbol{S}_{k} \boldsymbol{D}_{k} \boldsymbol{V}_{k}^{\mathrm{T}}\right)^{\mathrm{T}} =\boldsymbol{S}_{k} \boldsymbol{D}_{k} \boldsymbol{D}_{k}^{\mathrm{T}} \boldsymbol{S}_{k}^{\mathrm{T}} \end{array} =(SkDkVkT)(SkDkVkT)T=SkDkDkTSkT
也令:
U k = S k , Λ k − 1 2 = D k \boldsymbol{U}_{k}=\boldsymbol{S}_{k}, \boldsymbol{\Lambda}_{k}^{-\frac{1}{2}}=\boldsymbol{D}_{k} Uk=Sk,Λk21=Dk

3、SVD分解滤波流程

( U k − 1 , Λ k − 1 1 2 , Q k − 1 1 2 ) → [ Φ k / k − 1 U k − 1 Λ k − 1 1 2 Γ k − 1 Q k − 1 1 2 ] ⟶ SVD ⁡ ( U k / k − 1 , Λ k / k − 1 1 2 ) → ( U k / k − 1 , Λ k / k − 1 − 1 2 , R k − 1 2 ) → [ U k / k − 1 Λ k / k − 1 − 1 2 H k T R k − 1 2 ] ⟶ S V D ( U k , Λ k − 1 2 ) → ⋯ \begin{array}{l}\left(\boldsymbol{U}_{k-1}, \boldsymbol{\Lambda}_{k-1}^{\frac{1}{2}}, \boldsymbol{Q}_{k-1}^{\frac{1}{2}}\right) \rightarrow\left[\boldsymbol{\Phi}_{k / k-1} \boldsymbol{U}_{k-1} \boldsymbol{\Lambda}_{k-1}^{\frac{1}{2}} \quad \boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1}^{\frac{1}{2}}\right] \stackrel{\operatorname{SVD}}{\longrightarrow}\left(\boldsymbol{U}_{k / k-1}, \boldsymbol{\Lambda}_{k / k-1}^{\frac{1}{2}}\right) \\ \rightarrow\left(\boldsymbol{U}_{k / k-1}, \boldsymbol{\Lambda}_{k / k-1}^{-\frac{1}{2}}, \boldsymbol{R}_{k}^{-\frac{1}{2}}\right) \rightarrow\left[\boldsymbol{U}_{k / k-1} \boldsymbol{\Lambda}_{k / k-1}^{-\frac{1}{2}} \quad \boldsymbol{H}_{k}^{\mathrm{T}} \boldsymbol{R}_{k}^{-\frac{1}{2}}\right] \stackrel{\mathrm{SVD}}{\longrightarrow}\left(\boldsymbol{U}_{k}, \boldsymbol{\Lambda}_{k}^{-\frac{1}{2}}\right) \rightarrow \cdots \\\end{array} (Uk1,Λk121,Qk121)[Φk/k1Uk1Λk121Γk1Qk121]SVD(Uk/k1,Λk/k121)(Uk/k1,Λk/k121,Rk21)[Uk/k1Λk/k121HkTRk21]SVD(Uk,Λk21)

每次更新含2次SVD分解、2次对角阵求逆,运算量与“朴素”方法相比没有明显优势(SVD分解计算量远大于QR),没啥用。

四、UD分解滤波

UD分解: M = U D U T M=UDU^T M=UDUT U U U 为上三角且对角线元素为 1 1 1 D D D 为对角阵。存储的时候可以让 U U U 占据上三角(对角线都是1),对角线上都为 D D D

1、量测更新方差方程UD分解

必须是标量量测,向量的还没有人推导过,只能改成标量再分解

P k = P k / k − 1 − P k / k − 1 H k T ( H k P k / k − 1 H k T + R k ) − 1 H k P k / k − 1 \boldsymbol{P}_{k}=\boldsymbol{P}_{k / k-1}-\boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}\left(\boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} \boldsymbol{H}_{k}^{\mathrm{T}}+R_{k}\right)^{-1} \boldsymbol{H}_{k} \boldsymbol{P}_{k / k-1} Pk=Pk/k1Pk/k1HkT(HkPk/k1HkT+Rk)1HkPk/k1

将方程的 P k / k − 1 P_{k/k-1} Pk/k1 分解为 U k / k − 1 D k / k − 1 U k / k − 1 T \boldsymbol{U}_{k / k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} Uk/k1Dk/k1Uk/k1T P k P_{k} Pk 分解为 U k D k U k T \boldsymbol{U}_{k} \boldsymbol{D}_{ k} \boldsymbol{U}_{ k}^{\mathrm{T}} UkDkUkT R R R 为标量可以前后移动,得:
U k D k U k T = U k / k − 1 D k / k − 1 U k / k − 1 T − U k / k − 1 D k / k − 1 U k / k − 1 T H k T ( H k U k / k − 1 D k / k − 1 U k / k − 1 T H k T + R k ) − 1 H k U k / k − 1 D k / k − 1 U k / k − 1 T = U k / k − 1 [ D k / k − 1 − D k / k − 1 U k / k − 1 T H k T ( H k U k / k − 1 D k / k − 1 U k / k − 1 T H k T + R k ) − 1 H k U k / k − 1 D k / k − 1 ] U k / k − 1 T = U k / k − 1 ( D k / k − 1 − α − 1 g g T ) U k / k − 1 T  记  { α = H k U k / k − 1 ⋅ D k / k − 1 U k / k − 1 T H k T + R k = f T g + R k f = ( H k U k / k − 1 ) T g = D k / k − 1 U k / k − 1 T H k T = D k / k − 1 f \begin{array}{l} \boldsymbol{U}_{k} \boldsymbol{D}_{k} \boldsymbol{U}_{k}^{\mathrm{T}}= \boldsymbol{U}_{k / k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}}- \\ \boldsymbol{U}_{k / k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}\left(\boldsymbol{H}_{k} \boldsymbol{U}_{k / k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}+R_{k}\right)^{-1} \boldsymbol{H}_{k} \boldsymbol{U}_{k / k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \\ = \boldsymbol{U}_{k / k-1}\left[\boldsymbol{D}_{k / k-1}-\boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}\left(\boldsymbol{H}_{k} \boldsymbol{U}_{k / k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}+R_{k}\right)^{-1} \boldsymbol{H}_{k} \boldsymbol{U}_{k / k-1} \boldsymbol{D}_{k / k-1}\right] \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \\ = \boldsymbol{U}_{k / k-1}\left(\boldsymbol{D}_{k / k-1}-\alpha^{-1} \boldsymbol{g} \boldsymbol{g}^{\mathrm{T}}\right) \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \\ \text { 记 }\left\{\begin{array}{l}\alpha=\boldsymbol{H}_{k} \boldsymbol{U}_{k / k-1} \cdot \boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}+R_{k}=\boldsymbol{f}^{\mathrm{T}} \boldsymbol{g}+R_{k} \\ \boldsymbol{f}=\left(\boldsymbol{H}_{k} \boldsymbol{U}_{k / k-1}\right)^{\mathrm{T}} \\ \boldsymbol{g}=\boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} \boldsymbol{H}_{k}^{\mathrm{T}}=\boldsymbol{D}_{k / k-1} \boldsymbol{f}\end{array}\right.\end{array} UkDkUkT=Uk/k1Dk/k1Uk/k1TUk/k1Dk/k1Uk/k1THkT(HkUk/k1Dk/k1Uk/k1THkT+Rk)1HkUk/k1Dk/k1Uk/k1T=Uk/k1[Dk/k1Dk/k1Uk/k1THkT(HkUk/k1Dk/k1Uk/k1THkT+Rk)1HkUk/k1Dk/k1]Uk/k1T=Uk/k1(Dk/k1α1ggT)Uk/k1T   α=HkUk/k1Dk/k1Uk/k1THkT+Rk=fTg+Rkf=(HkUk/k1)Tg=Dk/k1Uk/k1THkT=Dk/k1f

D n n D_{nn} Dnn 开始先计算最后一列 ,再计算倒数第二列,直到 D 11 D_{11} D11

2、时间更新方差方程UD分解

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

将方程的 P k / k − 1 P_{k/k-1} Pk/k1 分解为 U k / k − 1 D k / k − 1 U k / k − 1 T \boldsymbol{U}_{k / k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} Uk/k1Dk/k1Uk/k1T P k − 1 P_{k-1} Pk1 分解为 U k − 1 D k − 1 U k − 1 T \boldsymbol{U}_{k-1} \boldsymbol{D}_{ k-1} \boldsymbol{U}_{ k-1}^{\mathrm{T}} Uk1Dk1Uk1T ,最后两边的矩阵记为 W k ∣ k − 1 \boldsymbol{W}_{k \mid k-1} Wkk1
U k ∣ k − 1 D k / k − 1 U k / k − 1 T = Φ k l k − 1 U k − 1 D k − 1 U k − 1 T Φ k / k − 1 T + Γ k − 1 Q k − 1 Γ k − 1 T = [ Φ k l k − 1 U k − 1 Γ k − 1 ] [ D k − 1 0 0 Q k − 1 ] [ U k − 1 T Φ k l k − 1 T Γ k − 1 T ] ≜ W k ∣ k − 1 D ~ k − 1 W k ∣ k − 1 T \begin{aligned} \boldsymbol{U}_{k \mid k-1} \boldsymbol{D}_{k / k-1} \boldsymbol{U}_{k / k-1}^{\mathrm{T}} & =\boldsymbol{\Phi}_{k l k-1} \boldsymbol{U}_{k-1} \boldsymbol{D}_{k-1} \boldsymbol{U}_{k-1}^{\mathrm{T}} \boldsymbol{\Phi}_{k / k-1}^{\mathrm{T}}+\boldsymbol{\Gamma}_{k-1} \boldsymbol{Q}_{k-1} \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}} \\ & =\left[\begin{array}{ll} \boldsymbol{\Phi}_{k l k-1} \boldsymbol{U}_{k-1} & \boldsymbol{\Gamma}_{k-1} \end{array}\right]\left[\begin{array}{cc} \boldsymbol{D}_{k-1} & \mathbf{0} \\ \mathbf{0} & \boldsymbol{Q}_{k-1} \end{array}\right]\left[\begin{array}{c} \boldsymbol{U}_{k-1}^{\mathrm{T}} \boldsymbol{\Phi}_{k l k-1}^{\mathrm{T}} \\ \boldsymbol{\Gamma}_{k-1}^{\mathrm{T}} \end{array}\right] \triangleq \boldsymbol{W}_{k \mid k-1} \tilde{\boldsymbol{D}}_{k-1} \boldsymbol{W}_{k \mid k-1}^{\mathrm{T}} \end{aligned} Ukk1Dk/k1Uk/k1T=Φklk1Uk1Dk1Uk1TΦk/k1T+Γk1Qk1Γk1T=[Φklk1Uk1Γk1][Dk100Qk1][Uk1TΦklk1TΓk1T]Wkk1D~k1Wkk1T

1.朴素算法

W k ∣ k − 1 \boldsymbol{W}_{k \mid k-1} Wkk1 再做一次QR分解:
W k l k − 1 D ~ k − 1 W k / k − 1 T = R ^ T Q ^ T D ~ k − 1 Q R ^ = R ^ T A R ^ \boldsymbol{W}_{k l k-1} \tilde{\boldsymbol{D}}_{k-1} \boldsymbol{W}_{k / k-1}^{\mathrm{T}}=\hat{\boldsymbol{R}}^{\mathrm{T}} {\color{green}\hat{\boldsymbol{Q}}^{\mathrm{T}} \tilde{\boldsymbol{D}}_{k-1} {\boldsymbol{Q}}} \hat{\boldsymbol{R}}=\hat{\boldsymbol{R}}^{\mathrm{T}} {\color{green}\boldsymbol{A}} \hat{\boldsymbol{R}} Wklk1D~k1Wk/k1T=R^TQ^TD~k1QR^=R^TAR^
绿色部分正定对称,记为 A A A ,对其进行UD分解:
= R ^ T U ^ D ^ U ^ T R ‾ = ( R ^ T U ^ ) D ^ ( R ^ T U ^ ) T =\hat{\boldsymbol{R}}^{\mathrm{T}} \hat{\boldsymbol{U}} \hat{\boldsymbol{D}} \hat{\boldsymbol{U}}^{\mathrm{T}} \overline{\boldsymbol{R}}=\left(\hat{\boldsymbol{R}}^{\mathrm{T}} \hat{\boldsymbol{U}}\right) \hat{\boldsymbol{D}}\left(\hat{\boldsymbol{R}}^{\mathrm{T}} \hat{\boldsymbol{U}}\right)^{\mathrm{T}} =R^TU^D^U^TR=(R^TU^)D^(R^TU^)T
R R R 是QR分解出的三角阵, U U U 是UD分解出的三角阵,乘出来的 R T U R^TU RTU 还是三角阵,还有保证对角线是 1 1 1,把这部分赋给 U k ∣ k − 1 \boldsymbol{U}_{k \mid k-1} Ukk1 ,不等于 1 1 1 的部分归到 D D D 里面。此方法要一次QR分解和一个UD分解,计算量大。

2.快速算法

用左边和右边元素一一对应得:
D k ∣ k − 1 , j j = ∑ s = 1 n + 1 D ~ k − 1 , s s W j , s ( n − j ) W j , s ( n − j ) U k l k − 1 , i j = ∑ s = 1 n + 1 D ~ k − 1 , s s W i , s ( n − j ) W j , s ( n − j ) D k / k − 1 , j j D_{k \mid k-1, j j}=\sum_{s=1}^{n+1} \tilde{D}_{k-1, s s} W_{j, s}^{(n-j)} W_{j, s}^{(n-j)} \quad U_{k l k-1, i j}=\frac{\sum_{s=1}^{n+1} \tilde{D}_{k-1, s s} W_{i, s}^{(n-j)} W_{j, s}^{(n-j)}}{D_{k / k-1, j j}} Dkk1,jj=s=1n+1D~k1,ssWj,s(nj)Wj,s(nj)Uklk1,ij=Dk/k1,jjs=1n+1D~k1,ssWi,s(nj)Wj,s(nj)

滤波流程: ( U k − 1 , j , , D k − 1 , j ) → ( U k ∣ k − 1 , j j , D k l k − 1 , j ) → ( U k , j , D k , j , j ) \left(U_{k-1, j,}, D_{k-1, j}\right) \rightarrow\left(U_{k \mid k-1, j j}, D_{k l k-1, j}\right) \rightarrow\left(U_{k, j}, D_{k, j, j}\right) (Uk1,j,,Dk1,j)(Ukk1,jj,Dklk1,j)(Uk,j,Dk,j,j)

运算量比较小,计算比较紧凑,已经推导好了一个一个元素怎么计算,比较实用。

五、平方根信息滤波SRIKF

将信息矩阵 I I I 分解,与Potter平方根滤波很相似,计算量几乎一模一样,可以类比来看。

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

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

相关文章

西电网课雨课堂《书法鉴赏》全部课后答案

声明:本文CSDN作者原创投稿文章,未经许可禁止任何形式的转载,原文链接 如果图片挂了,可以移步至我的博客西电网课雨课堂《书法鉴赏》答案 - 小木槌 文章目录 绪论--解惑初学书法者(上)绪论--解惑初学书法者…

Es elasticsearch 十八 Logstash 数据抽取工具

目录 基础 启动命令 简单配置文件 控制台输入输出打印 input从log文件获取数据-如分布式日志收集 监听端口 filter过滤器 Grok 正则捕获 Output 输出到es 文件输入 es输出 获取日志中字段 level 基础 从原数据 获取数据 发送到 某地方 Input{} filter{} output{} …

JMeter 常用的几种断言方法,你会几种呢?

在使用Jmeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言。断言是在请求的返回层面增加一层判断机制。因为请求成功了,并不代表结果一定正确,因此需要判断机制提高测试准确性。本文 主要介绍3种常用的断…

【LSTM】读取时间序列数据 | 时间序列数据的小批量划分方法

由于序列数据本质上是连续的,因此我们在处理数据时需要解决这个问题。当序列过长而不能被模型一次性全部处理时,我们希望能拆分这样的序列以便模型方便读取。 Q:怎样随机生成一个具有n个时间步的mini batch的特征和标签? A&…

4.2 Spark SQL数据源 - 基本操作

一、默认数据源 案例演示读取Parquet文件 查看Spark的样例数据文件users.parquet 1、在Spark Shell中演示 启动Spark Shell 查看数据帧内容 查看数据帧模式 对数据帧指定列进行查询,查询结果依然是数据帧,然后通过write成员的save()方法写入HDF…

还在为开发难度发愁?这个低代码平台能让你轻松搞定!

随着数字技术的不断发展,数字化也越来越深入人们的日常生活中,在这样的时代背景下,企业是需要通过不断创新来满足用户日益增长的业务需求。 使用背景 对企业而言,随着组织规模的扩大,各种业务流程系统需要持续而快速地…

浮点数的存储方式和取值范围

一、有符号整型的编码方式 1. 真值 把用""、"-"表示符号,数值部分用绝对值的编码的表示方式称为真值。 如3用4bit真值表示为0011,-1用真值表示为-0011。 2. 原码 符号位为0表示正数,符号位为1表示负数,数…

网络安全的究竟如何自学?

以十五派9年信息安全教育经验以及数千名学生摸索实践可以得知,在知乎上能够搜索到这个问题的人不外乎三种人: 第一种人在找网络安全入门的捷径; 第二种人想自己的方向进而获得认同感; 第三种人是已经在自学网络安全但是过程中碰…

卡尔曼滤波与组合导航原理(九)Sage-Husa自适应滤波

自适应滤波有很多种方式,也很实用 一、自适应滤波基本思想 函数模型 { 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}_{…

Mujoco xml编写(二)

目录 .1 运行 1.1 测试 .2 XML 2,1 基础 2.3 简单实例 2.3 进阶例子 .1 运行 1.1 测试 基于Mujoco210 Ubuntu 22.04配置安装_啥也不是的py人的博客-CSDN博客完成安装后 import mujoco_py import os mj_path mujoco_py.utils.discover_mujoco() xml_path os.path.join…

学习并深入理解闭包

前言 学习闭包前,先学点别的。 程序执行时: 1.编译阶段 创建变量对象GO,包括变量和函数作用域装在一块内存中。但是没有赋值,变量都是undefined,函数:0xxx 2.创建执行上下文 里面有VO对应ao(函数里的变量&#xff0…

数据结构 -- 跳跃链表

跳跃链表的概念 跳跃链表是有序链表的一个变种,在一个有序链表中,查找一个链表中的元素需要进行一次遍历,时间复杂度为O(n),为了加快查找的过程,能够跳过某些元素呢?一个思路就是牺牲一定的空间换时间&…

入职外包一个月,我离职了

有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂…

Redis系列第一篇:ubuntu18.04下源码编译安装Redis 6.2.12

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis是一个key-value存储系统。和Memcached类似&#xff…

EasyExcel设置动态head数据(不是格式)及postman自测的坑

需求背景: 导出某某业务模块的数据,但是,数据列的标题内容是根据当前日期计算出来的。 比如今天是5月20,那么列就是 5/21 、 5/22…以此类推 问题: EasyExcel 通过Bean的注解实现匹配的,这是最便捷的方式&…

这5款小众又好用的软件,你都知道吗?

1.文件比较——WinMerge WinMerge是一款用于比较和合并文件和文件夹的工具。它可以让你对不同的文件和文件夹进行可视化的对比,并显示出差异和相似之处。WinMerge支持多种功能,如合并,同步,过滤,插件等。这款工具非常实用,但是可以提供强大的文件比较功能,是管理文件和解决冲突…

123 2021年国赛 二分搜索+前缀和

题目描述 小蓝发现了一个有趣的数列,这个数列的前几项如下: 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 小蓝发现,这个数列前 1 项是整数 1,接下来 2 项是整数 1 至 2,接下来 3 项是整数 1 至 3,接下来 4 项是整数…

day2 ARM处理器概论

目录 RISC处理器和CISC处理器 SOC(System on Chip) ARM指令集概述 指令集 ARM指令集 编译原理 ARM存储模型 ARM指令存储 ARM工作模式 工作模式的理解 ARM工作模式分类 RISC处理器和CISC处理器 RISC处理器 只保留常用的的简单指令,硬件结构简单,复…

你觉得你很优秀,为什么连一个软件测试面试都过不了?

目录 前言 简历请用数字化结果不要只是堆研工作经历 简历一:我的工作内容有 简历二:我的工作内容有: 当你和HR面对面坐下来时,迎接我们的第一个问题往往是:“来,请简单介绍下你自己吧。 了解你的过去是判断你未来的最好方式 增加好印象&#xff0c…

基于SVM的鸢尾花数据集回归分析

目录 1. 作者介绍2. SVM支持向量机算法2.1 鸢尾花数据集2.2 鸢尾花数据集可视化2.2.1 散点图2.2.2 箱型图2.2.3 三维散点图(3D) 3. SVM算法实现3.1 完整代码3.2 运行结果3.3 问题与分析 1. 作者介绍 张佳伦,男,西安工程大学电子信…