• 卡尔曼滤波器KF


    卡尔曼滤波器

    卡尔曼滤波器是贝叶斯滤波器线性高斯系统下的一个特例。

    假设线性高斯系统下运动模型和观测模型如下:

    运动方程: x k = A k − 1 x k − 1 + v k + w k , k = 1 , ⋯   , K 观测方程: y k = C k x k + n k , k = 0 , ⋯   , K

    运动方程:xk=Ak1xk1+vk+wk,k=1,,K观测方程:yk=Ckxk+nk,k=0,,K" role="presentation" style="position: relative;">运动方程:xk=Ak1xk1+vk+wk,k=1,,K观测方程:yk=Ckxk+nk,k=0,,K
    运动方程:xk=Ak1xk1+vk+wk,k=1,,K观测方程:yk=Ckxk+nk,k=0,,K

    其中:

    • x k ∈ R N \boldsymbol{x}_{k} \in \mathbb{R}^{N} xkRN 表示系统状态
    • v k ∈ R N \boldsymbol{v}_{k} \in \mathbb{R}^{N} vkRN 表示输入
    • w k ∈ R N \boldsymbol{w}_{k} \in \mathbb{R}^{N} wkRN 表示过程噪声, w k ∼ N ( 0 , Q k ) \boldsymbol{w}_{k} \sim N(\mathbf{0}, \boldsymbol{Q}_{k}) wkN(0,Qk)
    • y k ∈ R M \boldsymbol{y}_{k} \in \mathbb{R}^{M} ykRM 表示测量
    • n k ∈ R M \boldsymbol{n}_{k} \in \mathbb{R}^{M} nkRM 表示测量噪声, n k ∼ N ( 0 , R k ) \boldsymbol{n}_{k} \sim N(\mathbf{0}, \boldsymbol{R}_{k}) nkN(0,Rk)
    • k k k 为时间下标,最大值为 K K K

    ( ⋅ ) ˇ \check{(\cdot)} ()ˇ 表示先验,用 ( ⋅ ) ^ \hat{(\cdot)} ()^ 表示后验,卡尔曼滤波器则可以表示为:

    预测

    x ˇ k = A k − 1 x ^ k − 1 + v k \check{\boldsymbol{x}}_{k}=\boldsymbol{A}_{k-1} \hat{\boldsymbol{x}}_{k-1}+\boldsymbol{v}_{k} xˇk=Ak1x^k1+vk

    P ˇ k = A k − 1 P ^ k − 1 A k − 1 T + Q k \check{\boldsymbol{P}}_{k}=\boldsymbol{A}_{k-1} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{A}_{k-1}^{\mathrm{T}}+\boldsymbol{Q}_{k} Pˇk=Ak1P^k1Ak1T+Qk

    卡尔曼增益

    K k = P ˇ k C k T ( C k P ˇ k C k T + R k ) − 1 \quad \boldsymbol{K}_{k}=\check{\boldsymbol{P}}_{k} \boldsymbol{C}_{k}^{\mathrm{T}}\left(\boldsymbol{C}_{k} \check{\boldsymbol{P}}_{k} \boldsymbol{C}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right)^{-1} Kk=PˇkCkT(CkPˇkCkT+Rk)1

    更新

    x ^ k = x ˇ k + K k ( y k − C k x ˇ k ) ⏟ 更新量  \hat{\boldsymbol{x}}_{k}=\check{\boldsymbol{x}}_{k}+\boldsymbol{K}_{k} \underbrace{\left(\boldsymbol{y}_{k}-\boldsymbol{C}_{k} \check{\boldsymbol{x}}_{k}\right)}_{\text {更新量 }} x^k=xˇk+Kk更新量  (ykCkxˇk)

    P ^ k = ( 1 − K k C k ) P ˇ k \hat{\boldsymbol{P}}_{k}=\left(\mathbf{1}-\boldsymbol{K}_{k} \boldsymbol{C}_{k}\right) \check{\boldsymbol{P}}_{k} P^k=(1KkCk)Pˇk

    通过贝叶斯推断推导

    预测

    由于是线性高斯系统,因此直接将 k − 1 k-1 k1 时刻的后验分布通过线性运动模型传递,即可得到 k k k 时刻的先验:

    x ˇ k = E [ x k ] = E [ A k − 1 x k − 1 + v k + w k ] = A k − 1 E [ x k − 1 ] ⏟ x k − 1 + v k + E [ w k ] ⏟ 0 = A k − 1 x ^ k − 1 + v k

    xˇk=E[xk]=E[Ak1xk1+vk+wk]=Ak1E[xk1]xk1+vk+E[wk]0=Ak1x^k1+vk" role="presentation" style="position: relative;">xˇk=E[xk]=E[Ak1xk1+vk+wk]=Ak1E[xk1]xk1+vk+E[wk]0=Ak1x^k1+vk
    xˇk=E[xk]=E[Ak1xk1+vk+wk]=Ak1xk1 E[xk1]+vk+0 E[wk]=Ak1x^k1+vk

    P ˇ k = E [ ( x k − E [ x k ] ) ( x k − E [ x k ] ) T ] = E [ ( A k − 1 x k − 1 + v k + w k − A k − 1 x ^ k − 1 − v k ) × ( A k − 1 x k − 1 + v k + w k − A k − 1 x ^ k − 1 − v k ) T ] = A k − 1 E [ ( x k − 1 − x ^ k − 1 ) ( x k − 1 − x ^ k − 1 ) T ] ⏟ P ^ k − 1 A k − 1 T + E [ w k w k T ] ⏟ Q k = A k − 1 P ^ k − 1 A k − 1 T + Q k

    Pˇk=E[(xkE[xk])(xkE[xk])T]=E[(Ak1xk1+vk+wkAk1x^k1vk)×(Ak1xk1+vk+wkAk1x^k1vk)T]=Ak1E[(xk1x^k1)(xk1x^k1)T]P^k1Ak1T+E[wkwkT]Qk=Ak1P^k1Ak1T+Qk" role="presentation" style="position: relative;">Pˇk=E[(xkE[xk])(xkE[xk])T]=E[(Ak1xk1+vk+wkAk1x^k1vk)×(Ak1xk1+vk+wkAk1x^k1vk)T]=Ak1E[(xk1x^k1)(xk1x^k1)T]P^k1Ak1T+E[wkwkT]Qk=Ak1P^k1Ak1T+Qk
    Pˇk====E[(xkE[xk])(xkE[xk])T]E[(Ak1xk1+vk+wkAk1x^k1vk)×(Ak1xk1+vk+wkAk1x^k1vk)T]Ak1P^k1 E[(xk1x^k1)(xk1x^k1)T]Ak1T+Qk E[wkwkT]Ak1P^k1Ak1T+Qk

    更新

    对于更新部分,我们将状态与 k k k 时刻的测量写成联合高斯分布的形式:

    p ( x k , y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = N ( [ μ x μ y ] , [ Σ x x Σ x y Σ y x Σ y y ] ) = N ( [ x ˇ k C k x ˇ k ] , [ P ˇ k P ˇ k C k T C k P ˇ k C k P ˇ k C k T + R k ] )

    p(xk,ykxˇ0,v1:k,y0:k1)=N([μxμy],[ΣxxΣxyΣyxΣyy])=N([xˇkCkxˇk],[PˇkPˇkCkTCkPˇkCkPˇkCkT+Rk])" role="presentation" style="position: relative;">p(xk,ykxˇ0,v1:k,y0:k1)=N([μxμy],[ΣxxΣxyΣyxΣyy])=N([xˇkCkxˇk],[PˇkPˇkCkTCkPˇkCkPˇkCkT+Rk])
    p(xk,ykxˇ0,v1:k,y0:k1)=N([μxμy],[ΣxxΣyxΣxyΣyy])=N([xˇkCkxˇk],[PˇkCkPˇkPˇkCkTCkPˇkCkT+Rk])

    高斯推断可以直接得到 k k k 时刻的条件分布(即后验概率):

    p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = N ( μ x + Σ x y Σ y y − 1 ( y k − μ y ) ⏟ x ^ k , Σ x x − Σ x y Σ y y − 1 Σ y x ⏟ P ^ k ) p\left(\boldsymbol{x}_{k} \mid \check{\boldsymbol{x}}_{0}, \boldsymbol{v}_{1: k}, \boldsymbol{y}_{0: k}\right)=\mathcal{N}(\underbrace{\boldsymbol{\mu}_{x}+\boldsymbol{\Sigma}_{x y} \boldsymbol{\Sigma}_{y y}^{-1}\left(\boldsymbol{y}_{k}-\boldsymbol{\mu}_{y}\right)}_{\hat{\boldsymbol{x}}_{k}}, \underbrace{\boldsymbol{\Sigma}_{x x}-\boldsymbol{\Sigma}_{x y} \boldsymbol{\Sigma}_{y y}^{-1} \boldsymbol{\Sigma}_{y x}}_{\hat{\boldsymbol{P}}_{k}}) p(xkxˇ0,v1:k,y0:k)=N(x^k μx+ΣxyΣyy1(ykμy),P^k ΣxxΣxyΣyy1Σyx)

    K k = Σ x y Σ y y − 1 = P ˇ k C k T ( C k P ˇ k C k T + R k ) − 1 \boldsymbol{K}_{k}=\boldsymbol{\Sigma}_{x y} \boldsymbol{\Sigma}_{y y}^{-1}=\check{\boldsymbol{P}}_{k} \boldsymbol{C}_{k}^{\mathrm{T}}\left(\boldsymbol{C}_{k} \check{\boldsymbol{P}}_{k} \boldsymbol{C}_{k}^{\mathrm{T}}+\boldsymbol{R}_{k}\right)^{-1} Kk=ΣxyΣyy1=PˇkCkT(CkPˇkCkT+Rk)1(卡尔曼增益),则有:

    x ^ k = x ˇ k + K k ( y k − C k x ˇ k ) \hat{\boldsymbol{x}}_{k}=\check{\boldsymbol{x}}_{k}+\boldsymbol{K}_{k} \left(\boldsymbol{y}_{k}-\boldsymbol{C}_{k} \check{\boldsymbol{x}}_{k}\right) x^k=xˇk+Kk(ykCkxˇk)

    P ^ k = ( 1 − K k C k ) P ˇ k \hat{\boldsymbol{P}}_{k}=\left(\mathbf{1}-\boldsymbol{K}_{k} \boldsymbol{C}_{k}\right) \check{\boldsymbol{P}}_{k} P^k=(1KkCk)Pˇk

    即证。

  • 相关阅读:
    AnotherRedisDesktopManager无法连接本地redis原因之一
    Linux关于yum和vim入门的一些问题
    网络分析笔记01:pcapng格式的整体解包
    Matlab论文插图绘制模板第48期—平行坐标图(Parallelplot)
    将本地项目添加到github中的其他办法
    cesium切片底图正常出来但控制台一直报错的方法
    clickhouse读取kafka数据
    【JavaSE语法】运算符
    如何编辑科学摘要
    【熬夜爆肝版】JAVA基础入门专栏——1.JAVA开发入门
  • 原文地址:https://blog.csdn.net/whatiscode/article/details/126100771