• 卡尔曼滤波器的简单推导


    [首发:cnblogs    作者:byeyear    Email:byeyear@hotmail.com]

    本文将简单推导卡尔曼滤波器的预测和更新公式。为了简单,使用标量(一维向量)而不是多维向量,并且假设系统没有输入。

    系统状态的理论值如下:

    $x_k=Phi_k x_{k-1}+w_k$

    但是由于过程噪声和观测噪声的存在,系统状态的真实值是不可知的。但我们仍可以根据以下思路,尽量跟踪真实值:

    1) 状态转换系数是已知的,因此我们可以根据上一状态得到当前状态的先验估计:

    $hat{x}_k^-=Phi_k hat{x}_{k-1}$

    2) 将对当前状态的先验估计$hat{x}_k^-$变换到对输出的先验估计$Hhat{x}_k^-$,求出观测值和先验估计值之间的差:

    $ ilde{y}_k=z_k-Hhat{x}_k^-=z_k-HPhihat{x}_{k-1}$

    3) 将上一步的差乘上一个系数,作为对先验估计的修正,得到当前状态的后验估计:

    $hat{x}_k=Phi_khat{x}_{k-1}+K_k(z_k-HPhi_khat{x}_{k-1})$

    我们的目标是求出上式的系数$K_k$,以使得误差$ ilde{x}_k=x_k-hat{x}_k$的方差最小。

    观测值可以表示为真实输出与观测噪声的叠加:

    $z_k=Hx_k+v_k$

    于是误差$ ilde{x}_k$可以表示为如下形式(消去了$z_k$和$x_k^-$):

    $ ilde{x}_k=x_k-Phihat{x}_{k-1}-K_k(Hx_k+v_k-HPhi_khat{x}_{k-1})$

    还可以进一步消去$x_k$:

    $ ilde{x}_k=Phi_k x_{k-1} + w_k - Phi_k hat{x}_{k-1} - K_k(HPhi_k x_{k-1} + Hw_k +v_k - HPhi_k hat{x}_{k-1})$

    上式中,项$x_{k-1}$和$hat{x}_{k-1}$可以合并,并使用下式进行替换:

    $ ilde{x}_{k-1}=x_{k-1}-hat{x}_{k-1}$

    于是我们得到:

    $ ilde{x}_k=(1-K_kH) ilde{x}_{k-1}Phi_k+ (1-K_kH)w_k-K_kv_k$

    这样我们就得到了$ ilde{x}_k$递推表达式。

    卡尔曼滤波器认为系统状态、过程噪声和观测噪声互不相关。将过程噪声和观测噪声的协方差分别记作$Q_k$和$R_k$,我们就可以得到误差的方差$P_k$的递推式:

    $P_k=E[ ilde{x}^2]=(1-K_kH)^2(P_{k-1}Phi_k^2+Q_k)+K_k^2R_k$

    将上式中出现的$P_{k-1}Phi_k^2+Q_k$记为$P_k^-$,方差可简写为:

    $P_k=(1-K_kH)^2P_k^-+k_k^2R_k$

    为了使得$P_k$最小,我们将上式对$K_k$求偏导,并令偏导数等于0:

    $frac{partial P_k}{partial K_k}=0=2(1-K_kH)P_k^-(-H)+2K_kR_k$

    于是就得到了最优卡尔曼增益:

    $K_k=frac{P_k^-H}{H^2P_k^-+R_k}$

    代入$P_k$的表达式,整理后得到:

    $P_k=(1-K_kH)P_{k}^-$

  • 相关阅读:
    如何在一个控件上同时实现单触和多触事件
    看看iOS 5.0 beta 6都有哪些变化吧
    转,net实现下载
    转检测到潜在危险
    如何分析已有项目如何能够得到最快最大的提升???
    转Unity 入门
    近段总结
    转,net几个热点问题
    dll动态链接库
    转使用NUnit在.Net编程中进行单元测试
  • 原文地址:https://www.cnblogs.com/byeyear/p/6749405.html
Copyright © 2020-2023  润新知