Partcle Filter(粒子滤波器,时域)
PF可以看作是UKF的进化版。UKF要求用服从高斯分布的一组点经过转换之后去通过采样来得到新的高斯分布进而近似真实的状态分布;而PF则是不再追求用高斯分布去近似真实分布,直接用一组点经过模型转换后再采样,用此后验数据来近似任意分布。它们的区别在于UKF是通过一组假设在通过系统的转换后仍然服从高斯分布的采样点来求其参数μ和σ,是一种参数估计方法;PF是用已知的采样点数据去求未知的任意分布,或者从另一个角度来说,就是干脆不给出后验分布函数(不用分布来描述,就是一堆离散化的点),直接根据粒子的权重进行融合得到状态的一种可能假设。根据大数定律(又是它!),想要通过采样近似一个分布,样本越多则结果越接近真实分布,因此PF在“撒豆子”时会使用比UKF多得多的样本点,所以它本质上是一种非参数化的蒙特卡洛方法。
UKF(上)和PF(下)最直观的区别:UKF用根据一组点的权重进行极大似然估计,重建高斯分布;PF直接给采样点分配权重,即图中竖线的密度,之后越密集的点附近被重新采样到的概率会越大
? 在PF的初始化过程中生成的这些样本点经过观测矩阵、状态转移矩阵变换后,输出一组经过非线性变换得到的“畸形”的分布点。现在,我们要对这些“畸形”的分布点进行重新采样以估计系统的状态,不过,我们不再像EKF、UKF一样去用这些采样得到的点来还原分布了,我们直接把这些采样得到的点作为后验信息(通过对这些点进行加权,得到关于系统的状态信息,这时候不再讨论“分布”,上面提到用后验数据来近似任意分布,既然是任意的分布,那么也不存在一个既定的模型需要通过这些点来计算其参数即进行参数估计,这些点的信息本身就代表着一种分布)。
那么应该如何赋予权重并重新采样?这一步就对应着KF中的观测,我们会根据观测得到的数据为上面的粒子赋予权重(通过观测来得到各个粒子所处对应状态的概率),接着把那些概率小的粒子排除出去(这些概率小的粒子附近位置被重新采样的概率更小),在权重高的粒子附近根据权重重新采样。这样就完成了PF的一次迭代更新,pipeline自然就重新回到第一步。如此往复循环,滤波器输出就能收敛到最“贴近”实际状态的分布了。
这里有一个关于粒子滤波器的简短视频,能够帮助你从直观上理解PF:Uppsala University:Particle Filter Course。上面的介绍都是倾向于通过直观的解释帮助你理解,如果需要采用严谨的数学推导从概率统计、贝叶斯估计的视角入手,也请参阅相关的教材。笔者还没有见到从控制和观测器的角度解释这样的非线性滤波器(主要是笔者的对这方面的知之甚少),若你知道一些相关的材料,请联系我!