码迷,mamicode.com
首页 > 其他好文 > 详细

<kalman filter>分析

时间:2017-12-10 11:08:36      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:并且   高斯   strong   好的   下一步   通过   lte   滤波   位置   

1.卡尔曼滤波算法要做什么?

对状态进行估计。

卡尔曼滤波的默认假定是,世界充满噪声,

任何测量结果都有噪声,状态转移过程会有噪声,你想知道系统的真实值么?玩儿蛋去吧。

卡尔曼滤波另一个重要假定模型是这样的,

一个系统会处在各种不同的状态,并且会在状态之间转化来转化去。

但是呢,倒霉的是我们谁也不知道该系统当前到底是在什么状态;

但是呢,幸运的是我们可以通过测量的结果猜测到系统当前在一个什么状态。

2.卡尔曼滤波算法怎么对状态进行估计?

建模 :利用状态过程噪声和测量噪声对状态进行估计。

  • 状态方程:Xt =  At Xt-1 + Wt-1;   (1)       //状态方程表示 前一时刻状态和下一时刻状态之间的关系,其实,就是一个固定的转移方程。
  • 测量方程:Zt  =  HXt+Vt ;             (2)       // 测量方程表示 观测值和系统状态的关系

                                                                                       // 如果你看到种子发芽了,那么它的状态就是刚出生;如果你看到它开始长叶儿了,

                                                                                       // 那状态就叫生长期;如果丫开花了,就叫啥啥期;如果结果了,就叫成熟期;如果蔫儿了,就叫嗝屁期。                             

Xt  是t时刻系统所在的状态,Zt 是所谓的观测值;Wt-1 ,Vt  都是高斯白噪声N(0,Q) 和N(0,R),Q、R 是协方差矩阵。

At 、Ht 事先设定好的矩阵

过程噪声 用w表示:一个状态在一个时刻点k的状态进入下一个时刻点k+1状态,会有很多外界因素的干扰,我们把干扰就叫做过程噪声,(这个词一看就是硬翻译过来的,别在意为什么叫噪声)。

量测噪声 用v表示:任何一个测量仪器,都会有误差,我们把这个误差叫做量测噪声。

卡尔曼滤波,本质是想要预测下一步的观测值,或者实时监控一下系统所在状态。

那咱就从预测角度分析。

先设想一下:给定上一个位置的状态Xt-1,根据公式(1)和(2)

可以推导得到:Zt  =  HXt+Vt  =  Ht ( At Xt-1 + Wt-1) + Vt  就可以得到预测值。

但是,Xt那是各种不准确啊(有噪声)。不准确怎么办?那就去看观测值呗,于是得到观测值z_t,但是观测值也不准确唉,那怎么办?

当当当当,卡尔曼告诉我们一个灰常牛B的事情,一个相对准确的系统值具有如下结构:

  • X&t = X&-t + K(Z - H Xt-1 )     (3)    //状态估计值  

这里" & "表示估计值," - "表示是用前面式子算出来的估计值,不带" - "表示是最后的估计值。

这个式子是想说,你不是式子估计和观测值都不准么,那么你把他俩加个权,求个和,那就可能更准确了。

啥?你说这个式子不像加权?

X&t = X&-t + K(Z - H Xt-1 )  =》X&t = X&-t + K Z - K H Xt-1 

                                          =》X&t = At Xt-1 + Wt-1 + K Z - K H Xt-1 

                                          =》X&t =  (At  - K H )Xt-1+ Wt-1 + K Z

 所以,最牛B就牛B在了这个“K”,传说中的卡尔曼增益。 这个K怎么得到的?

我也不知道。 文章说法是,定义误差 e_t = x_t - x&_t ,P_t为此误差的协方差矩阵,目的是使这个误差协方差矩阵最小化,把(3)代过去,于是折腾来折腾去,再求个导数为0,解得K,这个关键值的算法:

  • K = P-t * H^T * ( H * P-t * H^T + R) ^(-1);   (4)  //那么式子(4)就是在说,问题就变成了这个P-t怎么个求法。

说到这里,传说中的卡尔曼滤波就算讲完了。神马?你说P-t还没求呢。是啊,卡尔曼滤波一共就俩需要求的玩意儿,还都tm是迭代求解,一个就是这个P-t,另一个就是状态x-t。你随便给个初始值,然后就迭着吧。

言归正传,我还得给出迭代的公式:

X-t = A * X&(t-1) ; (5)

P-t = A * P(t-1) * A^T + Q;     (6)

Pt = (I - Kt * H ) P-(t-1);   (7)

大功告成,以上就是传说中的卡尔曼滤波的迭代求解方法,如果你要预测状态呢,就用式子(5)的结果;如果预测观测值呢,就把式子(5)的结果乘个H;如果是监测状态呢,就用式子(3)的结果。如果Q,R是常数,K会收敛,也即P也会收敛到常量

 

<kalman filter>分析

标签:并且   高斯   strong   好的   下一步   通过   lte   滤波   位置   

原文地址:http://www.cnblogs.com/zhipengh/p/8015380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!