我正在编写一个粒子滤波器定位算法,作为定位飞越山脉的飞机的练习的一部分。
据我了解,这方面的步骤是: - 做一堆随机猜测 - 过滤掉不太可能的猜测(使用高斯假设检验和一些有关问题的已知信息) - 根据平面在该步骤中的移动量移动过滤点 - 重新采样,按移位点加权
我遇到的问题是重采样位 - 如何在MATLAB中执行加权重采样?
请告诉我是否有任何我应该澄清的事情!谢谢!
答案 0 :(得分:1)
首先,你应该研究SIR(顺序重要性采样重新采样)粒子滤波器[PF](或顺序蒙特卡罗方法是它所知的另一个名称)。 我推荐Arnaud Doucet& Neil Gordon在实践中称之为#34;顺序蒙特卡罗方法"。它实际上包含了粒子滤波器的最新技术,并包含了PF各种风格实现的描述。
SIR-PF具有以下步骤:
Neff = 1/sum(w1**2, w2**2, ...., wN**2)
。如果Neff< 0.85 * N然后重新取样。重新采样:计算(标准化的)权重向量的CDF,即P = cumsum(W)并从均匀分布(r)生成随机样本,选择P(w)> P的第一个粒子。 = r,重复此操作,直到你有了N个CDF的实现,这将更频繁地从具有较高权重的粒子中采样,而不是那些不具有较高权重的粒子,从而有效地缩小粒子群。然后,您创建一组均匀加权的新权重,即wN = 1 / N
function [weights,X_update] = Standardised_Resample(P,X)
Neff = 1/(sum(P.^2)); % Test effective particle size
P = P./sum(P) % Ensure particle weights are normalised
if Neff < 0.85*size(P,1)
N = size(P,1)
X_update(N,1) = 0
L = cumsum(P)
for i = 1:N
X_update(i) = X(find(rand <= L,1))
end
weights = ones(obj.N,1)*1./obj.N;
else
weights = P;
X_update = X;
end
end
估算:XEst = W(t + 1)* x(t + 1):=加权乘积产生时间t + 1的状态估计
冲洗并重复时间t + 2等。
注意:x(0/0)是随机分布为~N(x(0),Q(0))的N个样本的总体,其中x(0)是初始条件的估计[IC]和Q(0/0)是IC猜测的方差(不确定性)的估计
答案 1 :(得分:0)
不知道更多具体细节。我认为randsample
是一个很好的起点。