xxxrc4 发表于 2015-6-10 10:18:40

我对卡尔曼滤波的认识

本帖最后由 xxxrc4 于 2015-6-10 10:18 编辑

kalman filter
kf是一种时域滤波器,在使用陀螺仪、加速度计的很多场合都需要用到(四轴、自平衡等,还有什么阿波罗飞船,导弹之类的,是不是貌似很高端啊,别怕其实就那么回事),资料介绍的比较多,但是复杂的数学令人生畏,用图表的方式总结下来龙去脉,利人利己吧!(其实是某某准备让本人去他们那讲讲,自己说不清楚不好吧,所以下了点功夫,^_^)
1、问题描述:针对线性动态系统,参见矩阵A,明显典型的一阶Markov Chain(这个不懂自己去查资料)
u:控制量;z:观测量;x:状态量;方框:矩阵,作用是左乘;圆:变量;星形:高斯白噪声,右下角为其方差;

状态转移过程:

观测计算过程:

另一种图描述得更好一些,蓝色是已知量,需要获得状态量或者它的好的估计,中间的lz-1表示一个延时:
2、解决方案:
2.1 构建一个同结构的模型,粉红色表示估计量

虽然结构相同,但是无噪声,问题:1、缺初值x0的准确值的话无法工作;2、无噪声,计算有误差
2.2将上述结构改进,将观测量利用起来,(^_^废话,不用就靠猜了),设计一个反馈参与到估计过程中去,设法使得后验误差的协方差最小。带-的粉红变量表示先验估计(priori estimate),指根据以往经验和分析得到,常表示为x(k|k-1);不带的表示后验估计(posteriori estimate),指利用观测量修正后的估计,常表示为x(k|k);

关键在于K(卡尔曼增益,kalman gain)应该如何设置。详细推导过程见参考文献(无非是求导,然后一堆简单的概率计算)。
因此,kf算法的详细过程包括两部分,也即是它的5个公式:
预测阶段:计算先验估计(P(k|k-1)是X(k|k-1)对应的covariance)
X(k|k-1)=A X(k-1|k-1)+B U(k) ……….. (1)
P(k|k-1)=A P(k-1|k-1) A’+Q ……… (2)
修正阶段:计算后验估计并更新先验估计的协方差
X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) ……… (3)
Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) ……… (4)
P(k|k)=(I-Kg(k) H)P(k|k-1) ……… (5)
其实,(3)和(4)本来应该倒过来的,没有Kg怎么计算(3)?大家都这么写就约定俗成了!
就这么简单,别想复杂了!
明显,算法过程中需要R和Q,观测噪声协方差R可以通过离线统计获得,而过程激励噪声协方差Q没有好办法获得(原因是无法之间观测到过程量xk)
参考文献:
1. 标量卡尔曼滤波http://www.swarthmore.edu/NatSci/echeeve1/Ref/Kalman/ScalarKalman.html#Alternate
里面有详细的推导过程
2. http://www.cs.unc.edu/~welch/kalman/
2. Xuchen Yao, Ph.D. Johns Hopkins University "An Introduction to the Kalman Filter" 翻译成中文了的,强烈推荐

大尾鲈鳗 发表于 2015-6-10 12:58:38

mark{:soso_e179:}

wing 发表于 2015-6-10 13:00:55

先支持下,慢慢再研读

bemc 发表于 2015-6-10 15:07:46

不错 需要好好学习一下

血阳 发表于 2015-7-24 17:53:47

赞赞赞!!!楼主讲得简单易懂,清晰明了,学习了!!!

xuguang.liu 发表于 2015-9-2 15:18:28

mark一下,待到以后了解了解再回来看

evesky 发表于 2015-11-3 15:55:46

不错,学习了

sluo 发表于 2016-1-28 21:49:07

学习了学习了学习了

killsaler 发表于 2016-4-30 21:12:04

刚才浏览了其他篇关于卡尔曼算法的,也认真拜读了楼主的文章,(虽然也没懂),不过第一图很直观,很好,不过通过对比发现了一个问题,关于状态转移的:楼主的是X(k)=AX(K-1)+B U(k-1)+W(k-1),但是从一张图和我刚从别的文章看的理解有点不一样。X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。A和B是系统参数、W(k)为过程的噪音。
现在的问题是:假设为单一系统
按楼主的意思是:
k时刻的系统状态=(k-1)时刻系统状态+(k-1)时刻对系统的控制量+(k-1)过程噪音
而我理解第一张图的意思是:
k时刻的系统状态=(k-1)时刻系统状态+(k)时刻对系统的控制量+(k)过程噪音
所以我理解的是:X(k)=A X(k-1)+B U(k)+W(k)
求解答,不懂!

xxxrc4 发表于 2016-5-18 17:28:07

killsaler 发表于 2016-4-30 21:12 static/image/common/back.gif
刚才浏览了其他篇关于卡尔曼算法的,也认真拜读了楼主的文章,(虽然也没懂),不过第一图很直观,很好,不 ...

请分清时刻的概念,k时刻的状态由k-1时刻决定,就是这么简单,这就叫状态转移,否则的话,自己决定自己,就没法计算了,谢谢!

一心梦夏 发表于 2018-7-20 09:13:04

你好,最近刚开始在工作中使用卡尔曼滤波。我的研究方向是对天空飞行物体的轨迹预测。目前遇到的问题是,天空中的飞行物有自己的动力系统,可以随时改变航迹,也就是我没办法确定它的运动方程(例如:匀速、匀加速等),那么在这种情况下,我该如何使用卡尔曼滤波来解决问题呢?
页: [1]
查看完整版本: 我对卡尔曼滤波的认识