Kalman算法、扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)的比较

目录

一、Kalman算法

Kalman算法优缺点:

二、扩展卡尔曼滤波(EKF)

原理:

扩展Kalman算法优缺点:

步骤简化:

优点简化:

缺点简化:

三、无迹卡尔曼滤波(UKF)

Unscented 滤波的主要优点:

原理:

步骤:

优点:

缺点:

四、对比总结:

五、选择建议

六、示例应用

七、代码资源

一、Kalman算法

卡尔曼(Kalman)于1960年提出的,卡尔曼(Kalman)滤波是一种线性最小方差估计。该递推算法可以利用状态空间方法构建系统模型和完成整个滤波过程,并能在计算机上较方便的实现。卡尔曼(Kalman)滤波具有较好的滤波性能,在线性高斯白噪声假设条件下滤波过程能得到最优状态估计。现在卡尔曼(Kalman)滤波理论已经被广泛应用于各个领域,特别是在目标跟踪领域中的应用是相当成功的。

Kalman算法优缺点:

Kalman 滤波理论是 Bayes 估计理论对一类状态估计问题的解决方法。就前面所作的关于系统初始状态变量x(0)及系统噪声序列的高斯假定而言,Kalman滤波器是最优的最小均方误差(MMSE)估计器。假如上述的随机变量不是高斯随机变量,而仅知道它们的前二阶矩(均值及协方差),那么,这时的Kalman滤波器是最好的线性状态估计器,即线性最小均方误差(LMMSE)估计器。它由于具有模型简单、数据存储量小的特点,特别适用于计算机应用,被广泛应用于航天、航空、航海、系统工程、通信、工业过程控制、遥感等多个领域在系统建模过程中,由于模型简化、噪声统计特性不准确、对实际系统初始状态的统计特性建模不准、实际系统的参数发生变动等诸多因素的影响,使得系统模型往往存在一定的不确定性。Kalman 滤波对于模型不确定性的鲁棒性很差,导致状态估计不准,甚至出现发散。

另外在应用Kalman滤波算法时,除了尽可能精确的描述动态方程外,还有一个重要的问题就是如何选取Q(k),选取的好坏直接影响滤波精度,当动态模型不精确时,这种影响更大。选取Q(k)的一个基本原则是:将它的大小与动态模型的精度相匹配。

二、扩展卡尔曼滤波(EKF)

在实际的状态估计问题中,即使是很简单的系统,也是非线性系统。尽管在处理某些系统状态变量相对变化率较小的非线性系统时,可以将系统分段线性化,再利用常规的Kalman 滤波算法进行状态估计,但是这样的处理方法可能会产生很多问题,如滤波发散、收敛速度慢、模型近似度不高等。同时在很多时候,比如在目标进行机动时,须采用非线性滤波来实现目标运动状态估计。扩展Kalman滤波(EKF)是种最常用的非线性滤波算法,它可以解决以上提到的问题(尽管不能完全解决)。

原理:

EKF通过对非线性系统进行线性化来处理非线性问题。它采用泰勒级数展开,将非线性函数近似为线性函数来进行状态预测和更新。

扩展Kalman算法优缺点:

扩展Kalman滤波是一种比较常用的非线性滤波方法,它的优点有如下:

(1)计算速度快,存储量低,在工程应用方面有明显的优势。

(2)在高斯白噪声且非线性强度低的环境中,算法稳定、收敛速度较快、估计精度较高。

但是也存在如下一些缺点。

(1)扩展Kalmman 滤波需要计算雅可比矩阵,而且在非线性强度大的环境中线性化误差容易增大,估计精度会明显下降,甚至发散。后面介绍的基于UT变换的滤波方法不需要求导计算雅可比矩阵,且能解决非线性强度大的系统。

(2)当初始状态相对误差较大时,扩展Kalman 滤波很不稳定、收敛速度慢估计精度较低。

(3)在复杂的非高斯环境中,扩展Kalman滤波算法也不适用。3.10节介绍的粒子滤波算法能解决非高斯白噪声干扰下的状态估计问题。近似为线性函数来进行状态预测和更新。

