2010-11-24 11 views
6

Ich mache etwas Mathe auf Gyroskop und Beschleunigungsmesser Daten kombiniert und ich möchte die resultierenden Daten Tiefpassfilter. Könnte also jemand einen generischen Code für einen Tiefpassfilter posten?Wie implementiere ich einen LowPass Filter?

+0

wollen Sie den Code-Koeffizienten zu erzeugen, oder einfach nur die Filterung durchführen? sollte es ein IIR- oder ein FIR-Filter sein? – Guy

+0

Nun, ich würde gerne einen Filter ähnlich wie Apple verwendet, um die Beschleunigungsmesser Daten zu filtern. Nur ihr Code funktioniert nicht für mich. – cgossain

+0

in welcher Weise funktioniert es nicht? – Guy

Antwort

6

A 1. Ordnung IIR-Tiefpassfilter kann die folgende Form haben:

output_value = rate * input_value + (1.0 - rate) * previous_output_value; 

was ziemlich viel ist, was drin ist Apples AccelerometerGraph Beispiel. Sie wählen den Rate-Parameter abhängig davon, welche Frequenz (sehr, sehr grob, pro Sekunde), die Sie abschwächen möchten oder beginnen zu dämpfen, um eine gleichmäßigere Ausgabe und die Sample-Rate der Eingangsdaten zu erhalten.

2

Ein Tiefpassfilter glättet einfach die Ergebnisse, um die hohen Frequenzen zu entfernen. Der einfachste Tiefpassfilter ist ein Box-Filter, der durch Mittelwertbildung von n Samples gebildet wird.

Für durchschnittlich 2 Proben zusammen ist dies so einfach wie zu tun:

sample[n] (sample[n] + sample[n + 1])/2; 
2

Wenn Apples AccelerometerGraph Beispiel zu komplex für Sie zu verstehen ist, habe ich ein einfacheres Beschleunigungsmesser Beispiel für meine Klasse, die Sie herunterladen können here. Dies implementiert einen einfachen Tiefpass- und Hochpassfilter für rohe Beschleunigungsmesserwerte und protokolliert dann die Ergebnisse auf dem Bildschirm.

Als hotpaw2 und Goz beschreiben, verwendet diese einen sehr einfachen gewichteten gleitenden Durchschnitt für die Berechnung Filter:

UIAccelerationValue lowPassFilteredXAcceleration = (currentXAcceleration * kLowPassFilteringFactor) + (previousLowPassFilteredXAcceleration * (1.0 - kLowPassFilteringFactor)); 
Verwandte Themen