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

ops/2024/11/20 9:26:04/

在这里插入图片描述

例程简述

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

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

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

matlab">% 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.ppmy.cn/ops/135197.html

相关文章

Odoo中,要实现实时数据推送,SSE 与 WebSocket 该如何选择

目录 1. 技术特点对比 2. 使用场景 适合使用 SSE 的场景: 适合使用 WebSocket 的场景: 3. 优缺点总结 SSE 优点: SSE 缺点: WebSocket 优点: WebSocket 缺点: 4. 选择建议 选择 SSE 的条件&#x…

etcd部署(基于v3.5.15)

etcd部署 单节点部署下载etcd,解压etcd二进制包,并进入解压后目录创建数据目录移动可执行文件到/usr/local/bin/目录测试版本配置systemd管理启动etcd,设置开机启动验证 集群部署(3节点)环境准备准备3台服务器配置3台服务器hosts配置3台服务器…

组合VS继承

类的组合 一.组合的相关定义 1.定义:组合:是一种“has-a”关系,即一个类的对象“有”另一个类的对象。例如,一个汽车类可能包含轮胎类的对象。 例(1): class Desk {private:unsigned int iHei…

Chrome 浏览器 131 版本新特性

Chrome 浏览器 131 版本新特性 一、Chrome 浏览器 131 版本更新 1. 在 iOS 上使用 Google Lens 搜索 自 Chrome 126 版本以来,用户可以通过 Google Lens 搜索屏幕上看到的任何图片或文字。 要使用此功能,请访问网站,并点击聚焦时出现在地…

【氮化镓】用于低压射频电源的具有80.4% PAE的Si基E-Mode AlN/GaN HEMT

引言 本文是一篇关于增强型(E-mode)AlN/GaN高电子迁移率晶体管(HEMTs)的研究论文,晶体管是在硅衬底上制造的,并在3.6 GHz频率下展示了80.4%的峰值功率附加效率(PAE)。文章首先介绍了GaN器件在微波和毫米波功率放大器中的应用,特别是在雷达、卫星通信和民用移动通信系…

AWS IAM

一、介绍 1、简介 AWS Identity and Access Management (IAM) 是 Amazon Web Services 提供的一项服务,用于管理 AWS 资源的访问权限。通过 IAM,可以安全地控制用户、组和角色对 AWS 服务和资源的访问权限。IAM 是 AWS 安全模型的核心组成部分&#xf…

Go语言中的自定义错误及其使用

在Go语言中,错误处理是程序设计的一个重要部分。Go的error接口是一个内建的接口,任何实现了Error()方法的类型都可以作为一个错误。自定义错误类型可以提供更多的错误上下文信息,使得错误处理更加灵活和强大。 自定义错误类型 在Go中定义一…

GRU(门控循环单元)详解

1️⃣ GRU介绍 前面介绍的LSTM可以有效缓解RNN的梯度消失问题,但是其内部结构比较复杂,因此衍生出了更加简化的GRU。GRU把输入门和遗忘门整合成一个更新门,并且合并了细胞状态和隐藏状态。于2014年被提出 2️⃣ 原理介绍 GRU的结构和最简单…