簡單來說,卡爾曼濾波器是一個“optimal recursive data processing algorithm(最優化自迴歸數據處理算法)”。
對於解決很大部分的問題,他是最優,效率最高甚至是最有用的。
他的廣泛應用已經超過30年,包括機器人導航,控製,傳感器數據融合甚至在軍事方麵的雷達係統以及導彈追蹤等等。
近來更被應用於計算機圖像處理,例如頭臉識別,圖像分割,圖像邊緣檢測等等。
卡爾曼濾波器的介紹:
假設我們要研究的對象是一個房間的溫度。
根據你的經驗判斷,這個房間的溫度是恆定的,也就是下一分鍾的溫度等於現在這一分鍾的溫度(假設我們用一分鍾來做時間單位)。
假設你對你的經驗不是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=5^2\/(5^2+4^2),所以kg=0.61,我們可以估算出k時刻的實際溫度值是:23+0.61*(25-23)=24.22度。可以看出,因為溫度計的協方差(covariance)比較小(比較相信溫度計),所以估算出的最優溫度值偏向溫度計的值。
現在我們已經得到k時刻的最優溫度值了,下一步就是要進入k+1時刻,進行新的最優估算。到現在為止,好像還沒看到什麽自迴歸的東西出現。
對了,在進入k+1時刻之前,我們還要算出k時刻那個最優值(24.22度)的偏差。
算法如下:((1-kg)*5^2)^0.5=3.12。這裏的5就是上麵的k時刻你預測的那個23度溫度值的偏差,得出的3.12就是進入k+1時刻以後k時刻估算出的最優溫度值的偏差(對應於上麵的3)。
就是這樣,卡爾曼濾波器就不斷的把協方差(covariance)遞歸,從而估算出最優的溫度值。
他運行的很快,而且它隻保留了上一時刻的協方差(covariance)。
上麵的kg,就是卡爾曼增益(kalman gain)。他可以隨不同的時刻而改變他自己的值,是不是很神奇!
在航天領域,卡爾曼濾波是一種殿堂級的理論,應用的到處都是!
好吧,假設你在去一個風景區旅遊的時候,種下了一棵果樹,但顯然從果樹幼苗到果實不是一天兩天能完成的啊,需要慢慢長高。而你又不可能經常去看,但又想知道果樹的高度,那怎麽辦?
所以要解決的問題是:如何正確估計一棵果樹的高度?
我們把想要知道的果樹高度叫做待估的狀態變量。我們想一年知道一次,這就叫做步長。
你需要知道種下果樹的時候大概高度啊,於是你想了想,大概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突然不給我測量時,我也能通過已經建立好的這套體係估計在下一個步長(明年)果樹的高度。
卡爾曼濾波就這樣建立起來了。
最理想的情況是怎樣?
最準確的果樹初始高度估計,=較小的狀態估計誤差
最準確的果樹生長狀態模型,=較小的過程噪聲
最準確的果樹測量值,=較小的測量噪聲,而且測量類型越多越好(尺子和視力)
卡爾曼博士在1960年去了nasa訪問,把這套理論首次提出,震驚了nasa,於是很快采用。美國的標誌性阿波羅登月任務,就是使用這套嶄新的估計理論,登上月球的!
對於解決很大部分的問題,他是最優,效率最高甚至是最有用的。
他的廣泛應用已經超過30年,包括機器人導航,控製,傳感器數據融合甚至在軍事方麵的雷達係統以及導彈追蹤等等。
近來更被應用於計算機圖像處理,例如頭臉識別,圖像分割,圖像邊緣檢測等等。
卡爾曼濾波器的介紹:
假設我們要研究的對象是一個房間的溫度。
根據你的經驗判斷,這個房間的溫度是恆定的,也就是下一分鍾的溫度等於現在這一分鍾的溫度(假設我們用一分鍾來做時間單位)。
假設你對你的經驗不是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=5^2\/(5^2+4^2),所以kg=0.61,我們可以估算出k時刻的實際溫度值是:23+0.61*(25-23)=24.22度。可以看出,因為溫度計的協方差(covariance)比較小(比較相信溫度計),所以估算出的最優溫度值偏向溫度計的值。
現在我們已經得到k時刻的最優溫度值了,下一步就是要進入k+1時刻,進行新的最優估算。到現在為止,好像還沒看到什麽自迴歸的東西出現。
對了,在進入k+1時刻之前,我們還要算出k時刻那個最優值(24.22度)的偏差。
算法如下:((1-kg)*5^2)^0.5=3.12。這裏的5就是上麵的k時刻你預測的那個23度溫度值的偏差,得出的3.12就是進入k+1時刻以後k時刻估算出的最優溫度值的偏差(對應於上麵的3)。
就是這樣,卡爾曼濾波器就不斷的把協方差(covariance)遞歸,從而估算出最優的溫度值。
他運行的很快,而且它隻保留了上一時刻的協方差(covariance)。
上麵的kg,就是卡爾曼增益(kalman gain)。他可以隨不同的時刻而改變他自己的值,是不是很神奇!
在航天領域,卡爾曼濾波是一種殿堂級的理論,應用的到處都是!
好吧,假設你在去一個風景區旅遊的時候,種下了一棵果樹,但顯然從果樹幼苗到果實不是一天兩天能完成的啊,需要慢慢長高。而你又不可能經常去看,但又想知道果樹的高度,那怎麽辦?
所以要解決的問題是:如何正確估計一棵果樹的高度?
我們把想要知道的果樹高度叫做待估的狀態變量。我們想一年知道一次,這就叫做步長。
你需要知道種下果樹的時候大概高度啊,於是你想了想,大概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突然不給我測量時,我也能通過已經建立好的這套體係估計在下一個步長(明年)果樹的高度。
卡爾曼濾波就這樣建立起來了。
最理想的情況是怎樣?
最準確的果樹初始高度估計,=較小的狀態估計誤差
最準確的果樹生長狀態模型,=較小的過程噪聲
最準確的果樹測量值,=較小的測量噪聲,而且測量類型越多越好(尺子和視力)
卡爾曼博士在1960年去了nasa訪問,把這套理論首次提出,震驚了nasa,於是很快采用。美國的標誌性阿波羅登月任務,就是使用這套嶄新的估計理論,登上月球的!