扩展卡尔曼滤波算法的matlab程序
clear all
v=150; %%目标速度
v_sensor=0;%%传感器速度
t=1; %%扫描周期
xradarpositon=0; %%传感器坐标
yradarpositon=0; %%
ppred=zeros(4,4);
Pzz=zeros(2,2);
Pxx=zeros(4,2);
xpred=zeros(4,1);
ypred=zeros(2,1);
sumx=0;
sumy=0;
sumxukf=0;
sumyukf=0;
sumxekf=0;
sumyekf=0; %%%统计的初值
L=4;
alpha=1;
kalpha=0;
belta=2;
ramda=3-L;
azimutherror=0.015; %%方位均方误差
rangeerror=100; %%距离均方误差
processnoise=1; %%过程噪声均方差
tao=[t^3/3 t^2/2 0 0;
t^2/2 t 0 0;
0 0 t^3/3 t^2/2;
0 0 t^2/2 t]; %% the input matrix of process
G=[t^2/2 0
t 0
0 t^2/2
0 t ];
a=35*pi/180;
a_v=5/100;
a_sensor=45*pi/180;
x(1)=8000; %%初始位置
y(1)=12000;
for i=1:200
x(i+1)=x(i)+v*cos(a)*t;
y(i+1)=y(i)+v*sin(a)*t;
end
for i=1:200
xradarpositon=0;
yradarpositon=0;
Zmeasure(1,i)=atan((y(i)-yradarpositon)/(x(i)-xradarpositon))+random('Normal',0,azimutherror,1,1); Zmeasure(2,i)=sqrt((y(i)-yradarpositon)^2+(x(i)-xradarpositon)^2)+random('Normal',0,rangeerror,1,1);
xx(i)=Zmeasure(2,i)*cos(Zmeasure(1,i));%%观测值
yy(i)=Zmeasure(2,i)*sin(Zmeasure(1,i));
measureerror=[azimutherror^2 0;0 rangeerror^2];
processerror=tao*processnoise;
vNoise = size(processerror,1);
wNoise = size(measureerror,1);
A=[1 t 0 0;
0 1 0 0;
0 0 1 t;
0 0 0 1];
Anoise=size(A,1);
for j=1:2*L+1
Wm(j)=1/(2*(L+ramda));
Wc(j)=1/(2*(L+ramda));
end
Wm(1)=ramda/(L+ramda);
Wc(1)=ramda/(L+ramda);%+1-alpha^2+belta; %%%权值
if i==1
xerror=rangeerror^2*cos(Zmeasure(1,i))^2+Zmeasure(2,i)^2*azimutherror^2*sin(Zmeasure(1,i))^2; yerror=rangeerror^2*sin(Zmeasure(1,i))^2+Zmeasure(2,i)^2*azimutherror^2*cos(Zmeasure(1,i))^2; xyerror=(rangeerror^2-Zmeasure(2,i)^2*azimutherror^2)*sin(Zmeasure(1,i))*cos(Zmeasure(1,i)); P=[xerror xerror/t xyerror xyerror/t;
xerror/t 2*xerror/(t^2) xyerror/t 2*xyerror/(t^2);
xyerror xyerror/t yerror yerror/t;
xyerror/t 2*xyerror/(t^2) yerror/t 2*yerror/(t^2)];
xestimate=[Zmeasure(2,i)*cos(Zmeasure(1,i)) 0 Zmeasure(2,i)*sin(Zmeasure(1,i)) 0 ]';
end
cho=(chol(P*(L+ramda)))';%
for j=1:L
xgamaP1(:,j)=xestimate+cho(:,j);
xgamaP2(:,j)=xestimate-cho(:,j);
end
Xsigma=[xestimate xgamaP1 xgamaP2];
F=A;
Xsigmapre=F*Xsigma;
xpred=zeros(Anoise,1);
for j=1:2*L+1
xpred=xpred+Wm(j)*Xsigmapre(:,j);
end
Noise1=Anoise;
ppred=zeros(Noise1,Noise1);
for j=1:2*L+1
ppred=ppred+Wc(j)*(Xsigmapre(:,j)-xpred)*(Xsigmapre(:,j)-xpred)';
end
ppred=ppred+processerror;
chor=(chol((L+ramda)*ppred))';
for j=1:L
XaugsigmaP1(:,j)=xpred+chor(:,j);
XaugsigmaP2(:,j)=xpred-chor(:,j);
end
Xaugsigma=[xpred XaugsigmaP1 XaugsigmaP2 ];
for j=1:2*L+1
Ysigmapre(1,j)=atan(Xaugsigma(3,j)/Xaugsigma(1,j)) ;
Ysigmapre(2,j)=sqrt((Xaugsigma(1,j))^2+(Xaugsigma(3,j))^2);
end
ypred=zeros(2,1);
for j=1:2*L+1
ypred=ypred+Wm(j)*Ysigmapre(:,j);
end
Pzz=zeros(2,2);
for j=1:2*L+1
Pzz=Pzz+Wc(j)*(Ysigmapre(:,j)-ypred)*(Ysigmapre(:,j)-ypred)';
end
Pzz=Pzz+measureerror;
Pxy=zeros(Anoise,2);
for j=1:2*L+1
Pxy=Pxy+Wc(j)*(Xaugsigma(:,j)-xpred)*(Ysigmapre(:,j)-ypred)';
end
K=Pxy*inv(Pzz);
xestimate=xpred+K*(Zmeasure(:,i)-ypred);
P=ppred-K*Pzz*K';
xukf(i)=xestimate(1,1);
yukf(i)=xestimate(3,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% EKF PRO%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if i==1
ekf_p=[xerror xerror/t xyerror xyerror/t;
xerror/t 2*xerror/(t^2) xyerror/t 2*xyerror/(t^2);
xyerror xyerror/t yerror yerror/t;
xyerror/t 2*xyerror/(t^2) yerror/t 2*yerror/(t^2)];
ekf_xestimate=[Zmeasure(2,i)*cos(Zmeasure(1,i)) 0 Zmeasure(2,i)*sin(Zmeasure(1,i)) 0 ]';
ekf_xpred=ekf_xestimate;
end;
F=A;
ekf_xpred=F*ekf_xestimate;
ekf_ppred=F*ekf_p*F'+processerror;
H=[-ekf_xpred(3)/(ekf_xpred(3)^2+ekf_xpred(1)^2) 0 ekf_xpred(1)/(ekf_xpred(3)^2+ekf_xpred(1)^2) 0;
ekf_xpred(1)/sqrt(ekf_xpred(3)^2+ekf_xpred(1)^2)
ekf_xpred(3)/sqrt(ekf_xpred(3)^2+ekf_xpred(1)^2) 0];
ekf_z(1,1)=atan(ekf_xpred(3)/ekf_xpred(1)) ;
ekf_z(2,1)=sqrt((ekf_xpred(1))^2+(ekf_xpred(3))^2);
PHHP=H*ekf_ppred*H'+measureerror;
ekf_K=ekf_ppred*H'*inv(PHHP);
ekf_p=(eye(L)-ekf_K*H)*ekf_ppred;
ekf_xestimate=ekf_xpred+ekf_K*(Zmeasure(:,i)-ekf_z);
traceekf(i)=trace(ekf_p);
xekf(i)=ekf_xestimate(1,1);
yekf(i)=ekf_xestimate(3,1);
errorx(i)=xx(i)+xradarpositon-x(i); 0
errory(i)=yy(i)+yradarpositon-y(i);
ukferrorx(i)=xestimate(1)+xradarpositon-x(i);
ukferrory(i)=xestimate(3)+yradarpositon-y(i);
ekferrorx(i)=ekf_xestimate(1)+xradarpositon-x(i); ekferrory(i)=ekf_xestimate(3)+yradarpositon-y(i);
aa(i)=xx(i)+xradarpositon-x(i);;
bb(i)=yy(i)+yradarpositon-y(i);
sumx=sumx+(errorx(i)^2);
sumy=sumy+(errory(i)^2);
sumxukf=sumxukf+(ukferrorx(i)^2);
sumyukf=sumyukf+(ukferrory(i)^2);
sumxekf=sumxekf+(ekferrorx(i)^2);
sumyekf=sumyekf+(ekferrory(i)^2);
mseerrorx(i)=sqrt(sumx/(i-1));%噪声的统计均方误差 mseerrory(i)=sqrt(sumy/(i-1));
mseerrorxukf(i)=sqrt(sumxukf/(i-1));%UKF的统计均方误差 mseerroryukf(i)=sqrt(sumyukf/(i-1));
mseerrorxekf(i)=sqrt(sumxekf/(i-1));%EKF的统计均方误差 mseerroryekf(i)=sqrt(sumyekf/(i-1));
end
figure(1);
plot(mseerrorxukf,'r');
hold on;
plot(mseerrorxekf,'g');
hold on;
plot(mseerrorx,'.');
hold on;
ylabel('MSE of X axis','fontsize',15);
xlabel('sample number','fontsize',15);
legend('UKF','EKF','measurement error');
figure(2)
plot(mseerroryukf,'r');
hold on;
plot(mseerroryekf,'g');
hold on;
plot(mseerrory,'.');
hold on;
ylabel('MSE of Y axis','fontsize',15); xlabel('sample number','fontsize',15); legend('UKF','EKF','measurement error');
figure(3)
plot(x,y);
hold on;
plot(xekf,yekf,'g');
hold on;
plot(xukf,yukf,'r');
hold on;
plot(xx,yy,'m');
ylabel(' X ','fontsize',15);
xlabel('Y','fontsize',15);
legend('TRUE','UKF','EKF','measurements');
相关文章
- 基于扩展卡尔曼滤波的车辆质量与道路坡度估计
- 自适应滤波器的MATLAB实现
- 片机的电磁阀信号数字滤波算法实现
- 卡尔曼滤波的原理说明(通俗易懂)
- 非平稳时间序列的建模研究
- matlab实现线性卷积和循环卷积
- 无限冲激响应FIR在TMS320C64上实现
- 雷达电子战仿真系统设计
- 基于MATLAB的减少图像噪声
2014年11月 doi:10.6041/j.issn.1000-1298.2014.11.002 农业机械学报 第45卷第11期 基于扩展卡尔曼滤波的车辆质量与道路坡度估计 雷雨龙 付 尧 刘 科 曾华兵 张元侠 (吉林大学汽车动态仿真与 ...
自适应滤波器的MATLAB实现 2009级 1引言 滤波是信号与信息处理领域的一种最基本而又重要的技术.在信号的传输过程中,通常会受到噪声或干扰的污染,而滤波器就是用来从含有噪声或干扰信号的数据中提取人们感兴趣的.接近规定质量的信息.滤波器 ...
电子测量技术 ELECTRoNlC 第31卷第10期2008年10月 MEASUREM[ENTTECHNOLoGY 基于JN5121单片机的电磁阀信号数字滤波算法实现 张志利 郭进军 西安710025) (第二炮兵工程学院兵器发射理论与技术 ...
卡尔曼滤波的原理说明 在学习卡尔曼滤波器之前,首先看看为什么叫"卡尔曼".跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡尔曼全名Rudolf Emil ...
非 平 稳 时 间 序 列 的 建 模 方 法 研 究 林 卉 武 汉 理 工 大 学 (申请理学硕士学位论文) 非平稳时间序列的建模方法研究 培养单位 :理学院 学科专业 :应用数学 研 究 生 :林 卉 指导教师 :童恒庆 教授 200 ...
编号: 数字信号处理 实训 (论文) 说明书 题 目: 用matlab 实现两信号的卷积 院 (系): 应用科技学院 专 业: 电子信息工程 学生姓名: 蒋耀华 学 号: 0801130215 指导教师: 严素清 童有为 纪元法 2011 ...
DSP 芯片及应用课程设计 设计题目:无限冲激响应FIR 在TMS320C64上实现 姓名:吴康鑫 学号:学院:信息工程 指导教师:饶志华 时间日期:2012.4.29 摘要 随着计算机和信息技术的飞速发展,数字信号处理已经成为高速实时处理 ...
第8卷第4期 2010年8月 信息与电子工程 V01.8.No.4Aug.,2010 INFORMATIONANDELECTRONICENGINEERING 文章编号:1672-2892(2010)04-0393-05 雷达电子战仿真系统设 ...
目录 第一章 概述„„„„„„„„„„„„„„„„„„„„ 第2页 第二章 典型噪声介绍„„„„„„„„„„„„„„„„ 第3页 第三章 基于MATLAB 的模拟噪声生成 „„„„„„„„„ 第5页 第四章 均值滤波处理方法„„„„„„„„ ...