【逐行注释】MATLAB的程序,对比EKF(扩展卡尔曼滤波)和PF(粒子滤波)的滤波效果,附下载链接

在这里插入图片描述

文章目录

  • 总述
  • 部分源代码
  • 运行结果
  • 扩展性

总述

本代码使用 M A T L A B MATLAB MATLAB实现了扩展卡尔曼滤波( E K F EKF EKF)和粒子滤波( P F PF PF)在状态估计中的对比分析。
主要功能包括:

参数设置:初始化仿真参数,如粒子数量、时间序列、状态转移与观测噪声的协方差矩阵。
真实状态与观测值生成:通过定义状态转移方程,生成系统的真实状态和带噪声的观测值。
粒子滤波初始化:随机生成粒子并计算初始权重,为粒子滤波的后续步骤做准备。
扩展卡尔曼滤波:通过预测、更新步骤,利用测量数据不断修正状态估计。
粒子滤波实现:在每个时间步中,将粒子进行预测、加权、归一化和重采样,得到状态估计。
绘图:绘制真实状态与估计状态的对比图、估计误差图及误差的CDF(累积分布函数)图,方便分析不同滤波方法的性能。
误差统计特性输出:在命令行输出未滤波、EKF和PF的最大误差值,提供对比依据。

部分源代码

如下:

% EKF+PF效果对比
% author:Evand
% 作者联系VX:matlabfilter(除前期达成一致外,咨询需付费)
% date: 2024-1-10
% Ver2
% 2024-09-23/Ver3:添加逐行注释
clear; %清空工作区
clc; %清空命令行
close all; %关闭所有窗口(主窗口除外)
rng(0); %固定随机种子,让每次运行得到的结果相同 
%% 参数设置
N = 100; %粒子总数(此值仅影响粒子滤波部分)
t = 1:1:1000; %仿真时间设置
Q = 1*diag([1,1,1]); %设置状态转移协方差矩阵
R = 1*diag([1,1,1]); %设置观测噪声协方差矩阵
w_pf=sqrt(Q)*randn(size(Q,1),length(t)); %生成状态转移噪声
v_pf=sqrt(R)*randn(size(R,1),length(t)); %生成观测噪声
P0 = 1*eye(3); %生成状态协方差矩阵

如上,几乎每一行代码都有中文注释,方便理解。
完整代码下载链接:https://download.csdn.net/download/callmeup/89788619

运行结果

  • 三轴状态量对比:
    在这里插入图片描述

  • 三轴误差对比:
    在这里插入图片描述

  • 三轴误差的CDF图像对比:
    在这里插入图片描述

  • 输出误差
    在这里插入图片描述

扩展性

在扩展卡尔曼滤波(Extended Kalman Filter, E K F EKF EKF)和粒子滤波(Particle Filter, P F PF PF)这两种常用的非线性滤波方法之间,有以下几点对比和扩展考虑:

  1. 线性假设 vs 非线性处理:
    EKF基于线性化处理,适合系统模型接近线性的场景,但在高度非线性的情况下可能会失效,因为局部线性近似可能导致较大误差。
    PF则天然适用于非线性系统,因为它通过模拟大量的随机采样点(粒子)来追踪不确定性,而非依赖于系统方程的线性性质。

  2. 计算效率:
    EKF由于只需要求解一次矩阵运算,相比PF而言,其计算量较小,尤其是在高维系统中。
    粒子滤波的计算复杂度随着粒子数目的增加而增加,当系统状态维度很高或观测噪声大时,可能需要大量粒子才能保持较好的估计精度。

  3. 鲁棒性和适应性:
    PF对初始条件敏感度较低,且能较好地处理缺失数据和异常值,适合不确定性较高的环境。
    EKF在某些极端条件下(如矩阵奇异),可能会导致滤波器不稳定。

  4. 扩展性:
    EKF通常更容易与已有的数学工具结合,比如系统动力学建模等。
    PF的扩展性相对较弱,但随着算法优化(如Resampling、Bootstrap Sampling等)和并行计算的发展,现代PF技术也有了改进。

为了进一步扩展这两种滤波器,可以考虑:

  1. 融合信息: 结合其他滤波方法(如无迹卡尔曼滤波Unscented Kalman Filter, UKF),增强非线性处理能力。
  2. 自适应采样: 对于粒子滤波,研究更高效的采样策略和重采样方法,降低计算成本。
  3. 在线学习: 在EKF中引入机器学习元素,提高对未知动态模型的适应能力。
  4. 硬件加速: 为大数据量的PF设计专用硬件或者GPU加速算法。
  5. 深度学习辅助: 将滤波结果作为神经网络训练的数据输入,提升整体系统的性能。

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

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

相关文章

【apt-file命令详解:Linux下的包管理利器】

文章目录 前言一、apt-file命令简介二、安装apt-file三、apt-file命令的基本用法四、高级技巧五、总结 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 &a…

基于SSM的“银发在线教育云平台”的设计与实现(源码+数据库+文档)

基于SSM的“银发在线教育云平台”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 首页页面图 健身养生详情页面 在线课堂界面 …

Intellij IDEA 通过数据库表生成带注解的Java实体类(lombok版)

