zoukankan      html  css  js  c++  java
  • 卡尔曼滤波器基础

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

    卡尔曼滤波器根据下面的式子从前一状态推出后一状态:

    $mathbf{x}_k=oldsymbol{Phi}_kmathbf{x}_{k-1}+mathbf{G}_kmathbf{u}_k+mathbf{w}_k$

    $mathbf{x}_k$是状态向量,描述系统状态,例如(弹簧-阻尼-力)系统的位置和速度;

    $mathbf{u}_k$是输入向量,包含所有控制输入,例如弹簧、阻尼器、外力。在$k-1$和$k$之间,输入保持不变;

    $oldsymbol{Phi}_k$是作用在$mathbf{x}_{k-1}$上的状态转换矩阵,(它对$k-1$时刻的状态进行加权组合,以)反应系统在$k-1$时刻的状态对$k$时刻的状态的影响。例如,系统在$k-1$时刻的位置和速度都会影响$k$时刻的位置;

    $mathbf{G}_k$是控制输入矩阵,(它对输入进行加权组合,以)反应输入$mathbf{u}_k$对系统状态的影响。例如,力会影响系统的速度和位置;

    $mathbf{w}_k$是过程噪声向量,反应系统噪声对各状态向量的影响。过程噪声假定为零均值正态分布多维随机过程,协方差矩阵为$mathbf{Q}_k$。过程噪声有多个来源,如输入信号中的噪声、建模不精确引起的噪声、系统内部噪声等。

    测量值表示如下:

    $mathbf{z}_k=mathbf{H}_kmathbf{x}_k+mathbf{v}_k$

    $mathbf{H}_k$是观测模型,将状态空间映射到观测空间;

    $mathbf{v}_k$是观测噪声,符合均值为零的正态分布,协方差矩阵为$mathbf{R}_k$。

    初始状态、状态噪声和观测噪声${mathbf{x}_0, mathbf{w}_1, ldots, mathbf{w}_k,mathbf{v}_1,ldots,mathbf{v}_k}$互相独立。

    这里用$z_k$表示观测空间,包含有观测噪声,注意与一般状态方程中不含观测噪声的$mathbf{y}_k=mathbf{H}_kmathbf{x}_k$区分。

    因为存在过程噪声和观测噪声,我们只能得到状态向量的估计值。但因为已知状态噪声和观测噪声的协方差矩阵,就可以通过“预测-更新”这两个步骤实现对真实值的跟踪。

    1. 预测

    在取得观测值之前,先根据上一次的状态估计值和输入预测此次的状态向量,还可以根据上一次的状态估计协方差预测此次的状态估计协方差:

    $mathbf{hat{x}}_k^-=oldsymbol{Phi}_kmathbf{hat{x}}_{k-1}+mathbf{G}_kmathbf{u}_k$

    $mathbf{P}_k^-=oldsymbol{Phi}_kmathbf{P}_{k-1}oldsymbol{Phi}_k^T+mathbf{Q}_k$

    符号$mathbf{hat{x}}_k^-$上方的“”帽子”表示这是一个估计值,右上角的减号表示这是在取得测量值之前的最优估计。因为过程噪声均值为0,所以状态向量估计值不包含过程噪声。

    状态估计协方差受两个方面的影响:一是状态转换矩阵会作用在已有($k$之前)的过程噪声上从而影响过程向量,这个可通过递推的形式获得;二是最近一段时间($k$到$k-1$)的过程噪声也会影响过程向量。状态估计协方差的预测包含的正是这两项。

    2. 更新

    获得观测值后,首先计算测量余量、测量余量协方差和最优卡尔曼增益:

    $mathbf{ ilde{y}}_k=mathbf{z}_k-mathbf{H}_khat{mathbf{x}}_k^-$

    $mathbf{S}_k=mathbf{H}_kmathbf{P}_k^-mathbf{H}_k^T+mathbf{R}_k$

    $mathbf{K}_k=mathbf{P}_k^-mathbf{H}_k^Tmathbf{S}_k^{-1}$

    然后用它们来更新$mathbf{x}$和$mathbf{P}$:

    $mathbf{hat{x}}_k=mathbf{hat{x}}_k^-+mathbf{K}_kmathbf{ ilde{y}}_k$

    $mathbf{P}_k=(mathbf{I}-mathbf{K}_kmathbf{H}_k)mathbf{P}_k^-$

    计算测量余量时,将上一步的状态估计量映射到观测空间,然后和观测量做减法,这样就得到“估计输出”和“观测输出”的差(测量余量)。

    总的测量余量包含两部分:一是状态噪声会被“观测”到,二是观测行为本身的噪声。测量余量协方差$mathbf{S}_k$包含的就是这两项。

    最优卡尔曼增益可以看作是对“估计值的误差”和“观测值的误差”的加权。因为“估计值”和“观测值”都是不可信的,但过程噪声和观测噪声的协方差又是已知的,所以可以通过对它们加权得到最优的状态变量“修正”,即最优卡尔曼增益$mathbf{K}_k$。

  • 相关阅读:
    自定义组件要加@click方法
    绑定样式
    647. Palindromic Substrings
    215. Kth Largest Element in an Array
    448. Find All Numbers Disappeared in an Array
    287. Find the Duplicate Number
    283. Move Zeroes
    234. Palindrome Linked List
    202. Happy Number
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/byeyear/p/6740861.html
Copyright © 2011-2022 走看看