Comment utiliser un filtre Kalman?

12

J'ai une trajectoire d'un objet dans un espace 2D (une surface). La trajectoire est donnée comme une séquence de (x,y)coordonnées. Je sais que mes mesures sont bruyantes et j'ai parfois des valeurs aberrantes évidentes. Donc, je veux filtrer mes observations.

Pour autant que je comprenne le filtre Kalman, il fait exactement ce dont j'ai besoin. Donc, j'essaie de l'utiliser. J'ai trouvé une implémentation python ici . Et voici l'exemple fourni par la documentation:

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)

J'ai des problèmes avec l'interprétation des entrées et sorties. Je suppose que measurementsc'est exactement ce que mes mesures sont (coordonnées). Bien que je sois un peu confus parce que les mesures dans l'exemple sont des entiers.

Je dois également en fournir transition_matriceset observation_matrices. Quelles valeurs dois-je y mettre? Que signifient ces matrices?

Enfin, où puis-je trouver ma sortie? Que ce soit filtered_state_meansou smoothed_state_means. Ces tableaux ont des formes correctes (2, n_observations). Cependant, les valeurs de ces tableaux sont trop éloignées des coordonnées d'origine.

Alors, comment utiliser ce filtre Kalman?

romain
la source
Les matrices seront estimées par le filtre de Kalman. Vous devrez probablement donner juste quelques valeurs de départ pour l'algorithme d'optimisation ou similaire.
Richard Hardy
1
Vous devez commencer par spécifier un modèle d'espace d'état, qui relie vos observations aux états non observés et décrit comment l'état évolue au fil du temps; cela vous donnera votre matrice de transition et d'observation ainsi que la matrice de covariance de l'erreur d'état ("bruit de processus") et la matrice de covariance pour l'erreur d'observation (ce sont F, H, Q et R dans la page wikipedia, A, C, Q & R au lien que vous donnez). Le Kalman FIlter est simplement un algorithme pour estimer l'état (non observable) et sa matrice de variance-covariance à chaque fois une fois que vous avez spécifié toutes ces choses.
Glen_b -Reinstate Monica
Cette fonction à laquelle vous vous connectez semble implémenter quelque chose d'un peu différent du KF standard car elle peut utiliser EM pour estimer certaines choses que vous spécifieriez normalement.
Glen_b -Reinstate Monica

Réponses:

8

Voici un exemple de filtre de Kalman bidimensionnel qui peut vous être utile. C'est en Python.

Le vecteur d'état est composé de quatre variables: position dans la direction x0, position dans la direction x1, vitesse dans la direction x0 et vitesse dans la direction x1. Voir la ligne commentée "x: état initial 4-tuple d'emplacement et de vitesse: (x0, x1, x0_dot, x1_dot)".

La matrice de transition d'état (F), qui facilite la prédiction de l'état suivant du système / des objets, combine les valeurs d'état actuel de position et de vitesse pour prédire la position (c'est-à-dire x0 + x0_dot et x1 + x1_dot) et les valeurs d'état actuel de vitesse pour vitesse (ie x0_dot et x1_dot).

La matrice de mesure (H) semble considérer uniquement la position dans les positions x0 et x1.

La matrice de bruit de mouvement (Q) est initialisée en une matrice d'identité 4 x 4, tandis que le bruit de mesure est défini sur 0,0001.

Espérons que cet exemple vous permettra de faire fonctionner votre code.

Michael_RW
la source
1

Le filtre de Kalman est un filtre prédictif basé sur un modèle - en tant que telle, une mise en œuvre correcte du filtre aura peu ou pas de retard sur la sortie lorsqu'il est alimenté avec des mesures régulières à l'entrée. Je trouve qu'il est toujours plus simple d'implémenter directement le filtre kalman plutôt que d'utiliser des bibliothèques car le modèle n'est pas toujours statique.

Le fonctionnement du filtre consiste à prévoir la valeur actuelle en fonction de l'état précédent à l'aide d'une description mathématique du processus, puis à corriger cette estimation en fonction de la mesure actuelle du capteur. Il est ainsi également capable d'estimer l'état caché (qui n'est pas mesuré) et d'autres paramètres utilisés dans le modèle tant que leurs relations avec l'état mesuré sont définies dans le modèle.

Je vous suggère d'étudier le filtre kalman plus en détail car sans comprendre l'algorithme, il est très facile de faire des erreurs lorsque vous essayez d'utiliser le filtre.

Martin
la source