粒子滤波(Particle Filter)是一种基于蒙特卡洛采样和贝叶斯估计的非线性滤波算法,主要用于解决非线性、非高斯系统中的状态估计问题。它通过 "粒子"(对系统状态的随机样本)来近似系统状态的后验概率分布,从而实现对未知状态的递归估计。
核心背景:为什么需要粒子滤波?
传统滤波算法(如卡尔曼滤波)仅适用于线性高斯系统 (状态方程和观测方程均为线性,噪声服从高斯分布)。但实际场景中,多数系统是非线性(如机器人运动、目标跟踪中的复杂运动模型)或非高斯(如观测噪声为脉冲噪声)的,此时卡尔曼滤波会产生较大误差。粒子滤波的优势在于:无需对系统进行线性化或假设噪声服从高斯分布,可处理任意非线性、非高斯系统。
基本原理:用 "粒子" 近似概率分布
粒子滤波的核心思想是:用一系列带权重的粒子(样本)来近似系统状态的后验概率分布。
- 每个 "粒子" 可理解为对系统真实状态的一个 "猜测"(如目标的位置、速度);
- 粒子的 "权重" 表示该猜测的可信度(权重越高,越可能接近真实状态)。
通过不断更新粒子的状态和权重,并筛选高可信度的粒子,最终使粒子集合的分布逼近真实状态的后验分布。其理论基础是贝叶斯滤波框架 和蒙特卡洛采样:当粒子数量足够多时,粒子分布会收敛到真实的后验分布。
核心步骤(递归过程)
粒子滤波通过 "预测 - 更新 - 重采样" 的循环递归估计状态,具体步骤如下:
1. 初始化(Initialization)
在初始时刻(如\(t=0\)),从系统状态的先验分布\(p(x_0)\)中随机采样N个粒子,形成初始粒子集\(\{x_0^i, w_0^i\}_{i=1}^N\),其中\(x_0^i\)是第i个粒子的初始状态,\(w_0^i\)是其初始权重(通常均匀初始化,即\(w_0^i=1/N\))。
2. 预测(Prediction)
根据系统的状态转移模型,对每个粒子的状态进行预测(传播)。假设系统的状态转移方程为: \(x_t = f(x_{t-1}, u_t, v_t)\) 其中\(x_t\)是t时刻的状态,f是非线性转移函数,\(u_t\)是控制输入,\(v_t\)是过程噪声(可非高斯)。
对每个粒子\(x_{t-1}^i\),根据转移模型生成预测状态: \(x_t^i \sim p(x_t | x_{t-1}^i, u_t)\)
3. 更新(Update,计算权重)
根据t时刻的观测值\(z_t\),计算每个预测粒子\(x_t^i\)的权重,衡量其与观测的匹配程度。观测模型通常为: \(z_t = h(x_t, n_t)\) 其中h是非线性观测函数,\(n_t\)是观测噪声(可非高斯)。
权重计算公式为(基于贝叶斯公式的似然度): \(w_t^i \propto w_{t-1}^i \cdot p(z_t | x_t^i)\) 其中\(p(z_t | x_t^i)\)是观测似然(表示在粒子\(x_t^i\)下观测到\(z_t\)的概率),权重需归一化(即\(\sum_{i=1}^N w_t^i = 1\))。
4. 重采样(Resampling)
目的:解决 "粒子退化" 问题 ------ 随着迭代,多数粒子的权重会趋近于 0,仅有少数粒子有意义,导致估计精度下降。
操作:根据权重大小筛选粒子,保留高权重粒子(复制),丢弃低权重粒子,生成新的粒子集\(\{x_t^i, \tilde{w}t^i\}{i=1}^N\),其中新权重\(\tilde{w}_t^i = 1/N\)(重新均匀化)。
常用重采样方法:系统重采样、分层重采样(比简单随机重采样更高效,减少粒子多样性损失)。
5. 状态估计
最终,t时刻的状态估计值可由粒子的加权平均(或加权中位数)得到: \(\hat{x}t = \sum{i=1}^N w_t^i x_t^i\)
关键问题与改进
- 粒子退化:可通过增加粒子数量缓解,但会提高计算量;或引入 "重要性采样" 的改进(如辅助粒子滤波),优先对高潜力粒子进行采样。
- 样本枯竭:重采样可能导致粒子多样性不足(大量重复高权重粒子),可通过 "抖动"(对重采样后的粒子添加微小噪声)或自适应重采样(仅当有效粒子数低于阈值时才重采样)缓解。
优缺点
- 优点:适用于任意非线性、非高斯系统;实现灵活,对模型假设要求低。
- 缺点:计算量随粒子数增加而显著增大(实时性受限);粒子退化和样本枯竭问题;对初始粒子分布敏感。
典型应用
- 目标跟踪(视觉跟踪、雷达 / 红外目标跟踪);
- 机器人定位与导航(SLAM 中的状态估计);
- 无线传感器网络(节点定位);
- 金融时间序列预测、信号处理等。
总之,粒子滤波通过 "随机采样 + 权重更新 + 筛选" 的方式,为复杂系统的状态估计提供了一种通用且强大的解决方案,尤其在传统滤波算法失效的场景中表现突出。