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.mfbz.cn/a/881629.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED

Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED 思科 Catalyst 9000 交换产品系列 IOS XE 系统软件 请访问原文链接:https://sysin.org/blog/cisco-catalyst-9000/,查看最新版。原创作品,转载请保留出处。 作者主页&…

uniapp中使用picker-view选择时间

picker-view 是 UniApp 中用于展示和选择数据的组件。它适用于创建多列选择器&#xff0c;类似于 iOS 和 Android 系统中的选择器视图。以下是 picker-view 的详细介绍&#xff0c;包括用法、属性和事件。 一 用法 <template><view><picker-view :value"…

机器学习——Stacking

Stacking&#xff1a; 方法&#xff1a;训练多个模型(可以是强模型)&#xff0c;然后将这些模型的预测结果作为新的特征&#xff0c;输入到下一层新的模型&#xff08;可以是多个&#xff09;中进行训练&#xff0c;从而得到最终的预测结果。 代表&#xff1a;Stacking本身并没…

Java多线程Thread及其原理深度解析

文章目录 1. 实现多线程的方式2. Thread 部分源码2.1. native 方法注册2.2. Thread 中的成员变量2.3. Thread 构造方法与初始化2.4. Thread 线程状态与操作系统状态2.4. start() 与 run() 方法2.5. sleep() 方法2.6. join() 方法2.7. interrupt() 方法 本文参考&#xff1a; 线…

OpenCV_最简单的鼠标截取ROI区域

在OpenCV中也存在鼠标的操作&#xff0c;今天我们先介绍一下鼠标中的操作事件 void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata0) setMousecallback参数说明&#xff1a; winname:窗口的名字 onMouse:鼠标响应函数&#xff0c;回调…

接口加解密及数据加解密

目录 一、 加解密方式介绍 1.1 Hash算法加密 1.2. 对称加密 1.3 非对称加密 二、 我们要讲什么&#xff1f; 三、 接口加解密 四、 数据加解密 一、 加解密方式介绍 所有的加密方式我们可以分为三类&#xff1a;对称加密、非对称加密、Hash算法加密。 算法内部的具体实现…

【后端开发】JavaEE初阶—线程的理解和编程实现

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解多线程的知识哟~~~&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【后端开发】JavaEE初阶——计算机是如何工作的&#xff1f;&#xff1f;&#xff1f;-CSDN博客 &#x1f308;感兴趣的小伙…

【设计模式】UML类图

目录 前言 一、类图概述 二、类图的作用 三、类图表示法 四、类之间关系的表示方法 1. 关联关系 1.1 单向关联 1.2 双向关联 1.3 自关联 2. 聚合关系 3. 组合关系 4. 依赖关系 5. 继承关系 6. 实现关系 总结 前言 统一建模语言&#xff08; Unified Modeling La…

游戏如何对抗定制挂

近年来&#xff0c;游戏安全对抗强度相比以往更加激烈&#xff0c;具体表现在“定制挂”趋势显著。在近期收集的近万款外挂样本中&#xff0c;定制挂约占比78%&#xff0c;常见的内存修改器、变速器等通用作弊手段占比正在下降。 所谓定制挂&#xff0c;是指针对某款游戏单独开…

九章云极DataCanvas公司荣获2024年服贸会“科技创新服务示范案例”

9月15日&#xff0c;2024年中国国际服务贸易交易会&#xff08;服贸会&#xff09;示范案例交流会暨颁奖典礼在北京国家会议中心举行&#xff0c;九章云极DataCanvas 公司自研的DataCanvas Alaya NeW智算操作系统凭借卓越的AI创新实力、前瞻性的市场布局以及突破性的技术革新成…

Python脚本每日自动备份MySQL数据库,无需mysqldump

编写一个Python脚本&#xff0c;每天凌晨3点开始备份 脚本具有以下特点 不需要安装mysql-client&#xff0c;并且Windows Linux都可以使用支持多个数据库连接的备份每个数据库支持多个表备份日志保存下来&#xff0c;方便第二天早上查看备份结果 首先安装需要的库 pip3 ins…

Mybatis Plus分页查询返回total为0问题

Mybatis Plus分页查询返回total为0问题 一日&#xff0c;乌云密布&#xff0c;本人看着mybatis plus的官方文档&#xff0c;随手写了个分页查询&#xff0c;如下 Page<Question> questionPage questionService.page(new Page<>(current, size),questionService.g…

[C语言]连子棋游戏

文章目录 一、前言二、游戏思路三、游戏方法1、初始化2、判断胜利3、交互4、电脑下棋 四、核心方法说明1、初始化游戏2、销毁棋盘3、显示游戏4、电脑下棋5、用户下棋6、判断游戏状态7、游戏交互 五、游戏效果展示与源码分享1、游戏效果2、源代码 一、前言 对于指针和数组理解尚…

DataGrip在Windows和MacOS平台上的快捷键

0. 背景信息 No.说明1测试DataGrip版本号 : 2024.2.2 1. Windows下快捷键 2. MacOS下快捷键

基于波特图的控制系统设计算法

波特图&#xff08;Bode Plot&#xff09;是一种用于描述线性控制系统频率响应的图形表示方法&#xff0c;通常用于分析和设计控制系统。它以控制系统的传递函数&#xff08;或频域传递函数&#xff09;为基础&#xff0c;将系统的幅频特性&#xff08;振幅-频率响应&#xff0…

PyCharm与Anaconda超详细安装配置教程

1、安装Anaconda&#xff08;过程&#xff09;-CSDN博客 2.创建虚拟环境conda create -n pytorch20 python3.9并输入conda activate pytorch20进入 3.更改镜像源conda/pip(只添加三个pip源和conda源即可) 4.安装PyTorch&#xff08;CPU版&#xff09; 5.安装Pycharm并破解&…

LED灯、蜂鸣器、继电器的控制

LED灯的控制 该专栏所有文章都默认使用STM32F103ZET6开发板 目录 LED灯的控制 一、简单的LED灯控制 1、初始化函数 led灯 2、应用函数 2、蜂鸣器 3、继电器 一、简单的LED灯控制 编程框架&#xff1a;初始化函数和应用函数 1、初始化函数 初始化函数一般包括&#xf…

SVTR文字识别

论文地址&#xff1a;https://arxiv.org/abs/2205.00159 notes&#xff1a; 论文2.5中说的N nodes&#xff0c;就是输出的类别数量&#xff0c;英文37&#xff0c;中文6625&#xff0c;英文37说的是最简单的英文文字识别任务&#xff0c;不区分大小写&#xff0c;就是26个字母…

软件测试 BUG 篇

目录 一、软件测试的生命周期 二、BUG 1. bug的概念 2. 描述bug的要素 3. bug的级别 4. bug的生命周期 5. 与开发产生争执怎么办&#xff1f;&#xff08;面试高频考题&#xff09; 5.1 先检查自身&#xff0c;是否bug描述不清楚 5.2 站在用户角度考虑并抛出问题 5.3 …

nginx架构篇(三)

文章目录 一、Nginx实现服务器端集群搭建1.1 Nginx与Tomcat部署1. 环境准备(Tomcat)2. 环境准备(Nginx) 1.2. Nginx实现动静分离1.2.1. 需求分析1.2.2. 动静实现步骤 1.3. Nginx实现Tomcat集群搭建1.4. Nginx高可用解决方案1.4.1. Keepalived1.4.2. VRRP介绍1.4.3. 环境搭建环境…