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

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

时间:2024-11-20 13:43:40浏览次数:3  
标签:状态 粒子 EKF 卡尔曼滤波 滤波 PF 逐行

在这里插入图片描述

本代码使用MATLAB实现扩展卡尔曼滤波(EKF)和粒子滤波(PF)在状态估计中的对比分析。

文章目录

总述

代码主要功能包括:

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

部分源代码

如下:

% EKF+PF效果对比
% author:Evand
% 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. 深度学习辅助: 将滤波结果作为神经网络训练的数据输入,提升整体系统的性能。

如有需求,可通过问文末卡片联系作者

标签:状态,粒子,EKF,卡尔曼滤波,滤波,PF,逐行
From: https://blog.csdn.net/callmeup/article/details/142468109

相关文章

  • 深入理解 LMS 算法:自适应滤波与回声消除
    深入理解LMS算法:自适应滤波与回声消除在信号处理领域,自适应滤波是一种重要的技术,广泛应用于噪声消除、回声消除和信号恢复等任务。LMS(LeastMeanSquares)算法是实现自适应滤波的经典方法之一。本文将详细介绍LMS算法的原理,包括公式推导,并通过Python代码示例展示其在......
  • 【IMM EKF MATLAB CVCA】IMM滤波器,结合匀速运动 (Constant Velocity, CV) 和匀加速运
    文章目录程序简介运行截图程序代码程序讲解概述主要功能详细讲解1.初始化2.状态转移矩阵和协方差矩阵3.生成真实数据4.IMM算法5.结果后处理与可视化6.卡尔曼滤波函数总结程序简介该函数实现了交互式多模型(IMM)滤波器,结合了匀速运动(ConstantVelocity,......
  • 登上Nature封面!强化学习+卡尔曼滤波上大分
    2024深度学习发论文&模型涨点之——强化学习+卡尔曼滤波强化学习与卡尔曼滤波的结合在提高导航精度、适应复杂环境以及优化资源利用方面显示出明显优势,并且已经在多个领域中得到应用和验证。这种结合创新十分有前景,目前多篇成果被顶会顶刊录用,例如"Champion-leveldronera......
  • 我谈逆滤波——给逆滤波上升理论高度
    所谓复原,图像复原是图像降质模型的求逆过程,其目的是使估计图像逼近原图像。人家是有目标的,目标是估计图像与原图像之间的差异。逆滤波尽管看着很简单,也不实用,但人家也是有理论依据的,有理论依据就可以从理论上分析误差,而不是想当然地除以传递函数那样简单。更不能像这样没......
  • 在MATLAB中实现自适应滤波算法
    自适应滤波算法是一种根据信号特性自动调整滤波参数的数字信号处理方法,其可以有效处理噪声干扰和信号畸变问题。在许多实时数据处理系统中,自适应滤波算法得到了广泛应用。在MATLAB中,可以使用多种方法实现自适应滤波算法。本文将介绍自适应滤波算法的基本原理和在MATLAB中实现自......
  • 19. Savitzky-Golay 滤波器
    Savitzky-Golay滤波器1.Savitzky-Golay滤波器的工作原理2.示例2.1代码解释2.2结果展示通过Savitzky-Golay滤波器来平滑数据。1.Savitzky-Golay滤波器的工作原理Savitzky-Golay滤波器是一种数字滤波技术,用于平滑数据并减少噪声。它的主要优点是可以保留......
  • 双边滤波器原理简述及C++实现
    双边滤波器原理简述及C++实现一、文章简介二、双边滤波器原理三、C++实现1、代码2、效果展示四、标准差的选取1、空间域标准差(sigmaSpace)2、值域标准差(sigmaColor)3、参数调试一、文章简介本文主要简述双边滤波器原理,尽可能通俗易懂,最后用C+......
  • canny 算法 python实现, 双边滤波--自适应阈值改进--形态学操作
    #-*-coding:utf-8-*-importnumpyasnpimportcv2importosimportcsv#高斯滤波defsmooth(image,sigma=1.4,length=5):#Computegaussianfilterk=length//2gaussian=np.zeros([length,length])foriinrange(length):for......
  • RC滤波器截止频率:【公式推导】
    目录1:RC滤波器2:截止频率3:截止频率公式推导电子领域的滤波器,可以“过滤掉”我们不需要的某个频率的波形。按内部是否有电源和有源器件,可以分为:有源滤波器:一般由集成运放和RC网络组成,由电源向集成运放提供能量。除了滤除波形以外,还能够放大特定频率的波形。无源滤波器:一般由电......
  • Python从0到100(六十九):Python OpenCV-图像加噪与滤波
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......