求粒子滤波遗传重采样算法matlab代码?真不会了
% 重取样,再抽样的概率正比于权重
for i = 1 : N
u = rand; % 0和1之间的均匀随机数
qtempsum = 0;
for j = 1 : N
qtempsum = qtempsum + q(j);%100个粒子的权重和
if qtempsum >= u
%重采样对低权重进行剔除,保留高权重,只要大于u的
x_P(i) = xpartminus(j);%第四步 根据重采样得到的索引去挑选对应的粒子,重构的集合就是滤波后的状态集合
%对状态集合x_P求平均值,就是最终的目标状态,xpartminus预测值
break;
end
end
end
function w_new=resample_particles1(w)
w_new=w;
Neff=1/sum(w.*w);
N=length(w);
if Neff<75 %75为预先设定阈值
for i = 1 : N
u = rand;
qtempsum = 0;
for j = 1 : N
qtempsum = qtempsum + w(j);
if qtempsum >= u
w_new(i)=w(j);
break;
end
end
end
end
重采样过程中一般选取一些准则来判断有效粒子的个数