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

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

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

学习文章

相关推荐
如何原谅奋力过但无声14 小时前
【灵神高频面试题合集09-13】二叉树、二叉搜索树
数据结构·算法·leetcode
皆圥忈15 小时前
磁盘物理结构与文件系统基础讲解
linux·算法
数据仓库搬砖人15 小时前
用 LangGraph 从零搭一个客服 Agent:多轮对话 + 工具调用全流程
算法
GuWenyue15 小时前
告别JS类型坑!Ts为什么在ai时代逐渐成为"第一"语言
前端·算法·typescript
子琦啊15 小时前
哈希与前缀和
算法·哈希算法
Deep-w15 小时前
【MATLAB】基于离散 LQR 的车辆横向轨迹跟踪控制方法研究
开发语言·算法·matlab
Peter·Pan爱编程15 小时前
23. 算法库:用算法代替手写循环
c++·人工智能·算法
小欣加油16 小时前
leetcode2161 根据给定数字划分数组
数据结构·c++·算法·leetcode·职场和发展
Momo__zz16 小时前
零代码平台设计
算法·深度优先
cpp_250116 小时前
P2947 [USACO09MAR] Look Up S
数据结构·c++·算法·题解·单调栈·洛谷