我們寫一個主程序,包括兩個函數更新函數和預測函數,然后導入一系列測量和運動數據。
如果初始估計是5,非常好,但我們將其設置為mu=0,且不確定性非常高為sig=10000.
我們假設測量不確定性為常量4,運動不確定性為2.
運動時 你的第一次位置估計應該是4.9.原因在於初始不確定性高,第一次測量值5主導了估計結果。
你的不確定性縮減到了3,99
比測量不確定性稍好一點。
然后你的預測加1,但是不確定性增加到了5.99
也就是運動不確定性等於2,然后根據測量數據6 再次跟新 得到你的估計5.99
你再移動1 測量數據為7 你移動2 測量數據9 你移動1 測量數據10 最后移動1.
最后結果出來 該位置的預測為10.99
即你的位置10移動1 殘留不確定性為4.
# Write a program that will iteratively update and # predict based on the location measurements # and inferred motions shown below. def update(mean1, var1, mean2, var2): new_mean = float(var2 * mean1 + var1 * mean2) / (var1 + var2) new_var = 1./(1./var1 + 1./var2) return [new_mean, new_var] def predict(mean1, var1, mean2, var2): new_mean = mean1 + mean2 new_var = var1 + var2 return [new_mean, new_var] measurements = [5., 6., 7., 9., 10.] motion = [1., 1., 2., 1., 1.] measurement_sig = 4. motion_sig = 2. mu = 0. sig = 10000. #Please print out ONLY the final values of the mean #and the variance in a list [mu, sig]. # Insert code here
for n in range(len(measurements)):
[mu,sig]=update(mu,sig,measurements[n],measurement_sig)
print 'update:',[mu,sig]
[mu,sig]=predict(mu,sig,motion[n],motion_sig)
print 'predict:',[mu,sig] print [mu, sig]
這段代碼部署了整個卡爾曼濾波器,它檢查了所有測量元素 並默認,測量值的個數為運動的n次冪,它使用update 遞歸公式更新mu和sigma. 如果我們導入第n個測量值和測量不確定性,他會對運動進行同樣的操作,這里的預測部分,它使用第n個運動和運動不確定性遞歸地更新mu和sigma 並把這些全部打印出來。
以上就是一個完整的一維卡爾曼濾波。