更新日志:

2020.02.13:修改了第三节推导中的公式错误

2020.03.21:修改了2.1节中的部分表述和公式加粗,补充迹的求导公式

2021.04.14:修改公式显示错误

1 简介

扩展卡尔曼滤波(Extended Kalman Filter,EKF)是标准卡尔曼滤波在非线性情形下的一种扩展形式,它是一种高效率的递归滤波器(自回归滤波器)。

EKF的基本思想是利用泰勒级数展开将非线性系统线性化,然后采用卡尔曼滤波框架对信号进行滤波,因此它是一种次优滤波。

2 算法介绍

2.1 泰勒级数展开

泰勒级数展开是将一个在处具有阶导数的函数,利用关于次多项式逼近函数值的方法。

若函数在包含的某个闭区间上具有阶导数,且在开区间上具有阶导数,则对闭区间上的任意一点,都有:

其中表示函数处的阶导数,等式右边成为泰勒展开式,剩余的是泰勒展开式的余项,是的高阶无穷小。

(著名的欧拉公式就是利用的泰勒展开式得来的!)

当变量是多维向量时,一维的泰勒展开就需要做拓展,具体形式如下:

其中,表示雅克比矩阵,表示高阶无穷小。

这里,维,状态向量为维,

一般来说,EKF在对非线性函数做泰勒展开时,只取到一阶导和二阶导,而由于二阶导的计算复杂性,更多的实际应用只取到一阶导,同样也能有较好的结果。取一阶导时,状态转移方程和观测方程就近似为线性方程,高斯分布的变量经过线性变换之后仍然是高斯分布,这样就能够延用标准卡尔曼滤波的框架。

2.1 EKF

标准卡尔曼滤波KF的状态转移方程和观测方程为

扩展卡尔曼滤波EKF的状态转移方程和观测方程为

          (1)

             (2)

利用泰勒展开式对(1)式在上一次的估计值处展开得

          (3)

再利用泰勒展开式对(2)式在本轮的状态预测值处展开得

            (4)

其中,分别表示函数处的雅克比矩阵。

(注:这里对泰勒展开式只保留到一阶导,二阶导数以上的都舍去,噪声假设均为加性高斯噪声)

基于以上的公式,给出EKF的预测(Predict)和更新(Update)两个步骤:

Propagation:

Update:

其中的雅克比矩阵分别为

雅可比矩阵的计算,在MATLAB中可以利用对自变量加上一个eps(极小数),然后用因变量的变化量去除以eps即可得到雅可比矩阵的每一个元素值。

读者可能好奇?为什么扩展卡尔曼滤波EKF的传播和更新的形式会和标准卡尔曼滤波KF的形式一致呢?以下做一个简单的推导。

3 推导

先列出几个变量的表示、状态转移方程和观测方程:

真实值,预测值,估计值,观测值,观测值的预测,估计值与真实值之间的误差协方差矩阵,求期望的符号

,     

,     

引入反馈:      (5)

OK,可以开始推导了:

由公式(3)(4)得到以下两个等式,标为式(6)(7)

计算估计值与真实值之间的误差协方差矩阵,并把式子(4)(5)(7)代入,得到

其中表示真实值与与预测值之间的误差协方差矩阵。于是得到式(8)

因为的对角元即为真实值与估计值的误差的平方,矩阵的迹(用表示)即为总误差的平方和,即

利用以下矩阵迹的求导公式(其中表示矩阵,表示列向量):

要让估计值更接近于真实值,就要使上面的迹尽可能的小,因此要取得合适的卡尔曼增益,使得迹得到最小,言外之意就是使得迹对的偏导为0,即

这样就能算出合适的卡尔曼增益了,即

代回式(8)得到

接下来就差真实值与预测值之间的协方差矩阵的求值公式了

将以下两个等式代入到上式,

可以得到

与观测噪声是独立的,求期望等于零;;表示观测噪声的协方差矩阵,用表示。于是得到

其中的协方差矩阵的转置矩阵就是它本身。OK,大功告成,以上就完成了全部公式的推导了。

4 实际应用

现在我们假设在海上有一艘正在行驶的船只,其相对于传感器的横纵坐标为为隐藏状态,无法直接获得,而传感器可以测量得到船只相对于传感器的距离和角度,传感器采样的时间间隔为,则:

状态向量,观测向量

状态转移方程和观测方程为:

那么雅克比矩阵为

这里给定距离传感器的噪声均值为,方差为;角度传感器的噪声均值为0,方差为(单位弧度);

采样时间点为个;

船只的初始状态为,四个状态量的噪声的方差分别为。仿真结果如下:

从仿真结果可以看出,EKF在这种情形下的滤波效果还是不错的,但是在实际应用中,对于船只运动的状态转移噪声的均值和协方差矩阵,以及传感器的观测噪声的均值和协方差矩阵,往往都是未知的,有很多情况都只有观测值而已,这样的情形下,就有必要利用观测值对噪声的统计量参数做出适当的估计(学习)。

5 参数估计(参数学习)

利用EM算法和极大后验概率估计(MAP),对未知的噪声参数做出估计,再利用估计出的参数去递推卡尔曼滤波的解。本文对EM算法在卡尔曼滤波框架中的推导暂时先不给出,之后可能会补充,这里就先给出一种Adaptive-EKF算法的公式。

,     

,     

(1)E-Step

Propagation:

Update:

(2)M-Step

利用以上的Adaptive-EKF算法对船只的运动做滤波跟踪,得到的效果如下图所示:

相比于没有做参数估计的EKF滤波,可以看出,Adaptive-EKF在估计误差上要优于EKF滤波,而且,它并不需要指定状态转移噪声和观测噪声的参数,将更有利于在实际中的应用。

6 总结

EKF滤波通过泰勒展开公式,把非线性方程在局部线性化,使得高斯分布的变量在经过线性变换后仍然为高斯分布,这使得能继续把标准卡尔曼滤波KF的框架拿过来用,总体来说,EKF在函数的非线性不是很剧烈的情形下,能够具有很不错的滤波效果。但是EKF也有它的不足之处:其一,它必须求解非线性函数的Jacobi矩阵,对于模型复杂的系统,它比较复杂而且容易出错;其二,引入了线性化误差,对非线性强的系统,容易导致滤波结果下降。基于以上原因,为了提高滤波精度和效率,以满足特殊问题的需要,就必须寻找新的逼近方法,于是便有了粒子滤波PF和无迹卡尔曼滤波UKF,笔者将在接下来的博文中为读者解读。

7 参考文献

[1] 林鸿. 基于EM算法的随机动态系统建模[J]. 福建师大学报(自然科学版), 2011, 27(6):33-37.

[2] https://www.cnblogs.com/gaoxiang12/p/5560360.html.

[3] https://max.book118.com/html/2017/0502/103920556.shtm.


原创性声明:本文属于作者原创性文章,小弟码字辛苦,转载还请注明出处。谢谢~

如果有哪些地方表述的不够得体和清晰,有存在的任何问题,亦或者程序存在任何考虑不周和漏洞,欢迎评论和指正,谢谢各路大佬。

需要代码和有需要相关技术支持的可咨询QQ:297461921

