卡尔曼滤波器的简单推导

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

系统状态的理论值如下:

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

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

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

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

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

$\tilde{y}_k=z_k-H\hat{x}_k^-$

$=z_k-H\Phi\hat{x}_{k-1}$

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

$\hat{x}_k=\Phi_k\hat{x}_{k-1}+K_k(z_k-H\Phi_k\hat{x}_{k-1})$

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

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

$z_k=Hx_k+v_k$

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

$\tilde{x}_k=x_k-\Phi\hat{x}_{k-1}-K_k(Hx_k+v_k-H\Phi_k\hat{x}_{k-1})$

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

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

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

$\tilde{x}_{k-1}=x_{k-1}-\hat{x}_{k-1}$

于是我们得到:

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

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

时间: 2024-10-12 20:28:25

卡尔曼滤波器的简单推导的相关文章

对Kalman(卡尔曼)滤波器的理解

1.简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫"卡尔曼".跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯.1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位.1957年于哥伦比亚大学获得博士学位.我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文&

卡尔曼滤波器原理之基本思想续

在上一篇文章卡尔曼滤波器原理之基本思想中,我们分析并推导了基于卡尔曼一步预测的滤波器状态递推公式,接下来,我们将完成上一次的推导过程.首先,我们拿来上次的推导结果: \[\hat x(n + 1|{{\bf{Y}}_n}) = \sum\limits_{k = 1}^{n - 1} {E[x(n + 1){\alpha ^H}(k)]{{\bf{R}}^{ - 1}}(k)\alpha (k)}  + E[x(n + 1){\alpha ^H}(k)]{{\bf{R}}^{ - 1}}(k)\a

卡尔曼滤波器原理之基本思想

一.卡尔曼滤波器要解决的问题 首先说一下卡尔曼滤波器要解决的是哪一类问题,这类系统应该如何建模.这里说的是线性卡尔曼滤波器,顾名思意,那就是线性动态的离散系统.这类系统可以用如下两个方程来表示: \[\begin{array}{l} x(n + 1) = F(n + 1,n)x(n) + {v_1}(n) \\  y(n) = C(n)x(n) + {v_2}(n) \\  \end{array}\] 其中: x(n)表示系统的状态 F(n+1,n)为状态转移矩阵,表示状态随时间的变化规律.通俗

卡尔曼滤波器

卡尔曼的历史不讲了... 网上写卡尔曼滤波器的太多了...而且大(yi)多(mu)雷(yi)同(yang),所以,我也不知道谁是第一稿,谁是转载者,这里...我也是参考别人的博文.将卡尔曼滤波器用在了一个GPS的小程序里,最简单的一维模型... 首先,我们先要引入一个离散控制过程的系统.该系统可用一个线性随机微分方程(Linear Stochastic Difference equation)来描述: X(k)=A*X(k-1)+B*U(k)+W(k) 再加上系统的测量值: Z(k)=H*X(k

卡尔曼滤波器 Kalman Filter (转载)

在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”.跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡 尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯.1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位.1957年于哥 伦比亚大学获得博士学位.我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文<A New Approach to Linear Fil

卡尔曼滤波器算法浅析及matlab实战

卡尔曼滤波器是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法.而且由于观测包含系统的噪声和干扰的影响,所以最优估计也可看做是滤波过程. 卡尔曼滤波器的核心内容就是5条公式,计算简单快速,适合用于少量数据的预测和估计. 下面我们用一个例子来说明一下卡尔曼算法的应用. 假设我们想在有一辆小车,在 t 时刻其速度为 Vt ,位置坐标为 Pt,ut 表示 t 时刻的加速度,那么我们可以用Xt表示 t 时刻的状态,如下: 则我们可以得到,由t-1 时刻到 t 时刻,位置以

卡尔曼滤波器:用R语言中的KFAS建模时间序列

于时间序列预测,ARIMA等传统模型通常是一种流行的选择.虽然这些模型可以证明具有高度的准确性,但它们有一个主要缺点 - 它们通常不会解释“冲击”或时间序列的突然变化.让我们看看我们如何使用称为卡尔曼滤波器的模型来潜在地缓解这个问题. 时间序列  我们以货币市场为例.货币对可能会有整体上升趋势,然后在抛售期间大幅下跌.传统的时间序列模型不一定能够立即解决这个问题,并且在考虑到趋势的突然变化之前可能需要几个时期. 因此,我们希望使用一个确实能够解释这种冲击的时间序列模型.让我们来看一个称为卡尔曼滤

测试卡尔曼滤波器(Kalman Filter)

真实的温度测试数据,通过加热棒加热一盆水测得的真实数据,X轴是时间秒,Y轴是温度: 1)滤波前 2)滤波后(p=10, q=0.0001, r=0.05, kGain=0;) 2)滤波后(p=10, q=0.00001, r=1, kGain=0;),Y轴放大10倍并取整 .   相关C语言代码: #define LINE 1024 static float prevData=0; static float p=10, q=0.0001, r=0.05, kGain=0; float kalma

opencv 卡尔曼滤波器例子,自己修改过

一.卡尔曼滤波器的理论解释 http://blog.csdn.net/lindazhou2005/article/details/1534234(推荐) 二.代码中一些随机数设置函数,在opencv中文网站上没有查到: cvRandInit() 初始化CvRandState数据结构,可以选定随机分布的种类,并给定它种子,有两种情形 cvRandInit(CvRandState数据结构,随机上界,随机下界,均匀分布参数,64bits种子的数字) cvRandInit(CvRandState数据结构