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