budo's Web
Hier findet ihr einiges zu meinen Hobbies

Messungen mit dem Beschleunigungssensor ADXL330 Teil 2

Kalman-Filter

Nach einem Hinweis eines Freundes die etwas chaotischen Beschleunigungsmesswerte doch zu filtern, bin ich auf die Anwendung eines einfachen 1-dimensionalen Kalmanfilters gestoßen. Kalmanfilter werden in vielen Bereichen eingesetzt zur Eliminierung von Rauschen eingesetzt, bei GPS, Beschleunigungssensoren, in der Robotik, .. . Die Überprüfung der Filterfunktion habe ich mit einem C-Programm durchgeführt, um immer wieder identische Source-Daten verwenden zu können. Da ein 1-dimensionales Kalmanfilter einfach zu programmieren ist, lässt es sich aber auch in Arduino implementieren. Experimentell wurde der Wertebereich der 4 Kalman-Parameter (process noise q, sensor noise r, estimated error p und initial value) ermittelt und die Einstellung auf einen Parameter reduziert. Hier kann wahlweise process noise im Bereich von 0 .. 0.999 oder sensor noise im Bereich von 999 .. 1 gewählt werden.

Nachfolgend Detail-Auszüge der Original-Messungen (Treppe, Bremsen, Randstein) der vorherigen Seite mit den entsprechenden gefilterten Werten bei gewählter starker Kalman Dämpfung. Zur besserer Anschauung ist einmal der Satz mit und ohne die Source-Signale dargestellt.

kmf

kmf

kmf

kmf

kmf

kmf

Das Ergebnis kann sich sehen lassen. Die gefilterten Signal können nun deutlich besser bewertet und ausgewertet werden.

Smooth-Filter

Alternativ zu obigem Kalman-Filter läßt sich natürlich auch eine einfaches Smooth-Filter (digitales Lowpass Filter) einsetzen. Nachfolgend Detail-Auszüge der Original-Messung für den Bremsvorgang zeigen die Vergleichbarkeit der Ergebnisse.

kmf

kmf

Der Vorteil des Smooth-Filters gegenüber dem Kalman-Filter ist die geringere Fließkomma-Arithmetik und die Vermeidung einer Fließkomma-Division. Das macht sich in der Geschwindigkeit bemerkbar und die Integration auf einem Arduino ist minimal.

Nach Oben