一直在看,一直不懂。 我這人學(xué)數(shù)學(xué)的毛病,就是需要非常細(xì)致的知道每個(gè)變量的含義,誰(shuí)變誰(shuí)不變必須清清楚楚告訴我,否則我就沒(méi)有那個(gè)直覺(jué)。 anyway,從這篇文章入手吧: http://www.cs./~welch/kalman/media/pdf/kalman_intro_chinese.pdf 所謂濾波,實(shí)際上是要去掉自己不想要的信號(hào),保留想要的部分。一般來(lái)說(shuō),是把過(guò)程中的噪聲去掉。 卡爾曼濾波的默認(rèn)假定是,世界充滿噪聲,任何測(cè)量結(jié)果都有噪聲,狀態(tài)轉(zhuǎn)移過(guò)程會(huì)有噪聲,你想知道系統(tǒng)的真實(shí)值么?玩兒蛋去吧。 卡爾曼濾波另一個(gè)重要假定模型是這樣的,一個(gè)系統(tǒng)會(huì)處在各種不同的狀態(tài),并且會(huì)在狀態(tài)之間轉(zhuǎn)化來(lái)轉(zhuǎn)化去。但是呢,倒霉的是我們誰(shuí)也不知道該系統(tǒng)當(dāng)前到底是在什么狀態(tài);但是呢,幸運(yùn)的是我們可以通過(guò)測(cè)量的結(jié)果猜測(cè)到系統(tǒng)當(dāng)前在一個(gè)什么狀態(tài)。 那啥叫狀態(tài)呢?例如系統(tǒng)的速度,加速度,溫度,腦殘度都算。離散系統(tǒng)的話,我們可以假設(shè)一個(gè)黑盒,黑盒里有許多顏色的燈(紅橙黃綠青藍(lán)紫),同時(shí)只能有一個(gè)顏色在亮著,ok,哪個(gè)燈在亮就是當(dāng)前狀態(tài)。
下面就是建模: z_t = H*x_t + v_t; (1) x_t = A*x_(t-1) + B*u_(t-1) + w_(t-1); (2) 初看起這倆式子來(lái),我也頭大,不過(guò)稍微分析一下也不太難。x_t是t時(shí)刻系統(tǒng)所在狀態(tài),z_t是所謂觀測(cè)值,u_t是系統(tǒng)控制變量(已知,但我做的領(lǐng)域一般用不著),w_t , v_t都是噪聲。 那么式子(1)就是想說(shuō),觀測(cè)值和系統(tǒng)狀態(tài)的關(guān)系: 如果你看到種子發(fā)芽了,那么它的狀態(tài)就是剛出生;如果你看到它開(kāi)始長(zhǎng)葉兒了,那狀態(tài)就叫生長(zhǎng)期;如果丫開(kāi)花了,就叫啥啥期;如果結(jié)果了,就叫成熟期;如果蔫兒了,就叫嗝屁期。 哦,對(duì)了,個(gè)人理解一下,以上公式限定為了線性系統(tǒng),傳說(shuō)中卡爾曼濾波是線性的,來(lái)源就在這里了,誰(shuí)叫你是矩陣乘向量呢,你要是寫成f(x_t),那有可能就是非線性的了。 那么式子(2)就是說(shuō),前一時(shí)刻狀態(tài)和下一時(shí)刻狀態(tài)之間的關(guān)系。我在這里卡了好久,總是以為丫是馬爾科夫過(guò)程,所以就完全無(wú)法理解A這個(gè)系數(shù)是憑啥得來(lái)的。其實(shí),就是一個(gè)固定的轉(zhuǎn)移方程,該方程完全沒(méi)有概率問(wèn)題。 所 以!以上式子中,固定下來(lái)的是H, A, B,這三個(gè)矩陣千年不變,萬(wàn)年不變,并且是事先設(shè)定好的,全都已知。未知的話....你自己編一個(gè)模型吧。 那么w_t,v_t 在這里限定為兩個(gè)高斯白噪聲N(0, Q)和N(0, R)。 哦,對(duì),這里要記得,Q,R都tm是協(xié)方差矩陣啊,因?yàn)?,系統(tǒng)狀態(tài)和觀測(cè)值都是向量。我對(duì)協(xié)方差可郁悶可郁悶了。這里提一句,我就完全無(wú)法理解協(xié)方差想表達(dá)什么,為什么倆隨機(jī)變量獨(dú)立,協(xié)方差一定為0,雖然我也知道怎么推導(dǎo),但就是不能直觀理解之,如果有人知道,還煩請(qǐng)告知。 那 繼續(xù)扯淡??柭鼮V波,本質(zhì)是想要預(yù)測(cè)下一步的觀測(cè)值,或者實(shí)時(shí)監(jiān)控一下系統(tǒng)所在狀態(tài)。但一般在我這個(gè)領(lǐng)域,大家還都是在玩兒預(yù)測(cè),那咱就從預(yù)測(cè)角度分 析。OK,直覺(jué)上,給定上一個(gè)位置的狀態(tài)x_(t-1),式子(2)足夠了。但是,回到開(kāi)始的默認(rèn)假設(shè),式子(2)得到的結(jié)果x^-_t那是各種不準(zhǔn)確 啊。不準(zhǔn)確怎么辦?那就去看觀測(cè)值唄,于是得到觀測(cè)值z(mì)_t,但是觀測(cè)值也不準(zhǔn)確唉,那怎么辦?當(dāng)當(dāng)當(dāng)當(dāng),卡爾曼告訴我們一個(gè)灰常牛B的事情,一個(gè)相對(duì)準(zhǔn) 確的系統(tǒng)值具有如下結(jié)構(gòu): x&_t = x&-_t + K( z_t - H*x_(t-1) ); (3) 提 一下,這里" & "表示估計(jì)值," - "表示是用前面式子算出來(lái)的估計(jì)值,不帶" - "表示是最后的估計(jì)值。 (3)這個(gè)式子是想說(shuō),你不是式子估計(jì)和觀測(cè)值都不準(zhǔn)么,那么你把他倆加個(gè)權(quán),求個(gè)和,那就可能更準(zhǔn)確了。啥?你說(shuō)這個(gè)式子不像加權(quán)?你把丫拆了,倒騰倒 騰不就像了。 所以,最牛B就牛B在了這個(gè)“K”,傳說(shuō)中的卡爾曼增益。 這個(gè)K怎么得到的?我也不知道。 文章說(shuō)法是,定義誤差 e_t = x_t - x&_t ,P_t為此誤差的協(xié)方差矩陣,目的是使這個(gè)誤差協(xié)方差矩陣最小化,把(3)代過(guò)去,于是折騰來(lái)折騰去,再求個(gè)導(dǎo)數(shù)為0,解得K,這個(gè)關(guān)鍵值的算法: K = P-_t * H^T * ( H * P-_t * H^T + R) ^(-1); (4) 哦,對(duì)了,另外注意一點(diǎn),從此以后,我們就都在估計(jì)上做文章了,你只要記得,咱永遠(yuǎn)看不到真實(shí)值就行了,于是我們的式子里不是帶"&"就是帶"-"。 那么式子(4)就是在說(shuō),你丫這么著就把K求出來(lái)了。于是,問(wèn)題就變成了這個(gè)P-_t怎么個(gè)求法。 說(shuō)到這里,傳說(shuō)中的卡爾曼濾波就算講完了。神馬?你說(shuō)P-_k還沒(méi)求呢。是啊,卡爾曼濾波一共就倆需要求的玩意兒,還都tm是迭代求解,一個(gè)就是這個(gè)P-_t,另一個(gè)就是狀態(tài)x-_t。你隨便給個(gè)初始值,然后就迭著吧。 言歸正傳,我還得給出迭代的公式: x-_t = A * x&_(t-1) + B * u_(t-1); (5) P-_t = A * P_(t-1) * A^T + Q; (6) 大家一定別搞混Q和R誰(shuí)是哪個(gè)公式冒出來(lái)的啊。 另外嚴(yán)重關(guān)切一下這里"-","&"以及不加的關(guān)系。 注意到啥沒(méi)有?對(duì)了,(6)式中等號(hào)右邊的P_(t-1)不帶任何符號(hào),嘿嘿,那自然是還差一個(gè)公式啦: P_t = (I - K_t * H ) P-_(t-1); (7) 大功告成,以上就是傳說(shuō)中的卡爾曼濾波的迭代求解方法,如果你要預(yù)測(cè)狀態(tài)呢,就用式子(5)的結(jié)果;如果預(yù)測(cè)觀測(cè)值呢,就把式子(5)的結(jié)果乘個(gè)H;如果是監(jiān)測(cè)狀態(tài)呢,就用式子(3)的結(jié)果。 至于一切式子中的推導(dǎo)過(guò)程,還有為神馬是這樣求出來(lái)的,咕~~(╯﹏╰)b,本人一概不知。淚奔告退。
最
后小注一下,文章指出,如果Q,R是常數(shù),K會(huì)收斂,也即P也會(huì)收斂到常量。
另外,大家經(jīng)常詬病卡爾曼濾波都是假定高斯分布,我勒個(gè)去,這里的高斯分布到底說(shuō)誰(shuí)呢?噪聲項(xiàng)?雖然看上去應(yīng)該是,但我打賭不是??墒瞧渌侄际嵌ㄖ?,
唉,頭大。我本來(lái)就是為了理解這句話才來(lái)學(xué)習(xí)卡爾曼濾波的。 還得慢慢學(xué),繼續(xù)淚奔 PS, 于是,果然,文中提到x_t是一個(gè)隨機(jī)變量,并且在已知z_t的情況下 p(x_t | z_t) 服從N( x&_t, E[(x_t - x&_t)(x_t - x&_t)]),切記切記,這里所說(shuō)的正態(tài)分布,是指已知觀測(cè)值的情況下,系統(tǒng)狀態(tài)是一個(gè)高斯分布的隨機(jī)變量。 |
|