%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 创建时间:2022/04/07
% 创建人:周立倩
% 程序功能:IEKF滤波器设计
% 状态方程:x(k+1)=0.5*x(k)+2.5*x(k)/(1+x(k)^2)+8*cos(1.2*(k+1))+w(k)
% 观测方程:z(k+1)=x(k+1)^2/20+v(k+1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function IEKF_for_One_Div_Unline_System
% 初始化
T=100;
Q=10;
R=1;
w=sqrt(Q)*randn(1,T);
v=sqrt(R)*randn(1,T);
% 状态方程
x=zeros(1,T);
y=zeros(1,T);
x(1)=0.1;
y(1)=x(1)^2/20+v(1);
for k=2:T
x(k)=0.5*x(k-1)+2.5*x(k-1)/(1+x(k-1)^2)+8*cos(1.2*k)+w(k-1);% 真实状态值
y(k)=x(k)^2/20+v(k);% 真实观测值
end
% EKF滤波算法
Xekf=zeros(1,T);% 后验估计值
P0=eye(1);
Xekf(1)=x(1);
for k=2:T
Xn=0.5*Xekf(k-1)+2.5*Xekf(k-1)/(1+Xekf(k-1)^2)+8*cos(1.2*k);% 状态预测
Zn=Xn^2/20;% 观测预测
F=0.5+2.5*(1-Xn^2)/(1+Xn^2)^2;% 状态转移矩阵
H=Xn/10;% 观测矩阵
P=F*P0*F'+Q;% 预测协方差矩阵
K=P*H'*inv(H*P*H'+R);% 卡尔曼增益
Xekf(k)=Xn+K*(y(k)-Zn);% 状态更新 Xn:先验估计值
P0=(eye(1)-K*H)*P;% 协方差更新
end
% disp(Xekf);
% IEKF滤波算法
XIekf=zeros(1,T);
PI0=eye(1);
XIekf(1)=x(1);
imax=100;% 最大迭代次数
for k=2:T
% 预测阶段
XIn=0.5*XIekf(k-1)+2.5*XIekf(k-1)/(1+XIekf(k-1)^2)+8*cos(1.2*k);% 状态预测
FI=0.5+2.5*(1-XIn^2)/(1+XIn^2)^2;% 状态转移矩阵
PI=FI*PI0*FI'+Q;% 预测协方差矩阵
% 更新阶段
XI=XIn;
for i=0:imax
HI=XI/10;% 雅可比矩阵
ZIn=XI^2/20;% 观测预测
KI=PI*HI'*inv(HI*PI*HI'+R);% 卡尔曼增益
XI=XIn+KI*(y(k)-ZIn-HI*(XIn-XI));% 状态更新
end
% 保存最后一次迭代数据
XIekf(k)=XI;
PI0=(eye(1)-KI*HI)*PI;% 协方差更新
end
% disp(XIekf);
% 求均方根误差
RMSE_ekf = sqrt((Xekf - x).^2);
RMSE_Iekf = sqrt((XIekf - x).^2);
% 画图
figure(1)
plot(x,'r','linewidth',1);
hold on
plot(Xekf,'b','linewidth',1);
hold on
plot(XIekf,'k','linewidth',1);
xlabel('时间/s','FontSize',10);
ylabel('状态值x','FontSize',10);
title('滤波结果','FontSize',16);
legend('真值','EKF滤波值','IEKF滤波值');
figure(2)
plot(RMSE_ekf,'b','linewidth',1);
hold on
plot(RMSE_Iekf,'k','linewidth',1);
xlabel('时间/s','FontSize',10);
ylabel('误差','FontSize',10);
title('误差对比图','FontSize',16);
legend('EKF与真值误差','IEKF与真值误差');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用! 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时私信沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于matlab实现迭代扩展卡尔曼滤波器与扩展卡尔曼滤波器比较源码+详细注释.zip 基于matlab实现迭代扩展卡尔曼滤波器与扩展卡尔曼滤波器比较源码+详细注释.zip 基于matlab实现迭代扩展卡尔曼滤波器与扩展卡尔曼滤波器比较源码+详细注释.zip 基于matlab实现迭代扩展卡尔曼滤波器与扩展卡尔曼滤波器比较源码+详细注释.zip 基于matlab实现迭代扩展卡尔曼滤波器与扩展卡尔曼滤波器比较源码+详细注释.zip 基于matlab实现迭代扩展卡尔曼滤波器与扩展卡尔曼滤波器比较源码+详细注释.zip 基于matlab实现迭代扩展卡尔曼滤波器与扩展卡尔曼滤波器比较源码+详细注释.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于matlab实现迭代扩展卡尔曼滤波器与扩展卡尔曼滤波器比较源码+详细注释.zip (7个子文件)
说明.md 164B
结果图
IEKF滤波结果.png 48KB
EKF与IEKF误差对比图.png 47KB
EKF滤波结果.png 47KB
真值与滤波结果图.png 59KB
IEKF_for_One_Div_Unline_System.m 2KB
EKF_for_One_Div_Unline_System.m 1KB
共 7 条
- 1
资源评论
北航程序员小C
- 粉丝: 2222
- 资源: 1823
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功