Kalman滤波简介


  Kalman滤波是一种线性滤波与预测方法,原文为:A New Approach to Linear Filtering and Prediction Problems。文章推导很复杂,看了一半就看不下去了,既然不能透彻理解其原理,但总可以通过实验来理解其具体的使用方法。

  Kalman滤波分为2个步骤,预测(predict)和校正(correct)。预测是基于上一时刻状态估计当前时刻状态,而校正则是综合当前时刻的估计状态与观测状态,估计出最优的状态。预测与校正的过程如下:

  预测:

  校正:

  公式1是状态预测,公式2是误差矩阵预测,公式3是kalman增益计算,公式4是状态校正,其输出即是最终的kalman滤波结果,公式5是误差矩阵更新。各变量说明如下表:

xk

k时刻的状态

A

状态转移矩阵,和具体的线性系统相关

uk

K时刻外界对系统的作用

B

输入控制矩阵,外界的影响如何转化为对状态的影响

P

误差矩阵

Q

预测噪声协方差矩阵

R

测量噪声协方差矩阵

H

观测矩阵

Kk

K时刻的kalman增益

zk

K时刻的观测值

算法实现与分析


  Kalman滤波最复杂的计算应该就是公式3中的矩阵求逆,考虑到实现的方便性,采用matlab来简单实现,本文主要是分析kalman滤波中各个变量的作用和对滤波结果的影响。具体代码如下:

View Code

  在matlab中,kalman滤波实际上就是上面那5个公式,而难点却是在测试代码中针对不同问题各个变量的初始化上,下面来逐个分析。

1.建立模型,明确观测量,系统状态以及其转移方程(下面这段公式太多,通过word写好后截图)

2.初始化噪声协方差矩阵

  经过上面一步,只有PQRK四个矩阵还未确定了。显然增益矩阵K是不需要初始化的,P是误差矩阵,初始化可以是一个随机的矩阵或者0,只要经过几次的处理基本上就能调整到正常的水平,因此也就只会影响前面几次的滤波结果。

  Q和R分别是预测和观测状态协方差矩阵,一般可以简单认为系统状态各维之间(即上面的a和b)相互独立,那么Q和R就可以设置为对角阵。而这两个对角线元素的大小将直接影响着滤波结果,若Q的元素远大于R的元素,则预测噪声大,从而更相信观测值,这样可能使得kalman滤波结果与观测值基本一致;反之,则更相信预测,kalman滤波结果会表现得比较规整和平滑;若二者接近,则滤波结果介于前面两者之间,根据实验效果看也缺乏实际使用价值。

  以上几个矩阵确定后,对于状态x,由于0时刻我们没有任何关于该系统的知识,可以使用0时刻的测量值z0来初始x0,预测从k=1开始;也可以初始化-1时刻的状态,当然这个状态实际是未知的,也就可随机取。2种方式都可以,但使用0时刻测量值来初始化状态,可以使得前面几次预测更准确。

3.实验分析

  首先使用下面代码生成一组数据存在z.mat中:

View Code

  可以看出其近似为一条振幅不断增大的正弦曲线叠加一个随机噪声。绘制出来如下:

  如果使用上面推导的恒定状态系统模型,代码与实验结果如下:

View Code

  可以看出滤波结果完全滞后于测量数据,其根本原因在于建立的模型存在问题。

  如果采用上面推导的物体运动模型则只需要修改部分代码,主要是矩阵A和H,以及其他矩阵对应的维数,具体如下:

View Code

  运行结果如下图,蓝色为观测数据,红色为kalman滤波数据,右侧为局部放大图。可以看出经过滤波后的数据相当平滑,这里Q和R中元素的量级分别为cQ和cR,下图结果可以看到cR比cQ多了6个数量级。

(1)

  增加几组结果用于对比分析,对于的cQ和cR见图的标题。

(2)

(3)

(4)

(5)

(6)

  首先看图1和2,cR与cQ大小均相差了3个数量级,而二者的比值相同,则kalman滤波结果相同。

  再看图2~图6,cR/cQ在不断减小,kalman滤波结果的平滑性也在不断降低,到图5和6中,滤波结果完全和观测值相同,说明此时kalman滤波已经完全相信观测值了。原因在于cR/cQ过小,系统认为预测噪声的方差很大,不值得信赖,而观测值的噪声方差小,可信度高。

总结


  根据上面的实验结果,可以看出Kalman滤波应用中的几个问题:

  1.模型建立的正确性从根本上决定了滤波效果的正确性。

  上面使用物体静止模型进行滤波,结果完全不对,而使用匀速运动模型则能达到较好的效果。从根本上讲,上面的数据也不是匀速运动的,为何结果会基本正确?看看第一个使用静止模型的滤波结果,虽然我们假定了物体是静止的,但由于观测数据的作用,kalman滤波结果也会有相应的运动而不是完全静止,也就是说滤波器在不停地修正这个状态,而在匀速运动模型中,物体的速度我们认为不变,但同样地kalman滤波器也会不停地修正这个速度,滤波器中计算的速度实质的偏离了真实速度的,因此最终也会有相应的偏差,不过这个偏差在我们容许范围内,也就可以大胆使用了。

  如果能确定物体是匀变速直线运动,使用相应带加速度的模型会得到更准确的效果。但是越严格的模型其适用范围也相应越小。

  2.影响滤波结果平滑性的因素是cR/cQ,这个值反映了我们对于预测和观测值的信任程度;其值越大则越相信预测结果,滤波结果平滑性好;反之则越相信观测结果,滤波结果越偏向于观测值。一般我们使用kalman滤波器是为了能平滑数据的波动,因此应尽量保证cR/cQ稍大,上面的测试结果该值在1e4以上数据较为平滑。

