2016-03-15 34 views
0

我有一個基於過濾器的程序,其中一個過濾器每〜200ms接收一次數據。當收到新的樣本時,會觸發相應的事件。我通過卡爾曼濾波器處理數據。之後,我將處理後的數據發送到下一個過濾器。 現在我想用較短的週期(〜30ms)在輸出端(卡爾曼濾波輸入數據)生成數據。我的問題是,實現這一目標的好方法是什麼?在基於事件的系統中通過卡爾曼濾波器以連續間隔發送數據

我的想法是有一個循環定時器(30毫秒)的單獨線程。當收到新樣本時,它會被添加到隊列中。在每個計時器事件中,我都會檢查隊列中是否有樣本。如果是這樣,我使用這個值作爲卡爾曼濾波器的測量輸入。如果不是,我使用循環時間的卡爾曼預測能力。

這是要走的路嗎,還是有更好的解決方案?

回答

0

答案是肯定的,不是!您能否使用第一個卡爾曼濾波器在第二個卡爾曼濾波器的30 ms測量間隔之間傳播?是的你可以。如果您最後一次測量到第一個濾波器的時間是400 ms,那麼30 ms後第一個濾波器輸​​出的最佳估計來自將其傳播到430 ms。如果狀態傳播是線性的,則使用相同的轉換矩陣(通常表示爲Phi)以30 ms的增量時間傳播狀態。

問題出現在第二個過濾器中。如果假設它正像大多數濾波器實現那樣獲得具有高斯白噪聲的測量結果,那麼來自430ms的輸出將是嚴重建模的測量結果,因爲430ms處的測量誤差將與測量誤差高度相關在400毫秒。在這兩種情況下,第一個濾波器中處理的最後一次測量結果爲400 ms測量結果。

在第二個濾波器中處理時間相關測量噪聲有幾種可能的方法。它們包括向第二個濾波器添加一個或多個狀態以跟蹤測量噪聲的相關部分,並從第一個濾波器的輸入中減去相關噪聲的估計。這將測量序列「預白化」到第二個過濾器中。