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

embedded/2024/11/25 19:17:17/

简述

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

运行截图

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

部分源代码

matlab">% 自适应调节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.ppmy.cn/embedded/34122.html

相关文章

Eclipse中开启服务,网页无法打开 运行程序显示404

一、eclipse中开启服务后&#xff0c;网页无法打开的问题 当你在eclipse中开启服务后&#xff0c;如果网页无法打开&#xff0c;可能是以下几个原因导致的&#xff1a; 1. 端口冲突&#xff1a;请确保你所使用的端口没有被其他程序占用。可以尝试更换一个未被占用的端口。 2…

Unity 性能优化之动态批处理(四)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、动态合批是什么&#xff1f;二、使用动态批处理1.打开动态合批2.满足条件 三、检查动态合批是否成功五、动态合批弊端总结 前言 动态批处理是常用优…

【AI】指定python3.10安装Jupyter Lab

家里电脑 13900K, bash 不识别pythoncmd可以,但是cmd似乎默认是python2.7这个是webrtc构建需要的.python3 则可以识别到但是版本是python3.12*多个版本如何通过制定的python3.10 的pip来安装软件,例如Jupyter Lab安装3.10 C:\Users\zhangbin\AppData\Roaming\Microsoft\Windo…

毕设:邮件分发系统

文章目录 前言一、登录1.邮箱登录2.账号登录 二、注册三、首页四、写邮件五、收邮件六、草稿箱七、垃圾箱八、已发送九、通讯录十、用户管理十一、邮件管理十二、登录日志总结 前言 分享一下邮件分发系统 一、登录 1.邮箱登录 2.账号登录 二、注册 三、首页 首页有邮件信息&…

【centos】vmware安装airflow流程

文章目录 1.下载系统https://mirrors.aliyun.com/centos/7/isos/x86_64/ 选择DVD20092.在VMware中&#xff0c;除了修改安装位置&#xff0c;其它选择默认安装centos73.用户名为root,登录4.网络适配器为桥接模式。5.使用命令消除显示器警告。6.安装anaconda6.1下载包&#xff1…

Vue基础 - axios

目录 1.axios请求实例 1、vue前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" conte…

ASP.NET网上书店

摘要 本设计尝试用ASP.NET在网络上架构一个电子书城&#xff0c;以使每一位顾客不用出门在家里就能够通过上网来轻松购书。本文从理论和实践两个角度出发&#xff0c;对一个具有数据挖掘功能电子书城进行设计与实现分析。论文首先较为详尽地介绍了面向对象分析与设计的有关概念…

vue3 element-plus 让el-container占满屏幕

在刚开始用element-plus的布局时&#xff0c;发现无法占满屏幕&#xff1a; 在App.vue中添加如下css代码&#xff1a; <style>html, body, #app {margin: 0;padding: 0;height: 100%;} </style>同时布局代码所在的component如下所示&#xff1a; <template&g…