粒子滤波(PF)算法

粒子滤波(PF)算法

1. 动机:当卡尔曼类方法不再够用

三维定位中,前面讨论的 LS/WLS/NLS/WNLS 本质上都是批量式估计:把当前时刻所有测距值堆在一起,解一次坐标。但真实系统往往是序贯的——目标在运动,每一时刻都有新的观测到达,而且运动模型和观测模型都可能带有非高斯噪声。

卡尔曼滤波(KF)在线性高斯条件下是最优的,但它要求模型线性、噪声高斯。扩展卡尔曼滤波(EKF)通过一阶泰勒展开处理非线性,代价是线性化误差,并且仍然假设后验分布是高斯的。无迹卡尔曼滤波(UKF)用 sigma 点避免了雅可比矩阵,精度更高,但仍然以高斯分布作为后验的近似形式。

粒子滤波走的是另一条路:不对后验分布的形状做任何高斯假设,而是用一组带权重的随机样本(粒子)直接“画出”后验分布。当粒子数足够大时,这组粒子可以逼近任意形状的后验——多峰、偏斜、重尾,都不需要额外的解析形式。

代价也很明确:计算量随粒子数线性增长,在高维状态空间中尤其昂贵。PF 的精度优势是用算力换来的。


2. 概率框架:递归贝叶斯估计

PF 求解的是递归贝叶斯估计中的积分问题。状态空间模型为:

其中 $\mathbf{w}_k$ 和 $\mathbf{v}_k$ 分别是过程噪声和观测噪声,不要求服从高斯分布。

递归贝叶斯估计分为两步:

预测:

更新:

理论上,只要知道后验 $p(\mathbf{x}k \mid \mathbf{y}{1:k})$,就可以计算最小均方误差估计:

问题在于:这个积分在高维、非线性、非高斯情况下通常没有解析解。PF 的出发点就是用蒙特卡罗采样代替积分。


3. 核心机制一:重要性采样

如果能够直接从后验 $p(\mathbf{x})$ 中采样,那么期望可以用样本均值近似。但后验通常无法直接采样。重要性采样引入一个容易采样的提议分布 $q(\mathbf{x})$,从 $q$ 中采样,再用权重修正偏差。

从未归一化权重:

归一化后:

目标分布的粒子近似为:

任意函数的期望可以用加权和估计:

关键点:粒子本身只是“位置”,权重才是“可信度”。后验的形状由粒子位置和权重的联合分布共同刻画,而不是由粒子的核密度单独决定。


4. 核心机制二:序贯重要性采样(SIS)与重采样

4.1 SIS 的权重递推

将重要性采样序贯化,提议分布取为:

权重递推为:

最常用的选择是自举滤波(Bootstrap Filter) :令提议分布等于状态转移先验,

此时权重递推简化为:

也就是说,新权重大小只取决于新观测对粒子的“支持程度”。粒子越能解释当前观测,权重越大。

4.2 粒子退化:SIS 的致命缺陷

如果不做任何处理,SIS 运行若干步后会出现权重退化:绝大多数粒子的权重趋近于零,只有极少数粒子承载几乎全部权重。此时大量计算被浪费在几乎无贡献的粒子上,有效粒子数急剧下降。

衡量退化程度的指标是有效样本数(Effective Sample Size, ESS) :

通常设定阈值 $N{\text{th}}$(常用 $2N/3$),当 $N{\text{eff}} < N_{\text{th}}$ 时触发重采样。

4.3 重采样:把计算资源集中到“有希望”的粒子上

重采样的操作是:从当前带权粒子集中,按权重比例有放回地重新抽取 $N$ 个粒子,并将所有权重重置为 $1/N$。权重大的粒子被复制多次,权重小的粒子被淘汰。

重采样解决了权重退化,但引入了新的问题:粒子贫化(sample impoverishment) 。因为高权重粒子被重复复制,粒子集中出现大量完全相同的样本,多样性下降。如果过程噪声很小,粒子集可能在几步之内塌缩到少数几个点上。

退化与贫化是一对矛盾:不重采样,权重退化;重采样,多样性丧失。PF 的绝大多数改进工作,本质上都是在“抑制退化”和“保持多样性”之间寻找更好的平衡。


