2010-02-16 7 views

Antwort

16

Ein einfacher, einpoliger, rekursiver IIR-Tiefpassfilter ist schnell und einfach zu implementieren, z.B.

xf = k * xf + (1.0 - k) * x; 
yf = k * yf + (1.0 - k) * y; 

wobei x, y die rohen (ungefiltert) X/Y-Beschleunigungsmessersignale, xf, sind yf die gefilterten Ausgangssignale und k bestimmt die Zeitkonstante der Filter (typischerweise ein Wert zwischen 0,9 und 0,9999. .., wobei ein größeres k eine längere Zeitkonstante bedeutet).

Sie können k empirisch bestimmen, oder wenn Sie Ihre gewünschte Grenzfrequenz wissen, Fc, dann können Sie die Formel verwenden:

k = 1 - exp(-2.0 * PI * Fc/Fs) 

wo Fs die Abtastrate ist.

Beachten Sie, dass xf, yf die vorherigen Werte des Ausgangssignals auf dem RHS und die neuen Ausgabewerte auf dem LHS des obigen Ausdrucks sind.

Beachten Sie auch, dass wir hier davon ausgehen, dass Sie die Beschleunigungsmessersignale in regelmäßigen Zeitintervallen, z. alle 10 ms. Die Zeitkonstante ist eine Funktion sowohl von k als auch von diesem Abtastintervall.

+0

so x und y sind der accelerometer.x und accelerometer.y, ich bin verwirrt, ich weiß nicht, was "Roh-Eingangssignal" ist. :/ – DotSlashSlash

+1

Nein, y ist das gefilterte Signal, x ist was der Beschleunigungsmesser gab. Es wäre klarer zu schreiben, dass "xf = k * xf + (1,0-k) · x", wobei xf die gefilterte Version von x ist, und eine ähnliche Gleichung für die y-Achse. –

+0

@Andrew - danke für den Vorschlag - jetzt bearbeitet für mehr Klarheit (ich hoffe!). –