粒子滤波|粒子滤波算法介绍

粒子滤波(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 中的状态估计);
  • 无线传感器网络(节点定位);
  • 金融时间序列预测、信号处理等。

总之,粒子滤波通过 "随机采样 + 权重更新 + 筛选" 的方式,为复杂系统的状态估计提供了一种通用且强大的解决方案,尤其在传统滤波算法失效的场景中表现突出。

学习文章

相关推荐
董董灿是个攻城狮11 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
AI软著研究员18 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish19 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱20 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者2 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考2 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx2 天前
CART决策树基本原理
算法·机器学习
Wect2 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript