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

EKF例程 matlab

% 不含IMU误差方程的EKF滤波典型程序,适用于多次滤波的第二级
% author:Evand
% date: 2023-09-20
% Ver1
clear;clc;close all;
global T
%% initial
T = 0.1; %采样率
t = [T:T:100];
Q = 0.1diag([1,1,1]);w=sqrt(Q)randn(size(Q,1),length(t));
R = 1
diag([1,1,1]);v=sqrt®randn(size(R,1),length(t));
P = 1
eye(3);
P_num = zeros(length(t),size(P,1),size(P,2)); %存放每次迭代的P
X=zeros(3,length(t));
X_ekf=zeros(3,length(t));
X_ekf(1,1)=X(1,1);
Z=zeros(3,length(t)); %定义观测值形式
Z(:,1)=[X(1,1)^2/20;X(2,1);X(3,1)]+v(:,1); %观测量
%% model
X_=zeros(3,length(t));
X_(:,1)=X(:,1);
for i1 = 2:length(t)
X(:,i1) = [1 * 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;
(2X(3,i1-1)+1)^0.5]; %真实值
X_(:,i1) = [1 * 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-1);%未滤波的值
Z(:,i1) = [X(1,i1).^2 / 20;X(2,i1);X(3,i1)] + v(i1); %观测值
end
%% EKF
for k = 2 : length(t)
Xpre = [1X_ekf(1,k-1)+ 2.5X_ekf(1,k-1)./(1+X_ekf(1,k-1).^2) + 8 * cos(1.2*(k-1));
X_ekf(2,k-1)+1;
X_ekf(3,k-1)]+w(:,k-1);
Z_hat =[Xpre(1).^2/20;Xpre(2);Xpre(3)];
F = [1 + 2.5 * (1-X_ekf(1,k-1).2)/((1+X_ekf(1,k-1).2).^2),0,0;
0,1,0;
0,0,(2X_ekf(3,k-1)+1)^(-0.5)];
H = [Xpre(1)/10,0,0;
0,1,0;
0,0,1];
PP=F
PF’+Q;
Kk=PP
H’/(HPPH’+R);
X_ekf(:,k)=Xpre+Kk*(Z(:,k)-Z_hat);
P=PP-KkHPP;
end

%% display
figure;
subplot(3,1,1);
plot(t,X(1,:),t,X_ekf(1,:));
title(‘EKF’);
legend(‘real’,‘EKF’);
subplot(3,1,2);
plot(t,X(2,:),t,X_ekf(2,:));
subplot(3,1,3);
plot(t,X(3,:),t,X_ekf(3,:));

figure;
subplot(3,1,1); %1st
plot(t,X_ekf(1,:)-X(1,:),t,X_(1,:)-X(1,:));
title(‘Err’);
legend(‘EKF’,‘without KF’);
[~,p1] = max(abs(X_ekf(1,:)-X(1,:)));
h = gca().Children(1);
datatip(h,p1T-1,X_ekf(1,p1)-X(1,p1));
[~,p2] = max(abs(X_(1,:)-X(1,:)));
datatip(h,p2
T-1,X_(1,p2)-X(1,p2));
subplot(3,1,2); %2nd
plot(t,X_ekf(2,:)-X(2,:),t,X_(2,:)-X(2,:));
subplot(3,1,3); %3rd
plot(t,X_ekf(3,:)-X(3,:),t,X_(3,:)-X(3,:));
[~,p1] = max(abs(X_ekf(3,:)-X(3,:)));
h = gca().Children(1);
datatip(h,p1T-1,X_ekf(3,p1)-X(3,p1));
[~,p2] = max(abs(X_(3,:)-X(3,:)));
datatip(h,p2
T-1,X_(3,p2)-X(3,p2));

figure;
subplot(3,1,1); %1st
cdfplot(abs(X_ekf(1,:)-X(1,:)));
hold on
cdfplot(abs(X_(1,:)-X(1,:)));
legend(‘EKF’,‘without KF’);
subplot(3,1,2); %2nd
cdfplot(abs(X_ekf(2,:)-X(2,:)));
hold on
cdfplot(abs(X_(2,:)-X(2,:)));
subplot(3,1,3); %3rd
cdfplot(abs(X_ekf(3,:)-X(3,:)));
hold on
cdfplot(abs(X_(3,:)-X(3,:)));

http://www.lryc.cn/news/191269.html

相关文章:

  • 【C语言】atoi函数的模拟
  • JAXB 使用记录 bean转xml xml转bean 数组 继承 CDATA(转义问题)
  • Linux Centos安装Sql Server数据库,结合cpolar内网穿透实现公网访问
  • Vulnhub系列靶机---Raven: 2
  • 计算机视觉与深度学习 | 视觉惯性SLAM的基础理论
  • [电源选项]没有系统散热方式,没有被动散热选项
  • 房产中介租房小程序系统开发搭建
  • RS485电路设计
  • 分布式文件服务器——Windows环境MinIO的三种部署模式
  • 科技资讯|9月新能源汽车零售74.3万辆,充电桩迎来发展高峰
  • 【C++ Primer Plus学习记录】指针——小结
  • Android Studio for Platform (ASfP) 使用教程
  • 【安全】linux audit审计使用入门
  • 如何优雅的终止 Docker 容器
  • SXSSFWorkbook-MinIo-大数据-流式导出
  • 使用PyQt5创建图片查看器应用程序
  • 怎样制作一个展会场馆预约小程序
  • 呼叫中心系统信息发送功能的应用
  • Android笔记(三)多Activity活动的切换中的简化处理
  • vue打包压缩
  • Mysql5.7大限将至升级Mysql 8.0过程记录(未完)
  • 多架构环境下docker-compose部署rocketmq单机模式—— 筑梦之路
  • [Unity][VR]Passthrough2-创建一个基本的Passthrough应用
  • 【Unity3D赛车游戏制作】设置面板搭建——UGUI复合控件
  • 如何让 Source Insight 识别 AUTOSAR 宏定义 FUNC
  • sts搭建springboot
  • 解决react使用css module无法重写bootstrap样式的问题
  • 自动驾驶软件和人工智能
  • 堆叠、集群技术
  • SpringCould微服务保护01——Sentinel组件下载并使用