卡尔玛滤波的原理说明
卡爾瑪濾波的原理說明
- 卡爾曼濾波的原理說明
- 卡爾曼濾波的介紹
- 卡爾曼濾波算法
卡爾曼濾波的原理說明
簡單來說,卡爾曼濾波器是一個“optimal recursive data processing algorithm(最優化自回歸數據處理算法)”。對于解決很大部分的問題,它是最優、效率最高甚至是最有用的。
卡爾曼濾波的介紹
這里先根據下面的例子對卡爾曼濾波的5條公式進行一步一步地探索。
假設我們要研究的對象是一個房間的溫度。根據你的經驗判斷,這個房間的溫度是恒定的,也就是下一分鐘的溫度等于現在這一分鐘的溫度(假設我們用一分鐘來做時間單位)。假設你對你的經驗不是100%的相信,可能會有上下偏差幾度。我們把這些偏差看成是高斯白噪聲,也就是這些偏差跟前后時間是沒有關系的而且符合高斯分配。另外,我們在房間里放一個溫度計,但這個溫度計也是不準確的,測量值會比實際值偏差。我們也把這些偏差看成是高斯白噪聲。
好了,現在對于謀一分鐘我們有兩個關于該房間的溫度值:你根據經驗的預測值(系統的預測值)和溫度計的值(測量值)。下面要用這兩個值結合它們各自的噪聲來估算出房間的實際溫度值。
假如我們要估算kkk時刻的實際溫度值。首先你要根據kkk-1時刻的溫度值,來預測kkk時刻的溫度。因為你相信溫度是恒定的,所以你會得到kkk時刻的溫度預測值是跟kkk-1時刻一樣的,假設是23度,同時該值的高斯噪聲的偏差是5度(5是這樣得到的:如果kkk-1時刻估算出的最優溫度值的偏差是3,你對自己預測的不確定度是4,它們的平方相加再開方,就是5)。然后,你從溫度計那里得到了kkk時刻的溫度值,假設是25度,同時該值的偏差是4度。
由于我們用于估算kkk時刻的實際溫度有兩個溫度值,分別是23度和25度。究竟實際溫度是多少呢?相信自己還是相信溫度計?究竟相信誰多一點,我們可以用它們的covariance來判斷。因為Kg2=52/(52+42)Kg^2=5^2/(5^2+4^2)Kg2=52/(52+42),所以KgKgKg=0.78,我們可以估算出kkk時刻的實際溫度值是:23+0.78?(25?23)=24.5623+0.78*(25-23)=24.5623+0.78?(25?23)=24.56度。可以看出,因為溫度計的covariance比較小(比較相信溫度計),所以估算出的最優溫度值偏向溫度計的值。
現在我們可以得到kkk時刻的最優溫度值了,下一步就是要進入kkk+1時刻,進行新的最優估算。到現在為止,好像還沒看到什么自回歸的東西出現。對了,在進入kkk+1時刻之前,我們還要算出kkk時刻那個最優值(24.56度)的偏差。算法如下:((1?Kg)?52)0.5=2.35((1-Kg)\ast5^2)^{0.5}=2.35((1?Kg)?52)0.5=2.35。這里的5 就是上面的kkk時刻你預測的那個23度溫度值的偏差,得出的2.35就是進入kkk+1時刻以后kkk時刻估算出的最優值的偏差(對應于上面的3)。
就是這樣,卡爾曼濾波就不斷地把covariance地柜,從而估算出最優的溫度值。它運行的很快,而且它只保留了上一時刻的covariance。上面的KgKgKg,就是卡爾曼增益。它可以隨不同的時刻改變它自己的值。
卡爾曼濾波算法
首先,我們先要引入一個離散控制過程的系統。該系統可用一個線性隨機微分方程來描述:
X(k)=AX(k?1)+BU(k)+W(k)X(k)=AX(k-1)+BU(k)+W(k) X(k)=AX(k?1)+BU(k)+W(k)
再加上系統的測量值:
Z(k)=HX(k)+V(k)Z(k)=HX(k)+V(k) Z(k)=HX(k)+V(k)
上兩式中,X(k)X(k)X(k)是kkk時刻的系統狀態,U(k)U(k)U(k)是kkk時刻對系統的控制量。AAA和BBB是系統參數,對于多模型系統,它們為矩陣。Z(k)Z(k)Z(k)是kkk時刻的測量值,HHH是測量系統的參數,對于多測量系統,HHH為矩陣。W(k)W(k)W(k)和V(k)V(k)V(k)分別表示過程和測量的噪聲。它們被假設成高斯白噪聲,它們的covariance分別是QQQ,RRR(這里我們假設它們不隨系統狀態變化而變化)。
對于滿足上面的條件(線性隨機微分系統,過程和測量都是高斯白噪聲),卡爾曼濾波是最優的信息處理器。下面我們來用它們的covariances來估算系統的最優化輸出。
首先我們要利用系統的過程模型,來預測下一狀態的系統。假設現在的系統狀態是kkk,根據系統的模型,可以基于系統的上一狀態而預測出現在狀態:
(1)X(k∣k?1)=AX(k?1∣k?1)+BU(k)X(k|k-1)=AX(k-1|k-1)+BU(k) \tag{1} X(k∣k?1)=AX(k?1∣k?1)+BU(k)(1)
上式中,X(k∣k?1)X(k|k-1)X(k∣k?1)是利用上一狀態預測的結果,X(k?1∣k?1)X(k-1|k-1)X(k?1∣k?1)是上一狀態最優的結果,U(k)U(k)U(k)為現在狀態的控制量,如果沒有控制量,它可以為0.
到現在為止我們的系統結果已經更新了,可是,對應于X(k∣k?1)X(k|k-1)X(k∣k?1)的covariance還沒更新。我們用PPP表示covariance:
(2)P(k∣k?1)=AP(k?1∣k?1)A′+QP(k|k-1)=AP(k-1|k-1)A'+Q \tag{2} P(k∣k?1)=AP(k?1∣k?1)A′+Q(2)
上式中,P(k∣k?1)P(k|k-1)P(k∣k?1)是X(k∣k?1)X(k|k-1)X(k∣k?1)對應的covariance,P(k?1∣k?1)P(k-1|k-1)P(k?1∣k?1)是X(k?1∣k?1)X(k-1|k-1)X(k?1∣k?1)對應covariance,A′A'A′表示AAA的轉置矩陣,QQQ是系統過程的covariance。式子1,2就是卡爾曼濾波5個公式中的前兩個,也就是對系統的預測。
現在我們有了現在狀態的預測結果,然后我們再收集現在狀態的測量值。結合預測值和測量值,我們可以得到現在狀態(k)(k)(k)和最優化估算值X(k∣k)X(k|k)X(k∣k):
(3)X(k∣k)=X(k∣k?1)+Kg(k)(Z(k)?HX(k∣k?1))X(k|k)=X(k|k-1)+Kg(k)(Z(k)-HX(k|k-1)) \tag{3} X(k∣k)=X(k∣k?1)+Kg(k)(Z(k)?HX(k∣k?1))(3)
其中KgKgKg為卡爾曼增益:
(4)Kg(k)=P(k∣k?1)H′/(HP(k∣k?1)H′+R)Kg(k)=P(k|k-1)H'/(HP(k|k-1)H'+R) \tag{4} Kg(k)=P(k∣k?1)H′/(HP(k∣k?1)H′+R)(4)
到現在為止,我們已經得到了kkk狀態下最優的估算值X(k∣k)X(k|k)X(k∣k)。但是為了要卡爾曼濾波器不斷地運行下去知道系統過程結束,我們還要更新kkk狀態下X(k∣k)X(k|k)X(k∣k)的covariance:
(5)P(k∣k)=(I?Kg(k)H)P(k∣k?1)P(k|k)=(I-Kg(k)H)P(k|k-1) \tag{5} P(k∣k)=(I?Kg(k)H)P(k∣k?1) (5)
其中III為單位矩陣,對于單模型單測量,I=1I=1I=1。當系統進入kkk+1狀態時,P(k∣k)P(k|k)P(k∣k)就是式2的P(k?1∣k?1)P(k-1|k-1)P(k?1∣k?1)。這樣,算法就可以自回歸的運算下去.
卡爾曼濾波器的原理基本描述了,式子1,2,3,4和5就是它的5個基本公式。根據這5個公式,可以很容易地實現計算機的程序。
總結
以上是生活随笔為你收集整理的卡尔玛滤波的原理说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android判断sd u盘,[Andr
- 下一篇: Unity 3D模型展示框架篇之资源打包