1. 程式人生 > 實用技巧 >濾波相關學習

濾波相關學習

文章目錄

濾波

為什麼叫做濾波?
濾波一詞來源於通訊理論,它是從含有干擾的接收訊號中提取有用訊號的一種技術。“接收訊號”相當於被觀測的隨機過程,“有用訊號”相當於被估計的隨機過程。

來自百度百科。

這個說法確實很形象,將有用的資訊從一堆混在的訊號中提取出來。

我們的現實世界確實充滿著不確定性,沒人能精準、完全的描述某種狀態。對於想讓機器智慧的完成人類的任務的設計者來說,要重視這種不確定性,正面不確定性,並且能量化不確定性,能抓住主要矛盾,從而更精確的還原環境和自身的狀態。

不確定性包含很多,如所處環境的不確定性,你不確定什麼時候會冒出一個人,不確定路上是否有坑;感測器在測量的時候,由於自己的物理極限,也同樣有侷限,如觀察不全面,觀察有誤差,比如攝像頭,觀察不了後面的,觀察的東西有畸變,觀察的解析度有限等;控制機構也存在不確定性,如磨損造成的不精密,打滑等等;還有模型的不確定性,我們用於計算的物理模型,比真實的簡陋,有些元素未被考慮,導致出現偏差。

我們要讓機器在這麼多不確定性中,可靠的完成任務,需要嚴謹的數學知識,來可靠的描述這種不確定性到底有多大,找到方法,來獲得背後隱藏的真實狀態。

在描述這些不確定性,概率、統計相關的知識就很重要了。

這下面的濾波知識,是按照《概率機器人》的順序描述的,不是完全搬運,是自己的理解的記錄。

http://www.probabilistic-robotics.org/

基本概念

狀態

狀態轉移概率

測量概率

置信度

貝葉斯濾波

是一種遞迴的濾波方法:當前時刻的狀態,由上一時刻的狀態,結合當前的控制動作,可以推算出來一個先驗的分佈(因為有不確定性,所以是一個分佈,而不是確切的某個量);而當前的測量儀器會給出當前觀測的資料,利用這個觀測的資料,來修正上面預測的分佈。如此迴圈,一直遞迴下去。
上面的兩個階段,一個叫做預測,另一個叫做測量更新。其本質上是這兩個資料的加權和得到最終的分佈。
在這裡插入圖片描述
公式上描述是:
在這裡插入圖片描述

預測的依據是什麼?
上面的p( x t x_t xt| u t u_t ut

, x t − 1 x_{t-1} xt1) 怎麼解析?為什麼要用條件概率來乘?

從最簡單的例子來看:一個機器人沿著直線行走,其狀態就是一個位置 p x p_x px,如果施加一個推力,就有90%的可能向前走1m,5%的概率,向後走1米(很詭異),5%的概率不動。如果不施加任何力量,則95%不動,5%向前0.2m,5%向後0.2m。
現在,假設機器人的位置 p x p_x px=3,這個是量出來的精確的值。此時推了它一把,現在機器人在哪裡?
很明顯,大家不會說它一定在 p x p_x px=4,而是會說,它90%的可能性是在4,還有5%的可能性在3.8m,還有5%的可能性是在3m處沒變。
這個就是p( x t x_t xt| u t u_t ut, x t − 1 x_{t-1} xt1)的具體表現,數學上是這樣:
p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)=5%
p( x t x_t xt=3.8| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)=5%
p( x t x_t xt=4| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)=90%

所以預測的依據就是我們的狀態轉移的規律,也就是p( x t x_t xt| u t u_t ut, x t − 1 x_{t-1} xt1) 這個狀態轉移概率。為何說概率,是因為不是一定確定性的轉移到某種狀態,而是有可能轉移到不同狀態,轉到不同狀態的概率不同,這個不同,就來自於我們的狀態轉移規律。
這個規律怎麼來的?這個規律就是我們的運動方程,是我們已經研究清楚的某種運動規律。後面還會有專門的介紹運動模型的內容。

我們再看看上面的公式: ∫ \int p( x t x_t xt| u t u_t ut, x t − 1 x_{t-1} xt1)d x t − 1 x_{t-1} xt1,這個意思是,將所有的 x t − 1 x_{t-1} xt1的狀態都進行轉移,然後累計。
比如,上面的 p x t − 1 px_{t-1} pxt1並不是精確的等於3,而是一個分佈,比如說:
p x t − 1 px_{t-1} pxt1有90%的概率是3,5%的概率是2,5%的概率是4,這時候,我們再來計算一下,展開那個積分號(其實不嚴謹,這個例子是離散的 ∑ \sum ,但積分號本身就是sum的首字母的變體,本質就是求和)。
p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)
=p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=3)*p( x t − 1 x_{t-1} xt1=3)
+p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=2)*p( x t − 1 x_{t-1} xt1=2)
+p( x t x_t xt=3| u t u_t ut=push, x t − 1 x_{t-1} xt1=4)*p( x t − 1 x_{t-1} xt1=4)

=5%*90% (在3m處的概率,乘上推了不動的概率)
+90%*5%
+5%*5%

=9.25%

其他的t時刻的狀態計算也如上所示。

上面舉的例子是離散的,但實際上,我們的很多狀態分佈是連續的,就以上面的例子來說,位置可以取機器人所在的一維空間的任意地點的數值,實際上也是連續的。
不管離散還是連續的,求和的本質不變,貝葉斯全概率的公式不變,基本的邏輯不變。

說完了預測,那更新又是什麼情況 ?
地一個問題就是:p( z t z_t zt| x t x_t xt)這個怎麼來的?
這個其實就是我們的觀測模型了,描述瞭如何從狀態得到觀測值的。注意,這裡同樣也是概率分佈,是因為,真實的狀態對我們是不可知的,我們所做的也只是儘量逼近真實狀態而已。所以,對於某個真實狀態,我們可能會觀測到不同的觀測值。比如,假設給了上面的機器人一個鐳射測距儀,讓它自己測量到零點的距離。本來真實距離是1m的,由於上面說的不確定性中感測器的侷限,可能會測出0.9m,0.8m,1m,1.1m,1.2m等等,所以,由真實值獲取的測量值,也是一個分佈,如:
p(z=0.9|x=1)=0.9
p(z=0.8|x=1)=0.1

p(z=1.2|x=1)=0.1

這個和時間一般沒有關係,所以去掉了t。
在量程範圍內,和具體的距離也沒有關係,分佈會呈現均值為真值,方差在一定範圍內的情況。

所以,p( z t z_t zt| x t x_t xt) 這個是我們的先驗來的,是我們預先知道的,如果用了某個廠家的裝置,一般會標註出來方差。

高斯濾波

為什麼叫做高斯濾波?
因為假設狀態分佈都是高斯分佈的,單峰值的,符合我們對世界的認知。比如,當前在哪裡,真值肯定只有一個,這個就是峰值,也是均值所在。
但是計算過程是否一定就是符合這種單峰的分佈,卻不一定。因為當你在一個完全對稱的走廊的時候,你看到一扇門,你是完全估計不出來你在哪裡的,這時候,就是大部分的概率平均分佈在有門的地方,就不止一個峰了。(少部分在沒門的地方,因為可能會看錯)。

卡爾曼濾波

卡爾曼濾波,思想跟上面的貝葉斯濾波是一樣的,用狀態轉移概率來預測,用觀測資料來更新。

擴充套件卡爾曼濾波

UKF濾波

資訊濾波

非引數濾波

直方圖濾波

粒子濾波