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 measurements
genau 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_matrices
und observation_matrices
. Welche Werte soll ich dort setzen? Was bedeuten diese Matrizen?
Wo kann ich meine Ausgabe finden? Sollte es sein filtered_state_means
oder 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?
quelle
Antworten:
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.
quelle
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.
quelle