Làm thế nào để sử dụng bộ lọc Kalman?


12

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 đó measurementschí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_matricesobservation_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_meanshay 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?


Các ma trận sẽ được ước tính bởi bộ lọc Kalman. Bạn có thể phải đưa ra một số giá trị bắt đầu cho thuật toán tối ưu hóa hoặc tương tự.
Richard Hardy

1
Bạn cần bắt đầu bằng cách chỉ định một mô hình không gian trạng thái, liên quan đến các quan sát của bạn với các trạng thái không quan sát được và mô tả cách thức trạng thái phát triển theo thời gian; điều này sẽ cung cấp cho bạn ma trận chuyển tiếp và quan sát cũng như ma trận hiệp phương sai của trạng thái ("nhiễu quá trình") và ma trận hiệp phương sai cho lỗi quan sát (đó là F, H, Q và R trong trang wikipedia, A, C, Q & R tại liên kết bạn đưa ra). Kalman FIlter chỉ đơn giản là một thuật toán để ước tính trạng thái (không quan sát được) và ma trận phương sai hiệp phương sai của nó mỗi lần bạn đã chỉ định tất cả những điều đó.
Glen_b -Reinstate Monica

Hàm mà bạn liên kết đến dường như thực hiện một cái gì đó hơi khác so với KF tiêu chuẩn vì nó có thể sử dụng EM để ước tính một số điều bạn thường chỉ định.
Glen_b -Reinstate Monica

Câu trả lời:


8

Dưới đây là một ví dụ về bộ lọc Kalman 2 chiều có thể hữu ích cho bạn. Nó có trong Python.

Vectơ trạng thái bao gồm bốn biến: vị trí theo hướng x0, vị trí theo hướng x1, vận tốc theo hướng x0 và vận tốc theo hướng x1. Xem dòng nhận xét "x: trạng thái ban đầu 4-tuple của vị trí và vận tốc: (x0, x1, x0_dot, x1_dot)".

Ma trận chuyển trạng thái (F), tạo điều kiện dự đoán hệ thống / đối tượng trạng thái tiếp theo, kết hợp các giá trị trạng thái hiện tại của vị trí và vận tốc để dự đoán vị trí (ví dụ x0 + x0_dot và x1 + x1_dot) và các giá trị trạng thái hiện tại của vận tốc cho vận tốc (tức là x0_dot và x1_dot).

Ma trận đo lường (H) dường như chỉ xem xét vị trí trong cả hai vị trí x0 và x1.

Ma trận nhiễu chuyển động (Q) được khởi tạo thành ma trận nhận dạng 4 nhân 4, trong khi nhiễu đo được đặt thành 0,0001.

Hy vọng ví dụ này sẽ cho phép bạn làm cho mã của bạn hoạt động.


1

Bộ lọc Kalman là bộ lọc dự báo dựa trên mô hình - vì vậy việc triển khai chính xác bộ lọc sẽ có ít hoặc không có độ trễ về thời gian trên đầu ra khi được cung cấp với các phép đo thông thường ở đầu vào. Tôi thấy luôn luôn đơn giản hơn để triển khai bộ lọc kalman trực tiếp thay vì sử dụng các thư viện vì mô hình không phải lúc nào cũng tĩnh.

Cách thức hoạt động của bộ lọc là dự đoán giá trị hiện tại dựa trên trạng thái trước đó bằng cách sử dụng mô tả toán học của quy trình và sau đó sửa chữa ước tính đó dựa trên phép đo cảm biến hiện tại. Do đó, nó cũng có khả năng ước tính trạng thái ẩn (không được đo) và các tham số khác được sử dụng trong mô hình miễn là mối quan hệ của chúng với trạng thái đo được xác định trong mô hình.

Tôi sẽ đề nghị bạn nghiên cứu bộ lọc kalman chi tiết hơn vì nếu không hiểu thuật toán, rất dễ mắc lỗi khi cố gắng sử dụng bộ lọc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.