自适应调节Q和R的自适应UKF(AUKF_QR)的MATLAB程序

简述

基于三维模型的UKF,设计一段时间的输入状态误差较大,此时通过对比预测的状态值与观测值的残差,在相应的情况下自适应调节系统协方差Q和观测协方差R,构成自适应无迹卡尔曼滤波(AUKF),与传统的UKF相比,三轴误差的平均值得到了降低,带经典UKF的误差对比、无滤波情况下的UKF对比。带中文注释。

运行截图

在这里插入图片描述
误差图:
在这里插入图片描述
平均误差输出的结果图:
在这里插入图片描述

部分源代码

% 自适应调节Q和R的UKF与传统UKF效果对比
% author:Evand
% 作者联系方式:evandjiang@qq.com(除前期达成一致外,付费咨询)
% 2024-5-5/Ver1
clear;clc;close all;
%% 滤波模型初始化
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;
%% 运动模型
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)]; %真实值if i1>500 && i1<700 %设定IMU误差较大的时间段w(:,i1) = 10*w(:,i1);Z(:,i1) = [X(1,i1).^2 / 20;X(2,i1);X(3,i1)] + 10*v(i1); %观测值elsew(:,i1) = w(:,i1);endX_(:,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)] + w(:,i1);%未滤波的值Z(:,i1)=[X(1,i1)^2/20;X(2,i1);X(3,i1)]+v(:,i1); %观测量
end%% UKF
P = P0;
X_ukf=zeros(3,length(t));
X_ukf(:,1)=X(:,1);
for k = 2 : length(t)Xpre = X_ukf(:,k-1);% sigma点和权重apha = 0.1; %【自己可以设置,取值:0.001~1】% calculateSigPntsandWeightsn = size(X,1);State_aug = Xpre;lambda = 3;% sigma点Sigma_Points = zeros(n, 2*n+1);Sigma_Points(:,1) = State_aug;A = chol(P,'lower');for i = 1:nSigma_Points(:,i+1) = State_aug + sqrt(lambda+n)*A(:,i);Sigma_Points(:,i+1+n) = State_aug -sqrt(lambda+n)*A(:,i);endWeights_m = zeros(2*n+1,1);for i = 1:2*n+1if i==1Weights_m(i,1) = lambda / (lambda+n);Weights_c(i,1) = lambda / (lambda+n)+1-apha^2+2;elseWeights_m(i,1) = 0.5 / (lambda+n);Weights_c(i,1) = 0.5 / (lambda+n);endend% 预测for i = 1:size(Weights_m)Sigma_pred(:,i) = [Sigma_Points(1,i)+2.5*Sigma_Points(1,i)/(1+Sigma_Points(1,i)^2)+8*cos(1.2*(k-1));Sigma_Points(2,i)+1;Sigma_Points(3,i)]+w(:,k);end% State_predXpre = Sigma_pred*Weights_m;n = size(Xpre,1);P_pred = zeros(n, n);for i = 1:size(Weights_m)x_diff = Sigma_pred(:,i) - Xpre;P_pred = P_pred + Weights_c(i,1)*x_diff*transpose(x_diff);end% 由各个状态量的点来求观测量for i = 1:size(Weights_m)Z_sigma(:,i) = [Sigma_pred(1,i)^2/20;Sigma_pred(2,i);Sigma_pred(3,i)];endZ_pred = Z_sigma*Weights_m;P_pred = P_pred+Q;X_ukf(:,k) = Xpre;% 观测更新nx = size(Xpre,1);nz = size(Z_pred,1);S = zeros(nz, nz);for i = 1:size(Weights_m)z_diff = Z_sigma(:,i) - Z_pred;S = S + Weights_c(i,1)*z_diff*transpose(z_diff);endS = S+R;TC = zeros(nx, nz);for i = 1:size(Weights_m)z_diff = Z_sigma(:,i) - Z_pred;x_diff = Sigma_pred(:,i) - Xpre;TC = TC + Weights_c(i,1)*x_diff*transpose(z_diff);endK = TC/S;% 更新P和滤波的状态量residue = Z(:,k) - Z_pred;Xpre = Xpre + K*residue;P = P_pred - K*S*transpose(K);X_ukf(:,k) = Xpre;end
%% AUKF
P = P0;
X_aukf=zeros(3,length(t));
X_aukf(:,1)=X(:,1);

