Sono bloccato nel modellare un modello di sistema, ovvero ottenere il mio vettore di stato e il vettore di input. La mia ipotesi è che la posizione e la velocità siano il vettore di stato e l'accelerazione sia il vettore di input. La mia seconda ipotesi è che tutte e tre le quantità siano nel vettore di stato e nessuna nel vettore di input.
Quindi ... cos'è il vettore di stato e qual è il vettore di input nel mio caso?
-
Informazioni addizionali:
Ottengo misurazioni dal sensore di posizione e dal sensore di accelerazione. Tutto sta accadendo in 1D, ad esempio su una linea retta. Voglio unire queste letture (e rimuovere il rumore) per ottenere una stima della velocità per ogni intervallo di tempo.
Queste equazioni descrivono il sistema; Non sono sicuro però che siano modellati correttamente. Se comprendo correttamente è sicuro prevedere che l'accelerazione è costante (anche se in realtà cambia) - perché la matrice di covarianza del processo risolve questo assunto (giusto?).
Ho anche alcuni dati di esempio con cui lavorare (i valori di input non sono riportati qui per semplicità):
time pos acc what I should get as output (velocity)
[0.0s] 0.000, -0.000 | 18.850
[0.1s] 1.885, -0.113 | 18.850
[0.2s] 3.768, -0.227 | 18.839
[0.3s] 5.650, -0.340 | 18.816
[0.4s] 7.528, -0.452 | 18.782
[0.5s] 9.401, -0.565 | 18.737
AGGIUNTA 2:
Per una migliore comunicazione sto creando una nuova risposta, ma dovrebbe essere trattato come un commento alla prima risposta. Jason mi hai già aiutato moltissimo e sono davvero grato per il tuo tempo. Tuttavia, ho ancora problemi con questo: i risultati di Kalman Filter non sono quelli previsti. Potresti trovare il tempo di leggere quanto segue, grazie. Ti devo già una birra o due (o casse se vuoi) - se hai paypal contattami su primoz [at] codehunter.eu :)
Ho implementato il modello che Jason aveva proposto nella prima risposta. Ho aggiunto il cretino come quarta variabile di stato. Dopo ore di revisione ho deciso di tornare qui per chiedere aiuto. I valori che ottengo da KF non sono quelli previsti. La tabella seguente rappresenta i dati delle prime 10 iterazioni dell'algoritmo. Notare come il jerk aumenta ogni volta che si sbagliano le altre stime. Dopo un secondo la differenza tra l'accelerazione reale e quella stimata è superiore a 1m / s² (vedi tabella, ultima riga)!
real measured estimated real
time pos acc pos acc pos acc jerk vel[!] velocity
0.0 0.000 -0.000 -0.040 0.030 | -0.300 -0.060 0.000 18.850 <--> 18.850
0.1 1.885 -0.113 1.965 -0.153 | 1.585 -0.061 -0.006 18.844 <--> 18.844
0.2 3.768 -0.227 3.778 -0.247 | 3.469 -0.066 -0.035 18.835 <--> 18.827
0.3 5.650 -0.340 5.750 -0.370 | 5.351 -0.090 -0.122 18.815 <--> 18.799
0.4 7.528 -0.452 7.358 -0.452 | 7.228 -0.152 -0.291 18.769 <--> 18.759
0.5 9.401 -0.565 9.251 -0.555 | 9.094 -0.282 -0.574 18.673 <--> 18.708
0.6 11.269 -0.677 11.309 -0.717 | 10.938 -0.518 -1.006 18.494 <--> 18.646
0.7 13.130 -0.788 13.260 -0.758 | 12.752 -0.840 -1.490 18.233 <--> 18.573
0.8 14.983 -0.899 15.043 -0.949 | 14.520 -1.286 -2.096 17.854 <--> 18.488
0.9 16.827 -1.009 16.977 -1.089 | 16.235 -1.838 -2.770 17.362 <--> 18.393
1.0 18.661 -1.118 18.831 -1.168 | 17.890 -2.477 -3.476 16.762 <--> 18.287
Le mie matrici sono qui:
Cosa sta causando questa aggiunta in ogni timestep per jerk ? Qualcuno delle mie matrici è sbagliato?
Lo stesso vale per la prima soluzione (solo modello a 3 stati): l'accelerazione non cambia come dovrebbe.
ULTIMA MODIFICA:
Finalmente sono riuscito a farlo funzionare. Non sono sicuro che ci sia stato un errore di implementazione o matrici P&Q sbagliate.