转载自:https://www.cnblogs.com/jcchen1987/p/4371439.html

理解Kalman滤波的使用相关推荐

  1. 目标跟踪之卡尔曼滤波---理解Kalman滤波的使用

    http://www.cnblogs.com/jcchen1987/p/4371439.html 转载于:https://www.cnblogs.com/pengkunfan/p/4372647.ht ...

  2. matlab温度数据怎么滤波_卡尔曼滤波算法思想理解 Kalman filter 第一篇

    卡尔曼滤波算法思想理解 Kalman filter 第一篇 最近在初步的理解目标跟踪的领域, 其中一个非常经典的算法卡尔曼滤波Kalman filter是需要有很好的理解才行, 由于已经脱离了学校,懂 ...

  3. Kalman滤波理解

    摘抄自   作者:marine0131  链接:https://www.jianshu.com/p/44ff7281d4df   首先得明白P Q R这些矩阵的含义与来源 Q:过程激励噪声的协方差矩阵 ...

  4. Kalman滤波算法原理(Matlab/C/C++)

    仪器的观测存在较大的随机误差,因此会出现极端异常观测值.为此,本研究采用Kalman滤波对观测进行最佳估计,进而对时序数据进行降维处理.Kalman滤波是R. E. Kalman[1, 2]提出的一种 ...

  5. GNSS算法进阶(二)- kalman滤波单点定位算法代码实现

    状态预测 kalman滤波与前面实现的最小二乘最大的区别就在于,kalman滤波用到了历史状态信息,即进行状态预测. 公式中BU(k)(控制输入)在我们定位模型中用不到. 从(k-1)时刻将状态转移到 ...

  6. 卡尔曼滤波与组合导航原理(三)连续随机系统的离散化与连续时间Kalman滤波

    文章目录 一.连续时间系统方程离散化 1.连续时间模型 2.状态转移矩阵计算 3.激励噪声的等效计算 4.最终离散化结论 5.常见简单随机过程离散化 6.实际物理信号的噪声单位 二.连续时间量测方程离 ...

  7. Kalman 滤波用于自由落体运动目标跟踪问题

    某一物体在重力场做自由落体运动.观测装置对其位移进行检测,在传感器受到未知的独立分布随机信号的干扰下,我们需要估计该物体的运动位移和速度,该系统是二维状态估计系统. 不考虑x方向上位置变化,只估计y轴 ...

  8. Kalman滤波算法详细推导及简单匀速直线运动程序仿真(matlab)

    Kalman滤波算法详细推导及简单匀速直线运动程序仿真(matlab) 起初只是知道Kalman滤波的核心公式和会用,没有仔细研究,最近老师让讲Kalman算法,所以系统的学习了该算法,并结合匀速直线 ...

  9. Kalman滤波算法解释与实现

    转载,原文地址,请支持:http://www.cnblogs.com/ycwang16/p/5999034.html 认知计算,还要从贝叶斯滤波的基本思想讲起.这一部分,我们先回顾贝叶斯公式的数学基础 ...

最新文章

  1. 如何查看windows版本号?
  2. java hql多条件查询_Hibernate结合JPA编写通用泛型多条件查询
  3. python中 getnode用法_node.js 爬虫入门总结
  4. 【机器视觉】 while算子
  5. android旋转动画和平移动画具体解释,补充说一下假设制作gif动画放到csdn博客上...
  6. Visaul Studio 常用快捷键的动画演示
  7. SaltStack配置文件
  8. 技术动态 | 数据库研究者视角下的知识图谱研究
  9. django之Layui界面点击弹出个对话框并请求逻辑生成分页的动态表格
  10. php oracle数据库连接池,数据库管理Oracle 连接池信息的修改
  11. redis 缓存有效期
  12. 2017全球光伏增速或放缓 国内“6·30”仍将是分水岭
  13. 调整Excel的打印线
  14. php swfobject,SWFObject2.0两种调用方式
  15. API 库的文档体系支持:主流编程语言的文档设计
  16. 计算机网络的权威杂志,科学网—晒个自己整理的计算机网络和通信方向可能相关的期刊列表...
  17. 单样本t检验之汽车引擎排放是否达标
  18. iOS非金额两位小数转化为大写中文
  19. 世唐科技:秒懂什么是区块链
  20. 负载均衡技术之负载均衡器简介

热门文章

  1. D - Triangle Partition HDU - 6300 sort(cmp)
  2. poj1486(二分图必须边)
  3. full calendar mysql_fullcalendar 及mysql数据库的工作日管理
  4. 【leetcode】7.反转整数(Reverse Integer)
  5. 《深入理解Elasticsearch(原书第2版)》——第2章 查询DSL进阶 2.1 Apache Lucene默认评分公式解释...
  6. Go 性能优化技巧 8/10
  7. 免费ASP,PHP空间
  8. 在敏捷研发过程中,Scrum Master角色的哪些事
  9. 某资深互联网人分析:支付宝面临巨大困难,被微信争夺市场,年轻用户流失严重...
  10. 美团高级技术专家:DDD 在旅游电商架构演进中的实践