Android Kompass Lärm Algorithmus

8

Ich versuche, das Rauschen des Orientierungs- / Kompasssensors in meinem magischen Telefon herauszufiltern.

Einige der Messwerte scheinen um 90-180 Grad zu schwanken und es gibt eine Menge Wackeln. Ich habe verschiedene Dinge mit begrenztem Erfolg ausprobiert, also habe ich mich gefragt, ob irgendjemand einen Algorithmus empfehlen könnte, um diese Art von Rauschen zu filtern, um eine stabile Ausgabe zu erhalten.

BR, Mads

    
Mads Kristiansen 10.12.2009, 22:59
quelle

7 Antworten

14

Sie benötigen einen Tiefpassfilter. Es gibt Erklärungen und einen einfachen Algorithmus auf Wikipedia

    
db_ 10.12.2009, 23:43
quelle
4

Das ist wirklich spät, aber es könnte Leuten wie mir helfen, die zu dieser Frage gekommen sind.

Verwenden Sie den Typ Rotationsvektorsensor. Sie müssen kein Tiefpassfilter verwenden oder einen Durchschnittswert der letzten x Sensorwerte berechnen.

Hier ist ein Code:

%Vor%

Ich fand die Werte sehr schnell und problemlos und nutze diese in meiner App. Ich habe Beschleunigungsmesser und Magnetometer als Backup verwendet, falls der Rotationsvektor im Gerät nicht vorhanden ist, es handelt sich um einen softwarebasierten Sensor (Sensor Fusion), der das Magnetometer, Beschleunigungsmesser und Gyroskop (falls vorhanden) verwendet.

    
Rahul Sainani 01.09.2016 16:46
quelle
3

Ich habe den Großteil des Rauschens durch eine langsamere Aktualisierungszeit losgeworden. Ich bin mir nicht sicher, ob Android einen eingebauten Filter für diese hat, aber es scheint sich zu stabilisieren. Etwas wie:

%Vor%

SensorManager bietet Folgendes an:

  • SENSOR_DELAY_FASTEST : Erhalten Sie Sensordaten so schnell wie möglich
  • SENSOR_DELAY_GAME : Rate geeignet für Spiele
  • SENSOR_DELAY_NORMAL : rate (Standard), geeignet für Änderungen der Bildschirmausrichtung
  • SENSOR_DELAY_UI : Rate geeignet für die Benutzeroberfläche
Jeremy Logan 11.12.2009 17:20
quelle
2

Was hast du probiert? Wie viele Messwerte bekommst du pro Sekunde?

Ich würde etwas im Sinne eines Durchschnitts der letzten X Anzahl von Lesungen vorschlagen, um die "Jiggles" loszuwerden und alle Lesungen wegzuwerfen, die sich wild von der aktuellen Richtung unterscheiden, um jedes verrückte "Springen" von Werten zu stoppen . Je nachdem, wie viele Messwerte Sie erhalten und wie viel Durchschnitt Sie erzielen, verliert Ihre App möglicherweise die Reaktionsfähigkeit.

Der folgende Link könnte nützlich sein. Ссылка

    
Loopo 10.12.2009 23:38
quelle
1

Wenn Sie eine signifikante Anzahl von völlig falschen Werten erhalten, möchten Sie diese wahrscheinlich nicht nur mitteln. Sie könnten zuerst versuchen, einen Median-Filter anzuwenden - nehmen Sie N Samples, berechnen Sie den Median und werfen Sie etwas mehr als + - irgendeinen Schwellenwert raus. Sie können danach einen Glättungsfilter anwenden.

    
Mark Bessey 11.12.2009 04:04
quelle
0

Wenn Ihre Messwerte "90-180 Grad aus" sind, müssen Sie entweder Ihren Kompass kalibrieren oder Ihr Sensor ist fehlerhaft.

Sicherlich hat der Magnetsensor viel Wackeln, aber die "Standardabweichung" eines solchen Rauschens beträgt etwa 4 Grad. Sie können eine Vielzahl von mathematischen Filtern (Tiefpass, Kalman) und Algorithmen (Mittelwertbildung, fallweise falsche Messwerte) auswählen, um sie auf die Messungen anzuwenden, die Ihnen akzeptable Ergebnisse liefern.

    
jap1968 05.12.2011 00:05
quelle
0

Benutzt du:

%Vor%

Sie registrieren möglicherweise zwei separate Sensorhandles, die beide auf Ihre onSensorChanged-Methode verweisen. Nun, bei meiner onSensorChanged-Methode sende ich den Peilungswert basierend auf dem Herstellernamen entweder an die primäre oder an die sekundäre Methode. Probieren Sie diesen Code aus:

%Vor%     
giannileuani 22.07.2013 16:31
quelle

Tags und Links