原创 做过kalman filter的请一起讨论一下!

2011-6-14 15:33 3706 5 5 分类: 测试测量

http://bbs.matwav.com/viewthread.php?tid=90076

yhvhkid:

自从60年代R. E. Kalman提出kalman算法以来,在各领域都得到了广泛的应用和发展,经过40年的发展,已知涌现出各种个样改进方法,并且取得了良好应用效果,应该说kalman算法是一种既经典又具有广泛适用性的算法。
希望做过kalman研究的朋友一起交流一下心得,共同进步!

-------------------------------
radar:
我上博士的时候做过Kalman滤波,主要研究末制导雷达角闪烁中的目标跟踪,由于角闪烁不是一种高斯噪声,因此需要对线性Kalman滤波算法进行改进。有两种解决思路:一种办法是将角闪烁噪声看成学生氏-t分布,直接推导该分布下的非线性Kalman滤波算法;另一种办法是将角闪烁噪声分解为高斯噪声和拉普拉斯噪声,然后用隐Markov模型将两者联系起来。说起来挺复杂,不过基本上是将老外的算法用在具体的弹载末制导雷达体制上,没有做出名堂。后来走上工作岗位后又教研究生的《统计信号处理》课程,才算对Kalman滤波有了比较深的了解。
------------------------------
yhvhkid:
的确,Kalman滤波在控制领域应用很多,但是我看了很多关于Kalman的资料均只是把一般方程罗列出来,而对于推导似乎不屑一顾。另外,从应用的角度,很多资料均对Kalman滤波中方差的处理避而不谈。我个人认为,方差对滤波结果影响较大,不是随便取一个值就能解决问题的。所以就下几个问题,和大家讨论一下:
1.)过程噪声的方差(一般记为P)     它的计算公式中有一项含有方差(一般记为Q),多数情况下,Q取一个很小的数(或取0)与单位矩阵的积,Q取值需要先验知识,但在没有先验知识的情况下需要试算确定,是否还有一些其他方法?
2.)量测噪声(残差)的方差(一般记为R)   计算Kalman增益(一般记为K)时公式中含有R,当噪声为非高斯噪声时R是随时间变化的,我采用了加窗估计的办法,是否还有其他非模型化的数值计算方法?
3.)评判标准     Kalman滤波作为一种最优滤波方法,按照最小二乘原则即可推导出来。那么,除了残差(或基于残差的指标)外,是否还有其他的的评判标准?
4.)滤波方法        除了标准Kalman滤波方法外,我试过很多其他改进方法如均方根方法、向后平滑处理、遗忘因子、加权、Q,R未知时的处理等,但我发现好像就我涉及的问题,各种方法差不多,不知在这些方法在其他领域的应用效果如何?

我做的是时间序列的时变arma模型建模及仿真,做法是:用时变arma模型表示时间序列,用kalman滤波估计arma模型的时变参数,再用时变参数合成满足一定要求的序列。我需要在估计时变参数的同时也要估计残差,希望大家给点建议!
---------------------------------
radar:
Kalman滤波公式,首先要得到线性系统的状态方程和观测方程,在状态噪声和观测噪声均为高斯白噪声的假设下,应用线性最小均方误差准则推导。推导方法一般有两种:一种是利用正交投影算子,结合线性最小均方误差估计推导;另一种是利用卡亨南-诺维展开推导。充分掌握两种噪声的统计特性,建立准确的数学模型是成功应用Kalman滤波的关键。模型建立不准确时可能导致Kalman滤波发散。下面尝试分别回答你的问题:
1)状态噪声和观测噪声方差的选取的确非常重要,很多资料回避可能是因为不同的系统具有不同的估计方法,很难用统一的模型来表达;
2)Kalman滤波方程是根据线性最小均方误差准则推导出来的,其滤波的均方误差阵是评价滤波精度的最重要指标,因为线性最小均方误差估计是一种无偏估计。在大多数应用中,不存在控制尽量少的观测次数的使估计达到预定精度的问题。如果有这种情况存在,那还有必要考察估计的一致性;
3)我对你提到的其它改进的滤波方法和arma模型一知半解,很抱歉无法回答。arma模型是不是自回归模型的一种?
-----------------------------------
yhvhkid:
接触了这么长时间的kalman滤波,我认为方差的问题确实是一个令人头疼的问题,一方面噪声在实际应用中不一定是白噪声,另一方面方差的估计也是一个带有很强经验性的问题,虽然估计方法很多,但实际应用中要根据自己研究的问题来确定适当的方法。在控制领域就我看过的资料和自己计算的结果来说这一问题应该较容易解决,而且可以达到很高精度,但我需要在滤波估计结果中找出一些有用的规律,这一点却很难,需要在规律和精度之间做一个权衡,至今也没有找到一个很好的解决办法。
由于kalman滤波(包括EKF)在白噪声假定下对非线性系统采用一次(阶)线性化处理,这将给后验方差的估计带来很大的误差,并有可能导致局部最优的现象出现和滤波发散。针对这一问题Eric Van等人提出了基于贝叶斯定理的Unscented Kalman和Particle filter,我试了一下Unscented Kalman(还未深究),感觉效果还可以,不知试过没有?
kalman滤波(包括EKF)的应用大概可以分为三个方面(Eric Van):状态估计、参数估计(如用Kalman训练神经网络的权值)、双估计(状态和参数估计同时估计),我遇到 的问题应是属于双估计,试算了一个例子,效果还可以。
arma是自回归移动平均(Auto-Regression Moving Average),其他还有arima, armav,arx,armax,narmax等等,arma可以和反馈神经网络建立(等价)映射关系,Simon Haykin编过一本叫《Kalman filtering and neural networks》的书对上述两者作了详尽的介绍。
对于K-L展开我用过,但利用它推导Kalman滤波的资料我手头还没有,能否介绍点参考资料,先谢谢了!
-----------------------------
flzt:
我在做kalman滤波的仿真,状态方程和观测方程的参数矩阵,就是A和C是怎么得到呢?
----------------------------
yhvhkid:
大多数情况下A和C是已知的,这实际上是属于系统建模(辨识)的问题。一般要针对自己所研究的问题,根据输入和输出之间的映射关系,建立合适的模型,并将模型表示为状态空间方程的形式,建模直接影响到仿真(和预测)的精度。
kalman滤波只是状态或参数估计方法的一种,其他还有最小二乘、极大似然估计、梯度修正、自适应、频率(脉冲)响应函数等方法。
matlab中有关于kalman的函数,如kalman、kalmd等,还有其他如rarmax、armax等一些有用的函数。
你可以看一看Lennart Ljung的文章,很经典,google上搜一搜就能找到他的大部分文章。
--------------------------------
flzt:
哦,对一时间离散信号序列(含噪声),想用kalman对其进行滤波是先建模,然后才滤波?
-------------------------------
radar:
     引用:
[parse]yhvhkid wrote:[/parse]
对于K-L展开我用过,但利用它推导Kalman滤波的资料我手头还没有,能否介绍点参考资料,先谢谢了!
有关资料你可以参阅国防科技大学刘福声教授和罗鹏飞副教授编著的《统计信号处理》。不过那本书写得不太好,印刷错误比较多,你可以追溯原始文献。
应该说你对Kalman滤波的研究比我深。Kalman滤波的系统建模,特别是噪声统计特性的估计关系到整个滤波性能的好坏,在长时间不间断运行的控制系统中尤其如此。按我的理解,为了保证Kalman滤波在长时间工作的控制系统中不发散,可能采取的措施有两种:对于工作状态比较稳定的系统,可以根据长时间对系统的观测对噪声的统计特性进行估计;对工作状态不太稳定的系统,可能必须对系统噪声和状态噪声的统计特性进行动态估计,并在滤波过程中采取措施,舍弃离当前估计时刻时间过长的数据(即加权)。在导弹末制导中,由于系统仅需要工作很短的一段时间,Kalman滤波只要保证在这样较短的时间内不发散,或者即使当时间趋于无穷大时是发散的,只要在末制导时间内滤波的均方误差满足导弹制导精度就可以了。
----------------------------------
yhvhkid:
引用:
[parse]wfsun wrote:[/parse]
按我的理解,为了保证Kalman滤波在长时间工作的控制系统中不发散,可能采取的措施有两种:对于工作状态比较稳定的系统,可以根据长时间对系统的观测对噪声的统计特性进行估计;对工作状态不太稳定的系统,可能必须对系统噪声和状态噪声的统计特性进行动态估计,并在滤波过程中采取措施,舍弃离当前估计时刻时间过长的数据(即加权)。在导弹末制导中,由于系统仅需要工作很短的一段时间,Kalman滤波只要保证在这样较短的时间内不发散,或者即使当时间趋于无穷大时是发散的,只要在末制导时间内滤波的均方误差满足导弹制导精度就可以了。
以前没人可以交流,不能确定自己的做法是否正确,毕竟不想玩数字游戏,蒙混过关。现在我的疑虑已经打消,受益匪浅,非常感谢!
-----------------------------------
radar:
引用:
[parse]flzt wrote:[/parse]
哦,对一时间离散信号序列(含噪声),想用kalman对其进行滤波是先建模,然后才滤波?
是必须先建模后滤波,也就是要事先知道序列随时间变化(即状态转移)的规律。不过要注意,如果你的序列是固定长度的时间序列,则属于静态信号的参数估计问题,可以用Bayes估计、线性最小均方误差估计或最小二乘估计(三种估计要求的信号与噪声的统计特性不一样,详见《统计信号处理》教材),而不必用Kalman滤波。
-----------------------------------
acillies:
小弟初做卡尔曼滤波,在用matlab仿真过程中,滤波结果与预期值总是存在稳态误差,不知道如何解决,希望各位学长不吝赐教,谢谢
----------------------------------
 
