Tôi có một quỹ đạo của một vật thể trong không gian 2D (một bề mặt). Quỹ đạo được đưa ra như một chuỗi (x,y)
tọa độ. Tôi biết rằng các phép đo của tôi là ồn ào và đôi khi tôi có những ngoại lệ rõ ràng. Vì vậy, tôi muốn lọc các quan sát của tôi.
Theo như tôi hiểu bộ lọc Kalman, nó thực hiện chính xác những gì tôi cần. Vì vậy, tôi cố gắng sử dụng nó. Tôi tìm thấy một thực hiện trăn ở đây . Và đây là ví dụ mà tài liệu cung cấp:
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)
Tôi có một số rắc rối với việc giải thích đầu vào và đầu ra. Tôi đoán đó measurements
chính xác là số đo của tôi (tọa độ). Mặc dù tôi hơi bối rối vì các phép đo trong ví dụ là số nguyên.
Tôi cũng cần cung cấp một số transition_matrices
và observation_matrices
. Những giá trị nào tôi nên đặt ở đó? Những ma trận này có ý nghĩa gì?
Cuối cùng, tôi có thể tìm thấy đầu ra của mình ở đâu? Nó nên filtered_state_means
hay smoothed_state_means
. Những mảng này có hình dạng chính xác (2, n_observations)
. Tuy nhiên, các giá trị trong các mảng này quá xa so với tọa độ ban đầu.
Vậy, làm thế nào để sử dụng bộ lọc Kalman này?