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$。

  • 相关阅读:
    centOS 6.5下升级mysql,从5.1升级到5.6
    利用PHP脚本辅助MySQL数据库管理5-检查异常数据
    利用PHP脚本辅助MySQL数据库管理4-两个库表结构差异比较
    利用PHP脚本辅助MySQL数据库管理3-删除重复表索引
    利用PHP脚本辅助MySQL数据库管理2-表主键表索引
    利用PHP脚本辅助MySQL数据库管理1-表结构
    Linux驱动设计——内存与IO访问
    Linux驱动设计—— 驱动调试技术
    Linux系统编程@终端IO
    Linux驱动设计—— 内外存访问
  • 原文地址:https://www.cnblogs.com/byeyear/p/6740861.html
Copyright © 2011-2022 走看看