kalman卡爾曼濾波

2021-05-24 10:10:34 字數 3317 閱讀 5400

卡爾曼濾波器 – kalman filter

1.    什麼是卡爾曼濾波器

(what is the kalman filter?)

簡單來說,卡爾曼濾波器是乙個「optimal recursive data processing algorithm(最優化自回歸資料處理演算法)」。對於解決很大部分的問題,他是最優,效率最高甚至是最有用的。他的廣泛應用已經超過30年,包括機械人導航,控制,感測器資料融合甚至在軍事方面的雷達系統以及飛彈追蹤等等。近年來更被應用於計算機影象處理,例如頭臉識別,影象分割,影象邊緣檢測等等。

2.卡爾曼濾波器的介紹

(introduction to the kalman filter)

為了可以更加容易的理解卡爾曼濾波器,這裡會應用形象的描述方法來講解,而不是像大多數參考書那樣羅列一大堆的數學公式和數學符號。但是,他的5條公式是其核心內容。結合現代的計算機,其實卡爾曼的程式相當的簡單,只要你理解了他的那5條公式。

在介紹他的5條公式之前,先讓我們來根據下面的例子一步一步的探索。

假設我們要研究的物件是乙個房間的溫度。根據你的經驗判斷,這個房間的溫度是恆定的,也就是下一分鐘的溫度等於現在這一分鐘的溫度(假設我們用一分鐘來做時間單位)。假設你對你的經驗不是100%的相信,可能會有上下偏差幾度。我們把這些偏差看成是高斯白雜訊(white gaussian noise),也就是這些偏差跟前後時間是沒有關係的而且符合高斯分配(gaussian distribution)。另外,我們在房間裡放乙個溫度計,但是這個溫度計也不準確的,測量值會比實際值偏差。我們也把這些偏差看成是高斯白雜訊。

好了,現在對於某一分鐘我們有兩個有關於該房間的溫度值:你根據經驗的**值(系統的**值)和溫度計的值(測量值)。下面我們要用這兩個值結合他們各自的雜訊來估算出房間的實際溫度值。

假如我們要估算k時刻的是實際溫度值。首先你要根據k-1時刻的溫度值,來**k時刻的溫度。因為你相信溫度是恆定的,所以你會得到k時刻的溫度**值是跟k-1時刻一樣的,假設是23度,同時該值的高斯雜訊的偏差是5度(5是這樣得到的:如果k-1時刻估算出的最優溫度值的偏差是3,你對自己**的不確定度是4度,他們平方相加再開方,就是5)。然後,你從溫度計那裡得到了k時刻的溫度值,假設是25度,同時該值的偏差是4度。

由於我們用於估算k時刻的實際溫度有兩個溫度值,分別是23度和25度。究竟實際溫度是多少呢?相信自己還是相信溫度計呢?究竟相信誰多一點,我們可以用他們的covariance來判斷。因為kg^2=5^2/(5^2+4^2),所以kg=0.78,我們可以估算出k時刻的實際溫度值是:23+0.78*(25-23)=24.56度。可以看出,因為溫度計的covariance比較小(比較相信溫度計),所以估算出的最優溫度值偏向溫度計的值。

現在我們已經得到k時刻的最優溫度值了,下一步就是要進入k+1時刻,進行新的最優估算。到現在為止,好像還沒看到什麼自回歸的東西出現。對了,在進入k+1時刻之前,我們還要算出k時刻那個最優值(24.56度)的偏差。演算法如下:((1-kg)*5^2)^0.5=2.35。這裡的5就是上面的k時刻你**的那個23度溫度值的偏差,得出的2.35就是進入k+1時刻以後k時刻估算出的最優溫度值的偏差(對應於上面的3)。

就是這樣,卡爾曼濾波器就不斷的把covariance遞迴,從而估算出最優的溫度值。他執行的很快,而且它只保留了上一時刻的covariance。上面的kg,就是卡爾曼增益(kalman gain)。他可以隨不同的時刻而改變他自己的值,是不是很神奇!

下面就要言歸正傳,討論真正工程系統上的卡爾曼。

3.    卡爾曼濾波器演算法

(the kalman filter algorithm)

