扩展卡尔曼滤波(Extended Kalman Filter, EKF):理论和应用

扩展卡尔曼滤波(Extended Kalman Filter, EKF):理论、公式和应用

引言

卡尔曼滤波是一种广泛应用于估计动态系统状态的技术,但当系统的动态模型或测量模型是非线性的时候,传统的卡尔曼滤波方法就显得无能为力。扩展卡尔曼滤波通过引入非线性系统的雅可比矩阵,弥补了这一不足,成为处理非线性系统估计的有力工具。本文将介绍扩展卡尔曼滤波的理论基础、数学公式,并通过Python代码示例演示其在一维维系统中的应用。

一、扩展卡尔曼滤波的基本理论

扩展卡尔曼滤波是对传统卡尔曼滤波的一种扩展,主要应用于非线性系统。它通过在卡尔曼滤波的预测和更新步骤中引入非线性映射(对非线性系统采用线性化的方式),解决了卡尔曼滤波在处理非线性问题时的局限性。

二、扩展卡尔曼滤波的数学公式

预测步骤:
  1. 状态预测:
    x ^ k − = f ( x ^ k − 1 , u k − 1 ) \begin{equation}\hat{x}_{k}^- = f(\hat{x}_{k-1}, u_{k-1})\end{equation} x^k=f(x^k1,uk1)

  2. 协方差预测:
    P k − = A k P k − 1 A k T + Q k \begin{equation} P_{k}^- = A_{k} P_{k-1} A_{k}^T + Q_{k}\end{equation} Pk=AkPk1AkT+Qk

    其中, A k A_{k} Ak 是状态预测函数 f ( ⋅ ) f(\cdot) f() 的雅可比矩阵,计算公式为:
    A k = ∂ f ∂ x ∣ x ^ k − 1 , u k − 1 \begin{equation}A_{k} = \frac{\partial f}{\partial x}\Big|_{\hat{x}_{k-1}, u_{k-1}}\end{equation} Ak=xf x^k1,uk1

更新步骤:
  1. 卡尔曼增益计算:
    K k = P k − H k T ( H k P k − H k T + R k ) − 1 \begin{equation}K_{k} = P_{k}^- H_{k}^T (H_{k} P_{k}^- H_{k}^T + R_{k})^{-1} \end{equation} Kk=PkHkT(HkPkHkT+Rk)1

  2. 状态更新:
    x ^ k = x ^ k − + K k ( z k − h ( x ^ k − ) ) \begin{equation}\hat{x}_{k} = \hat{x}_{k}^- + K_{k} (z_{k} - h(\hat{x}_{k}^-))\end{equation} x^k=x^k+Kk(zkh(x^k))

  3. 协方差更新:
    P k = ( I − K k H k ) P k − \begin{equation}P_{k} = (I - K_{k} H_{k}) P_{k}^-\end{equation} Pk=(IKkHk)Pk

    其中, H k H_{k} Hk是测量函数 h ( ⋅ ) h(\cdot) h() 的雅可比矩阵,计算公式为:
    H k = ∂ h ∂ x ∣ x ^ k − \begin{equation}H_{k} = \frac{\partial h}{\partial x}\Big|_{\hat{x}_{k}^-} \end{equation} Hk=xh x^k

三、扩展卡尔曼滤波与线性卡尔曼滤波的优势对比

扩展卡尔曼滤波相对于线性卡尔曼滤波的优势在于其能够处理非线性系统。线性卡尔曼滤波要求系统的动态模型和测量模型是线性的,而扩展卡尔曼滤波通过引入非线性映射,使得在非线性系统中仍能有效估计状态。

四、扩展卡尔曼滤波的Python代码示例

一维系统应用

# @copyright all reseved
# @author: Persist_Zhang
import numpy as np
import matplotlib.pyplot as pltdef f(x, u):return 0.5 * x + 25 * x / (1 + x**2) + 8 * np.cos(1.2 * u)def h(x):return 0.05 * x**2# 初始化
x_hat = np.array([0.0])
P = np.array([1.0])
Q = 1e-5
R = 0.1# 模拟数据
true_states = [f(x, 0) for x in range(100)]
measurements = [h(x) + np.random.normal(0, np.sqrt(R)) for x in true_states]# 扩展卡尔曼滤波
filtered_states = []for z in measurements:# 预测步骤x_hat_minus = f(x_hat, 0)A = 0.5 - (25 * x_hat) / (1 + x_hat**2)**2 + 8 * np.cos(1.2 * 0)P_minus = A * P * A + Q# 更新步骤H = 0.05 * x_hatK = P_minus * H / (H * P_minus * H + R)x_hat = x_hat_minus + K * (z - h(x_hat_minus))P = (1 - K * H) * P_minusfiltered_states.append(x_hat[0])filtered_states = np.array(filtered_states)# 可视化结果
plt.figure(figsize=(12, 6))plt.plot(true_states, label='True States')
plt.plot(measurements, 'ro', label='Measurements')
plt.plot(filtered_states, label='Filtered States')plt.title('Extended Kalman Filtering - 1D System')
plt.legend()
plt.show()

