【逐行注释】自适应观测协方差R的AUKF(自适应无迹卡尔曼滤波,MATLAB语言编写),附下载链接

文章目录

自适应R的UKF

自适应无迹卡尔曼滤波(Adaptive Unscented Kalman Filter,AUKF)是一种用于状态估计的滤波算法。它是基于无迹卡尔曼滤波(Unscented Kalman Filter,UKF)的改进算法。

自适应无迹卡尔曼滤波在无迹卡尔曼滤波的基础上,引入了自适应的思想。它通过动态地调整无迹点的数量和分布,以适应系统的动态变化。具体来说,它使用一种自适应的方法来根据系统的动态特性进行无迹点的选择和更新,从而提高系统的估计精度。

自适应无迹卡尔曼滤波适用于非线性和非高斯的系统状态估计问题,可以广泛应用于机器人导航、目标跟踪、航天器导航等领域。它通过动态地调整无迹点的数量和分布,能够更好地适应系统的动态特性,提高估计精度,同时具有较低的计算复杂度。

逐行注释的说明

每一行都标有中文注释:

是我自己一个字一个字打的,如果有错别字等问题,欢迎指正。

运行结果

  • 三轴的估计值、真值、滤波前的值对比:
  • 三轴的误差值对比:

  • 三轴的误差累积密度函数绘图:

    **累积分布函数(CDF)**图像的作用是展示数据在不同值范围内的累积概率分布情况。通过CDF图像,可以直观地看到数据的分布特性和不同滤波方法的效果。以下是CDF图像的作用和识图方法:

  • 作用

    • 比较误差分布:CDF图像可以帮助比较不同滤波方法(如未滤波、UKF、AUKF)的误差分布情况。通过观察不同方法的CDF曲线,可以了解哪种方法的误差更小、更稳定。
    • 评估滤波效果:通过CDF图像,可以评估滤波方法的效果。例如,如果某种滤波方法的CDF曲线在较小的误差范围内上升较快,说明该方法的误差较小,滤波效果较好。
    • 数据分布分析:CDF图像可以展示数据在不同值范围内的累积概率,帮助分析数据的分布特性。例如,可以看到数据中有多少比例的误差小于某个特定值。
  • 识图方法

    • 横轴(X轴):表示误差的绝对值。横轴上的值越大,表示误差越大。
    • 纵轴(Y轴):表示累积概率。纵轴上的值范围从0到1,表示误差小于或等于横轴上某个值的概率。
      曲线形状:曲线越陡峭,表示误差集中在较小的范围内,滤波效果越好。曲线越平缓,表示误差分布较广,滤波效果相对较差。
    • 比较不同曲线:通过比较不同滤波方法的CDF曲线,可以直观地看到哪种方法的误差更小。例如,如果UKF的CDF曲线在较小的误差范围内上升较快,说明UKF的滤波效果优于未滤波和AUKF。

部分代码

matlab 复制代码
% adaptive UKF与AUKF效果对比
% author:Evand
% 作者联系方式:微信matlabfilter(除前期达成一致外,付费咨询)
% date: 2023-11-07/Ver1
% 2024-9-9/Ver2/添加逐行注释、添加随机数种子
clear;clc;close all; %清空工作区、命令行,关闭小窗口
rng(0); %固定随机种子
%% 滤波模型初始化
t = 1:1:1000;% 定义时间序列

Q = 1*diag([1,1,1]);w=sqrt(Q)*randn(size(Q,1),length(t));% 设置过程噪声协方差矩阵和过程噪声
R = 1*diag([1,1,1]);v=sqrt(R)*randn(size(R,1),length(t));% 设置观测噪声协方差矩阵和观测噪声
P0 = 1*eye(3);% 初始状态估计协方差矩阵
X=zeros(3,length(t));% 初始化状态向量
Z=zeros(3,length(t)); %定义观测值形式
Z(:,1)=[X(1,1)^2/20;X(2,1);X(3,1)]+v(:,1); %观测量
residue_tag = 0; %自适应标签
%% 运动模型
% 初始化未滤波的状态向量
fprintf('完整代码下载链接:https://gf.bilibili.com/item/detail/1106220012');
X_ = zeros(3,length(t)); %给未滤波的值分配空间

各模块解释

程序共有下列几个模块:

其中:

  • 滤波模型初始化是程序初始化和滤波模型的相关参数设置
  • 运动模型为迭代计算真值和未滤波(带噪声)的值
  • UKF为经典的无迹卡尔曼滤波
  • AUKF为经过自适应的UKF
  • 绘图用于绘制上面的图
  • 总误差输出示例 的代码如下:

    用于计算各种方法的误差平均值,可以经过修改后计算最大值(max)、最小值(min)等。
相关推荐
Highcharts.js1 小时前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
测试员周周5 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
杜子不疼.8 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号38 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia9 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码9 小时前
C++ 内存分区 堆区
java·开发语言·c++
无风听海9 小时前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠10 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
LuminousCPP11 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
web3.088899911 小时前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python