Come usare un filtro Kalman?


12

Ho una traiettoria di un oggetto in uno spazio 2D (una superficie). La traiettoria è data come una sequenza di (x,y)coordinate. So che le mie misurazioni sono rumorose e a volte ho ovvi valori anomali. Quindi, voglio filtrare le mie osservazioni.

Per quanto ho capito filtro Kalman, fa esattamente quello che mi serve. Quindi, provo ad usarlo. Ho trovato un'implementazione di Python qui . E questo è l'esempio che la documentazione fornisce:

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)

Ho dei problemi con l'interpretazione di input e output. Immagino che measurementssia esattamente quello che sono le mie misure (coordinate). Anche se sono un po 'confuso perché le misure nell'esempio sono numeri interi.

Ho anche bisogno di fornire alcuni transition_matricese observation_matrices. Quali valori dovrei mettere lì? Cosa significano queste matrici?

Infine, dove posso trovare il mio output? Dovrebbe essere filtered_state_meanso smoothed_state_means. Questi array hanno forme corrette (2, n_observations). Tuttavia, i valori in questo array sono troppo lontani dalle coordinate originali.

Quindi, come usare questo filtro Kalman?


Le matrici saranno stimate dal filtro Kalman. Probabilmente devi dare solo alcuni valori iniziali per l'algoritmo di ottimizzazione o simili.
Richard Hardy,

1
Devi iniziare specificando un modello dello spazio degli stati, che mette in relazione le tue osservazioni con gli stati non osservati e descrive come lo stato si evolve nel tempo; questo ti darà la tua matrice di transizione e osservazione, nonché la matrice di covarianza dell'errore di stato ("rumore di processo") e la matrice di covarianza per l'errore di osservazione (questi sono F, H, Q e R nella pagina di Wikipedia, A, C, Q & R al link fornito). Kalman FIlter è semplicemente un algoritmo per stimare lo stato (non osservabile) e la sua matrice varianza-covarianza ogni volta che hai specificato tutte queste cose.
Glen_b

Quella funzione a cui ti colleghi sembra implementare qualcosa di leggermente diverso dallo standard KF poiché può usare EM per stimare alcune cose che normalmente specificheresti.
Glen_b

Risposte:


8

Ecco un esempio di filtro Kalman bidimensionale che potrebbe esserti utile. È in Python.

Il vettore di stato è costituito da quattro variabili: posizione nella direzione x0, posizione nella direzione x1, velocità nella direzione x0 e velocità nella direzione x1. Vedi la riga commentata "x: stato iniziale 4-tupla di posizione e velocità: (x0, x1, x0_dot, x1_dot)".

La matrice di transizione di stato (F), che facilita la previsione del prossimo stato del sistema / oggetti, combina i valori di stato attuale di posizione e velocità per prevedere la posizione (cioè x0 + x0_dot e x1 + x1_dot) e i valori di stato attuale della velocità per velocità (cioè x0_dot e x1_dot).

La matrice di misurazione (H) sembra considerare solo la posizione in entrambe le posizioni x0 e x1.

La matrice del rumore di movimento (Q) viene inizializzata su una matrice di identità 4 per 4, mentre il rumore di misurazione è impostato su 0,0001.

Speriamo che questo esempio ti permetta di far funzionare il tuo codice.


1

Il filtro Kalman è un filtro predittivo basato sul modello - in quanto tale corretta implementazione del filtro avrà un ritardo nell'output minimo o nullo se alimentato con misurazioni regolari all'ingresso. Trovo che sia sempre più semplice implementare il filtro kalman direttamente anziché utilizzare le librerie perché il modello non è sempre statico.

Il modo in cui funziona il filtro è prevedere il valore corrente in base allo stato precedente utilizzando la descrizione matematica del processo e quindi corregge tale stima in base alla misurazione corrente del sensore. È quindi anche in grado di stimare lo stato nascosto (che non viene misurato) e altri parametri che vengono utilizzati nel modello a condizione che le loro relazioni con lo stato misurato siano definite nel modello.

Ti suggerirei di studiare il filtro kalman in modo più dettagliato perché senza capire l'algoritmo è molto facile commettere errori quando si tenta di utilizzare il filtro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.