Particle Filter

这篇文章数学公式推得有点儿长。。。。提前预警= =

贝叶斯滤波

假设有一个系统:

  • 状态方程:$x_k=f_k(x_{k-1},v_{k-1})$,x为系统状态,v为过程噪声;
  • 测量方程:$y_k=h_k(x_k,n_k)$,y为测量数据,n为测量噪声。

从贝叶斯理论的观点来看,状态估计问题(目标跟踪、信号滤波)就是根据之前一系列的已有数据$y_{1:k}$(后验知识)??????????递推的计算出当前状态$x_k$的可信度。这个可信度就是概率公式$p(x_k|y_{1:k})$,它需要通过预测更新两个步骤来递推的计算。

  • 预测:利用系统模型预测状态的先验概率密度,即用先验知识对未来的状态进行猜测,$p(x_k|x_{k-1})$;
  • 更新:利用最新的测量值对先验概率密度进行修正,得到后验概率密度,也就是对之前的猜测进行修正。

在处理这些问题时,一般都先假设系统的状态转移服从一阶马尔科夫模型,即当前时刻的状态$x_k$只与上一个时刻的状态$x_{k-1}$有关。

为了进行递推,不妨假设已知k-1时刻的概率密度函数$p(x_{k-1}|y_{1:k-1})$

预测

由上一时刻的概率密度$p(x_{k-1}|y_{1:k-1})$得到$p(x_{k}|y_{1:k-1})$,即用前面1:k-1时刻的测量数据,预测状态$x_k$出现的概率。
推导:

如果没有噪声,$x_k$完全由$x_{k-1}$计算得到,也就没由概率分布这个概念了,由于出现了噪声,所以$x(k)$不好确定,因此才产生了概率。

更新

上一步还只是预测,这里又多了k时刻的测量,对上面的预测再进行修正,就是滤波了。这里的后验概率也将是代入到下次的预测,形成递推。
推导:

其中归一化常数

同理,观测数据也是常数,不确定性和概率产生于观测噪声。

蒙特卡洛采样

上面的推导过程中需要用到积分,这对于一般的非线性,非高斯系统,很难得到后验概率的解析解。为了解决这个问题,就得引进蒙特卡洛采样。

假设我们能从一个目标概率分布p(x)中采样到一系列的样本(粒子)$x_1,\dots,x_N$,(至于怎么生成服从$p(x)$分布的样本,这个问题先放一放),那么就能利用这些样本去估计这个分布的某些函数的期望值。

上面的式子其实都是计算期望的问题,只是被积分的函数不同。蒙特卡洛采样的思想就是用平均值来代替积分,求期望:

假设可以从后验概率中采样到N个样本,那么后验概率的计算可表示为:

用这些采样的粒子的状态值直接平均就得到了期望值,也就是滤波后的值,这里的$f(x)$就是每个粒子的状态函数。这就是粒子滤波了。

重要性采样

思路看似简单,但是要命的是后验概率不知道,所以这样直接去应用是行不通的,这时候得引入重要性采样这个方法来解决这个问题。

无法从目标分布中采样,就从一个已知的可以采样的分布里去采样如 $q(x|y)$,这样上面的求期望问题就变成了:

到这里已经解决了不能从后验概率直接采样的问题,但是上面这种每个粒子的权重都直接计算的方法效率低,因为每增加一个采样,$p(x_k|y_{1:k})$都得重新计算,并且还不好计算这个式子。所以最佳的形式是能够以递推的方式去计算权重,避开计算$p(x_k|y_{1:k})$,这就是所谓的序贯重要性采样(SIS),粒子滤波的原型。

下面开始权重w递推形式的推导:假设重要性概率密度函数$q(x_{0:k}|y_{1:k})$,这里$x$的下标是0:k,也就是说粒子滤波是估计过去所有时刻的状态的后验。假设它可以分解为:

后验概率密度函数的递归形式可以表示为:

上面这个式子和上一节贝叶斯滤波中后验概率的推导是一样的,只是之前的$x_k$变成了这里的$x_{0:k}$,就是这个不同,导致贝叶斯估计里需要积分,而这里后验概率的分解形式却不用积分。

粒子权值的递归形式可以表示为:

参考

Particle Filter Tutorial 粒子滤波:从推导到应用(一 二 三 四)
粒子滤波器 - 维基百科
粒子滤波理论 - 百度文库
怎样从实际场景上理解粒子滤波(Particle Filter)?- zhihu
机器人定位问题:https://www.cnblogs.com/21207-iHome/p/5237701.html