粒子滤波程序一看就懂

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clear all;

M=10000;%粒子数

P0=5; %初始状态协方差

Q=10; %过程噪声方差

R=1; %量测方差阵

tf=150; %终止时间

pdf_v=inline('1/(2*pi*1)^(1/2)*exp(-(x.^2)/(2*1))');

f=inline('x./2+25*x./(1+x.^2)+8*cos(1.2*t)','x','t');%状态转移方程

h=inline('(x.^2)/20'); %量测方程

x(1)=sqrtm(P0)*randn(1); %初始状态值

y(1)=feval(h,x(1))+sqrtm(R)*randn(1);

for t=2:tf %系统仿真

x(t)=feval(f,x(t-1),t-1)+sqrtm(Q)*randn(1);

y(t)=feval(h,x(t))+sqrtm(R)*randn(1);

end

xTrue=x;

xhat=PF(f,h,pdf_v,Q,P0,M,y);%状态值、量测值、高斯分布、过程噪声方差、初始方差阵、粒子数、包含噪声的量测值

plot(1:tf,xhat,'b--',1:tf,xTrue,'r');

xlabel('时间');

legend('状态估计值','状态真实值');

title('粒子滤波仿真实验');

grid on;

rms=sum((xTrue-xhat).^2);

rms=sqrt(rms/tf);

function xhat=PF(f,h,pdf_v,Q,P0,M,y)

n=size(P0,2);

x=sqrtm(P0)*randn(n,M);%初始化粒子

tf=size(y,2);

for t=1:tf

e=repmat(y(t),1,M)-h(x); %计算权重

w=feval(pdf_v,e); %似然函数

w=w/sum(w);

xhat(t)=sum(repmat(w,n,1).*x,2);%归一化权值 ind=resampling(w); %重采样

x=x(:,ind); %新粒子

x=feval(f,x,t)+sqrtm(Q)*randn(n,M);%时间更新end

function [i]=resampling(w)

wc=cumsum(w);M=length(w);

u=([0:M-1]+rand(1))/M;

i=zeros(1,M);k=1;

for j=1:M

while(wc(k)

k=k+1;

end

i(j)=k;

end

相关文档
最新文档