2013年4月30日 星期二

Kalman Filter 簡介

一開始先講,這裡的filter是什麼呢
假設從初始時間開始,系統就紀錄了某一系統狀態的值
而這個值受到雜訊的影響, 所以你不能直接拿來用

利用從第一筆資料到目前的資料,來估算之前某一時刻的狀態值, 這種演算法稱為smoothing
利用從第一筆資料到目前的資料,來估算目前的狀態值, 這種演算法稱為filtering
利用從第一筆資料到目前的資料,來估算未來某一時刻的狀態值, 這種演算法稱為prediction

Kalman filter只是在做上述的filtering動作,這方法源自於Kalman在1960年代發表的論文,連結如下
http://www.cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf 


Kalman filter概念

為了簡單快速了解,這裡舉了一個簡單的例子來說明Kalman filter的概念

假設我們要研究一個房間的溫度,根據經驗判斷,這個房間是恆溫的。
但事實上,房間不是恆溫的,你的經驗估出來的溫度,可能會有幾度的誤差,這些誤差就是所謂的 white Gaussian noise,和時間無關地的雜訊。

此外,我們也在房間內放了一支溫度計,但溫度計也不是準確的,測量值和實際值也存在著誤差( white Gaussian noise )。

接下來,Kalman filter要做的事,就是根據你的經驗法則和溫度計量到的溫度,來估算房間實際的溫度。
這邊要注意的是,這個估算出來的實際溫度也會有誤差,但隨著時間往後,每次算出來的實際溫度的誤差也會越來越小!

計算過程:
經驗法則預測的誤差 和 溫度計的誤差為已知的系統參數

Step 1 , state and covariance prediction
假設我們要估算時間K的實際溫度,首先我們根據K-1時刻的溫度,來預測K時刻的溫度。
假設K-1時刻時,房間溫度是23度,我們預測K時刻房間溫度也是23度K時刻預測的誤差為5度

這邊的5度是如何得知的呢?如果K-1時刻實際溫度的誤差是3,經驗法則預估的誤差為4,那麼將他們平方相加在開根號,就是K時刻預測的誤差。

然後再去看我們溫度計量出來的結果,假設為25度,同時該溫度計的誤差是4度。

Step 2 , Kalman gain correction and state correction
我們預測房間溫度是23度,測量到的溫度是25度,那麼實際溫度到底是多少呢?
該相信哪邊多一點呢? 這邊就要看Kalman gain了。
Kalman gain的計算要用到前面的兩個誤差  
Kg^2 = 5^2 /  (5^2 + 4^2) = 0.78

Kalman gain的值,我們可以推算出K時刻的實際溫度是
預測值 + Kalman gain * (量測值 - 預測值)
23 + 0.78* (25 -23) = 24.56
這邊可以看出,因為溫度計的誤差較K時刻預測的誤差小(比較相信溫度計),所以實際溫度偏向溫度計的值

Step 3 , covariance correction
但是這個實際溫度還是有誤差,可由以下式子算出K時刻實際溫度的誤差
((1-Kg)*5^2)^0.5=2.35 
這裡的5是K時刻預測的誤差,算出來的2.35對應到前面的3 (K-1時刻的實際溫度誤差)
接下來我們就可以進入K+1時刻了!

根據以上規則,Kalman filter一直迭代下去,
我們可以發現實際溫度的誤差(covariance)會慢慢的變小,我們得到的實際溫度也會越來越準確!


看完以上部分,是否對Kalman filter有簡單的認識呢?
關於Kalman filter演算法嚴謹的數學描述,有時間我會在本篇文章繼續更新!


參考資料:
http://bilgin.esme.org/BitsBytes/KalmanFilterforDummies.aspx
http://allenluadvance.blogspot.tw/2009/09/kalman-filter.html
http://tw.knowledge.yahoo.com/question/question?qid=1009071507134
http://www.cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf 






沒有留言:

張貼留言