完整程序下载链接

https://download.csdn.net/download/callmeup/89267155

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

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

相关文章

【分布式 | 第五篇】何为分布式?分布式锁?和微服务关系?

文章目录 5.何为分布式&#xff1f;分布式锁&#xff1f;和微服务关系&#xff1f;5.1何为分布式&#xff1f;5.1.1定义5.1.2例子5.1.3优缺点&#xff08;1&#xff09;优点&#xff08;2&#xff09;缺点 5.2何为分布式锁&#xff1f;5.2.1定义5.2.2必要性 5.3区分分布式和微服…

TinyVue 3.15.0 正式发布,推出全新的 Charts 图表组件底座,功能更强、图表更丰富!

你好&#xff0c;我是 Kagol。 我们非常高兴地宣布&#xff0c;2024年4月8日&#xff0c;TinyVue 发布了 v3.15.0 &#x1f389;。 TinyVue 每次大版本发布&#xff0c;都会给大家带来一些实用的新特性&#xff0c;上一个版本我们推出了业界组件库没有的 MindMap 思维导图组件…

zookeeper启动 FAILED TO START

注意&#xff1a;启动zookeeper时&#xff0c;需要使用zkServer.sh start命令将所有主机启动后&#xff0c;再查看状态 如果&#xff0c;启动一台主机&#xff0c;查看当前主机状态&#xff0c;则会报错 如果出错&#xff0c;进入到$ZOOKEEPER_HOME/logs&#xff0c;查看日志 …

LabVIEW智能变电站监控系统设计与实现

LabVIEW智能变电站监控系统设计与实现 随着电力系统和智能化技术的快速发展&#xff0c;建立一个高效、可靠的变电站监控系统显得尤为重要。通过分析变电站监控系统的需求&#xff0c;设计了一个基于LabVIEW软件的监控平台。该平台利用虚拟仪器技术、传感器技术和无线传输技术…

Nginx rewrite项目练习

Nginx rewrite练习 1、访问ip/xcz&#xff0c;返回400状态码&#xff0c;要求用rewrite匹配/xcz a、访问/xcz返回400 b、访问/hello时正常访问xcz.html页面server {listen 192.168.99.137:80;server_name 192.168.99.137;charset utf-8;root /var/www/html;location / {root …

【论文阅读:Towards Efficient Data Valuation Based on the Shapley Value】

基于Shapley值的高校数据价值评估 主要贡献 提出了一系列用于近似计算Shapley值的高效算法。设计了一个算法&#xff0c;通过实现不同模型评估之间的适当信息共享来实现这一目标,该算法具有可证明的误差保证来近似N个数据点的SV&#xff0c;其模型评估数量为 O ( N l o g ( N…

EPICS DataBase详解

1、分布式EPICS设置 1&#xff09; 操作界面&#xff1a;包括shell命令行方式(caget, caput, camonitor等)和图形界面方式(medm, edm, css等)。 2&#xff09;输入输出控制器(IOC) 2、IOC 1) 数据库&#xff1a;数据流&#xff0c;基本上周期运行 2)sequencer&#xff1a;基…

2024年全国保密宣传教育月的主题是()。A.贯彻落实保密法。你我都是护密人B.国家利益高于一切,保密责任重于泰山C.筑牢保密防线,维护国家安全

2024年全国保密宣传教育月的主题是()。点击查看答案 A.贯彻落实保密法。你我都是护密人B.国家利益高于一切&#xff0c;保密责任重于泰山 C.筑牢保密防线&#xff0c;维护国家安全D.共筑保密防线&#xff0c;公民人人有责 坚持不懈开展保密宣传教育&#xff0c;是保密工作实…

插入法(直接/二分/希尔)