radar:
引用:
[parse]acillies wrote:[/parse]
小弟初做卡尔曼滤波,在用matlab仿真过程中,滤波结果与预期值总是存在稳态误差,不知道如何解决,希望各位学长不吝赐教,谢谢先
计算机使用数字信号,存在量化误差,当滤波的迭代次数很大时,这种误差会积累到比较大的程度,最终可能导致Kalman滤波发散,这是最可能产生稳态误差的原因之一。此外,仿真时Matlab语言产生的随机序列不是真正意义上的随机序列,而是伪随机序列,它也有可能产生滤波误差。从这一点可以充分看出计算机仿真的局限性,理论推导是最有说服力的。我虽然在理论上知道这种误差来源,但在实践中没有碰到过,不知道具体如何解决,对不起!你可以查找有关书籍的。
-----------------------------------
blackdot:
kalman滤波与时间序列的处理方法(如ARMA),我感觉也存在其局限性。例如对于不平稳的随机信号就不能够处理了。这是因为方法假设的前提是平稳的白噪声,拥有统计特征,但不平稳随机激励的统计特征量应该随时间变化。对于这种环境随机信号的研究应该是有意义的。例如,这种不平稳随机信号的模拟,好像上述的方法就派不上用处了。处理这种信号,寻求其数学上的描述方式,混沌与分形似乎可以试一试。
-----------------------------------
关于kalman filter我有很多话要说,但是时间确实紧张,没时间写那么多,等这阵忙完了我专开个帖子写一下。
    现在,只能给有志于此的同志们开个书单,有兴趣的可以去看看。
    1.kalman filtering :theory and practice in matlab.
    2.applied optimal estimation.
    3.fundmentals of kalman filtering:a practical approach.
    4.factoraztion methods for discrete sequential  estimation
   关于中文的写Kalman的书,大多只是介绍性的,离工程应用有相当大的距离。
---------------------------------
引用:
[parse]胖胖狼 wrote:[/parse]
有朋友问我这样一个问题,我不知如何解决:
      有这样一组数据3 4 4 2 3 3 2 2 1 2 1 1 1 2 1 1 1 1 1 1 2 2 5 1 1 1 2 1 1 1 1 1 1 2 2 1 2 2 3 3 1 2 2 1 2 2 1 2 1 2 1 1 2 3 2 5 6 3 4 3 1
      要我用kalman滤波器滤波,告诉他结果!
      搞得我一头雾水!
这太扯了,kalman filter不是滤波器,是估计器,需要系统模型的,这个跟股票似的。
 
Kalman filter is in indeed a filter. The reason is that the input to it is noisy measurement, and the output is filtered state estimate. You can call it estimator or filter, just as you like.

Kalman filter is really model-based. Before using it, you need to know the state equation which model the evolution of the process, the sensor measurement model and the associated statistics. Only when all these conditions are satisfied, the output of Kalman filter is optimal.

So for the above problem, modeling is the first thing you should do.
---------------------------------------
dddraco:
引用:
[parse]yhvhkid wrote:[/parse]
以前没人可以交流,不能确定自己的做法是否正确,毕竟不想玩数字游戏,蒙混过关。现在我的疑虑已经打消,受益匪浅,非常感谢!
两位高手前辈交流让我受益匪浅啊
第一次被推荐来这个论坛就看到这样的好帖,太赞了!
我最近正在研究滤波发散的问题
有一些疑问想咨询
滤波发散一般是两个原因造成的:
1、模型估计不准确
2、字长的舍入误差造成相关矩阵失去正定性
这里就应用到平方根滤波等方法。但似乎总是没有确定的,比较广泛适用的经典
有一个办法就是用最小二乘的方法来监测Kalman是否发散,如果发散,则用最小二乘的解来替代Kalman。这个不知道有没有人做过,效果如何

另外
我最近正在看《kalman滤波理论及其在导航系统中的应用》,科学出版社,付梦印,邓志红,张继伟 编著。因为功力不够,很多东西还一知半解。但是根据框架来看,是很好的系统介绍kalman的书籍。推荐的说
----------------------------------
xiaolongyuan:
我正用kalman filter进行再入弹道轨迹估计,感觉和各位一样

1. 系统模型一定要准确,否则怎么修正滤波方法都无济于事
2. 模型噪声和测量噪声的自适应估计方法并不是越精确越好,比如sage-husa算法,虽然有严格的证明推导,但是实际使用也许会发散
----------------------------------
 
我在学习EKF算法,做单站目标定位,EKF会发散,查了一下资料,说是用修正极座标下的EKF,会避免发散,还有一个UKF(是不是该翻译成无味卡尔曼,哈哈有些怪怪的)算法,据说也不错,不知道哪位高手做过这两个算法,能否给提供一下源码思路?谢谢啦!!
--------------------
我是做定位估计的用的EKF,如果测量误差和状态误差是零均值白高斯误差,效果很好,即使是非白高斯零均值误差效果也挺好,但实际情况是非零均值的误差,而且有每一次实例中都有均值都不同,必须在状态估计中找到偏差或者设法避免偏差的影响。我不知道该如何做,有没有有经验的师兄弟说说你们是如何做的。
 

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条