卡尔曼滤波系列——(二)扩展卡尔曼滤波相关推荐

  1. 卫星轨道的估计问题(Matlab)(二):扩展卡尔曼滤波(EKF)对新问题的尝试

    前言 在前面的问题中我们已经考虑到了用微分方程来描述卫星运动轨迹的方法: r¨=rθ˙2−GMr−2θ¨=−2r−1r˙θ˙\ddot r = r\dot \theta^2-GMr^{-2}\\\dd ...

  2. 卡尔曼滤波KF与扩展卡尔曼滤波EKF算法

    最近学习了一些预测算法 卡尔曼滤波 具体推导可以查看B站的教程:贝叶斯滤波与卡尔曼滤波第一讲 很有必要的绪论_哔哩哔哩_bilibili 建议从第一讲开始看 看上述教程花不了多少时间,可能看一个电影的 ...

  3. 状态估计3(扩展卡尔曼滤波)

    1 简述 卡尔曼滤波适用于线性高斯系统,然而这是一个强假设:对于大部分机器人系统而言,非线性系统才是常态,如此卡尔曼滤波就不太适用了,那么该如何解决这个问题?这引出了扩展卡尔曼滤波. 2 扩展卡尔曼滤 ...

  4. 卡尔曼滤波系列——(六)卡尔曼平滑

    更新日志: 2020.11.23:修改了2.4节中前向递推的公式书写错误 目录 1 简介 2 原理 2.1 概率状态空间模型 2.2 贝叶斯平滑公式 2.3 两个引理 2.4 RTS平滑 3 推导 3 ...

  5. 扩展卡尔曼滤波新手教程(二)----中文版

    扩展卡尔曼滤波新手教程(二) 说明:本文内容翻译自外文网站The Extended Kalman Filter: An Interactive Tutorial for Non-Experts,仅供学 ...

  6. 无人驾驶汽车系统入门(二)——高级运动模型和扩展卡尔曼滤波

    前言:上一篇文章的最后我们提到卡尔曼滤波存在着一个非常大的局限性--它仅能对线性的处理模型和测量模型进行精确的估计,在非线性的场景中并不能达到最优的估计效果.所以之前为了保证我们的处理模型是线性的,我 ...

  7. 卡尔曼滤波原理(二):扩展卡尔曼

    1.理论部分 上一篇介绍了线性卡尔曼滤波器,当系统为线性高斯模型时,滤波器能给出最优的估计,但是实际系统总是存在不同程度的非线性,如平方.三角关系.开方等.对于非线性系统,可以采用的一种方法是通过线性 ...

  8. 自动驾驶算法-滤波器系列(二)—— 卡尔曼滤波简介及其变种(EKF、UKF、PF)介绍

    KF&EKF&UKF&PF 1. 基础知识概要 协方差矩阵 多维高斯分布 状态空间表达式 2. 什么是卡尔曼滤波器 3. 五个重要的公式 公式介绍 公式推导过程 4. 卡尔曼滤 ...

  9. 卡尔曼滤波原理二:扩展卡尔曼

    1.理论部分 上一篇介绍了线性卡尔曼滤波器,当系统为线性高斯模型时,滤波器能给出最优的估计,但是实际系统总是存在不同程度的非线性,如平方.三角关系.开方等.对于非线性系统,可以采用的一种方法是通过线性 ...

  10. 卡尔曼滤波系列——(四)无损卡尔曼滤波

    1 简介 无损卡尔曼滤波又称无迹卡尔曼滤波(Unscented Kalman Filter,UKF),是无损变换(Unscented Transform,UT)与标准卡尔曼滤波体系的结合,通过UT变换 ...

最新文章

  1. mysql 开源 ~ canal+otter系列(2)
  2. 李善友《认知升级之第一性原理》--507张PPT全解!_搜狐科技_搜狐网
  3. 【操作系统】请求调页
  4. c#遍历一个文件夹下的所有文件包括子文件夹【原】
  5. 谈谈Python和其他语言的区别
  6. 如何让ai参与c语言循环,C for 循环 | AI学习网
  7. python 100题_python 100题
  8. 2011-10-13
  9. 设计模式---桥接模式(C++实现)
  10. com和dll(一)
  11. 安卓如何让listview在上下两个按钮之间充满_如何提高超声波塑胶焊接机生产效率...
  12. Win 2000系统引导过程详解
  13. 二维码生成(js实现)
  14. VS2013新建项目出现脚本错误的解决办法
  15. 火车头怎么采集php的,火车采集器采集入库教程
  16. 品搜妞——百度、谷狗、搜狗的女人三围
  17. dreamweaver cs4 css汉化补丁,dreamweaver cs4官方版
  18. 关于asc、txt格式到pcd、ply格式数据转换
  19. 安全合规/GDPR--27--我们通过了GDPR合规认证
  20. ARM中断向量表与响应流程

热门文章

  1. Qt|表格代理的实现及使用代码qtableview和qtablewidget均适用
  2. 计算机配色在纺织中的应用,计算机配色在印染行业的应用
  3. c程序设计第五版谭浩强课后答案 第四章习题答案
  4. WinRAR 去除广告弹窗,简单4步亲测有效!
  5. android 字体显示框架,XUI 一个简洁而又优雅的Android原生UI框架
  6. 计算机42D,汉印G42D 电子面单打印机
  7. 阿里巴巴大数据实践:大数据建设方法论OneData
  8. 基于蒙特卡诺的风场景模型出力(Matlab代码实现)
  9. recv 函数返回值说明
  10. 哲学家就餐问题python解决_哲学家进餐问题-3中解决方案