前言:因为今天在写实体类的时候,发现表中的字段太多,而且又要加注解怕写错漏写,现在市面上也有许多插件,但是有些达不到代码简洁,需要修改。后来还是选择了采用groovy写了一个脚本编写,本来idea…

gitlab使用小结

GitLab 是一个基于 Git 的代码托管平台,提供了丰富的功能来管理代码仓库、CI/CD、项目管理等。以下是一些常用的 GitLab 命令和示例,帮助你更好地使用 GitLab。 1、 克隆仓库 克隆一个远程仓库到本地: git clone gitgitlab.example.com:us…

深圳mes制造系统的主要功能

深圳MES系统的主要功能包括以下几个方面: 生产计划管理:MES系统可以帮助企业制定生产计划,包括订单管理、生产排程、生产任务分配等,实现生产资源的合理配置和生产计划的优化。 生产过程控制:MES系统可以监控生产过程中…

SpringBoot技术栈的网上超市开发实践

2 系统开发技术 这部分内容主要介绍本系统使用的技术,包括使用的工具,编程的语言等内容。 2.1 Java语言 Java语言自公元1995年至今,已经超过25年了,依然在软件开发上面有很大的市场占有率。当年Sun公司发明Java就是为了发展一门跨…

局域网远程命令重启电脑

只要知道远程服务器的管理员密码和IP地址,在局域网中的任意一台机器上打开“命令提示符”窗口,运行以下命令: 1、获取远程服务器的管理员权限 net use IP地址 "管理员密码" /user:administrator 2、使用shutdown命令远程重启服务器…

32中的外部中断

一、理解中断 关于32的中断 中断就是给cpu一个信号,cpu收到这个对应的信号再进行指挥 最常用的就是按键 key1按下是咩意思key2呢这样 中断信号线CPU要和对应的元器件连接 二、中断代码 代码编写 所有的0脚对应中断寄存器0,以此类推 引脚为n …

Unity :单例模式 + MonoBehaviour 是什么体验?

单例模式 与 MonoBehaviour的冲突点 单例模式 MonoBehaviour 保持单例的快速解决方案 就是自己创建一个空对象,然后把脚本挂在上去就行了,之后你就别自己挂载该脚本就行了 一般写法 public class AgentMoNo : MonoBehaviour {private static AgentM…

Python编码系列—Python观察者模式:实现事件驱动架构的利器

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

ComfyUI新版本提升效率小技巧(建议收藏)

原文链接:建议收藏!ComfyUI提升效率的小技巧,肯定有你不知道的 (chinaz.com) 本篇带来ComfyUI非常实用的9个小技巧,可以提升我们的ComfyUI工作效率,建议大家收藏起来哈 新版中文搜节点 点击设置 comfy→搜索框框架…

PHP判断微信或QQ访问

PHP判断微信或QQ访问 若是微信或者QQ打开&#xff0c;提示图会覆盖网页&#xff0c;但网页功能仍在运行&#xff01; <meta name"viewport" content"initial-scale1, maximum-scale1, user-scalableno, widthdevice-width"><style> .top-gui…

OpenCV目标检测(1)模板匹配函数matchTemplate()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将一个模板与重叠的图像区域进行比较。 该函数在图像中滑动&#xff0c;使用指定的方法将大小为 w h w \times h wh的重叠块与模板 templ 进行…

基于python+django+vue的旅游景点数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

【Canvas与诗词】铁马冰河入梦来

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金红圈铁马冰河入梦来</title><style type"text/css&q…

【linux经典工具】strace-就十分钟你也能成为性能调优专家

strace 是什么 strace是一款功能强大的 Linux 进程监控和诊断工具。主要作用就是&#xff1a;用于调试程序、解决问题、拦截和记录系统调用以及跟踪正在运行的进程。它能输出了程序如何与系统交互的过程&#xff0c;尤其是在无法获取源代码的情况下&#xff08;那些开源工具、…

召回04 离散特征的处理

推荐系统会将一个id映射成一个向量 Qne-Hot编码 Embedding(嵌入)&#xff1a; 把每个类别映射成一个低维的稠密向量

k均值算法 聚类算法 k-means

首先我们导入科学计算的库 import numpy as np import matplotlib.pyplot as plt直接我们生成一组数据&#xff0c;为了保证每次的数据是一致的&#xff0c;我们设置一个随机种子。 np.random.seed(0) Xnp.random.rand(100,2) print(X) 结果 然后我们就要开始写K-means算…

光控资本:红利税是什么?一万股票的红利税是多少?

盈利税&#xff0c;即股息盈利税&#xff0c;是投资者卖出分红的股票时&#xff0c;需求扣除的税&#xff0c;一般来说&#xff0c;投资者卖出分红股票之后&#xff0c;不会立马扣税&#xff0c;在投资者卖出股票的第2个生意日至31个工作日之间进行补缴。一万股票的盈利税盈利税…

VMware Workstation 17.5安装教程

目录 软件介绍 1、下载安装包 2、安装虚拟机 3、卸载虚拟机 软件介绍 VMware&#xff08;虚拟机&#xff09;是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统&#xff0c;通过它可在一台电脑上同时运行更多的Microsoft Windows、Linux…