在這一部分,我們就來描述源於dr kalman 的卡爾曼濾波器。下面的描述,會涉及一些基本的概念知識,包括概率(probability),隨即變數(random variable),高斯或正態分配(gaussian distribution)還有state-space model等等。但對於卡爾曼濾波器的詳細證明,這裡不能一一描述。

首先,我們先要引入乙個離散控制過程的系統。該系統可用乙個線性隨機微分方程(linear stochastic difference equation)來描述:

x(k)=a x(k-1)+b u(k)+w(k)

再加上系統的測量值:

z(k)=h x(k)+v(k)

上兩式子中,x(k)是k時刻的系統狀態,u(k)是k時刻對系統的控制量。a和b是系統引數,對於多模型系統,他們為矩陣。z(k)是k時刻的測量值,h是測量系統的引數,對於多測量系統,h為矩陣。w(k)和v(k)分別表示過程和測量的雜訊。他們被假設成高斯白雜訊(white gaussian noise),他們的covariance 分別是q,r(這裡我們假設他們不隨系統狀態變化而變化)。

對於滿足上面的條件(線性隨機微分系統,過程和測量都是高斯白雜訊),卡爾曼濾波器是最優的資訊處理器。下面我們來用他們結合他們的covariances 來估算系統的最優化輸出(類似上一節那個溫度的例子)。

x(k|k-1)=a x(k-1|k-1)+b u(k) ……….. (1)

式(1)中,x(k|k-1)是利用上一狀態**的結果,x(k-1|k-1)是上一狀態最優的結果,u(k)為現在狀態的控制量,如果沒有控制量,它可以為0。

到現在為止,我們的系統結果已經更新了,可是,對應於x(k|k-1)的covariance還沒更新。我們用p表示covariance:

p(k|k-1)=a p(k-1|k-1) a』+q ……… (2)

式(2)中,p(k|k-1)是x(k|k-1)對應的covariance,p(k-1|k-1)是x(k-1|k-1)對應的covariance,a』表示a的轉置矩陣,q是系統過程的covariance。式子1,2就是卡爾曼濾波器5個公式當中的前兩個,也就是對系統的**。

現在我們有了現在狀態的**結果,然後我們再收集現在狀態的測量值。結合**值和測量值,我們可以得到現在狀態(k)的最優化估算值x(k|k):

x(k|k)= x(k|k-1)+kg(k) (z(k)-h x(k|k-1)) ……… (3)

其中kg為卡爾曼增益(kalman gain):

kg(k)= p(k|k-1) h』 / (h p(k|k-1) h』 + r) ……… (4)

到現在為止,我們已經得到了k狀態下最優的估算值x(k|k)。但是為了要另卡爾曼濾波器不斷的執行下去直到系統過程結束,我們還要更新k狀態下x(k|k)的covariance:

p(k|k)=(i-kg(k) h)p(k|k-1) ……… (5)

其中i 為1的矩陣,對於單模型單測量,i=1。當系統進入k+1狀態時,p(k|k)就是式子(2)的p(k-1|k-1)。這樣,演算法就可以自回歸的運算下去。

卡爾曼濾波器的原理基本描述了,式子1,2,3,4和5就是他的5 個基本公式。根據這5個公式,可以很容易的實現計算機的程式

卡爾曼kalman濾波跟蹤例子

include include include using namespace std using namespace cv mat img 500,500,cv 8uc3 計算相對視窗的座標值,因為座標原點在左上角,所以sin前有個負號 static inline point calcpoint ...

卡爾曼 卡爾曼濾波 1

今天主要介紹一下卡爾曼濾波器,所謂卡爾曼濾波器其實是一種最優化遞迴數字處理演算法 optimal recursive data processing algorithm 卡爾曼濾波器應用 既然我們有了測量儀器,這些測量儀器可以目標給出準確測量值。還需要卡爾曼濾波器進行估計嗎?下面解釋一下為什麼需要卡...

卡爾曼 基礎卡爾曼濾波

卡爾曼濾波器是一種基礎 定位演算法。原理非常簡單易懂。核心過程可以用乙個圖說明 本質上就是這兩個狀態過程的迭代,來逐步的準確定位。更新 更具感測器獲取到比較準確的位置資訊後來更新當前的 問位置,也就是糾正 的錯誤。你可能要問為什麼有感測器的資料了還要進行更新?因為在現實世界中感測器是存在很多雜訊干擾...