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

【逐行注释】MATLAB的EKF和UKF例程与详细注释|附下载链接

在这里插入图片描述

例程简述

这是一个状态量为三维的MATLAB下的滤波程序,分成EKF(扩展卡尔曼滤波)和UKF(无迹卡尔曼滤波)两种,分别滤波后,显示滤波值的曲线、滤波误差的对比曲线、滤波误差的最大值、平均值、标准差的输出。

  • 模型是非线性的(状态方程和观测方程都是非线性的)
  • 我有意将模型设计得尽可能复杂一些,拿到手以后可以从难往简单的方向改,更容易上手。

部分代码与注释如下,供参考

% EKF+UKF效果对比
% date: 2023-11-07/Ver2
% 2024-6-7/Ver3:增加、优化误差输出语句
% 2024-8-25/Ver4:添加逐行注释、XYZ改为"第 维度"
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));
% 初始化扩展卡尔曼滤波状态向量
X_ekf = zeros(3,length(t));
X_ekf(1,1) = X(1,1); %给ekf滤波值赋初值
% 初始化观测值矩阵

下载链接

如需完整代码与注释,点击下面的链接下载(下载需付费,建议先看完文章,确定需要再下载):
https://download.csdn.net/download/callmeup/89677179

代码运行情况

运行后,得到的绘图和数据输出如下:
第一幅图是三个维度的状态真实值、EKF滤波值、UKF滤波值对比:
在这里插入图片描述
第二幅图是两种滤波方法的误差曲线,对比:
在这里插入图片描述

第三幅图比较难理解,是误差大小的CDF(累积概率密度函数)图像:
在这里插入图片描述
CDF这个图像反映了误差的总体趋势,CDF相关的知识可见本人的另一篇文章,有详细叙述:https://blog.csdn.net/callmeup/article/details/137754111
误差的统计特性输出为误差最大值误差平均值误差标准差,如下:
在这里插入图片描述

各模块作用

程序分成滤波模型初始化、运动模型、EKF、UKF、绘图、输出这些部分。
滤波模型初始化,定义了PQR等滤波需要使用的参数,同时给状态量X和观测量Z这些量定义空间:
在这里插入图片描述
运动模型部分通过迭代生成真实值、未滤波的值、观测值。误差也是在这里添加的:
在这里插入图片描述
EKF和UKF部分为重点,不再这里展示(源码上面有相关的标注)
绘图部分,每一行也都有注释,初学者也能看懂:
在这里插入图片描述
输出部分使用的是fprintf函数:
在这里插入图片描述


http://www.kler.cn/a/401911.html

相关文章:

  • 阿里云轻量应用服务器可以用在哪些场景呢
  • 如何下载TikTok视频没有水印
  • 深度学习之目标检测的技巧汇总
  • 2024年11月19日随笔
  • Python小白学习教程从入门到入坑------第三十二课 生成器(语法进阶)
  • 109. UE5 GAS RPG 实现检查点的存档功能
  • LDR6500:C to DP与DP to C视频转接线双向方案
  • RTK技术算法概述!
  • 【Vue笔记】基于vue3 + element-plus + el-dialog封装一个自定义的dialog弹出窗口组件
  • 车轮上的科技:Spring Boot汽车新闻集散地
  • 线性代数[ 矩阵 矩阵的初等变换 线性方程组 ]第二三章
  • LeetCode74. 搜索二维矩阵(2024冬季每日一题 6)
  • ES5 (SM-SR-eUICC) 接口上的 OTA 通信笔记
  • 多目标优化算法:多目标鳗鱼和石斑鱼优化算法(MOEGO)求解DTLZ1-DTLZ9,提供完整MATLAB代码
  • mysql 的乐观锁和 mvcc 是一回事吗
  • Spring Security 中的 UserDetailsService(获取用户详细信息)
  • WebSocket简易聊天室实现(有详细解释)
  • 使用Python语言编写一个简单的网页爬虫,从网站上抓取指定关键词的新闻标题和链接。
  • 简单爬虫的实现
  • 小程序-基于java+SpringBoot+Vue的小区服务管理系统设计与实现
  • 力扣-Hot100-链表其三【算法学习day.36】
  • 初识arkts-类-接口
  • 关于php Datetime 时区转换因为timezone_version(时区版本)问题造成的时区转换问题
  • k8s默认使用的后端网络模式
  • 基于YOLOv8深度学习的智慧社区建筑外墙破损(裂缝、露筋、剥落)检测系统研究与实现(PyQt5界面+数据集+训练代码)
  • 【Pikachu】PHP反序列化RCE实战