前言:
博主在自主學習粒子濾波的過程中,看了很多文獻或博客,不知道是看文獻時粗心大意還是悟性太低,看著那么多公式,總是無法把握住粒子濾波的思路,也無法將理論和實踐對應起來。比如:理論推導過程中那么多概率公式,概率怎么和系統的狀態變量對應上了?狀態粒子
文章架構:
由最基礎的貝葉斯估計開始介紹,再引出蒙特卡羅采樣,重要性采樣,SIS粒子濾波,重采樣,基本粒子濾波Generic Particle Filter,SIR粒子濾波,這些概念的引進,都是為了解決上一個概念中出現的問題而環環相扣的。最后給出幾個在matlab和python中的應用,例程包括圖像跟蹤,濾波,機器人定位。
再往下看之前,也可以看看《卡爾曼濾波:從推導到應用》,好對這種通過狀態方程來濾波的思路有所了解。
一、貝葉斯濾波
假設有一個系統,我們知道它的狀態方程,和測量方程如下:
其中x為系統狀態,y為測量到的數據,f,h是狀態轉移函數和測量函數,v,n為過程噪聲和測量噪聲,噪聲都是獨立同分布的。上面對應的那個例子將會出現在程序中。
從貝葉斯理論的觀點來看,狀態估計問題(目標跟蹤、信號濾波)就是根據之前一系列的已有數據
預測過程是利用系統模型(狀態方程1)預測狀態的先驗概率密度,也就是通過已有的先驗知識對未來的狀態進行猜測,即p( x(k)|x(k-1) )。更新過程則利用最新的測量值對先驗概率密度進行修正,得到后驗概率密度,也就是對之前的猜測進行修正。
在處理這些問題時,一般都先假設系統的狀態轉移服從一階馬爾科夫模型,即當前時刻的狀態x(k)只與上一個時刻的狀態x(k-1)有關。這是很自然的一種假設,就像小時候玩飛行棋,下一時刻的飛機跳到的位置只由當前時刻的位置和骰子決定。同時,假設k時刻測量到的數據y(k)只與當前的狀態x(k)有關,如上面的狀態方程2。
為了進行遞推,不妨假設已知k-1時刻的概率密度函數
預測:由上一時刻的概率密度
計算推導如下:
等式的第一行到第二行純粹是貝葉斯公式的應用。第二行得到第三行是由于一階馬爾科夫過程的假設,狀態x(k)只由x(k-1)決定。
樓主看到這里的時候想到兩個問題:
第一:既然
這兩個概率公式含義是不一樣的,前一個是純粹根據模型進行預測,x(k)實實在在的由x(k-1)決定,后一個是既然測到的數據和狀態是有關系的,現在已經有了很多測量數據 y 了,那么我可以根據已有的經驗對你進行預測,只是猜測x(k),而不能決定x(k)。
第二:上面公式的最后一行
其實
如果沒有噪聲,x(k)完全由x(k-1)計算得到,也就沒由概率分布這個概念了,由于出現了噪聲,所以x(k)不好確定,他的分布就如同圖中的陰影部分,實際上形狀和噪聲是一樣的,只是進行了一些平移。理解了這一點,對粒子濾波程序中,狀態x(k)的采樣的計算很有幫助,要采樣x(k),直接采樣一個過程噪聲,再疊加上 f(x(k-1)) 這個常數就行了。
更新:由
推導:
其中歸一化常數:
等式第一行到第二行是因為測量方程知道, y(k)只與x(k)有關,
貝葉斯濾波到這里就告一段落了。但是,請注意上面的推導過程中需要用到積分,這對于一般的非線性,非高斯系統,很難得到后驗概率的解析解。為了解決這個問題,就得引進蒙特卡洛采樣。關于它的具體推導請見 下一篇博文。
reference:
1.M. Sanjeev Arulampalam 《A Tutorial on Particle Filters for Online Nonlinear/Non-Gaussian Bayesian Tracking》
2.ZHE CHEN 《Bayesian Filtering: From Kalman Filters to Particle Filters, and Beyond》
3.Sebastian THRUN 《Probabilistic Robotics》
3.百度文庫 《粒子濾波理論》