1 简介

无损卡尔曼滤波又称无迹卡尔曼滤波(Unscented Kalman Filter,UKF),是无损变换(Unscented Transform,UT)与标准卡尔曼滤波体系的结合,通过UT变换使非线性系统方程适用于线性假设下的标准卡尔曼体系。

与EKF不同的是,UKF是通过无损变换使非线性系统方程适用于线性假设下的标准Kalman滤波体系,而不是像EKF那样,必须通过线性化非线性函数实现递推滤波。

UKF的基本思想是卡尔曼滤波与无损变换,它能有效地克服EKF估计精度低、稳定性差的问题,因为不用忽略高阶项,所以对于非线性分布统计量的计算精度高。

2 基本算法

2.1 非线性系统状态估计原理

离散系统的状态转移方程和观测方程为

不管条件密度函数的特性如何,最小均方误差估计就是条件均值,其中表示期望的计算。

非线性系统的状态估计分成一步预测和测量修正两个步骤:

(1)一步预测

根据所有过去时刻的观测信息对状态做最小均方误差做预测,其协方差矩阵为

(2)观测修正

引入卡尔曼增益,利用实际观测值与预测的观测值的差异,对预测值进行修正

其中的计算公式分别为

其中表示第次观测向量的值,表示前次观测向量的值的集合。那么估计值与真实值的误差协方差矩阵为

一般来说,近似非线性函数的概率密度分布比近似非线性函数本身更加容易,因此便有了粒子滤波PF和无迹卡尔曼滤波UKF。粒子滤波通过使用参考分布,随机产生大量粒子,用粒子的分布近似为状态的后验概率密度函数,进而计算得到系统状态的估计,他的主要缺点为粒子数越大计算量就越大,而减少粒子数又会导致整体估计性能下降。而无迹卡尔曼滤波则利用UT变换的思想,使得非线性系统能够适用于线性假设下的卡尔曼滤波体系,其采样形式为确定性采样,在粒子数相对PF较少的情况下,获得较高的逼近精度。

2.2 UT变换

UT变换是用固定数量的参数去近似一个高斯分布,其实现原理为:在原先分布中按某一规则取一些点,使这些点的均值为协方差状态分布与原状态分布的均值和协方差相等;将这些点代入非线性函数中,相应得到非线性函数值点集,通过这些点集可求取变换的均值和协方差。UT变换的实现一般分为以下三个步骤:

(1)构造Sigma点集

根据随机变量的统计量均值和协方差(如果是标量,则为方差),构造Sigma点集

其中为尺度参数,调整其值可以提高逼近精度,为变量的维度。用这一组采样点可以近似地表示变量的高斯分布。

(2)对Sigma点集做非线性变换

经过变换后的Sigma点集即可近似地表示的分布。

(3)计算函数映射后的均值和方差

对变换后的Sigma点集做加权处理,从而得到输出量的均值和方差

权重的计算如下:

其中参数为第二个尺度参数,通常设置为的取值一般在区间内;为状态分布参数,对高斯分布的变量,最优,如果状态变量是标量的话,则最优。

以上就是UT变化的三个步骤,其变换的示意图大致如下图所示:

算法的实现流程原理图如下图所示,图中参数与相当于本博文中的,希望读者不要误解:

UT变换具有以下特点:

  • 对非线性函数的概率密度分布进行近似,而不是对非线性函数做近似,算法实现不受模型复杂度的影响;
  • 所得到的的非线性函数的统计量的准确性可以达到三阶,而之前EKF的准确性只能达到一阶;
  • 无需计算Jacobi矩阵,这样就能处理不可导的非线性函数。

那么如何把UT变化应用到卡尔曼滤波框架中呢?笔者将在下一节给出。

3 UKF滤波算法

UKF=UT+KF,算法的实现分成两步走:

(1)状态的时间更新

选定状态的个Sigma点;

利用UT变换计算后验均值和方差;

(2)状态的观测更新

利用标准的卡尔曼滤波体系更新,但使用的公式有所差异。

根据系统的噪声的存在方式,将其分为加性噪声和隐含噪声,对于两种噪声,UKF滤波的处理方式分为两种,分别是简化的UKF和扩维的UKF,这里仍然假设噪声是高斯分布的。