在这里插入图片描述

这个示例分别展示了一维系统中扩展卡尔曼滤波的应用。在这个例子中,我们通过引入非线性映射函数 f ( ⋅ ) f(\cdot) f() ( h ( ⋅ ) (h(\cdot) (h(),以及对应的雅可比矩阵,成功处理了非线性系统的状态估计问题。这突显了扩展卡尔曼滤波在实际应用中的优越性。

结论

扩展卡尔曼滤波(EKF)作为卡尔曼滤波的扩展,成功地解决了处理非线性系统估计的问题,通过引入雅可比矩阵,使得非线性映射能够得到更准确的估计。总体而言,EKF在实际应用中表现出色,为状态估计提供了有效工具。

优势:

  1. 处理非线性系统: EKF能够有效地处理非线性系统,通过引入非线性映射的雅可比矩阵,提高了状态估计的准确性。

  2. 灵活性: 相对于线性卡尔曼滤波,EKF更加灵活,适用于包含一定程度非线性的实际系统。

缺点:

  1. 计算复杂度: EKF的计算复杂度相对较高,特别是在高维系统或强非线性系统中,计算雅可比矩阵和协方差更新可能变得复杂且耗时。

  2. 对初始条件敏感: EKF对初始条件较为敏感,初始估计的准确性直接影响了滤波器的性能。

  3. 线性化误差: 由于是通过线性化非线性映射,EKF可能会引入线性化误差,尤其在非线性变化剧烈的区域。

在应用EKF时,需要权衡计算复杂度和准确性,并根据具体问题调整相关参数,以取得最佳的估计效果。

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

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

相关文章

Ubuntu中用useradd创建用户后无法用su切换过去

原因: 没有设置密码,没有指定家目录和shell版本,就不能su切换到新用户 解决方法: su - root //切换到root权限 useradd -m -s /bin/bash node1 //-m自动创建home目录,-s指定shell版本 passwd node1 //设置密码 参考链…

springboot(ssm单位考勤系统 oa办公系统Java系统

springboot(ssm单位考勤系统 oa办公系统Java系统 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0) 数据库工…

【保姆级教程|YOLOv8添加注意力机制】【1】添加SEAttention注意力机制步骤详解、训练及推理使用

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

SpringBoot+thymeleaf实战遇到的问题

目录 一、控制台: 二、数据库查询异常: 三、前后端错误校验 四、在serviceImp中需要添加一个eq条件,表示和数据库中的哪个字段进行比较,否则会查出所有数据,导致500 五、使用流转换数据更简洁 六、重复报错&…

动态规划篇-03:打家劫舍

198、打家劫舍 状态转移方程 base case 边界问题就是:走到最后一间房子门口也没抢,那么最终抢到的金额为0 明确状态 “原问题和子问题中会变化的变量” 抢到的金额数就是状态,因为随着在每一件房子门口做选择,抢到的金额数会随…

大模型训练营Day3 基于 InternLM 和 LangChain 搭建你的知识库 作业

本篇记录大模型训练营第三次的作业,属实是拖延症本症患者。 主要步骤前面的安装各种包和依赖如前面作业一样,按照文档操作即可: 再按照文档进行各种克隆,把知识库复制到本地: 复制粘贴操作文档中的构建向量数据库的文…

七:Day08_任务调度

第一章 定时任务概述 在项目中开发定时任务应该一种比较常见的需求,在 Java 中开发定时任务主要有三种解决方案:一是使用JDK 自带的 Timer,二是使用 Spring Task,三是使用第三方组件 Quartz。 建议: 单体项目架构使用…

基于51单片机的智能热水器设计

需要全部文件请私信关注我!!! 基于51单片机的智能热水器设计 摘要一、绪论1.1 选题背景及意义1.2 完成目标与功能设计 二、硬件系统设计2.1 硬件完成要求2.2 方案选择2.3 电源电路设计2.4 键盘电路2.5 蜂鸣器报警电路2.6 温度检测电路2.7 红…

UR5机械臂控制

1.ros环境安装 快速安装命令:wget http://fishros.com/install -O fishros && . fishros 2.ur驱动安装 虚拟机Ubuntu16.04ros-kinetic控制真实UR5机械臂总结记录ros kinetic控制UR3机械臂 3.ur命令行控制 使用了 URScript 语言来描述机器人的运动指令&…

数学建模.斯皮尔曼相关系数

一、两种定义 二、用matlab计算 三、两种相关系数计算结果的对比 四、取检验值(临界值)分为两种情况 (1)小样本查表 (2)大样本 P值是大于检验值的概率 本文是学习清风网课后的总结,希望对大家有…

1000以内的质数,用python获取放到list1中,1000以内的斐波那契数,用python获取放到list2中,然后两个list画出曲线图

# -*- coding: utf-8 -*- import matplotlib.pyplot as plt # 获取1000以内的质数 def get_primes(n): primes [] for possiblePrime in range(2, n 1): # 假设数是质数 isPrime True for num in range(2, int(possiblePrime ** 0.5) 1): if possiblePrime % num …

自动驾驶车辆运动规划方法综述 - 论文阅读

本文旨在对自己的研究方向做一些记录,方便日后自己回顾。论文里面有关其他方向的讲解读者自行阅读。 参考论文:自动驾驶车辆运动规划方法综述 1 摘要 规划决策模块中的运动规划环节负责生成车辆的局部运动轨迹 ,决定车辆行驶质量的决定因素…

RabbitMQ如何保证消息不丢失?

RabbitMQ如何保证消息不丢失? 消息丢失的情况 生产者发送消息未到达交换机生产者发送消息未到达队列MQ宕机,消息丢失消费者服务宕机,消息丢失 生产者确认机制 解决的问题:publisher confirm机制来避免消息发送到MQ过程中消失。…

数据结构排序——计数排序和排序总结(附上912. 排序数组讲解)

数据结构排序——计数排序和排序总结 现在常见算法排序都已讲解完成,今天就再讲个计数排序。再总结一下 文章目录 1.计数排序2.排序总结3.排序oj(排序数组)题目详情代码思路 1.计数排序 计数排序是一种非基于比较的排序算法,它通…

STL标准库与泛型编程(侯捷)笔记2

STL标准库与泛型编程(侯捷) 本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youbute: 侯捷-STL标准库与泛型编程 B站: 侯捷 - STL Github:STL源码剖析中源码 https://github.com/SilverMaple/STLSourceCo…

SLA(服务等级协议)

在硅谷一线大厂所维护的系统服务中,我们经常可以看见SLA这样的承诺。 例如,在谷歌的云计算服务平台Google Cloud Platform中,他们会写着“99.9% Availability”这样的承诺。那什么是“99.9% Availability”呢? 要理解这个承诺是…

七:Day07_redis进阶02

第一章 Redis 事务 1.1 节 数据库事务复习 在数据库层面,事务是指一组操作,这些操作要么全都被成功执行,要么全都不执行。 数据库事务的四大特性: A:Atomic, 原子性。要么全部执行,要么全部不…

复合机器人作为一种新型的智能制造装备高效、精准和灵活的生产方式

随着汽车制造业的快速发展,对于高效、精准和灵活的生产方式需求日益增强。复合机器人作为一种新型的智能制造装备,以其独特的优势在汽车制造中发挥着越来越重要的作用。因此,富唯智能顺应时代的发展趋势,研发出了ICR系列的复合机器…

03 Strategy策略

抽丝剥茧设计模式 之 Strategy策略 - 更多内容请见 目录 文章目录 一、Strategy策略二、Comparable和Comparator源码分析使用案例Arrays.sort源码Collections.sort源码Comparable源码Comparator源码 一、Strategy策略 策略模式是一种设计模式,它定义了一系列的算法…

Unity-生命周期函数

目录 生命周期函数是什么? 生命周期函数有哪些? Awake() OnEnable() Start() FixedUpdate() Update() Late Update() OnDisable() OnDestroy() Unity中生命周期函数支持继承多态吗? 生命周期函数是什么? 在Unity中&…