步骤简化:

预测:使用非线性状态方程进行预测,并用雅可比矩阵对其线性化。

更新:用线性化的观测方程和卡尔曼增益更新状态估计。

优点简化:

计算复杂度较低,适合实时应用。

在非线性程度不高的系统中表现良好。

缺点简化:

线性化过程可能带来较大的误差,特别是在非线性程度较高的情况下。

需要计算雅可比矩阵,这在某些情况下可能比较复杂。

三、无迹卡尔曼滤波(UKF)

扩展Kalman滤波器是实际非线性系统中应用最广泛的状态估计算法。然而,当系统的非线性变得相当严重的时候,扩展Kalman滤波可能就很难与系统实际状态保持一致,经常给出不可靠的状态估计量。这是因为扩展 Kalman 滤波在传播状态均值及协方差时使用了线性化的方法。本节讨论的无味滤波(unscented filter,UF),又称为 UKF(unscented Kalman filter),是Julier等提出的一种新的非线性滤波方法。Unscented滤波具有类似Kalman滤波的算法流程,它的最大特点是减小了扩展Kalman滤波中引人的线性化误差。与扩展Kalman滤波不同,它并不对非线性状态方程和观测方程在估计点处线性近似而是利用无味变换(unscented transform,UT)在估计点附近确定采样,用这些样本点表示的高斯密度近似状态的概率密度函数,由于也是假定概率密度函数近似高斯分布,因此也属于一种矩匹配方法。

Unscented 滤波的主要优点:

(1)对于非线性系统,与扩展Kalman滤波比较起来,Unscented 滤波不需要计算矩阵的雅可比式,计算简单且更容易实现。

(2)Unscented滤波对高斯型密度函数可以精确估计到三阶,对非高斯型密度函数可以精确估计到二阶,因此其估计精度比一阶扩展Kalman 滤波更高,和阶扩展 Kalman 滤波相同。

(3)在计算量方面,Unscented 滤波是一阶扩展Kalman滤波的 2n+1倍为达到同样的估计精度,其样本数远小于的粒子滤波所需要的样本数,因此计算量远小于后者。

总的来看,对于概率密度近似高斯的非线性滤波而言,Unscented 滤波是个综合性能较优的方法;当密度函数和高斯函数差别较大时(如倾斜、双峰现象),其估计精度变差,此时基于密度估计的方法更好。

尽管Unscented滤波存在以上的许多优点,但它还有很大的性能提升空间,这包括Unscented滤波的滤波稳定性,具有时延测量的 Unscented 滤波以及 Unscented 滤波与 H的混合滤波等。

原理:

UKF采用无迹变换(Unscented Transform),通过一组确定性的采样点(称为sigma点)来捕捉非线性函数的统计特性。这些采样点经过非线性变换后,可以更准确地估计状态分布。

步骤:

生成sigma点:根据当前状态估计和协方差矩阵生成一组sigma点。

预测:将这些sigma点通过非线性状态方程进行预测,计算预测状态和协方差。

更新:使用观测方程处理sigma点,更新状态和协方差。

优点:

对非线性系统的处理更加准确,因为不需要线性化过程。

更适用于高度非线性的系统,提供更高的估计精度。

缺点:

计算复杂度较高,因为需要处理多个sigma点。

在某些高维问题中可能效率较低。

四、对比总结:

计算复杂度:EKF通常计算复杂度较低,而UKF计算复杂度较高。

处理非线性能力:UKF在处理高度非线性系统时表现更好,精度更高;EKF在非线性程度不高的系统中也能有效工作。

实现复杂度:EKF需要计算雅可比矩阵,这在某些情况下较复杂;UKF不需要计算雅可比矩阵,但需要生成和处理sigma点,逻辑上更复杂。

五、选择建议

系统非线性程度低,计算资源有限:选择EKF。

系统非线性程度高,需要高精度估计:选择UKF。

六、示例应用

EKF用于无人机姿态估计、汽车导航系统中,适用于实时性要求较高且系统非线性不太强的场景。