3.1 简化UKF滤波算法(加性噪声)

系统的状态转移方程和观测方程为

,      

,      

简化UKF滤波算法的流程为:

(1)初始化

(2)状态估计

①计算Sigma点

②时间传播方程

③状态更新方程

以上就是简化UKF滤波算法的全部过程。

3.2 扩维UKF滤波算法(噪声隐含)

系统的状态转移方程和观测方程为

,      

,      

此时需要对状态变量进行扩展,得到增广状态向量

增广状态的均值和协方差矩阵分别为

其中分别表示状态噪声和观测噪声的维度。

扩维UKF滤波算法的流程为:

(1)初始化

(2)状态估计

①计算Sigma点

表示增广状态的维度。

②时间传播方程

③状态更新方程

以上就是扩维UKF滤波算法的全部过程。

3.3 两类UKF算法比较

根据以上两个小节的内容,简化UKF算法的Sigma点数为,而扩维UKF算法的Sigma点数为。可见,处理加性噪声的简化UKF的Sigma点较处理隐含噪声的扩维UKF要少许多,因此计算量也要更少。

4 实际应用

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

状态向量,观测向量

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

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

采样时间点为个,

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

从仿真结果可以看出,UKF在这种情形下的滤波效果还是不错的,相比于PF滤波,UKF能更快地跟踪到目标,即收敛速度更快,而且计算的速度几乎跟EKF是一个量级的。但是在实际应用中,对于船只运动的状态转移噪声的均值和协方差矩阵,以及传感器的观测噪声的均值和协方差矩阵,往往都是未知的,有很多情况都只有观测值而已,这样的情形下,就有必要利用观测值对噪声的统计量参数做出适当的估计(学习)。

5 参数估计(学习)

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

,     

,     

利用递推的方法:

其中,

的取值一般为

初始的可以设置为任意较小值,然后每做完一轮UKF滤波,就可以更新一次参数,用于下一轮的UKF滤波。利用以上的Adaptive-UKF算法对船只的运动做滤波跟踪,得到的效果如下图所示:

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

6 总结

从整体上看,UKF滤波算法是一个比较优秀的信号滤波与跟踪算法,通过把UT变换应用到卡尔曼滤波框架中,使得不需要计算Jacobi矩阵,不必对非线性函数做任何形式的逼近,即使系统函数不连续,也可以获得不错的滤波性能。而且,UKF对于随机状态的分布不一定要求是高斯分布的,因此UKF具有非常广泛的应用。

UKF与EKF的重要差异是EKF是对高度复杂非线性系统模型函数进行泰勒展开,对展开式进行一阶线性截断处理,这样便可将模型转化为计算机处理的线性问题,然后进行卡尔曼滤波,因此EKF是一种次优滤波,但由于考虑了泰勒级数的展开,因此大大增加了运算量。与对非线性函数的近似相比,高斯分布的近似要简单得多。UKF能获得精确到三阶矩均值和协方差,具有更高的滤波精度,而其计算量仍然与EKF同阶,并且该方法直接使用系统的非线性模型,不需对非线性系统线性化,也不需要像二次滤波那样计算Hession和Jacobi矩阵,提高了运算速度,对线性系统两个具有相同的估计性能。总体来说,对非线性系统,UKF具有更高的滤波精度和稳定性。

7 参考文献

[1] S. Peng, C. Chen, H. Shi and Z. Yao, "State of Charge Estimation of Battery Energy Storage Systems Based on Adaptive Unscented Kalman Filter With a Noise Statistics Estimator," in IEEE Access, vol. 5, pp. 13202-13212, 2017.

[2] 卡尔曼滤波系列——(一)标准卡尔曼滤波.

[3] 卡尔曼滤波系列——(二)扩展卡尔曼滤波.

[4] 卡尔曼滤波系列——(三)粒子滤波(重写)

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


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

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

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

