标签:并且 高斯 strong 好的 下一步 通过 lte 滤波 位置
1.卡尔曼滤波算法要做什么?
对状态进行估计。
卡尔曼滤波的默认假定是,世界充满噪声,
任何测量结果都有噪声,状态转移过程会有噪声,你想知道系统的真实值么?玩儿蛋去吧。
卡尔曼滤波另一个重要假定模型是这样的,
一个系统会处在各种不同的状态,并且会在状态之间转化来转化去。
但是呢,倒霉的是我们谁也不知道该系统当前到底是在什么状态;
但是呢,幸运的是我们可以通过测量的结果猜测到系统当前在一个什么状态。
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 = Ht Xt+Vt = Ht ( At Xt-1 + Wt-1) + Vt 就可以得到预测值。
但是,Xt那是各种不准确啊(有噪声)。不准确怎么办?那就去看观测值呗,于是得到观测值z_t,但是观测值也不准确唉,那怎么办?
当当当当,卡尔曼告诉我们一个灰常牛B的事情,一个相对准确的系统值具有如下结构:
这里" & "表示估计值," - "表示是用前面式子算出来的估计值,不带" - "表示是最后的估计值。
这个式子是想说,你不是式子估计和观测值都不准么,那么你把他俩加个权,求个和,那就可能更准确了。
啥?你说这个式子不像加权?
X&t = X&-t + K(Zt - H Xt-1 ) =》X&t = X&-t + K Zt - K H Xt-1
=》X&t = At Xt-1 + Wt-1 + K Zt - K H Xt-1
=》X&t = (At - K H )Xt-1+ Wt-1 + K Zt
所以,最牛B就牛B在了这个“K”,传说中的卡尔曼增益。 这个K怎么得到的?
我也不知道。 文章说法是,定义误差 e_t = x_t - x&_t ,P_t为此误差的协方差矩阵,目的是使这个误差协方差矩阵最小化,把(3)代过去,于是折腾来折腾去,再求个导数为0,解得K,这个关键值的算法:
说到这里,传说中的卡尔曼滤波就算讲完了。神马?你说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也会收敛到常量
标签:并且 高斯 strong 好的 下一步 通过 lte 滤波 位置
原文地址:http://www.cnblogs.com/zhipengh/p/8015380.html