UKF用于机器人定位与地图构建(SLAM)、复杂轨迹跟踪系统中,适合非线性较强的环境。

七、代码资源

  1. 无迹kalman滤波原理、算法实现 - 灿影之晶 - 博客园
  2. GitHub - elapse-ai/filterpy: Python Kalman filtering and optimal estimation library. Implements Kalman filter, particle filter, Extended Kalman filter, Unscented Kalman filter, g-h (alpha-beta), least squares, H Infinity, smoothers, and more. Has companion book 'Kalman and Bayesian Filters in Python'.
  3. https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python/
  4. 图解卡尔曼滤波(Kalman Filter)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542023.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

12. Inseq 特征归因:可视化解释 LLM 的输出

Feature Attribution(特征归因):你可以将其当做对模型输出的解释,就像在图像分类中可视化模型关注的区域一样。 本文将介绍 Inseq,这是一个用于解释和可视化序列生成模型输出的工具。我们将通过翻译任务(关…

【MySQL 01】数据库基础

目录 1.数据库是什么 2.基本操作 数据库服务器连接操作 数据库和数据库表的创建 服务器,数据库,表关系 数据逻辑存储 3.MySQL架构 4.SQL分类 5.存储引擎 1.数据库是什么 mysql&&mysqld: mysql:这通常指的是 MySQL …

C#描述-计算机视觉OpenCV(6):形态学

C#描述-计算机视觉OpenCV(6):形态学 前言阈值化二值图像腐蚀与膨胀算法形态学滤波器开启和闭合运算原理概括 前言 这是本系列第六节,主要是介绍基础的形态学运用。 形态学主要是分析图像中不同主题的形态,它定义了一系…

基于redis的HyperLogLog数据结构实现的布隆过滤器在信息流中历史数据的应用

一、基于redis的HyperLogLog数据结构实现的布隆过滤器在信息流中历史数据的应用 做信息流服务端的左发一定会遇到用户历史数据的集合,对于一些有限信息流(因DT数据中心的推荐数据变化较慢,推荐量不大),历史数据可以使用…

扎克伯格的未来愿景 用智能眼镜引领数字社交互动新时代

在即将召开的 Meta Connect 2024 大会之前,对公司创始人马克-扎克伯格(Mark Zuckerberg)进行了长达 90 分钟的播客采访,对 Meta 的未来发展方向和愿景进行了阐述。 这次访谈不仅为即将举行的会议预热,还深入探讨了 Met…

CAN通信技术入门篇

参考ISO 11898与BOSCH_CAN_V20 1.CAN通信技术概述 CAN ( Controller Area Network ) 即控制器局域网络。由于其高性能、高可靠性、及独特的设计,CAN越来越受到人们的重视。国外已有许多大公司的产品采用了这一技术。 CAN最初是由德国的BOSCH公司为汽车监测、控制系统而设计的…

ML 系列:机器学习和深度学习的深层次总结(04)多元线性回归 (MLR)

图 1.多元线性回归与简单线性回归 一、说明 线性回归从一维推广到多维,这与单变量线性回归有很多不同,情况更加复杂,而在梯度优化也需要改成向量梯度,同时,数据预处理也成了必要步骤。 二、综述 多元线性回归是简单线性…

利用JAVA写一张纸折叠珠穆拉玛峰高度

public class zhumulama {public static void main(String[] args) {double height 8848860;double zhi 0.1;int count 0;while(zhi < height){zhi*2;//每次折完厚度count;//计数}System.out.println("一共需要折"count"次");System.out.println(&qu…

PD协议过程详解:从物理连接到智能管理的全面剖析

随着科技的飞速发展&#xff0c;电力传输与数据交换的需求日益增加&#xff0c;Power Delivery&#xff08;简称PD&#xff09;协议应运而生&#xff0c;成为现代电子设备充电与数据传输的重要标准。PD协议由USB Implementers Forum&#xff08;USB-IF&#xff09;制定&#xf…

Lanterns (dp 紫 线段树 二分 维护dp)

Lanterns - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 让所有点被覆盖&#xff0c;那么状态可以设计成覆盖一段前缀&#xff0c;并且中间不允许出现断点 由于CF崩了&#xff0c;所以暂时没提交代码。 记f(i) 为前 i 个灯笼点亮的最长前缀。 由于答案具有保留性&#xff…

24年研赛-华为杯数模竞赛D题论文首发+代码分享

本届研赛助攻题目 C D F三题论文均已经全部完成。后更新计划 如图所示。 免费给大家分享 三个问题的论文部分代码 2024年华为杯-研赛分享资料&#xff08;论文部分代码&#xff09;&#xff08;已更新部分代码&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com…

【Vue系列五】—Vue学习历程的知识分享!

前言 本篇文章讲述前端工程化从模块化到如今的脚手架的发展&#xff0c;以及Webpack、Vue脚手架的详解&#xff01; 一、模块化 模块化就是把单独的功能封装到模块&#xff08;文件&#xff09;中&#xff0c;模块之间相互隔离&#xff0c;但可以通过特定的接口公开内部成员…

仓颉编程入门2,启动HTTP服务

上一篇配置了仓颉sdk编译和运行环境&#xff0c;读取一个配置文件&#xff0c;并把配置文件简单解析了一下。 前面读取配置文件&#xff0c;使用File.readFrom()&#xff0c;这个直接把文件全部读取出来&#xff0c;返回一个字节数组。然后又创建一个字节流&#xff0c;给文件…

动手学深度学习(李沐)PyTorch 第 1 章 引言

在线电子书 深度学习介绍 安装 使用conda环境 conda create -n d2l-zh python3.8 pip安装需要的包 pip install jupyter d2l torch torchvision下载代码并执行 wget https://zh-v2.d2l.ai/d2l-zh.zip unzip d2l-zh.zip jupyter notebookpip install rise如果不想使用jupyt…

数模打怪(九)之线性规划、非线性规划、多目标规划

一、线性规划 1、问题特征&#xff1a;有限的条件下&#xff0c;最大的收益 怎样分配&#xff0c;使……尽量多&#xff08;少&#xff09;&#xff0c;使利润最多&#xff0c;使最合理 变量都是一次项&#xff08;x&#xff09; 2、三个要素&#xff1a;决策变量、目标函数…

docker技术(上)

一、docker简介 Docker 是一个开源的应用容器引擎&#xff0c;于 2013 年由 Solomon Hykes 推出并开源。它基于 Go 语言开发&#xff0c;遵从 Apache2.0 协议。Docker 可以让开发者将应用及其依赖包打包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 或 Windows…

工程师 - Windows下打开PowerShell和CMD Prompt的若干方法

打开PowerShell 在Windows中&#xff0c;你可以通过以下几种方式来打开PowerShell&#xff1a; 1. 开始菜单&#xff08;Start Menu&#xff09;&#xff1a;点击“开始”按钮&#xff0c;然后在搜索栏中输入“PowerShell”。在搜索结果中&#xff0c;选择“Windows PowerShell…

【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)

文章目录 一、人员管理1、需求说明2、生成基础代码&#xff08;1&#xff09;创建目录菜单&#xff08;2&#xff09;添加数据字典&#xff08;3&#xff09;配置代码生成信息&#xff08;4&#xff09;下载代码并导入项目 3、人员列表改造&#xff08;1&#xff09;基础页面&a…

最新免费域名申请

在互联网时代&#xff0c;每个码农都想拥有一个免费的域名&#xff0c;方便开发调试&#xff0c;也可用作自己网站等。如何申请一个免费的域名&#xff0c;时间上先错过了freenom&#xff0c;后面又错过nic.eu.org申请(现在申请时间长且很难通过)&#xff0c;直到最近又有免费的…

计算机网络(八) —— Udp协议

目录 一&#xff0c;再谈端口号 1.1 端口号 1.2 netsta命令 二&#xff0c;UDP协议 2.1 关于UDP 2.2 Udp协议格式 2.3 Udp协议特点 2.4 Udp的缓冲区 一&#xff0c;再谈端口号 http协议本质是“请求 - 响应”形式的协议&#xff0c;但是应用层需要先将数据交给传输层&…