到處都是!

好吧,假設你在去一個風景區旅遊的時候,種下了一棵果樹,但顯然從果樹幼苗到果實不是一天兩天能完成的啊,需要慢慢長高。而你又不可能經常去看,但又想知道果樹的高度,那怎麼辦?

所以要解決的問題是:如何正確估計一棵果樹的高度?

我們把想要知道的果樹高度叫做待估的狀態變數。我們想一年知道一次,這就叫做步長。

你需要知道種下果樹的時候大概高度啊,於是你想了想,大概1米吧,但我也不確定,有可能90公分也有可能110公分。於是這個1米,叫做你的初始狀態估計,這個10公分的不確定性,叫做狀態估計的誤差協方差矩陣,後續它會隨著你的下一步估計而變化。

怎麼辦呢?

你在網上查了查,這種果樹差不多每年都比前一年生長10%的高度(純假設而已哈),這個生長的規律\/模型就叫做狀態轉移矩陣。於是根據模型,假如2017年有1米,2018年就大概有1.1米。

但顯然這個模型不適用於任意一棵果樹和你種植當地的實際日照風土情況,而且你明明知道果樹不可能無限增長。所以咱們的模型不可能是100%準確的,我們用一個叫做過程噪聲的東西來衡量它。可以理解為模型遞推下去的不準確度。比如假設這個估計模型誤差在0.3米,這叫做白噪聲。過程噪聲越小就意味著你相信生長模型很準確,越大就表示模型越垃圾。

但儘管如此還是不靠譜啊,閉門猜果樹高度肯定不可能一直準,這個時候我們需要找一下本地的朋友們定期去看一眼。由於是拜託他們幫忙,也不想真要求他們爬上去拿尺子量,大概給個數就行,這個朋友幫忙看到的高度就是我們的測量值。

假設有朋友A和b,朋友A很認真,每次都拿尺子大概比一比,告訴你都用大概多少分米來說,比如大概1米8到1米9吧;而朋友b不認真,只瞄一眼說大概1.5-2米吧。但是A有一個壞處,比較懶,兩年才給你發個簡訊;b比較勤快,每年就有。這個2年或者1年就叫做測量更新頻率。我們需要他們儘可能提供資料,所以兩個都要採納。而且這兩個測量一個來自尺子一個來自視力,不同的測量型別我們都能同時使用,太好了!

你明顯覺得A比b要靠譜一些,於是認為A的精度在分米級,b的精度在半米級,這個分米和半米叫做他倆的測量噪聲。基於這個測量噪聲你可以建立一個測量噪聲矩陣,衡量在參考時對A和b觀測值的權重。

那麼你現在明白了,既需要果樹生長模型,這樣即便A和b不給我資料,我也大概能估計出明年這個樹的高度。但也不能只依靠模型,比如果樹進入成熟期慢慢就不長了,我們也需要A和b的觀測值去校正估計,那麼就需要把他們融合在一起。

於是,從模型這裡,有一個衡量初始估計是否準確的矩陣叫做狀態估計協方差矩陣,有一個衡量生長模型準確度的過程噪聲矩陣;從觀測那裡有一個衡量觀測是否準確的矩陣叫做觀測噪聲協方差矩陣。

我們把它和模型融合在一起,就變成了一個叫做增益矩陣的東西。糊塗了?彆著急,其實增益矩陣就是一件事情:我到底是應該相信我推的模型多,還是應該相信來自A和b的測量多呢?

於是透過增益矩陣和這一系列矩陣,你建立了一套系統:當模型比較準確時,我相信模型多一點,當它不準時我相信實際測量多一些。而且還有一個優勢,測量幫助我校正模型準確度;當A和b突然不給我測量時,我也能透過已經建立好的這套體系估計在下一個步長(明年)果樹的高度。

卡爾曼濾波就這樣建立起來了。

最理想的情況是怎樣?

最準確的果樹初始高度估計,=較小的