5. 经典重采样方法

四种基本重采样算法在文献中被反复比较:

方法 核心思想 特点
多项式重采样 独立地从权重分布中抽取 $N$ 次 最简单,方差最大
分层重采样 将 $[0,1]$ 分成 $N$ 个等长区间,每个区间内独立抽一个点 方差低于多项式,实现稍复杂
系统重采样 只抽一个均匀随机数,然后等间隔取 $N$ 个点 实现最简单,方差低,工程中最常用
残差重采样 先按整数部分确定性复制,残差部分再随机采样 确定性成分最高,方差最小,但多样性损失也最严重

仿真比较的一般结论是:系统重采样和分层重采样的运行时间接近,且优于多项式与残差重采样;设定重采样阈值可以显著减小整体跟踪误差。在工程实现中,系统重采样通常是默认选择,因为它在“低方差”和“实现简单”之间取得了很好的平衡。


6. 标准粒子滤波算法(SIR)

综合 SIS 与重采样,得到最常用的序贯重要性重采样(Sequential Importance Resampling, SIR) 算法。单步流程如下:

输入:上一时刻粒子集 ${\mathbf{x}{k-1}^{(i)}, \omega{k-1}^{(i)}}_{i=1}^{N}$,当前观测 $\mathbf{y}_k$。

Step 1 预测(采样)
对每个粒子,从状态转移先验中采样:

Step 2 更新权重
计算未归一化权重:

归一化:

Step 3 计算 ESS 并判断是否重采样

若 $N{\text{eff}} < N{\text{th}}$,执行重采样,得到等权粒子集 ${\mathbf{x}_k^{(i)}, 1/N}$;否则保留原权重。

Step 4 状态估计

这一套流程的直观含义是:用运动模型把粒子“推”到新位置,用观测告诉每个粒子“你有多可信”,然后根据可信度决定是否把资源重新集中到有希望的粒子上,最后用加权平均给出估计。


7. 退化与贫化的改进方向

标准 SIR 的两个核心缺陷——权重退化和粒子贫化——催生了 PF 的主要改进路线。

7.1 改进重要性密度:不只用先验,而是用观测“引导”采样

Bootstrap Filter 用先验作为提议分布,采样时完全没有利用当前观测 $\mathbf{y}_k$。如果观测信息很强,先验采样出的粒子可能大量落在似然很低的区域,导致权重退化加剧。

改进思路是构造一个更接近后验的提议分布,让采样阶段就“朝着观测支持的方向走”。代表性方法包括:

  • EKPF(Extended Kalman Particle Filter) :用 EKF 产生每个粒子的重要性密度,把当前观测纳入采样过程;
  • UPF(Unscented Particle Filter) :用 UKF 产生重要性密度,避免 EKF 的线性化误差,在强非线性场景下通常优于 EKPF;
  • 基于 UKF 与优化组合策略的改进 PF:UKF 负责重要性密度,优化组合重采样负责保持多样性,同时针对退化和贫化两个问题。

这类方法的核心收益是用额外的计算换取更低的权值方差,但代价是每个粒子都需要跑一次 EKF/UKF 预测-更新,总计算量显著高于 Bootstrap Filter。

7.2 改进重采样:在“复制高权重”和“保持多样性”之间折中

  • 自适应重采样:只在 ESS 低于阈值时重采样,避免每一步都强行重采样导致不必要的多样性损失;
  • 优化组合重采样 / 动态分层权重优化:对不同权重区间的粒子采用差异化的处理策略,避免高权重粒子被过度复制、低权重粒子被一刀切淘汰;
  • 正则化重采样:在重采样后的粒子上施加小扰动(如核密度平滑),把复制的粒子重新“打散”;
  • 基于 MCMC 的移动步骤:重采样后对粒子做若干步 MCMC 转移,在不改变目标分布的前提下恢复多样性。

7.3 一个需要澄清的常见误解

“增加粒子数”经常被当作解决 PF 问题的万能药。它确实可以推迟退化与贫化的发生,但不能从根本上消除它们;而且粒子数增加会线性推高计算成本,在实时三维定位中往往不可接受。真正有效的改进必须作用在重要性密度或重采样机制上,而不是单纯堆粒子。


