2015-11-30 1 views
1

J'ai des données GPS en temps réel à 5 ​​mises à jour par seconde. En moyenne, 80% des données sont assez précises. mais environ 20% des données sont saccadées. Plus occasionnellement, nous obtenons également un point aberrant, c'est-à-dire un point de données erroné loin de la trajectoire réelle.Lissage des données GPS et suppression des valeurs aberrantes

Je cherche un algorithme qui me pouvais faire réaliser les objectifs suivants:

  • Lisser les données afin de saccades est éliminé.
  • Ne pas lisser les données aberrantes mais plutôt éliminer ces points de données erronés et les remplacer par une valeur extrapolée.

Pour donner un peu de contexte, j'ai cherché site stackoverflow.com pour un sujet similaire et trouvé le lien suivant:

Smooth GPS data

Mon ingénieur logiciel mis en œuvre la routine KalmanLatLong qui a été fourni dans ce qui précède lien; mais nous avons rencontré les questions suivantes:

  • L'algorithme est en retard par rapport alors que le sens algo génère des valeurs extrapolées, plus de points de données GPS arrivent (rappelez-vous les données proviennent en temps réel).

  • Dans le cas d'un aberrant occasionnel, l'algo lisse bien. Alors que l'objectif est d'éliminer ces valeurs aberrantes, car ce sont des données erronées.

Je cherche un algorithme qui pourrait fonctionner en temps réel et gérer les mises à jour GPS à 5 Hz et les données tout en lisser élimination des valeurs aberrantes.

Votre aide serait grandement appréciée.

+0

Qu'en est-il de la [implémentation d'exemple] (http://stackoverflow.com/a/15657798/2095090) dans la question que vous avez liée? Je ne sais pas comment il traite des valeurs aberrantes, mais je ne peux pas croire que cette méthode prenne plus de 200 ms. –

+0

Un tel filtrage ne peut être effectué qu'avec des paramètres spécifiques à l'application. Vous devez donc décider quelle distance est acceptable pour être aberrante ou non. Si cela pouvait être généralement résolu, le fabricant de puces GPS l'aurait implémenté. 20% des données sont saccadées? Je ne crois pas. Postez un graphique montrant les coordonnées, qu'est-ce qui est saccadé pour vous? Combien de mètres est votre outlier loin de la position prévue. Pourquoi avez-vous besoin de 5Hz? Plus souvent, les emplacements par seconde ne signifient pas mieux. – AlexWien

Répondre

1

Une approche de base pourrait ressembler à ceci:

  • Prenez les derniers points x et calculer le vecteur delta moyen.
  • Appliquez-le au dernier point pour obtenir le nouveau point extrapolé (où vous vous attendez à ce que le nouveau point soit).
  • Comparez le point extrapolé à ce que vous obtenez du GPS.
  • Si la distance entre le noeud extrapolé et celui que vous obtenez est inférieure à un seuil, alors vous pouvez considérer qu'il s'agit d'un bon point de données et le mélanger avec le noeud extrapolé (le nouveau point est P * GPS_point + (1-P) * extrapolated_point pour certains P compris entre 0 et 1).
  • Si la distance dépasse le seuil, il s'agit probablement d'une valeur aberrante; laissez-la tomber complètement et n'utilisez que le point extrapolé.

Vous devez expérimenter avec des valeurs pour X, P et le seuil et voir ce qui fonctionne pour vous. Ce qui est bon pour la course à haute vitesse n'est pas bon pour les applications de marche. Ajoutez également une coche si vous avez trop de nœuds extrapolés car cela signifie que cet algorithme pense que la plupart des données sont erronées et que cela ne devrait pas être vrai. Vous pouvez vider la liste des points et recommencer à zéro.

0

Vous pouvez incorporer le rejet d'observation dans le filtre kalman lui-même.Ceci est parfois appelé snooping de données.

Je suppose que vous avez le cas simple où vous avez juste les données GPS et que vous voulez incorporer des mesures d'un instant, ou les jeter toutes (plutôt que de jeter juste la latitude).

La notation est conforme à la Wiki article

Dans l'étape de mise à jour, calculer

V = y'*inv(S)*y 

(y est le vecteur résiduel, S la covariance résiduelle) Si votre filtre est correctement réglé, cela a aa distribution chi-square (2), si vous utilisez juste lat et lon, ou chi-square (3) si vous utilisez aussi la hauteur. Si V dépasse le percentile supérieur de 0,1% de cette distribution, rejeter les observations, c'est-à-dire ne pas calculer le gain ou mettre à jour votre covariance d'état ou d'état.

+0

'z' est la mesure réelle, et' S' est 'cov (y)' donc je suppose que vous voulez dire 'y '* inv (S) * y' –

+0

Oops, ta. Corrigée – dmuir