Python
如何使用卡爾曼濾波器?
我有一個物體在二維空間(表面)中的軌跡。
(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_matrices
和observation_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。
希望這個例子能讓你的代碼正常工作。