卡尔曼滤波系列——(四)无损卡尔曼滤波相关推荐

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

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

  2. 卡尔曼滤波系列——(三)粒子滤波

    1 简介 粒子滤波(Partical Filter,PF)就是通过寻找一组在状态空间中传播的随机样本来近似的表示概率密度函数,用样本均值代替积分运算,进而获得系统状态的最小方差估计的过程,这些样本被称 ...

  3. 无人驾驶汽车系统入门(三)——无损卡尔曼滤波,目标追踪,C++

    前面两篇文章我们了解了卡尔曼滤波以及扩展卡尔曼滤波在目标追踪的应用,我们在上一篇文章中还具体用Python实现了EKF,但是细心的同学会发现,EKF的效率确实很低,计算雅可比矩阵确实是一个很费时的操作 ...

  4. 无人驾驶技术——无损卡尔曼滤波(UKF)

    文章目录 无损卡尔曼滤波(UKF) UKF Predict 1.选择预测点sigma点 sigma点计算代码实现 添加过程噪声处理 构建噪声扩充矩阵 c++ 2.预测sigma点 预测sigma点方法 ...

  5. 无人驾驶4: 无损卡尔曼滤波

    在上一节的扩展卡尔曼滤波跟踪系统中,有两个缺陷: 系统采用恒速模型:假定行人沿直线运动:实际应用中,出现曲线运动时,预估不够准确. 每次测量都需要计算雅可比矩阵,很耗资源. 当问题一旦变得复杂,预测和 ...

  6. 滤波算法(四)—— 卡尔曼滤波算法

    一.算法介绍 卡尔曼滤波是一个神奇的滤波算法,应用非常广泛,它是一种结合先验经验.测量更新的状态估计算法. 1.状态估计 首先,对于一个我们关心的物理量,我们假设它符合下面的规律 其中,为该物理量本周 ...

  7. sed修炼系列(四):sed中的疑难杂症

    sed系列文章: sed修炼系列(一):花拳绣腿之入门篇 sed修炼系列(二):武功心法(info sed翻译+注解) sed修炼系列(三):sed高级应用之实现窗口滑动技术 sed修炼系列(四):s ...

  8. 效率系列(四) VS常用快捷键

    写在前面的话 :最近博主整理了一些关于 Visual Studio 2017 的常用快捷键,希望可以帮助到大家更高效更愉快的打码 1.打开 快捷键 描述 Ctrl + Shift + N 新建项目 C ...

  9. iOS开发UINavigation系列四——导航控制器UINavigationController

    iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationIte ...

最新文章

  1. iOS开发中标签控制器的使用——UITabBarController
  2. Shiro总是将我重定向到login.jsp
  3. 深入出不来nodejs源码-编译启动
  4. ESP32移植wolfssl方法
  5. 用JavaScript实现图片剪切效果
  6. shell脚本详解(六)——数组简介和排序算法
  7. java中重载 参数顺序_Java方法中的参数太多,第4部分:重载
  8. 电脑表格日期怎么修改原有日期_为何电脑系统时间常出错或无法修改?怎么解决?...
  9. c++指定枚举占一个字节
  10. 58页PPT揭示图神经网络研究最新进展
  11. Java常见算法(一)
  12. JAVA的Map集合
  13. 默认关闭idea2020的注释doc的rendered view模式
  14. 考研英语(一)——简单句
  15. 米家APP获取小米、绿米网关key的方法(5.6.81版本)(2020_05_15)
  16. NDS CA system和爱迪德CA系统
  17. swift项目调用OC代码,OC项目调用swift代码
  18. PDF文档翻译中文的方法
  19. 数据仓库简介、数据仓库的发展、数仓理论简介
  20. 《ffmpeg basics》中文版 -- 16.数字音频

热门文章

  1. 【PTA】【C语言】N个数求和
  2. 机器学习中分类与聚类的本质区别
  3. java pdf 签名 修改_java – 替换PDF中的签名内容
  4. html中textarea标签的换行
  5. java技术交流群532101200
  6. matlab 空间曲面的绘制
  7. Excel 使用vba脚本按条件清除行数据
  8. 已经有211大学发布计算机专业,研究生复试上机考试说明
  9. 2010-2021年上市公司专利数据
  10. 公司企业兔年祝福元旦祝福贺卡邀请函模板!