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 measurements
c'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_matrices
et observation_matrices
. Quelles valeurs dois-je y mettre? Que signifient ces matrices?
Enfin, où puis-je trouver ma sortie? Que ce soit filtered_state_means
ou 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?
la source
Réponses:
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.
la source
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.
la source