Wie benutze ich einen Kalman-Filter?

12

Ich habe eine Flugbahn eines Objekts in einem 2D-Raum (einer Oberfläche). Die Flugbahn wird als eine Folge von (x,y)Koordinaten angegeben. Ich weiß, dass meine Messungen laut sind und ich manchmal offensichtliche Ausreißer habe. Also möchte ich meine Beobachtungen filtern.

Soweit ich Kalman Filter verstanden habe, tut es genau das, was ich brauche. Also versuche ich es zu benutzen. Ich habe hier eine Python-Implementierung gefunden . Und dies ist das Beispiel, das die Dokumentation bietet:

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)

Ich habe einige Probleme mit der Interpretation von Input und Output. Ich denke measurementsgenau das sind meine Maße (Koordinaten). Obwohl ich ein bisschen verwirrt bin, weil die Messungen im Beispiel ganze Zahlen sind.

Ich muss auch einige zur Verfügung stellen transition_matricesund observation_matrices. Welche Werte soll ich dort setzen? Was bedeuten diese Matrizen?

Wo kann ich meine Ausgabe finden? Sollte es sein filtered_state_meansoder smoothed_state_means. Diese Arrays haben korrekte Formen (2, n_observations). Die Werte in diesem Array sind jedoch zu weit von den ursprünglichen Koordinaten entfernt.

Wie benutzt man diesen Kalman-Filter?

römisch
quelle
Die Matrizen werden vom Kalman-Filter geschätzt. Sie müssen wahrscheinlich nur einige Startwerte für den Optimierungsalgorithmus oder dergleichen angeben.
Richard Hardy
1
Sie müssen zunächst ein Zustandsraummodell angeben, das Ihre Beobachtungen mit den nicht beobachteten Zuständen in Beziehung setzt und beschreibt, wie sich der Zustand im Laufe der Zeit entwickelt. Dies gibt Ihnen Ihre Übergangs- und Beobachtungsmatrix sowie die Kovarianzmatrix des Zustandsfehlers ("Prozessrauschen") und die Kovarianzmatrix für den Beobachtungsfehler (dies sind F, H, Q und R auf der Wikipedia-Seite, A, C, Q & R bei dem Link, den Sie geben). Der Kalman-Filter ist einfach ein Algorithmus zum Schätzen des (nicht beobachtbaren) Zustands und seiner Varianz-Kovarianz-Matrix zu jedem Zeitpunkt, wenn Sie alle diese Dinge spezifiziert haben.
Glen_b
Diese Funktion, auf die Sie verlinken, scheint etwas anderes zu implementieren als die Standard-KF, da sie EM verwenden kann, um einige Dinge abzuschätzen, die Sie normalerweise spezifizieren würden.
Glen_b

Antworten:

8

Hier ist ein Beispiel für einen zweidimensionalen Kalman-Filter, der für Sie nützlich sein kann. Es ist in Python.

Der Zustandsvektor besteht aus vier Variablen: Position in x0-Richtung, Position in x1-Richtung, Geschwindigkeit in x0-Richtung und Geschwindigkeit in x1-Richtung. Siehe die kommentierte Zeile "x: Anfangszustand 4-Tupel von Ort und Geschwindigkeit: (x0, x1, x0_dot, x1_dot)".

Die Zustandsübergangsmatrix (F), die die Vorhersage des nächsten System- / Objektzustands erleichtert, kombiniert die gegenwärtigen Zustandswerte der Position und Geschwindigkeit, um die Position (dh x0 + x0_dot und x1 + x1_dot) und die gegenwärtigen Zustandswerte der Geschwindigkeit für vorherzusagen Geschwindigkeit (dh x0_dot und x1_dot).

Die Messmatrix (H) scheint nur die Position in den Positionen x0 und x1 zu berücksichtigen.

Die Bewegungsrauschmatrix (Q) wird mit einer 4 × 4-Identitätsmatrix initialisiert, während das Messrauschen auf 0,0001 gesetzt wird.

Hoffentlich können Sie mit diesem Beispiel Ihren Code zum Laufen bringen.

Michael_RW
quelle
1

Der Kalman-Filter ist ein modellbasierter Vorhersagefilter. Bei einer korrekten Implementierung des Filters tritt am Ausgang nur eine geringe oder keine Zeitverzögerung auf, wenn regelmäßige Messungen am Eingang durchgeführt werden. Ich finde es immer einfacher, Kalman-Filter direkt zu implementieren, als Bibliotheken zu verwenden, da das Modell nicht immer statisch ist.

Mit dem Filter wird der aktuelle Wert basierend auf dem vorherigen Status anhand einer mathematischen Beschreibung des Prozesses vorhergesagt und diese Schätzung basierend auf der aktuellen Sensormessung korrigiert. Es ist somit auch in der Lage, den verborgenen Zustand (der nicht gemessen wird) und andere Parameter, die im Modell verwendet werden, zu schätzen, solange deren Beziehungen zum gemessenen Zustand im Modell definiert sind.

Ich würde vorschlagen, dass Sie den Kalman-Filter genauer untersuchen, da es ohne Verständnis des Algorithmus sehr leicht ist, Fehler bei der Verwendung des Filters zu machen.

Martin
quelle