Jak korzystać z filtra Kalmana?

12

Mam trajektorię obiektu w przestrzeni 2D (powierzchni). Trajektoria jest podana jako ciąg (x,y)współrzędnych. Wiem, że moje pomiary są hałaśliwe i czasami mam oczywiste wartości odstające. Chcę więc odfiltrować moje obserwacje.

O ile rozumiem filtr Kalmana, robi dokładnie to, czego potrzebuję. Więc próbuję go użyć. Znalazłem tutaj implementację Pythona . A oto przykład dokumentacji:

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)

Mam pewne problemy z interpretacją danych wejściowych i wyjściowych. Sądzę, że measurementsdokładnie takie są moje pomiary (współrzędne). Chociaż jestem trochę zdezorientowany, ponieważ pomiary w tym przykładzie są liczbami całkowitymi.

Muszę też podać trochę transition_matricesi observation_matrices. Jakie wartości powinienem tam umieścić? Co oznaczają te macierze?

Wreszcie, gdzie mogę znaleźć moje wyniki? Powinien to być filtered_state_meanslub smoothed_state_means. Te tablice mają prawidłowe kształty (2, n_observations). Jednak wartości w tych tablicach są zbyt dalekie od pierwotnych współrzędnych.

Jak korzystać z tego filtra Kalmana?

rzymski
źródło
Matryce zostaną oszacowane przez filtr Kalmana. Prawdopodobnie musisz podać tylko kilka wartości początkowych dla algorytmu optymalizacji lub tym podobnych.
Richard Hardy
1
Musisz zacząć od określenia modelu przestrzeni stanów, który wiąże twoje obserwacje z nieobserwowanymi stanami i opisuje, jak stan ewoluuje w czasie; da ci to twoją macierz przejścia i obserwacji, a także macierz kowariancji błędu stanu („szum procesu”) oraz macierz kowariancji błędu obserwacji (są to F, H, Q i R na stronie wikipedii A, C, Q i R pod podanym linkiem). Filtr Kalmana jest po prostu algorytmem do szacowania (nieobserwowalnego) stanu i jego macierzy wariancji-kowariancji za każdym razem, gdy określisz wszystkie te rzeczy.
Glen_b
Ta funkcja, do której linkujesz, wydaje się implementować coś nieco innego niż standardowy KF, ponieważ może użyć EM do oszacowania niektórych rzeczy, które normalnie określisz.
Glen_b

Odpowiedzi:

8

Oto przykład dwuwymiarowego filtra Kalmana, który może ci się przydać. Jest w Pythonie.

Wektor stanu składa się z czterech zmiennych: pozycja w kierunku x0, pozycja w kierunku x1, prędkość w kierunku x0 i prędkość w kierunku x1. Zobacz skomentowany wiersz „x: stan początkowy 4-krotność lokalizacji i prędkości: (x0, x1, x0_dot, x1_dot)”.

Macierz przejścia stanu (F), która ułatwia przewidywanie następnego stanu systemu / obiektów, łączy wartości stanu obecnego położenia i prędkości w celu przewidywania położenia (tj. X0 + x0_dot i x1 + x1_dot) oraz wartości stanu obecnego prędkości dla prędkość (tj. x0_dot i x1_dot).

Matryca pomiarowa (H) wydaje się uwzględniać tylko pozycję w pozycjach x0 i x1.

Macierz szumów ruchu (Q) jest inicjalizowana do matrycy tożsamości 4 na 4, podczas gdy szum pomiaru jest ustawiony na 0,0001.

Mam nadzieję, że ten przykład pozwoli ci uruchomić kod.

Michael_RW
źródło
1

Filtr Kalmana jest filtrem predykcyjnym opartym na modelu - ponieważ taka poprawna implementacja filtra będzie miała niewielkie opóźnienie na wyjściu lub jego brak, jeśli będzie zasilany regularnymi pomiarami na wejściu. Uważam, że zawsze łatwiej jest zaimplementować filtr kalmana bezpośrednio niż w przypadku korzystania z bibliotek, ponieważ model nie zawsze jest statyczny.

Filtr działa w ten sposób, że przewiduje bieżącą wartość w oparciu o poprzedni stan, wykorzystując matematyczny opis procesu, a następnie koryguje to oszacowanie na podstawie bieżącego pomiaru czujnika. Jest zatem w stanie oszacować stan ukryty (który nie jest mierzony) i inne parametry, które są używane w modelu, o ile ich relacje ze stanem mierzonym są zdefiniowane w modelu.

Sugerowałbym dokładniejsze przestudiowanie filtra Kalmana, ponieważ bez zrozumienia algorytmu bardzo łatwo jest popełnić błędy podczas próby użycia filtra.

Jaskółka oknówka
źródło