MATLAB_对卡尔曼滤波的仿真实现_第1页
MATLAB_对卡尔曼滤波的仿真实现_第2页
MATLAB_对卡尔曼滤波的仿真实现_第3页
MATLAB_对卡尔曼滤波的仿真实现_第4页
MATLAB_对卡尔曼滤波的仿真实现_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机实习报告 MATLAB 对卡尔曼滤波的仿真实现MATLAB 对卡尔曼滤波的仿真实现实验目的基于卡尔曼滤波原理,利用matlab针对以下模型编制代码进行仿真1:仿真100次,每次50步。从100次仿真中任选一次,将其对应的状态真值和滤波结果曲线绘制在同一副图上,绘制时选用不同的线型,颜色并进行标注。2:用均方根误差评价算法的精度,均方根误差定义为M为仿真次数,k为离散时间点的索引值,为第j次仿真时第K拍的真值。请绘制出RMSE(k)随k变化的曲线。程序设计程序代码如下:A=zeros(50,100);B=zeros(50,100);C=zeros(50,100);x=0;for i=1:1

2、:100 for k=1:1:50 x=0.5*x+25*x/(1+x2)+8*cos(1.2*(i-1)+randn; A(k,i)=x; endendxk=0;P=1;for i=1:1:100 for k=1:1:50xkk=0.5*xk+25*x/(1+xk2)+8*cos(1.2*(k-1);F=1/2+25/(1+xk2)-50*xk2/(1+xk2)2;P=1+F*P*F; H=xk/10; S=H*P*H+10; K=P*H/S; xk=xkk+K*(xk2/20+sqrt(10)*randn-xkk2/20-sqrt(10)*randn); Pk=P-K*S*K; B(k,i

3、)=xk;C(k,i)=Pk; endendD=A-B;Q=zeros(50,1);for k=1:1:50 E=D(k,:); sum=0; for j=1:1:100 sum=sum+E(j)2; end RMSE=sqrt(sum/100); Q(k)=RMSE;endm=round(rand*100);subplot(1,2,1);plot(A(:,m),'rx-');hold on plot(B(:,m),'b*:');legend('真值','滤波');title('第一次仿真');subplot(1,

4、2,2); plot(Q);title('RMSE随k变化曲线');输出结果截屏显示为:程序运行中观测截屏程序运行中经过卡尔曼递推后估计值截屏程序运行中经过卡尔曼滤波后观测值与递推估计值比较截屏实验总结1. 实验中遇到的问题(1).最初编写代码时将整个过程分为三步,第一步,对模型进行仿真,第二步,编写代码进行卡尔曼递推,第三步,对卡尔曼滤波后观测值与递推估计值比较。前两步由于未将变量和矩阵统一,导致第三步是变量混乱,导致工作量变大,并且经常出错。(2).由于matlab编程实践经验不足和对卡尔曼滤波原理不了解,在编程过程中遇到了很多问题,比如不清楚公式中变量的含义,不能掌握题目的要求,在第三步进行比较是不理解其含义等。 (3).实验结果有缺陷,但是没有科学有效的方法进行检查2. 实验心得 这是在学习matlab课程后第一次着手解决一个实际问题,在这次实习过程中,我发现自己虽然学习过课程但并没有深刻理解这个软件语言的使用方法,所以在遇到问题时不能及时反映出解决办法,需要与同学讨论才能找到思路,并且由于编程经验不足,在编程过程中也犯了很多低级错误,比如在分步编写代码是没有统一变量导致后期花了很多时间在改变变量名称上,而且极易出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论