粒子滤波是一种基于蒙特卡洛方法的贝叶斯滤波算法,主要用于解决非线性、非高斯的状态估计问题。它广泛应用于机器人定位、目标跟踪、金融建模等领域。
粒子滤波的核心思想是用一组加权的**随机样本(粒子)**来近似后验概率分布,而非采用卡尔曼滤波那样的参数化分布假设(如高斯分布)。
设系统的状态模型如下:
x k = f ( x k − 1 , u k , w k ) x_k = f(x_{k-1}, u_k, w_k) xk=f(xk−1,uk,wk)
z k = h ( x k , v k ) z_k = h(x_k, v_k) zk=h(xk,vk)
其中:
目标是估计后验分布:
p ( x k ∣ z 1 : k ) p(x_k | z_{1:k}) p(xk∣z1:k)
由于状态转移和观测过程可能是高度非线性的,并且噪声可能是非高斯的,无法用解析方法直接求解,因此粒子滤波采用蒙特卡洛方法进行近似计算。
初始化 N N N 个粒子 { x k i } i = 1 N \{x_k^i\}_{i=1}^{N} {xki}i=1N 及其权重 { w k i } i = 1 N \{w_k^i\}_{i=1}^{N} {wki}i=1N:
x 0 i ∼ p ( x 0 ) x_0^i \sim p(x_0) x0i∼p(x0)
w 0 i = 1 N w_0^i = \frac{1}{N} w0i=N1
根据状态转移模型,对每个粒子进行采样:
x k i ∼ p ( x k ∣ x k − 1 i ) x_k^i \sim p(x_k | x_{k-1}^i) xki∼p(xk∣xk−1i)
利用观测值 z k z_k zk 计算每个粒子的权重:
w k i = w k − 1 i ⋅ p ( z k ∣ x k i ) q ( x k i ∣ x k − 1 i , z k ) w_k^i = w_{k-1}^i \cdot \frac{p(z_k | x_k^i)}{q(x_k^i | x_{k-1}^i, z_k)} wki=wk−1i⋅q(xki∣xk−1i,zk)p(zk∣xki)
如果选择 q ( x k i ∣ x k − 1 i , z k ) = p ( x k ∣ x k − 1 i ) q(x_k^i | x_{k-1}^i, z_k) = p(x_k | x_{k-1}^i) q(xki∣xk−1i,zk)=p(xk∣xk−1i),则简化为:
w k i = w k − 1 i ⋅ p ( z k ∣ x k i ) w_k^i = w_{k-1}^i \cdot p(z_k | x_k^i) wki=wk−1i⋅p(zk∣xki)
归一化权重:
w k i = w k i ∑ j = 1 N w k j w_k^i = \frac{w_k^i}{\sum_{j=1}^{N} w_k^j} wki=∑j=1Nwkjwki
根据粒子的权重进行重采样,以避免退化问题。
常见方法包括:
新粒子的权重均设为:
w k i = 1 N w_k^i = \frac{1}{N} wki=N1
最终状态估计可通过加权平均计算:
x ^ k = ∑ i = 1 N w k i x k i \hat{x}_k = \sum_{i=1}^{N} w_k^i x_k^i x^k=i=1∑Nwkixki
利用观测信息优化采样,提高效率。
根据有效粒子数 N eff N_{\text{eff}} Neff 判断是否重采样:
N eff = 1 ∑ i = 1 N ( w k i ) 2 N_{\text{eff}} = \frac{1}{\sum_{i=1}^{N} (w_k^i)^2} Neff=∑i=1N(wki)21
若 N eff < N thresh N_{\text{eff}} < N_{\text{thresh}} Neff<Nthresh,则执行重采样。
粒子滤波是一种强大的贝叶斯滤波方法,适用于非线性和非高斯环境。通过合理选择粒子数、优化重要性采样和自适应重采样,可以提高算法的效率和准确性。