Contexte: Pour donner un peu de contexte à tout le monde, j'essaie de lisser les données GPS reçues d'un appareil utilisant le filtre de Kalman (Apache ). Quel type de bruits dynamiques dois-je inclure dans ma mise en œuvre par rapport à la matrice P0, Q et R sachant que la seule entrée que j'ai en dehors de la position (X et Y) est précision horizontale et la vitesse pour les composants X et Y. Ce n'est pas un exemple de vitesse constante puisque la vitesse peut changer d'un ping à un autre ping.Comment remplir les matrices dans le filtre Apache Commons Kalman Mise en œuvre
Bibliothèque de mise en œuvre: Apache Common
- http://commons.apache.org/proper/commons-math/userguide/filter.html
Utilisation: Je ne considérais l'espace 2D pour le moment
entrées que j'ai avec moi: 1. latitude
2. longitude
3 Précision horizontale ou Dilution horizontale de précision (HDOP) en mètres/s
4. Temps entre deux pings (dt) = 30 secondes
Sorties Je me soucie de
1. nouveau Latitude
2. Longitude nouvelle
Valeurs calculées: Vx (vitesse dans la direction X) Vy (vitesse dans la direction Y) L'objet sera constamment en mouvement, mais avec différents vélocités afin que je puisse calculer Vx et Vy en utilisant le formulaire V * sin (thêta) et V * Cosine (thêta)
Comment dois-je mapper mes valeurs à l'implémentation Apache Common?
configuration actuelle:
X = Initial State = [
{X Y X-Vel Y-Vel}
]
// I only care about X and Y coordinates so this is a 2 * 4 matrix
H = Observation variables = [
{1, 0, 0, 0},
{0, 1, 0, 0}
]
// This is a 4 * 4 matrix
P0 = Cov(X) = [
{(horizontal accuracy from i/p), 0, 0, 0},
{0, (horizontal accuracy from i/p), 0, 0},
{0, 0, (some initial value for VY), 0},
{0, 0, 0, (some initial value for VX) }
]
// Copied this from somewhere. What values should I have in this? //
This is a 4 * 4 matrix
Q = Cov(Dynamic noise) = [
{ Math.pow(dt, 4d)/4d, 0d, Math.pow(dt, 3d)/2d, 0d },
{ 0d, Math.pow(dt, 4d)/4d, 0d, Math.pow(dt, 3d)/2d },
{ Math.pow(dt, 3d)/2d, 0d, Math.pow(dt, 2d), 0d },
{ 0d, Math.pow(dt, 3d)/2d, 0d, Math.pow(dt, 2d) }
]
// This is a 2 * 2 matrix
R = Cov(measurement noise) = [
{ Math.pow((horizontal accuracy from i/p), 2d) , 0},
{ 0, Math.pow((horizontal accuracy from i/p), 2d)}
]
// This is a 4 * 4 matrix
A = State transition matrix = [
{ 1d, 0d, dt, 0d },
{ 0d, 1d, 0d, dt },
{ 0d, 0d, 1d, 0 },
{ 0d, 0d, 0d, 1d }
]
sont mes matrices correctes pour ce que je suis en train de faire? Quand je les cours, je continue à obtenir MatrixDimensionMismatchException et j'ai donc décidé de poser une question. Toute aide serait appréciée.
Veuillez reformater votre question. Pas besoin de formateur de fantaisie. Utilisez le formatage du code pour le code et la citation pour les devis. –
Je pense que c'est inhabituel, mais bien formaté, pas besoin de changer le formatage – AlexWien
Les coordonnées GPS sont déjà fortement filtrées kalman. Le lissage les rendra moins précis. Pensez si vous pourriez avoir besoin de filtrer les emplacements indésirables au lieu de lisser. – AlexWien