8. PF 与 EKF、UKF 的定位

三者的核心区别在于对后验分布的表示方式:

方法 后验表示 非线性处理 噪声假设 计算成本 典型适用场景
EKF 高斯(均值 + 协方差) 一阶泰勒线性化 高斯 低 弱非线性、实时性优先
UKF 高斯(sigma 点传播) 无迹变换,无需求雅可比 高斯 低–中 中度非线性、高斯噪声
PF 任意分布(粒子集) 无需线性化或高斯近似 非高斯也可 高(随粒子数线性增长) 强非线性、非高斯、多峰后验

关键结论可以概括为:

  • PF 的精度优势是有条件的:在强非线性或非高斯噪声下,PF 的估计精度可以显著优于 EKF/UKF;但在近似线性高斯的场景中,PF 未必比 UKF 更好,却要付出高得多的计算代价。
  • 高维状态空间是 PF 的软肋:粒子数需要随状态维数增长而大幅增加,否则粒子集无法有效覆盖后验。三维定位中如果状态只包含位置(3 维)或位置+速度(6 维),PF 仍然可行;但若状态维数继续升高,计算效率会迅速成为瓶颈。
  • 实时性要求高的场景,EKF/UKF 往往仍是首选;PF 更适合离线分析、精度优先、或后验明显非高斯的场合。

9. 在三维定位中的角色

在三维定位与跟踪中,PF 的位置可以这样理解:

  • 静态定位(单帧解算) :PF 不是首选。LS/WLS/NLS 的一次性求解更直接、更快。PF 的价值只有在引入时间维度的运动模型之后才会充分体现。
  • 动态跟踪:目标在运动,状态为位置(以及可选的速度、加速度),观测为距离、TDOA、AOA 等。PF 可以处理非高斯测距噪声(如 NLOS 引起的偏斜分布)、多峰后验(目标可能在多个候选位置之间不确定),以及机动运动模型(转弯、加速)带来的非线性。
  • 三维水下/室内等复杂环境:已有工作将 PF 用于三维水下目标跟踪,并针对粒子退化引入 UKF 构造重要性密度、针对粒子贫化设计动态自适应分层重采样;仿真中改进 PF 相比标准 PF 的均方根误差显著降低。这类场景的共同特点是观测非线性强、噪声非高斯、异常值频繁,恰好落在 PF 的设计优势区间内。

工程选型的核心判断:

  1. 如果只需要单帧坐标,且误差近似零均值,不要用 PF,LS/WLS/NLS 的性价比高得多;
  2. 如果目标在运动,观测噪声明显非高斯(NLOS、多径、异常值),且算力允许,PF 是比 EKF/UKF 更自然的选择;
  3. 如果选择 PF,优先考虑 UPF 或带自适应重采样的 SIR,而不是裸的 Bootstrap Filter;裸 SIR 在观测信息较强时退化会非常快;
  4. 如果实时性紧张,先用 EKF/UKF 跑一个基线,再评估 PF 带来的精度增益是否值得额外的计算开销。

10. 总结

粒子滤波的核心思想可以用一句话概括:用带权重的粒子集代替解析分布,用采样代替积分,用重采样对抗权重退化。

它的能力边界同样清晰:

  • 强项:任意形状的后验、非高斯噪声、强非线性、多峰不确定性;
  • 代价:计算量随粒子数和状态维数增长,重采样引入的粒子贫化需要额外机制补偿,参数(粒子数、重采样阈值、提议分布)对性能影响显著。

从方法演进的角度看,PF 不是对 EKF/UKF 的“全面替代”,而是在高斯假设不再成立、线性化误差不可忽略时的一条必要备选路径。在三维定位项目中,它最适合承担的角色是动态、非高斯、精度优先的跟踪后端,而不是静态单帧解算的主力。


粒子滤波(PF)算法
https://mingsm17518.github.io/2026/10/27/秋招学习清单/三维定位算法/02_粒子滤波(PF)算法/
作者
Ming
发布于
2026年10月27日
更新于
2026年10月27日
许可协议