✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
传统粒子滤波算法中在重要性采样部分存在采样粒子位置不精确的问题,可用粒子群优化算法优化,.仿真结果表明,经过北方苍鹰和粒子群算法可有效提高粒子滤波算法的准确性,使跟踪误差减小.
function main
rand('seed',3);
randn('seed',6);
T=50;
R=1e-5;
P=1;%观测误差
Q=0.01;%预测误差
X=zeros(1,T);
Z=zeros(1,T);
X(1)=1;
Z(1)=1;
%基本粒子滤波设置
N=50;
Xpf=zeros(1,T);
Xpfset=ones(T,N);
Tpf=zeros(1,T);
%
% %PSOPF
Xpsopf=zeros(1,T);
Xpsopfset=ones(T,N);
Tpsopf=zeros(1,T);
%NGOPF
Xngopf=zeros(1,T);
Xngopfset=ones(T,N);
Tngopf=zeros(1,T);
%模拟运行
for t=2:T
X(t)=feval('ffun',X(t-1),t,Q);
Z(t)=feval('hfun',X(t),P);
% %PF
tic
[Xpf(t),Xpfset(t,:)]=pf(Xpfset(t-1,:),Z(t),N,t,R,P,Q);
Tpf(t)=toc;
% %PSOPF
tic
[Xpsopf(t),Xpsopfset(t,:)]=pso_pf(Xpsopfset(t-1,:),Z(t),N,t,R,P,Q);
Tpsopf(t)=toc;
%NGOPF
tic
[Xngopf(t),Xngopfset(t,:)]=ngo_pf(Xngopfset(t-1,:),Z(t),N,t,R,P,Q);
%[Xngopf(t),Xngopfset(t,:)]=ngo_pf1(Xngopfset(t-1,:),Z(t),N,t,R,P,Q);
Tngopf(t)=toc;
end;
ErrorPf=abs(Xpf-X);
ErrorPsoPf=abs(Xpsopf-X);
ErrorNgoPf=abs(Xngopf-X);
%picture
figure
hold on;
box on;
p1=plot(1:T,X,'-k.','LineWidth',1);
p2=plot(1:T,Xpf,'-ro','LineWidth',1);
p3=plot(1:T,Xpsopf,'-bx','LineWidth',1);
p4=plot(1:T,Xngopf,'-gd','LineWidth',1);
legend([p1,p2,p3,p4],'真实状态','PF估计','PSO估计','NGO估计')
xlabel('Time','fontsize',10)
title('Filter estmates (posterior means) vs. ture state','fontsize',10)
%偏差比较
figure
hold on;
box on;
p1=plot(1:T,ErrorPf,'-ro','LineWidth',1);
p2=plot(1:T,ErrorPsoPf,'-bx','LineWidth',1);
p3=plot(1:T,ErrorNgoPf,'-gd','LineWidth',1);
legend([p1,p2,p3],'PF偏差','PSO偏差','NGO偏差')
%算法Time比较图
figure
hold on;
box on;
p1=plot(1:T,Tpf,'-ro','LineWidth',1);
p2=plot(1:T,Tpsopf,'-bx','LineWidth',1);
p3=plot(1:T,Tngopf,'-gd','LineWidth',1);
legend([p1,p2,p3],'PF时间','PSOPF时间','NGOPF时间')
[1]王俊鹏, 侯小毛. 基于优化粒子滤波器的体育视频目标跟踪算法设计(英文)[J]. 机床与液压, 2018.
[2]周奇. 基于改进粒子滤波的人脸跟踪算法的研究[D]. 重庆大学, 2011.
❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料