//稳定耗时&#xff1a; 双向冒泡&#xff0c;可指定最大最小值个数MaxMinNum<nsizeof(Arr)/sizeof(Arr[0]), void BiBubbleSort(int Arr[],int n&#xff0c;int MaxMinNum){int left0,rightn-1;int i;bool notDone true;int temp;int minPos;while(left<right&&am…

图像处理--空域滤波增强(原理)

一、均值滤波 线性滤波算法&#xff0c;采用的主要是邻域平均法。基本思想是使用几个像素灰度的某种平均值来代替一个原来像素的灰度值。可以新建一个MN的窗口以为中心&#xff0c;这个窗口S就是的邻域。假设新的新的像素灰度值为&#xff0c;则计算公式为 1.1 简单平均法 就是…

LeetCode 234.回文链表

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff…

PWN入门之Stack Overflow

Stack Overflow是一种程序的运行时&#xff08;runtime&#xff09;错误&#xff0c;中文翻译过来叫做“栈溢出”。栈溢出原理是指程序向栈中的某个变量中写入的字节数超过了这个变量本身所申请的字节数&#xff0c;导致与其相邻的栈中的变量值被改变。 在本篇文章中&#xff…

常用语音识别开源四大工具:Kaldi,PaddleSpeech,WeNet,EspNet

无论是基于成本效益还是社区支持&#xff0c;我都坚决认为开源才是推动一切应用的动力源泉。下面推荐语音识别开源工具&#xff1a;Kaldi&#xff0c;Paddle&#xff0c;WeNet&#xff0c;EspNet。 1、最成熟的Kaldi 一个广受欢迎的开源语音识别工具&#xff0c;由Daniel Pove…

下一代防火墙是什么?

下一代防火墙(NGFW&#xff0c;Next-Generation Firewall)是一种高级安全设备&#xff0c;它提供了传统防火墙的功能并加入了更多的安全特性&#xff0c;以应对现代复杂网络环境中的安全威胁。NGFW不仅包括基本的数据包过滤功能&#xff0c;还集成了深度包检测(DPI)、入侵防御系…

代码随想录算法训练营DAY54|C++动态规划Part15|647.回文子串、516最长回文子序列、

文章目录 647.回文子串思路CPP代码双指针 516最长回文子序列思路CPP代码 动态规划总结篇 647.回文子串 力扣题目链接 文章链接&#xff1a;647.回文子串 视频链接&#xff1a;动态规划&#xff0c;字符串性质决定了DP数组的定义 | LeetCode&#xff1a;647.回文子串 其实子串问…

fcn网络是怎么学习 时间序列 怎么进行分类的啊 这是我的wave1_test.shape (2904, 3, 8000)

**全卷积网络&#xff08;FCN&#xff09;**处理时间序列数据进行分类的方法主要涉及以下几个步骤&#xff1a; 1. 数据预处理 首先&#xff0c;时间序列数据&#xff08;如你的 wave1_test 形状为 (2904, 3, 8000)&#xff09;需要适当的预处理。这可能包括归一化、去噪等步…

容器下的 Go 应用程序优化

1. 内存对齐 结构体内字段&#xff0c;从大到小排列 减少内存占用 1&#xff09;安装 fieldalignment 工具 go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignmentlatest 2&#xff09;分析并修复内存对齐 fieldalignment -fix ./.../Us…

第07-6章 应用层详解

HTTP、SSL&#xff1a;基于TCP&#xff0c;HTTP端口:80、HTTPS&#xff08;加密&#xff09;端口&#xff1a;443&#xff1b;FTP:基于TCP&#xff0c;两类端口&#xff1a;21、20&#xff08;数据传输之前需要建立连接此时是21&#xff0c;真正传输数据时用20&#xff09;TFTP…

JS基础:常见的6种语句详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端基础路线”&#xff0c;可获取完整web基础…

机器学习中线性回归算法的推导过程

线性回归是机器学习中监督学习中最基础也是最常用的一种算法。 背景&#xff1a;当我们拿到一堆数据。这堆数据里有参数&#xff0c;有标签。我们将这些数据在坐标系中标出。我们会考虑这些数据是否具有线性关系。简单来说 我们是否可以使用一条线或者一个平面去拟合这些数据的…