Python

如何使用卡爾曼濾波器?

  • June 24, 2017

我有一個物體在二維空間(表面)中的軌跡。(x,y)軌跡以坐標序列的形式給出。我知道我的測量結果很嘈雜,有時我有明顯的異常值。所以,我想過濾我的觀察結果。

據我了解卡爾曼濾波器,它正是我所需要的。所以,我嘗試使用它。我在這裡找到了一個 python 實現。這是文檔提供的示例:

from pykalman import KalmanFilter
import numpy as np
kf = KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0], [0,0], [0,1]])  # 3 observations
kf = kf.em(measurements, n_iter=5)
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurements)

我在解釋輸入和輸出時遇到了一些麻煩。我想這measurements正是我的測量值(坐標)。雖然我有點困惑,因為示例中的測量值是整數。

我還需要提供一些transition_matricesobservation_matrices. 我應該把什麼值放在那裡?這些矩陣是什麼意思?

最後,我在哪裡可以找到我的輸出?應該是filtered_state_means還是smoothed_state_means。這些陣列具有正確的形狀(2, n_observations)。但是,這些數組中的值離原始坐標太遠了。

那麼,如何使用這個卡爾曼濾波器呢?

這是一個可能對您有用的二維卡爾曼濾波器示例。它在 Python 中。

狀態向量由四個變量組成:x0 方向的位置、x1 方向的位置、x0 方向的速度和x1 方向的速度。請參閱註釋行“x:位置和速度的初始狀態 4 元組:(x0, x1, x0_dot, x1_dot)”。

狀態轉換矩陣 (F) 有助於預測系統/對象的下一個狀態,它結合位置和速度的當前狀態值來預測位置(即 x0 + x0_dot 和 x1 + x1_dot)和速度的當前狀態值速度(即 x0_dot 和 x1_dot)。

測量矩陣 (H) 似乎只考慮 x0 和 x1 位置中的位置。

運動噪聲矩陣 (Q) 初始化為 4×4 單位矩陣,而測量噪聲設置為 0.0001。

希望這個例子能讓你的代碼正常工作。

引用自:https://stats.stackexchange.com/questions/287099

comments powered by Disqus