当前位置: 首页 > news >正文

【自适应PF例程】基于Sage Husa的自适应粒子滤波与经典PF对比,MATLAB编写,可直接运行。三维状态量,非线性的状态与观测。附代码下载链接

在这里插入图片描述

标准粒子滤波(Particle Filter, PF)基于 Sage–Husa 自适应估计的自适应粒子滤波(Adaptive Particle Filter, APF)三维非线性系统下的性能对比。

文章目录

  • 代码简介
    • 算法亮点
    • 结果展示
  • 运行结果
  • MATLAB源代码

代码简介

程序展示了**标准粒子滤波(Particle Filter, PF)基于 Sage–Husa 自适应估计的自适应粒子滤波(Adaptive Particle Filter, APF)**在三维非线性系统中的对比效果。
算法以非线性状态和观测模型为背景,通过随机粒子采样、似然权重更新和重采样机制,实现对目标状态的动态估计。APF 在此基础上进一步引入自适应噪声估计机制,能够在未知或变化的环境下自动调整滤波参数,从而获得更加稳定、精确的估计结果。

算法亮点

  • 对比:在同一非线性系统下,PF 使用固定噪声参数,而 APF 能自动调整噪声强度,实时响应环境变化。
  • 自适应噪声学习:APF 借鉴 Sage–Husa 思想,根据滤波过程中观测到的新息信息动态更新噪声统计,实现自学习与自校正。
  • 非线性系统适用性强:无需线性化,适用于复杂状态变化和非高斯噪声环境。

结果展示

程序绘制了以下多组结果图与统计指标:

  • 三维状态的真值、PF 与 APF 滤波轨迹对比;
  • 各维度的误差变化曲线与累积分布曲线;
  • 自适应滤波器对真实噪声强度的学习过程;
  • 各算法的最大误差、均值和标准差对比表格。

结果显示,标准 PF 在噪声假设错误时性能下降明显,而 APF 能自动修正噪声估计,使误差分布更集中、收敛更平稳,表现出更强的鲁棒性和自适应能力。

运行结果

三维状态曲线对比:
在这里插入图片描述

误差对比:
在这里插入图片描述
误差CDF对比:
在这里插入图片描述

第一维误差指标:
在这里插入图片描述

命令行窗口输出的误差特性对比:
在这里插入图片描述
R的自适应估计曲线:
在这里插入图片描述

MATLAB源代码

部分代码如下:

% PF / APF 三维滤波,APF基于SageHusa思想自适应调节QR
% 作者:matlabfilter
% 2025-10-19/Ver2 (由 EKF/AEKF 修改为 PF/APF)
clear; clc; close all;% 清除变量、命令行和图形窗口
rng(0); % 设置随机数种子%% 滤波模型初始化
t = 1:1:1000;
n = 3;  % 三维
T = length(t);
Q = 10 * diag([1,1,1]);      % 真正的过程噪声协方差(三维)
R = 1 * diag([1,1,1]);       % 滤波器*初始*假定的观测噪声协方差(三维)
% 注意:下面生成观测值时,故意使用了一个被12倍缩放的噪声
% 实际的观测噪声协方差
R_real = 144 * R;
% 自适应滤波的目的就是去估计这个 R_realNp = 500; % 粒子数 (PF/APF)% 用 cholesky 生成噪声序列
w = 1*chol(Q)' * randn(n, T);   % 过程噪声
v_raw = 1*chol(R)' * randn(n, T);   % 原始观测噪声
P0 = 1 * eye(n);X = zeros(n, T);
X_pf = zeros(n, T);  % PF 声明变量
X_apf = zeros(n, T); % APF 状态 声明变量
Z = zeros(n, T);Z(:,1) = [0;0;0] + v_raw(:,1); % 三维初值% 预分配用于存储 (APF)
Q_num = zeros(n,n,T); Q_num(:,:,1) = Q;
R_num = zeros(n,n,T); R_num(:,:,1) = R;
% P_num 不再需要,粒子滤波没有P矩阵% APF (Sage-Husa) 初始为矩阵形式
Q_sh = Q;
R_sh = R;% 遗忘因子
b = 0.95;
eps_min = 1e-6;  % 用于保持正定%% 运动模型(三维)
X_ = zeros(3, length(t)); % 给带误差的(未滤波的)状态量建立空间
X_(:, 1) = X(:, 1); % 给带误差的状态量赋初值for i1 = 2:length(t)% 真实状态更新(三维非线性模型)X(:, i1) = [X(1, i1-1) + (2.5 * X(1, i1-1) / (1 + X(1, i1-1)^2)) + 8 * cos(1.2 * (i1-1));X(2, i1-1) + 1;X(3, i1-1) + 0.5 * sin(0.8 * (i1-1))];  % 第三维加入正弦变化% 未滤波状态更新X_(:, i1) = [X_(1, i1-1) + (2.5 * X_(1, i1-1) / (1 + X_(1, i1-1)^2)) + 8 * cos(1.2 * (i1-1));X_(2, i1-1) + 1;X_(3, i1-1) + 0.5 * sin(0.8 * (i1-1))] + w(:, i1-1);% 观测值更新(三维观测模型)Z(:, i1) = [X(1, i1)^2 / 20; X(2, i1); X(3, i1)^2 / 30] + sqrt(diag(R_real)).*v_raw(:,i1); % 构造噪声不确定
endX_pf(:, 1) = X_(:, 1);  % PF 估计值的初值
X_apf(:, 1) = X_(:, 1); % APF 估计值的初值% === PF / APF 初始化粒子 ===
% 从初始估计 X_(:, 1) 和 P0 采样

代码下载链接:
https://download.csdn.net/download/callmeup/92204975

更多完整的代码,可查看专栏文章:
https://blog.csdn.net/callmeup/article/details/153920147?sharetype=blogdetail&sharerId=153920147&sharerefer=PC&sharesource=callmeup&spm=1011.2480.3001.8118

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

http://www.dtcms.com/a/545166.html

相关文章:

  • 阿里云市场网站建设多语言做网站
  • 广东省城乡建设厅网站网站建设要解决哪些方面的事项
  • Docker篇4-本地项目app.py与docker加载项目镜像的开发顺序
  • FastMCP + cursor最小示例
  • 当机器学会“识人”:人脸识别技术原理与应用探析
  • 【总结】DHCP
  • 快速搭建LangChain4J与阿里通义千问对话系统
  • 购物网站设计开题报告电商网站建设目的及网站的优势
  • 网站建设与实现 文献综述wordpress 附件自定义
  • 万圣节流量高峰:基于 KEDA 的 EKS 弹性伸缩实践
  • 发包工具anysend使用手册
  • Rust 语法糖:if let 与 while let 的深度解析与实战
  • 二手网站排名seo如何快速排名
  • 告别手动部署!GitHub Workflow与Action完全指南:从零构建自动化CI_CD流水线
  • Java常用API(一)
  • 帮别人建设网站贵阳网站建设哪家好方舟
  • (huawei)43. 字符串相乘
  • (huawei)5.最长回文子串
  • 跨厂商(华为 H3C)防火墙 IPSec 隧道部署
  • 在nestjs中集成jwt校验
  • 环球资源网商务网站建设目的自己怎么做网页推广
  • (第三篇)Spring AI 基础入门:PromptTemplate 与对话工程实战(从字符串拼接到底层模板引擎的进阶之路)
  • les做ml网站template是什么意思
  • Node.js环境变量配置实战:安全高效开发指南
  • 了解学习Keepalived双机热备
  • 欧美网站建设教程seo排名优化点击软件有哪些
  • 如何通过网站标题找网站百度做公司网站
  • STL容器string的模拟实现
  • X-AnyLabeling 开启 ultralytics GPU训练模式
  • Linux进程:进程状态