Frage

auf einer Tracking-Anwendung Arbeiten mit GPS. Es ist alles in Ordnung, aber manchmal wegen der geschlossenen Räume oder bei schlechtem Wetter I ungenau Punkte. Wenn man sie plotten, es funktioniert einfach nicht richtig angezeigt werden, mit vielen Sprüngen / Sprünge.

Was Algorithmus sollte ich laufen die schlechten Signale herauszufiltern Es sieht aus wie eine Anwendung eines Verwischung Algorithmus für mich, aber was denken Sie?

War es hilfreich?

Lösung

Es gibt ein paar Optionen:

  1. die Ausreißer Hinaus
  2. Filter
  3. Verwenden Sie ein besseres GPS
  4. Verwenden Sie eine externe Datenquelle (snap to road)
  5. Die Kombination der oben

Ich mag Filter verwenden - Ein Kalman-Filter die typisch ist (und oft am besten) Lösung - einen Betrag von prädiktiven Lungs verwendet, die besser als ein billiges IIR (Infinite Impulse Response) Filter ist:

FilteredValue = FilteredValue * 0,75 + NewValue * 0,25

Sie können GPS Module erhalten, die Sie geben 4-5 Korrekturen pro Sekunde, was Sie oben ‚billig‘ Filter mit angemessenen Reaktionszeiten.

verwenden können

Sie können auch einfach ein besseres GPS (SiRF III oder besser), die nicht so laut und hat eine bessere Indoor-Empfang (wenn möglich).

Consumer-GPS-Geräte „auf der Straße schnappen“, wo möglich, so Fehler von der Straße vom Verbraucher nicht zu sehen sind, sowie ein paar der anderen Techniken.

Ein Kalman ist nicht einfach zu implementieren, aber ohne einen externen Daten-Set oder Sensor (wie Fahrgeschwindigkeit), ist es die beste Option. Schauen Sie sich http://www.google.com/search?q= öffnen% 20source% 20kalman% 20filter für Code und Tutorials auf sie.

-Adam

Andere Tipps

re: Filterung in Gegenwart von "Pop" Lärm -

Eine der einfachsten Möglichkeiten, die ich gefunden habe, dies zu tun ist:

delta = newValue - filteredValue;
delta = delta > LARGEST_SANE_DELTA ? LARGEST_SANE_DELTA
     : (delta < -LARGEST_SANE_DELTA ? -LARGEST_SANE_DELTA : delta);
filteredValue += alpha*delta;

wobei alpha = 1 / tau und tau die Zeitkonstante der Tiefpassfilter in Frage, ausgedrückt in Vielfachen der Zeit zwischen Iterationen des obigen Codes. Der Wert LARGEST_SANE_DELTA stellt eine große mögliche Änderung in newValue und Clips zu großer Variation in Eingang. Es gibt vielleicht bessere Möglichkeiten, diese Art von Lärm Ablehnung, aber sie sind komplizierter, und die, die ich erwähnt ist ziemlich einfach.

Verwenden Sie Kalman-Filter .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top