卡尔曼滤波简介(转载)
1.簡(jiǎn)介(Brief Introduction)
在學(xué)習(xí)卡爾曼濾波器之前,首先看看為什么叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級(jí)數(shù)等等)一樣,卡爾曼也是一個(gè)人的名字,而跟他們不同的是,他是個(gè)現(xiàn)代人!
卡爾曼全名Rudolf Emil Kalman,匈牙利數(shù)學(xué)家,1930年出生于匈牙利首都布達(dá)佩斯。1953,1954年于麻省理工學(xué)院分別獲得電機(jī)工程學(xué)士及碩士學(xué)位。1957年于哥倫比亞大學(xué)獲得博士學(xué)位。我們現(xiàn)在要學(xué)習(xí)的卡爾曼濾波器,正是源于他的博士論文和1960年發(fā)表的論文《A New Approach to Linear Filtering and Prediction Problems》(線性濾波與預(yù)測(cè)問(wèn)題的新方法)。如果對(duì)這編論文有興趣,可以到這里的地址下載: http://www.cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf
卡爾曼濾波器到底是干嘛的?我們來(lái)看下wiki上的解釋:
卡爾曼濾波的一個(gè)典型實(shí)例是從一組有限的,包含噪聲的,對(duì)物體位置的觀察序列(可能有偏差)預(yù)測(cè)出物體的位置的坐標(biāo)及速度。在很多工程應(yīng)用(如雷達(dá)、計(jì)算機(jī)視覺(jué))中都可以找到它的身影。同時(shí),卡爾曼濾波也是控制理論以及控制系統(tǒng)工程中的一個(gè)重要課題。例如,對(duì)于雷達(dá)來(lái)說(shuō),人們感興趣的是其能夠跟蹤目標(biāo)。但目標(biāo)的位置、速度、加速度的測(cè)量值往往在任何時(shí)候都有噪聲??柭鼮V波利用目標(biāo)的動(dòng)態(tài)信息,設(shè)法去掉噪聲的影響,得到一個(gè)關(guān)于目標(biāo)位置的好的估計(jì)。這個(gè)估計(jì)可以是對(duì)當(dāng)前目標(biāo)位置的估計(jì)(濾波),也可以是對(duì)于將來(lái)位置的估計(jì)(預(yù)測(cè)),也可以是對(duì)過(guò)去位置的估計(jì)(插值或平滑)。
斯坦利.施密特(Stanley Schmidt)首次實(shí)現(xiàn)了卡爾曼濾波器??柭贜ASA埃姆斯研究中心訪問(wèn)時(shí),發(fā)現(xiàn)他的方法對(duì)于解決阿波羅計(jì)劃的軌道預(yù)測(cè)很有用,后來(lái)阿波羅飛船的導(dǎo)航電腦便使用了這種濾波器。 關(guān)于這種濾波器的論文由Swerling (1958)、Kalman (1960)與 Kalman and Bucy (1961)發(fā)表。
目前,卡爾曼濾波已經(jīng)有很多不同的實(shí)現(xiàn).卡爾曼最初提出的形式現(xiàn)在一般稱為簡(jiǎn)單卡爾曼濾波器。除此以外,還有施密特?cái)U(kuò)展濾波器、信息濾波器以及很多Bierman, Thornton 開(kāi)發(fā)的平方根濾波器的變種。也許最常見(jiàn)的卡爾曼濾波器是鎖相環(huán),它在收音機(jī)、計(jì)算機(jī)和幾乎任何視頻或通訊設(shè)備中廣泛存在。
簡(jiǎn)單來(lái)說(shuō),卡爾曼濾波器是一個(gè)“optimal recursive data processing algorithm(最優(yōu)化自回歸數(shù)據(jù)處理算法)”。對(duì)于解決很大部分的問(wèn)題,他是最優(yōu),效率最高甚至是最有用的。他的廣泛應(yīng)用已經(jīng)超過(guò)30年,包括機(jī)器人導(dǎo)航,控制,傳感器數(shù)據(jù)融合甚至在軍事方面的雷達(dá)系統(tǒng)以及導(dǎo)彈追蹤等等。近年來(lái)更被應(yīng)用于計(jì)算機(jī)圖像處理,例如頭臉識(shí)別,圖像分割,圖像邊緣檢測(cè)等等。
2.卡爾曼濾波器的介紹(Introduction to the Kalman Filter)
為了可以更加容易的理解卡爾曼濾波器,首先應(yīng)用形象的描述方法來(lái)講解,然后我們結(jié)合其核心的5條公式進(jìn)行進(jìn)一步的說(shuō)明和探索。結(jié)合現(xiàn)代的計(jì)算機(jī),其實(shí)卡爾曼的程序相當(dāng)?shù)暮?jiǎn)單,只要你理解了他的那5條公式。
在介紹他的5條公式之前,先讓我們來(lái)根據(jù)下面的例子做個(gè)直觀的解釋。
假設(shè)我們要研究的對(duì)象是一個(gè)房間的溫度。根據(jù)你的經(jīng)驗(yàn)判斷,這個(gè)房間的溫度是恒定的,也就是下一分鐘的溫度等于現(xiàn)在這一分鐘的溫度(假設(shè)我們用一分鐘來(lái)做時(shí)間單位)。假設(shè)你對(duì)你的經(jīng)驗(yàn)不是100%的相信,可能會(huì)有上下偏差幾度。我們把這些偏差看成是高斯白噪聲(White Gaussian Noise),也就是這些偏差跟前后時(shí)間是沒(méi)有關(guān)系的而且符合高斯分配(Gaussian Distribution)。另外,我們?cè)诜块g里放一個(gè)溫度計(jì),但是這個(gè)溫度計(jì)也不準(zhǔn)確的,測(cè)量值會(huì)比實(shí)際值偏差。我們也把這些偏差看成是高斯白噪聲。
好了,現(xiàn)在對(duì)于某一分鐘我們有兩個(gè)有關(guān)于該房間的溫度值:你根據(jù)經(jīng)驗(yàn)的預(yù)測(cè)值(系統(tǒng)的預(yù)測(cè)值)和溫度計(jì)的值(測(cè)量值)。下面我們要用這兩個(gè)值結(jié)合他們各自的噪聲來(lái)估算出房間的實(shí)際溫度值。
假如我們要估算k時(shí)刻的是實(shí)際溫度值。首先你要根據(jù)k-1時(shí)刻的溫度值,來(lái)預(yù)測(cè)k時(shí)刻的溫度。因?yàn)槟阆嘈艤囟仁呛愣ǖ?#xff0c;所以你會(huì)得到k時(shí)刻的溫度預(yù)測(cè)值是跟k-1時(shí)刻一樣的,假設(shè)是23度,同時(shí)該值的高斯噪聲的偏差是5度(5是這樣得到的:如果k-1時(shí)刻估算出的最優(yōu)溫度值的偏差是3,你對(duì)自己預(yù)測(cè)的不確定度是4度,他們平方相加再開(kāi)方,就是5)。然后,你從溫度計(jì)那里得到了k時(shí)刻的溫度值,假設(shè)是25度,同時(shí)該值的偏差是4度。
由于我們用于估算k時(shí)刻的實(shí)際溫度有兩個(gè)溫度值,分別是23度和25度。究竟實(shí)際溫度是多少呢?相信自己還是相信溫度計(jì)呢?究竟相信誰(shuí)多一點(diǎn),我們可以用他們的covariance來(lái)判斷。因?yàn)镵g^2=5^2/(5^2+4^2),所以Kg=0.78,我們可以估算出k時(shí)刻的實(shí)際溫度值是:23+0.78*(25-23)=24.56度??梢钥闯?#xff0c;因?yàn)闇囟扔?jì)的covariance比較小(比較相信溫度計(jì)),所以估算出的最優(yōu)溫度值偏向溫度計(jì)的值。
現(xiàn)在我們已經(jīng)得到k時(shí)刻的最優(yōu)溫度值了,下一步就是要進(jìn)入k+1時(shí)刻,進(jìn)行新的最優(yōu)估算。到現(xiàn)在為止,好像還沒(méi)看到什么自回歸的東西出現(xiàn)。對(duì)了,在進(jìn)入k+1時(shí)刻之前,我們還要算出k時(shí)刻那個(gè)最優(yōu)值(24.56度)的偏差。算法如下:((1-Kg)*5^2)^0.5=2.35。這里的5就是上面的k時(shí)刻你預(yù)測(cè)的那個(gè)23度溫度值的偏差,得出的2.35就是進(jìn)入k+1時(shí)刻以后k時(shí)刻估算出的最優(yōu)溫度值的偏差(對(duì)應(yīng)于上面的3)。
就是這樣,卡爾曼濾波器就不斷的把covariance遞歸,從而估算出最優(yōu)的溫度值。他運(yùn)行的很快,而且它只保留了上一時(shí)刻的covariance。上面的Kg,就是卡爾曼增益(Kalman Gain)。他可以隨不同的時(shí)刻而改變他自己的值,是不是很神奇!
下面就要言歸正傳,討論真正工程系統(tǒng)上的卡爾曼。
3. 卡爾曼濾波器算法(The Kalman Filter Algorithm)
在這一部分,我們就來(lái)描述源于Dr Kalman 的卡爾曼濾波器。下面的描述,會(huì)涉及一些基本的概念知識(shí),包括概率(Probability),隨即變量(Random Variable),高斯或正態(tài)分配(Gaussian Distribution)還有State-space Model等等。但對(duì)于卡爾曼濾波器的詳細(xì)證明,這里不能一一描述。
首先,我們先要引入一個(gè)離散控制過(guò)程的系統(tǒng)。該系統(tǒng)可用一個(gè)線性隨機(jī)微分方程(Linear Stochastic Difference equation)來(lái)描述,我們結(jié)合下面PPT截圖進(jìn)行說(shuō)明:
上兩式子中,x(k)是k時(shí)刻的系統(tǒng)狀態(tài),u(k)是k時(shí)刻對(duì)系統(tǒng)的控制量。A和B是系統(tǒng)參數(shù),對(duì)于多模型系統(tǒng),他們?yōu)榫仃嚒(k)是k時(shí)刻的測(cè)量值,H是測(cè)量系統(tǒng)的參數(shù),對(duì)于多測(cè)量系統(tǒng),H為矩陣。q(k)和r(k)分別表示過(guò)程和測(cè)量的噪聲。他們被假設(shè)成高斯白噪聲(White Gaussian Noise),他們的covariance分別是Q,R(這里我們假設(shè)他們不隨系統(tǒng)狀態(tài)變化而變化)。
對(duì)于滿足上面的條件(線性隨機(jī)微分系統(tǒng),過(guò)程和測(cè)量都是高斯白噪聲),卡爾曼濾波器是最優(yōu)的信息處理器。先給出KF算法的流程和五個(gè)核心更新方程如下:
KF算法
五個(gè)更新方程為:
編寫公式不方便,所以寫成了PDF然后做了截圖粘在了下面,下面就上面的例子和五個(gè)核心的公式對(duì)Kalman算法進(jìn)行下說(shuō)明:
就這樣,算法就可以自回歸的運(yùn)算下去。
看到這聰明的同學(xué)可能已經(jīng)看出來(lái)了,問(wèn)道卡爾曼增益為什么會(huì)是第三步中那樣求,現(xiàn)在只大致說(shuō)一下原理,具體推到比較復(fù)雜,有興趣的同學(xué)可以參考這文獻(xiàn)去推一推。
還記得前面我們說(shuō)的誤差協(xié)方差矩陣$P_k$么,即求第k次最優(yōu)溫度的誤差協(xié)方差矩陣,對(duì)應(yīng)于上例中的3和2.35....這些值??聪旅鍼PT,我們最小化P即可得到卡爾曼增益K,對(duì)應(yīng)上例求解K只最小化最優(yōu)溫度值的偏差,即最小化P(K):
我們由第四步可以看出,k時(shí)刻系統(tǒng)的最優(yōu)溫度值=k-1時(shí)刻狀態(tài)估計(jì)值(由上一狀態(tài)的最優(yōu)溫度值加上過(guò)程誤差)+帶卡爾曼增益權(quán)值項(xiàng)的偏差。如果觀測(cè)誤差遠(yuǎn)遠(yuǎn)大于估計(jì)誤差,那么K就很小,k時(shí)刻的預(yù)測(cè)值約等于k時(shí)刻的狀態(tài)估計(jì)值,如果對(duì)i時(shí)刻的狀態(tài)估計(jì)值誤差遠(yuǎn)遠(yuǎn)大于觀測(cè)誤差,此時(shí)相應(yīng)的q較大,K較大,i時(shí)刻的狀態(tài)估計(jì)值更傾向于觀察的數(shù)據(jù)。
卡爾曼濾波器的原理基本描述就完成了,希望能幫助大家理解這這5個(gè)公式,其算法可以很容易的用計(jì)算機(jī)的程序?qū)崿F(xiàn)。下面,我會(huì)用程序舉一個(gè)實(shí)際運(yùn)行的例子。
4. 簡(jiǎn)單例子(A Simple Example)
這里我們結(jié)合第二第三節(jié),舉一個(gè)非常簡(jiǎn)單的例子來(lái)說(shuō)明卡爾曼濾波器的工作過(guò)程。所舉的例子是進(jìn)一步描述第二節(jié)的例子,而且還會(huì)配以程序模擬結(jié)果。
根第二節(jié)的描述,把房間看成一個(gè)系統(tǒng),然后對(duì)這個(gè)系統(tǒng)建模。當(dāng)然,我們見(jiàn)的模型不需要非常地精確。我們所知道的這個(gè)房間的溫度是跟前一時(shí)刻的溫度相同的,所以A=1。沒(méi)有控制量,所以u(píng)(k)=0。因此得出:
x(k|k-1)=x(k-1|k-1) ……… (6)
式子(2)可以改成:
P(k|k-1)=P(k-1|k-1) +Q ……… (7)
因?yàn)闇y(cè)量的值是溫度計(jì)的,跟溫度直接對(duì)應(yīng),所以H=1。式子3,4,5可以改成以下:
X(k|k)= X(k|k-1)+Kg(k) (Z(k)-X(k|k-1)) ……… (8)
Kg(k)= P(k|k-1) / (P(k|k-1) + R) ……… (9)
P(k|k)=(1-Kg(k))P(k|k-1) ……… (10)
現(xiàn)在我們模擬一組測(cè)量值作為輸入。假設(shè)房間的真實(shí)溫度為25度,我模擬了200個(gè)測(cè)量值,這些測(cè)量值的平均值為25度,但是加入了標(biāo)準(zhǔn)偏差為幾度的高斯白噪聲(在圖中為藍(lán)線)。
為了令卡爾曼濾波器開(kāi)始工作,我們需要告訴卡爾曼兩個(gè)零時(shí)刻的初始值,是X(0|0)和P(0|0)。他們的值不用太在意,隨便給一個(gè)就可以了,因?yàn)殡S著卡爾曼的工作,X會(huì)逐漸的收斂。但是對(duì)于P,一般不要取0,因?yàn)檫@樣可能會(huì)令卡爾曼完全相信你給定的X(0|0)是系統(tǒng)最優(yōu)的,從而使算法不能收斂。我選了X(0|0)=1度,P(0|0)=10。
該系統(tǒng)的真實(shí)溫度為25度,圖中用黑線表示。圖中紅線是卡爾曼濾波器輸出的最優(yōu)化結(jié)果(該結(jié)果在算法中設(shè)置了Q=1e-6,R=1e-1)。
附matlab下面的kalman濾波程序:
更為詳細(xì)的過(guò)程可參考有關(guān)的資料。
文章參考了:
1 博文http://hi.baidu.com/irvkqscjezbrtwq/item/4ad3bb018b8c7e37a3332a07
2 自動(dòng)化所董秋雷上課課件
3 《學(xué)習(xí)Opencv》 于仕琪 P384 kalman濾波器部分
4 如果做視頻跟蹤具體參數(shù)選擇可參考《數(shù)字視頻處理》黎洪松 P102-106
5 如果想探索其具體推導(dǎo)過(guò)程可參考《現(xiàn)代信號(hào)處理》 張賢達(dá) P177-188
總結(jié)
以上是生活随笔為你收集整理的卡尔曼滤波简介(转载)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 解决Chrome“此网页正试图从未经验证
- 下一篇: python mpi4py multip