關於卡爾曼濾波和粒子濾波最直白的解釋(轉)


       卡爾曼濾波本來是控制系統課上學的,當時就沒學明白,也蒙混過關了,以為以后也不用再見到它了,可惜沒這么容易,后來學計算機視覺和圖像處理,發現用它的地方更多了,沒辦法的時候只好耐心學習和理解了。一直很想把學習的過程記錄一下,讓大家少走彎路,可惜總也沒時間和機會,直到今天。。。

        我一直有一個願望,就是把抽象的理論具體化,用最直白的方式告訴大家--不提一個生澀的詞,不寫一個數學公式,像講故事一樣先把道理說明白,需要知道細節的同學可以自己去查所有需要知道的一切。因為學習的過程告訴我,最難的其實是最初和這個理論和應用背景親和的過程--這些理論它究竟是做什么的,又是怎么做到的。可惜我們能看到的關於這些理論的資料大多數都是公式的堆砌並且假定我們明白許多“基本的道理”,其實這些“基本的道理”往往是我們最難想象和超越的。以卡爾曼濾波為例,讓我們嘗試一種不同的學習方法。

       相信所有學習卡爾曼濾波的同學首先接觸的都是狀態方程和觀測方程,學過控制系統的同學可能不陌生,否則,先被那兩個看起來好深奧的公式給嚇跑了,關鍵是還不知道他們究竟是干什么的,什么是狀態,什么是觀測。。。。。。如果再看到后面的一大串遞歸推導增益,實在很暈很暈,更糟糕的是還沒整明白的時候就已經知道卡爾曼濾波其實已經不夠使了,需要extended kalmanfilter 和particle filter了。。。

      其實我們完全不用理會這些公式。先來看看究竟卡爾曼濾波是做什么的,理解了卡爾曼濾波,下面的就順其自然了。

      用一句最簡單的話來說,卡爾曼濾波是來幫助我們做測量的,大家一定不明白測量干嘛搞那么復雜?測量長度拿個尺子比一下,測量溫度拿溫度表測一下不就完了嘛。的確如此,如果你要測量的東西很容易測准確,沒有什么隨機干擾,那真的不需要勞駕卡爾曼先生。但在有的時候,我們的測量因為隨機干擾,無法准確得到,卡爾曼先生就給我們想了個辦法,讓我們在干擾為高斯分布的情況下,得到的測量均方誤差最小,也就是測量值擾動最小,看起來最平滑。

    還是舉例子最容易明白。我最近養了只小兔子,忍不住拿小兔子做個例子嘻嘻。

     每天給兔子拔草,看她香甜地吃啊吃地,就忍不住關心一下她的體重增長情況。那么我們就以小兔子的體重作為研究對象吧。假定我每周做一次觀察,我有兩個辦法可以知道兔子的體重,一個是拿體重計來稱:或許你有辦法一下子就稱准兔子的體重(獸醫通常都有這辦法),但現在為了體現卡爾曼先生理論的魅力,我們假定你的稱實在很糟糕,誤差很大,或者兔子太調皮,不能老實呆着,彈簧秤因為小兔子的晃動會產生很大誤差。盡管有誤差,那也是一個不可失去的渠道來得到兔子的體重。還有一個途徑是根據書本上的資料,和兔子的年齡,我可以估計一下我的小兔子應該會多重,我們把用稱稱出來的叫觀察量,用資料估計出來的叫估計值,無論是觀察值還是估計值顯然都是有誤差的,假定誤差是高斯分布。現在問題就來了,按照書本上說我的兔子該3公斤重,稱出來卻只有2.5公斤,我究竟該信哪個呢?如果稱足夠准,兔子足夠乖,卡爾曼先生就沒有用武之地了呵呵,再強調一下是我們的現狀是兔兔不夠乖,稱還很爛呵呵。在這樣惡劣的情景下,卡爾曼先生告訴我們一個辦法,仍然可以估計出八九不離十的兔兔體重,這個辦法其實也很直白,就是加權平均,把稱稱出來的結果也就是觀測值和按照書本經驗估算出來的結果也就是估計值分別加一個權值,再做平均。當然這兩個權值加起來是等於一的。也就是說如果你有0.7分相信稱出來的體重,那么就只有0.3分相信書上的估計。說到這里大家一定更着急了,究竟該有幾分相信書上的,有幾分相信我自己稱的呢?都怪我的稱不爭氣,沒法讓我百分一百信賴它,還要根據書上的數據來做調整。好在卡爾曼先生也體會到了我們的苦惱,告訴我們一個辦法來決定這個權值,這個辦法其實也很直白,就是根據以往的表現來做決定,這其實聽起來挺公平的,你以前表現好,我就相信你多一點,權值也就給的高一點,以前表現不好,我就相信你少一點,權值自然給的低一點。那么什么是表現好表現不好呢,表現好意思就是測量結果穩定,方差很小,表現不好就是估計值或觀測值不穩定,方差很大。想象你用稱稱你的哦兔子,第一次1公斤第二次10公斤,第三次5公斤,你會相信你的稱嗎,但是如果第一次3公斤第二次3.2公斤,第三次2.8公斤,自然我就相信它多一點,給它一個大的權值了。

      有了這個權值,下面的事情就很好辦了。很顯然卡爾曼先生是利用多次觀察和估計來達到目的的,我們也只能一步一步地調整我們的觀察和估計值,來漸漸達到准確的測量,所以整個算法是遞歸的,需要多次重復調整的。調整的過程也很簡單,就是把實測值(稱出來的體重)和估計值(書上得來的體重)比較一下,如果估計值比測量值小,那就把估計值加上他們之間的偏差作為新的估計值,當然前面要加個系數,就是我們前面說的加權系數,這個地方我要寫個公式,因為很簡單就能說明白

       比如我們的觀查值是Z,估計值是X, 那么新的估計值就應該是 Xnew  =  X  + K ( Z-X),從這個公式可以看到,如果X估計小了,那么新的估計值會加上一個量K ( Z-X), 如果估計值大了,大過Z了,那么新的估計值就會減去一個量K ( Z-X),這就保證新的估計值一定比現在的准確,一次一次遞歸下去就會越來越准卻了,當然這里面很有作用的也是這個K,也就是我們前面說的權值,書上都把他叫卡爾曼增益。。。(Xnew  =  X  + K ( Z-X) = X ×(1-K) + KZ ,也就是說估計值X的權值是1-k,而觀察值Z的權值是k,究竟k 取多大,全看估計值和觀察值以前的表現,也就是他們的方差情況了)

      發現把一個問題講明白還真不是件容易的事情,誰聽明白了我佩服誰,因為我已經把自己講糊塗了哈

     順便就把extended kalman filter和particle filter提一下,因為高斯模型有時不適用,於是有了extended kalman filter,而particle filter是用於多個對象的,比如除了兔子我還有只貓,他們的體重有一個聯合概率模型,每一個對象就是一個particle。無論是卡爾曼濾波還是particle濾波,都是概率分布傳遞的過程,卡爾曼傳遞的是高斯分布,particle filter 傳遞的是高斯混合分布,每一個峰代表一個動物在我們的例子。

轉自:http://blog.csdn.NET/karen99/article/details/7771743


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM