线性动态系统(LDS)的粒子滤波(Particle Filter)算法原理与状态估计过程
1. 题目描述
粒子滤波(Particle Filter, PF),也称序贯重要性采样(Sequential Importance Sampling),是一种用于解决非线性、非高斯状态空间模型中状态估计问题的蒙特卡洛方法。它通过一组带有权重的随机样本(称为“粒子”)来近似表示系统的状态后验概率分布,并随着新观测数据的到来,递归地对粒子进行预测、更新、重采样,从而实现对系统隐藏状态的实时跟踪与估计。我们需要理解其如何解决卡尔曼滤波不适用的非线性/非高斯场景。
2. 核心模型:状态空间模型
粒子滤波基于以下状态空间模型:
- 状态方程(过程模型):\(x_t = f(x_{t-1}, u_t, w_t)\)。其中,\(x_t\) 是t时刻的隐藏状态,\(f\) 是(可能非线性的)状态转移函数,\(u_t\) 是控制输入,\(w_t\) 是过程噪声(分布可能非高斯)。
- 观测方程:\(z_t = h(x_t, v_t)\)。其中,\(z_t\) 是t时刻的观测值,\(h\) 是(可能非线性的)观测函数,\(v_t\) 是观测噪声(分布可能非高斯)。
目标:给定到t时刻为止的所有观测 \(z_{1:t}\),估计状态 \(x_t\) 的后验概率分布 \(p(x_t | z_{1:t})\)。
3. 核心思想:序列重要性采样与贝叶斯递推
粒子滤波的核心是利用一组带权重的粒子 \(\{ x_t^{(i)}, w_t^{(i)} \}_{i=1}^{N}\) 来近似后验分布:
\[p(x_t | z_{1:t}) \approx \sum_{i=1}^{N} w_t^{(i)} \delta(x_t - x_t^{(i)}) \]
其中 \(\delta(\cdot)\) 是狄拉克函数。递推过程遵循贝叶斯规则:
\[p(x_t | z_{1:t}) \propto p(z_t | x_t) \cdot \int p(x_t | x_{t-1}) \cdot p(x_{t-1} | z_{1:t-1}) dx_{t-1} \]
粒子滤波通过重要性采样来递归实现这个积分。
4. 算法步骤详解
步骤1:初始化(t=0)
从先验分布 \(p(x_0)\) 中随机抽取N个粒子 \(\{ x_0^{(i)} \}_{i=1}^{N}\),并为每个粒子赋予相等的初始权重 \(w_0^{(i)} = 1/N\)。这组粒子近似表示了初始状态分布。
步骤2:对于每个时刻 t = 1, 2, ... 进行递归迭代
2.1 预测步(采样)
对于上一时刻(t-1)的每个粒子 \(x_{t-1}^{(i)}\),通过状态方程进行传播(采样),生成t时刻的预测粒子(或称“建议粒子”):
\[\tilde{x}_t^{(i)} \sim q(x_t | x_{t-1}^{(i)}, z_t) \]
这里 \(q(\cdot)\) 称为重要性密度函数。最简单也是最常用的选择是先验密度,即 \(q = p(x_t | x_{t-1}^{(i)})\)。此时,直接从状态转移概率中采样:
\[\tilde{x}_t^{(i)} \sim p(x_t | x_{t-1}^{(i)}) \]
这相当于将每个旧粒子 \(x_{t-1}^{(i)}\) 通过过程模型向前随机推进一步,得到新的可能状态。
2.2 更新步(计算重要性权重)
当获得新的观测 \(z_t\) 后,我们需要根据观测来评估每个预测粒子 \(\tilde{x}_t^{(i)}\) 的“好坏”。这是通过更新粒子的重要性权重来实现的。
重要性权重的递推公式为:
\[w_t^{(i)} \propto w_{t-1}^{(i)} \cdot \frac{p(z_t | \tilde{x}_t^{(i)}) p(\tilde{x}_t^{(i)} | x_{t-1}^{(i)})}{q(\tilde{x}_t^{(i)} | x_{t-1}^{(i)}, z_t)} \]
- 如果选择先验密度作为重要性密度(\(q = p(x_t | x_{t-1}^{(i)})\)),则权重更新简化为:
\[w_t^{(i)} \propto w_{t-1}^{(i)} \cdot p(z_t | \tilde{x}_t^{(i)}) \]
- \(p(z_t | \tilde{x}_t^{(i)})\) 是观测似然,衡量了在粒子状态 \(\tilde{x}_t^{(i)}\) 下,实际观测 \(z_t\) 出现的可能性。似然值越高,权重越大。
计算未归一化的权重后,进行归一化:
\[\tilde{w}_t^{(i)} = \frac{w_t^{(i)}}{\sum_{j=1}^{N} w_t^{(j)}} \]
归一化权重 \(\tilde{w}_t^{(i)}\) 反映了每个粒子在表征当前后验分布中的相对重要性。
2.3 状态估计输出
当前时刻的状态估计(如最小均方误差估计)可以近似为粒子的加权和:
\[\hat{x}_t = E[x_t | z_{1:t}] \approx \sum_{i=1}^{N} \tilde{w}_t^{(i)} \tilde{x}_t^{(i)} \]
后验分布则由带权重的粒子集合 \(\{ \tilde{x}_t^{(i)}, \tilde{w}_t^{(i)} \}\) 近似。
2.4 重采样(Resampling)
这是粒子滤波避免粒子退化的关键步骤。经过几轮迭代后,大部分粒子权重会变得非常小(趋近于0),只有少数粒子有显著权重,导致计算资源浪费在无效粒子上。
重采样的目的:根据粒子的权重,有放回地从当前粒子集合中抽取N次,生成一个新的、等权重的粒子集合 \(\{ x_t^{(j)}, 1/N \}_{j=1}^{N}\)。权重大的粒子更可能被多次选中,权重小的粒子很可能被淘汰。
重采样过程(以系统重采样为例):
- 计算归一化权重的累积分布函数(CDF)。
- 生成N个在[0,1]区间均匀分布的随机数 \(\{ u_j \}\)。
- 对于每个 \(u_j\),找到满足CDF值大于 \(u_j\) 的最小索引对应的粒子,将其复制到新集合中。
重采样后,粒子集合重新变为等权重 \(1/N\),并作为下一时刻迭代的初始粒子集 \(\{ x_t^{(i)} \}\)。然后令 \(t = t+1\),回到步骤2.1。
5. 算法总结与关键点
- 核心优势:适用于任意非线性、非高斯的状态空间模型,通用性强。
- 关键挑战:
- 粒子退化:重采样是标准解决方案,但引入了新问题——粒子贫化(样本多样性丧失,大量粒子重复)。
- 重要性密度选择:先验密度易于实现,但未考虑最新观测,效率较低。最优重要性密度是后验密度本身,但通常难以采样。工程中常通过扩展卡尔曼滤波或无迹卡尔曼滤波生成重要性密度(如无迹粒子滤波UPF),以接近最优。
- 计算本质:用离散的、带权重的随机样本(粒子)来“模拟”连续的概率分布,并通过蒙特卡洛方法计算期望。
6. 与卡尔曼滤波的对比
卡尔曼滤波是粒子滤波在线性高斯模型下的最优解析解。当模型为线性、噪声为高斯时,后验分布也是高斯分布,可以用均值和协方差精确描述。粒子滤波则通过大量粒子来近似任意分布,在非线性/非高斯情况下更强大,但计算成本远高于卡尔曼滤波。