集合卡尔曼滤波(EnKF)的三维滤波(模拟平面定位)例程,带逐行注释

news2024/11/28 20:36:10

在这里插入图片描述

这段 MATLAB 代码实现了一个三维动态系统的集合卡尔曼滤波(Ensemble Kalman Filter, EnKF)示例。代码的主要目的是通过模拟真实状态和测量值,使用 EnKF 方法对动态系统状态进行估计。

文章目录

  • 参数设置
  • 初始化真实状态
  • 定义状态转移和测量矩阵
  • 生成真实状态和测量值
  • 初始化集合卡尔曼滤波
  • 执行集合卡尔曼滤波
  • 绘制结果
  • 误差绘图
  • 总结
  • 部分代码
  • 运行结果

参数设置

  • 状态维度 (n):设置为6,表示系统有6个状态变量(如位置和速度)。
  • 测量维度 (m):设置为3,表示系统有3个测量变量。
  • 时间步数 (N):设置为100,表示模拟会进行100个时间步。
  • 集合成员数量 (num_ensemble):设置为10,表示使用10个样本进行状态估计。
  • 过程噪声和测量噪声的协方差矩阵
    • process_noise_cov 设置为较小的值,表示过程噪声较低。
    • measurement_noise_cov 设置为1,表示测量噪声较高。

初始化真实状态

  • 创建一个 nN 列的零矩阵 true_state 来存储真实状态。
  • 设置初始真实状态为 [1; 0; 2; 1; 1; 0.1],代表系统的初始位置和速度。

定义状态转移和测量矩阵

  • 状态转移矩阵 (A):定义如何从当前状态转移到下一个状态。这里使用了时间间隔 T 来更新位置和速度。
  • 测量矩阵 (H):定义如何从状态生成测量值,使用线性组合来映射状态到测量空间。

生成真实状态和测量值

  • 在一个循环中,从第二个时间步开始:
    • 使用状态转移矩阵 A 和过程噪声生成下一个真实状态。
    • 根据真实状态和测量噪声生成测量值,存储在 measurements 矩阵中。

初始化集合卡尔曼滤波

  • 生成初始集合 ensemble,所有成员都基于初始真实状态,加上随机扰动。
  • 创建一个零矩阵 estimates 用于存储每个时间步的状态估计。

执行集合卡尔曼滤波

  • 在循环中进行预测和更新步骤:
    • 预测步骤:根据状态转移矩阵更新集合成员,加入过程噪声。
    • 计算集合的均值和协方差:用于状态更新。
    • 更新步骤
      • 计算创新(观测值与预测值的差)。
      • 计算创新协方差。
      • 计算卡尔曼增益。
      • 更新集合成员,以反映新测量信息。
    • 存储当前时间步的状态估计。

绘制结果

  • 使用三维绘图(plot3)绘制真实状态、估计状态和测量值的轨迹。
  • 创建多个子图,显示不同状态变量(如 X、Y、Z 位移)的真实状态、估计状态和测量值的变化。

误差绘图

  • 新建图形窗口,绘制估计误差和观测误差。
  • 使用 fprintf 输出 X、Y、Z 轴的误差统计信息,包括最大误差和平均绝对误差。

总结

整段代码的主要目标是通过集合卡尔曼滤波算法对一个三维动态系统进行状态估计。它通过模拟真实状态和测量值的过程,展示了如何使用 EnKF 来处理动态系统,并通过可视化结果和误差分析来评估估计的准确性。

部分代码

% 集合卡尔曼滤波示例 三维
% 2024-11-12/Ver1
clear; clc; close all; % 清除工作空间,清空命令窗口,关闭所有图形窗口
rng(0); % 设置随机数生成器的种子,以确保结果可重复

% 参数设置
n = 6; % 状态维度(4个状态变量)
m = 3; % 测量维度(2个测量变量)
N = 100; % 时间步数(总共进行100个时间步的模拟)
num_ensemble = 10; % 集合成员数量(使用10个样本进行估计)
process_noise_cov = 1e-5 * eye(n); % 过程噪声协方差矩阵(小值,表示低噪声)
measurement_noise_cov = 1 * eye(m); % 测量噪声协方差矩阵(较大值,表示较高噪声)

% 初始化真实状态
true_state = zeros(n, N); % 创建一个n行N列的零矩阵,用于存储真实状态
true_state(:, 1) = [1; 0; 2; 1; 1 ; 0.1]; % 设置初始真实状态(X位移、X速度、Y位移、Y速度)

T = 1; %时间间隔
% 状态转移矩阵
A = [1 T 0 0 0 0;  % 状态转移矩阵,定义如何从一个状态转移到下一个状态
     0 1 0 0 0 0 ; 
     0 0 1 T 0 0; 
     0 0 0 1 0 0;
     0 0 0 0 1 T;
     0 0 0 0 0 1];

% 测量矩阵
H = [1 0 0 0 0 0; % 测量矩阵,定义如何从状态生成测量值
     0 0 1 0 0 0;
     0 0 0 0 1 0];



下载链接:https://download.csdn.net/download/callmeup/89986984

运行结果

三维轨迹图:
在这里插入图片描述

  • 各轴状态量
    在这里插入图片描述

  • 误差曲线

在这里插入图片描述

  • 误差统计特性输出

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙千帆启新程,共绘数字生态蓝图

华为的鸿蒙千帆起计划:共筑数字未来,学习华为创新之路 在当今全球科技竞争日益激烈的背景下,华为作为中国科技企业的代表,正通过其自主创新的鸿蒙系统,引领一场移动应用生态的变革。鸿蒙千帆起计划,作为华…

python控制鼠标,键盘,adb

python控制鼠标,键盘,adb 听说某系因为奖学金互相举报,好像拿不到要命一样。不禁想到几天前老墨偷走丁胖子的狗,被丁胖子逮到。他面对警察的问询面不改色坚持自我,反而是怒气冲冲的丁胖子被警察认为是偷狗贼。我觉得这…

yum安装升级指定版本软件

与apt相同,yum也可以指定升级软件版本。 这里以升级gitlab-ce为例。 获得当前可用版本命令如下: yum list gitlab-ce --showduplicates 查看当前gitlab版本。在/var/opt/gitlab/gitlab-rails/查看VERSION文件内容: cat VERSION 当前版本…

el-table根据接口返回某一个字段合并行

根据名称相同合并行 <template><div><el-table :data"responseSearchIntegralAddData" :span-method"objectSpanMethod1" border style"width: 100%"><el-table-column prop"integralTypeName" label"名称…

Jmeter中的前置处理器

5&#xff09;前置处理器 1--JSR223 PreProcessor 功能特点 自定义数据处理&#xff1a;使用脚本语言处理请求数据&#xff0c;实现高度定制化的数据处理和生成。动态数据生成&#xff1a;在请求发送前生成动态数据&#xff0c;如随机数、时间戳等。变量设置&#xff1a;设置…

ABAP OOALV模板

自用模板&#xff0c;可能存在问题 一、主程序 *&---------------------------------------------------------------------* *& Report ZVIA_OO_ALV *&---------------------------------------------------------------------* REPORT ZVIA_OO_ALV.INCLUDE ZVI…

新能源汽车充电基础设施短板问题多,如何实现高效、综合、智能化管理?

随着城市经济的发展&#xff0c;人民生活水平的提升&#xff0c;新能源汽车保有量快速增长&#xff0c;而日益增长的新能源汽车需求与充电基础设施建设不平衡的矛盾日益突出。由于停车泊位充电基础设施总量不足、布局待优化、利用效率低、建设运营存在短板问题等原因&#xff0…

LeetCode:19.删除链表倒数第N个节点

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;19.删除链表倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表…

vscode可以编译通过c++项目,但头文件有红色波浪线的问题

1、打开 VSCode 的设置&#xff0c;可以通过快捷键 Ctrl Shift P 打开命令面板&#xff0c;然后搜索并选择 “C/C: Edit Configurations (JSON)” 命令&#xff0c;这将在 .vscode 文件夹中创建或修改 c_cpp_properties.json 文件 {"configurations": [{"name…

Windows远程连接桌面报错“由于没有远程桌面授权服务器可以提供许可证,远程会话连接已断开。请跟服务器管理员联系

摘要 windows server配置了多用户登录&#xff0c;默认自动生成的连接许可证有效日期为120天&#xff0c;超过了这个时间后&#xff0c;用户将不能远程连接服务器。 需要配置多用户服务器&#xff0c;进行获取许可 问题 解决方法 1、win键R打开运行器&#xff0c;使用mstsc …

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…

受天鹅绒蠕虫启发:软胶机器人如何实现刚度可调的粘附控制

大家好&#xff01;今天来了解一篇微型机器人研究——《Stiffness-tunable velvet worm–inspired soft adhesive robot》发表于《SCIENCE ADVANCES》。大家想想&#xff0c;在人体内部这样复杂的环境中&#xff0c;微型机器人要稳定操作&#xff0c;粘附控制是多么关键啊&…

Flink--API 之 Source 使用解析

目录 一、Flink Data Sources 分类概览 &#xff08;一&#xff09;预定义 Source &#xff08;二&#xff09;自定义 Source 二、代码实战演示 &#xff08;一&#xff09;预定义 Source 示例 基于本地集合 基于本地文件 基于网络套接字&#xff08;socketTextStream&…

typescript基础入门

在官网的页页https://www.typescriptlang.org/可以调试。 &#xff03;类型推断 let str: string abclet str1: string str1a&#xff03;数组及类型断言let numArr [1, 2, 3]const result numArr.find(item > item >2) as numberresult * 5&#xff03;基础类型和…

SenseVoice 音频转文字情绪识别 - python 实现

具体代码实现如下&#xff1a; from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocesspath_audio "emo/happy.mp3"# 音频文件 # 加载模型 model_dir "iic/SenseVoiceSmall" model AutoModel(model…

Java学习笔记--继承方法的重写介绍,重写方法的注意事项,方法重写的使用场景,super和this

目录 一&#xff0c;方法的重写 二&#xff0c;重写方法的注意事项 三&#xff0c;方法重写的使用场景 四&#xff0c;super和this 1.继承中构造方法的特点 2.super和this的具体使用 super的具体使用 this的具体使用 一&#xff0c;方法的重写 1.概述:子类中有一个和父类…

深入浅出摸透AIGC文生图产品SD(Stable Diffusion)

hihi,朋友们,时隔半年(24年11月),终于能腾出时间唠一唠SD了🤣,真怕再不唠一唠,就轮不到SD了,技术更新换代是在是太快! 朋友们,最近(24年2月)是真的没时间整理笔记,每天都在疯狂的学习Stable Diffusion和WebUI & ComfyUI,工作实在有点忙,实践期间在飞书上…

OSI七层模型和TCP/IP五层模型详细介绍

这里写目录标题 一.OSI含义二.OSI七层模型1.应用层2.表示层3.会话层4.传输层5.网络层6.数据链路层7.物理层 TCP/IP五层协议1.应用层2.运输层运行在TCP上的协议运行在UDP上的协议 3.网络层IP协议配套使用的协议 4.数据链路层 四.网络协议分层的好处 一.OSI含义 OSI即是开放式通…

360推出全新的生成式 AI 搜索产品:纳米搜索,要重塑搜索产品

【大力财经】直击互联网最前线&#xff1a;360 集团在 2024 年 11 月 27 日开发布会&#xff0c;重磅推出了一款全新的生成式 AI 搜索产品——纳米搜索&#xff0c;并且已经上架到苹果 App Store 以及应用宝等安卓应用商店&#xff0c;直接与百度、阿里夸克、秘塔 AI、Perplexi…

【超全】目标检测模型分类对比与综述:单阶段、双阶段、有无锚点、DETR、旋转框

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…