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

news2024/9/22 23:12:43

目录

一、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.coloradmin.cn/o/2156087.html

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

相关文章

FX5 CPU模块和以太网模块的以太网通信功能

FX5 CPU模块和以太网模块的以太网通信功能的概要如下所示。 CPU模块的内置以太网端口的通信规格如下所示。 1、与MELSOFT的直接连接 不使用集线器,用1根以太网电缆直接连接以太网搭载模块与工程工具(GX Torks3)。无需设定IP地址,仅连接目标指定即可进行…

学习Java(一)类和对象

package demo.ceshi;public class Puppy {private int age;private String name;//构造器public Puppy( String name){this.name name;System.out.println("公主的名字叫:"name);}//设置age的值public void setAge(int age){this.age age;System.out.pr…

数值计算 --- 平方根倒数快速算法(中)

平方根倒数快速算法 --- 向Greg Walsh致敬! 1,平方根倒数快速算法是如何选择初值的?WTF中的神秘数字究竟是怎么来的? 花开两朵,各表一枝。在前面的介绍中,我们已经知道了这段代码的作者在函数的最后使用了NR-iteratio…

CVE-2024-46103

前言 CVE-2024-46103 SEMCMS的sql漏洞。 漏洞简介 SEMCMS v4.8中,SEMCMS_Images.php的search参数,以及SEMCMS_Products.php的search参数,存在sql注入漏洞。 (这个之前就有两个sql的cve,这次属于是捡漏了&#x1f6…

【MATLAB源码-第268期】基于simulink的永磁同步电机PMSM双闭环矢量控制系统SVPWM仿真,输出转速响应曲线。

操作环境: MATLAB 2022a 1、算法描述 永磁同步电机(PMSM)是目前工业领域中广泛使用的一种高效电机,其具有高功率密度、运行效率高、动态响应快等优点。在控制永磁同步电机时,通常采用矢量控制(也称为磁场…

新160个crackme - 060-snake

运行分析 需破解Name和Serial PE分析 32位,未知程序和壳 点击Scan/t按钮外部扫描,发现是C程序 静态分析&动态调试 ida搜索关键字符串,双击进入 发现无法反编译 选中该函数(地址:401048 - 401172)Edit -…

认识结构体

目录 一.结构体类型的声明 1.结构的声明 2.定义结构体变量 3.结构体变量初始化 4.结构体的特殊声明 二.结构体对齐(重点难点) 1.结构体对齐规则 2.结构体对齐练习 (一)简单结构体对齐 (二)嵌套结构体对齐 3.为什么存在内存对齐 4.修改默认对齐数 三.结构体传参 1…

PMP--二模--解题--51-60

文章目录 14.敏捷--术语表--完成的定义DoD--它是团队需要满足的所有标准的核对单,只有可交付成果满足该核对单才能视为准备就绪可供客户使用。51、 [单选] 在冲刺计划会议上,Scrum主管重申,如果在冲刺结束时敏捷项目团队正在构建的产品增量没…

五种IO模型和阻塞IO

文章目录 五种 IO 模型和阻塞 IO1、五种 IO 模型1.1、阻塞 IO1.2、非阻塞 IO1.3、信号驱动 IO1.4、IO 多路转接1.5、异步 IO1.6、总结 2、高级 IO 概念2.1、同步通信(synchronous communication)和异步通信(asynchronous communication&#…

第十五章:使用html、css、js编程制作一个网页版的下雪场景动画

背景:这是一个充满诗意的下雪场景代码。打开网页时,雪花轻轻飘落,覆盖住你的屏幕,仿佛置身于冬日的夜空下。背景音乐《我期待的不是雪》缓缓响起,伴随着雪花的飘动,仿佛心中的那份爱与温柔悄然绽放。 雪花的飘落是梦境般的存在,每一片雪花都是轻盈的告白,旋转着从天际…

使用GitHub Actions自动发布electron多端安装程序

GitHub Actions 是一个强大的自动化工具,可以帮助开发者在 GitHub 仓库中自动化构建、测试和部署工作流程。我们的客户端就是使用github action来打包项目发布的。 以下是关于 GitHub Actions 自动化构建的一些关键点和步骤: GitHub Actions 的基本概念…

go注册中心Eureka,注册到线上和线下,都可以访问

go注册中心Eureka,注册到线上和线下,都可以访问 本地通过127访问, 线上通过内网ip访问 package mainimport ("github.com/SimonWang00/goeureka""github.com/gin-gonic/gin""wbGo/controller""wbGo/task…

【工具变量】地市环保法庭试点城市DID数据集(2005-2023年)

数据简介:环保法庭是中国司法体系中专门处理环境资源案件的审判机构,其主要职责包括审理涉及自然环境污染、矿产资源保护、自然资源环境开发等环境资源民事纠纷案件,对不服下级人民法院生效裁判的环境资源民事案件进行审查,以及对…

Java_Se--方法

方法就是一个代码片段. 类似于 C 语言中的 "函数"。方法存在的意义(不要背, 重在体会): 1. 是能够模块化的组织代码 ( 当代码规模比较复杂的时候 ). 2. 做到代码被重复使用 , 一份代码可以在多个位置使用 . 3. 让代码更好理解更简单 . 4. 直接调用现有方法开…

cv中每个patch的关联

在计算机视觉任务中,当图像被划分为多个小块(patches)时,每个 patch 的关联性可以通过不同的方法来计算。具体取决于使用的模型和任务,以下是一些常见的计算 patch 关联性的方法: 1. Vision Transformer (…

IDA Pro-代码结构识别

Lab06-01.exe分析 1.由main 函数调用的唯一子过程中发现的主要代码结构是什么? if语句结构 找到main函数中唯一调用的函数,并进入 判断网络是否链接成功,如果返回0走右边未连接成功 2.位于0x40105F的子过程是什么? 将字符串压栈,猜测…

双非本 985 硕士,秋招上岸字节算法岗!

最近已有不少大厂都在秋招宣讲了,也有一些在 Offer 发放阶段。 节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新人如何快速入门算法岗、如何准备面试攻略、面试常考点、大模型项目落地经验分享等热门话题进行了深入的讨论。…

面向对象程序设计——set容器の简析

1.set的介绍 • 序列式容器和关联式容器 • 我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间⼀般没有紧…

Python GUI 编程:tkinter 初学者入门指南——窗口

目录: 创建窗口更改窗口标题更改窗口大小和位置窗口在屏幕上居中窗口设置的其他属性 Tkinter 是在 Python 中开发 GUI(图形用户界面)最常用的库。在本指南中,我们将引导您了解 Tkinter 的基本知识,学习如何使用 Tkinte…

汽车电子零部件(16):ZCU区域控制器

ZCU(Zone Control Unit,区域控制器),功能主要包括哦数据交互、信号控制及电力分配等,是智能网联汽车中不可或缺的关键组件,ECU负责车身、车门、车窗、天窗、车灯(外大灯、内氛围灯)、座椅(可能包括座椅音响)、雷达甚至后排娱乐系统等控制执行单元的集中化。 CCU(centr…