clear;
clc;
close all
N=100;
v=randn(1,N);
a1=-1.352;a2=1.338;a3=-0.662;a4=0.240;
x(1)=v(1);
x(2)=-a1*x(1)+v(2);
x(3)=-a1*x(2)-a2*x(1)+v(3);
x(4)=-a1*x(3)-a2*x(2)-a3*x(1)+v(4);
for n=1:N-4;
x(n+4)=-a1*x(n+3)-a2*x(n+2)-a3*x(n+1)-a4*x(n)+v(n+4); %产生真实数据
end
v2=randn(1,N);%观测噪声
z=x+v2;%产生观测数据
%卡尔曼滤波
%赋初值
A=[-a1 -a2 -a3 -a4;1 0 0 0;0 1 0 0;0 0 1 0];%状态转移矩阵
H=[1 0 0 0];%观测矩阵
Q=[1 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0];%状态噪声方差阵
R=1;%观测噪声方差阵
X(:,1)=[z(4);z(3);z(2);z(1)];
p(:,:,1)=[10 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1];%一步预测误差方差阵
%开始滤波
for k=2:N
p1(:,:,k)=A*p(:,:,k-1)*A'+Q; %p1(:,:,k)即是一步预测误差的自相关矩阵,它是4*4的矩阵,取不同的k值就构成了一个三维矩阵
K(:,k)=p1(:,:,k)*H'/(H*p1(:,:,k)*H'+R); %K(:,:,k)是增益矩阵,对于固定的k值它是4*1矩阵,取不同的k值就是三维矩阵
X(:,k)=A*X(:,k-1)+K(:,k)*[z(k)-H*A*X(:,k-1)]; % X(:,k)是估计值,4*1矩阵
p(:,:,k)=p1(:,:,k)-K(:,k)*H*p1(:,:,k); %p(:,:,k)是估计误差的自相关矩阵,4*4矩阵的三维矩阵
end %结束一次滤波
%估计值与真实值之差
error_px=X(1,:)-x;%x距离误差
%绘图
t=1:N;
figure(1);
plot(t,x,'k-',t,z,'g:',t,X(1,:),'r-.');
legend('真实轨迹','观测样本','估计轨迹');
figure(2)
plot(error_px);
legend('估计误差');
天天Matlab科研工作室
- 粉丝: 4w+
- 资源: 8418
最新资源
- UE4插件制作视频教程
- CICD 持续集成与持续交付的部署plugins.tar.gz
- [实用脚本选集].zip
- 机器人概述,共81页,内容丰富,详细介绍了机器人的起源与发展,适合学习与教学使用
- 基于Vue和TypeScript的工坊后台积分商城设计源码
- 基于react-native框架的百度语音识别与合成接口设计源码
- 本科毕设项目:C++语言,基于Qt Qwidget的学生管理系统.zip
- Matlab Simulink视频教学.rar
- C++课设:校园导游系统,基于qt6.zip
- 2023-04-06-项目笔记 - 第二百九十二阶段 - 4.4.2.290全局变量的作用域-290 -2025.10.20
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