Saturday 30 September 2017

Moving Average Filter Beschleunigungsmesser


Ein einfacher, einpoliger, tiefpassierter, rekursiver IIR-Filter ist schnell und einfach zu implementieren, z. B. Wobei x, y die rohen (ungefilterten) XY-Beschleunigungssensoren sind, xf, yf die gefilterten Ausgangssignale und k die Zeitkonstante der Filter (typischerweise ein Wert zwischen 0,9 und 0,9999), wobei ein größerer k eine längere Zeitkonstante bedeutet ). Sie können k empirisch bestimmen, oder wenn Sie Ihre erforderliche Grenzfrequenz, Fc kennen. Dann kannst du die Formel verwenden: wo Fs die Samplerate ist. Beachten Sie, dass xf, yf die vorherigen Werte des Ausgangssignals auf dem RHS und die neuen Ausgangswerte auf dem LHS des obigen Ausdrucks sind. Beachten Sie auch, dass wir hier voraussetzen, dass Sie die Beschleunigungssensoren in regelmäßigen Zeitabständen, z. B. Alle 10 ms Die Zeitkonstante wird eine Funktion sowohl von k als auch von diesem Sampling-Intervall sein. Imaging-Filter Dieses Beispiel zeigt den empfohlenen Workflow zur Erzeugung von C-Code aus einer MATLAB-Funktion mit dem Befehl codegen. Dies sind die Schritte: 1. Fügen Sie die Codegen-Anweisung der MATLAB-Funktion hinzu, um anzuzeigen, dass sie für die Codegenerierung bestimmt ist. Diese Richtlinie ermöglicht es dem MATLAB-Code-Analysator auch, Warnungen und Fehler zu identifizieren, die für MATLAB für die Codegenerierung spezifisch sind. 2. Generieren Sie eine MEX-Funktion, um zu überprüfen, ob der MATLAB-Code für die Codegenerierung geeignet ist. Wenn Fehler auftreten, sollten Sie sie vor dem Erstellen von C-Code reparieren. 3. Testen Sie die MEX-Funktion in MATLAB, um sicherzustellen, dass sie funktional dem ursprünglichen MATLAB-Code entspricht und keine Laufzeitfehler auftreten. 4. C-Code generieren 5. Überprüfen Sie den C-Code. Voraussetzungen Für dieses Beispiel gibt es keine Voraussetzungen. Erstellen eines neuen Ordners und Kopieren relevanter Dateien Der folgende Code erstellt einen Ordner in Ihrem aktuellen Arbeitsordner (pwd). Der neue Ordner enthält nur die für dieses Beispiel relevanten Dateien. Wenn Sie den aktuellen Ordner nicht beeinflussen möchten (oder wenn Sie keine Dateien in diesem Ordner erstellen können), sollten Sie Ihren Arbeitsordner ändern. Ausführen des Befehls: Erstellen eines neuen Ordners und Kopieren relevanter Dateien Über die Mittelungsfilterfunktion Die Funktion averagingfilter. m fungiert als Mittelwertbildungsfilter am Eingangssignal, nimmt einen Eingangsvektor von Werten und berechnet einen Durchschnitt für jeden Wert im Vektor. Der Ausgangsvektor ist die gleiche Größe und Form wie der Eingangsvektor. Die Codegen-Kompilierungsrichtlinie zeigt an, dass der MATLAB-Code für die Codegenerierung bestimmt ist. Erstellen Sie einige Beispieldaten Generieren Sie eine laute Sinuswelle und zeichnen Sie das Ergebnis. Generieren Sie eine MEX-Funktion zum Testen. Generieren Sie eine MEX-Funktion mit dem Befehl codegen. Der Codegen-Befehl prüft, ob die MATLAB-Funktion für die Codegenerierung geeignet ist und erzeugt eine MEX-Funktion, die Sie vor dem C-Code in MATLAB testen können. Da C statische Typisierung verwendet, muss Codegen die Eigenschaften aller Variablen in den MATLAB-Dateien zum Zeitpunkt der Kompilierung bestimmen. Hier liefert die Befehlszeilenoption - args eine Beispieleingabe, so dass Codegen auf der Grundlage der Eingabetypen neue Typen ableiten kann. Bei Verwendung des oben beschriebenen Beispielsignals als Beispiel-Eingang wird sichergestellt, dass die MEX-Funktion denselben Eingang verwenden kann. Standardmäßig generiert codegen eine MEX-Funktion namens averagingfiltermex im aktuellen Ordner. Damit können Sie den MATLAB-Code und die MEX-Funktion testen und die Ergebnisse vergleichen. Testen der MEX-Funktion in MATLAB Führen Sie die MEX-Funktion in MATLAB aus Generieren Sie C-Code Überprüfen Sie den generierten Code Der Codegen-Befehl mit der Option - config coder. config (lib) erzeugt C-Code, der als eigenständige C-Bibliothek verpackt ist. Der generierte C-Code befindet sich im Ordner codegenlibaveragingfilter. Die Dateien sind: Überprüfen Sie den C-Code für die averagingfilter. c Funktion Wählen Sie Ihr LandAccelerometer Beschleunigungsmesser messen Beschleunigung. Das ist Beschleunigung durch Bewegung und auch Beschleunigung durch Schwerkraft. Beschleunigungsmesser werden häufig verwendet, um einen Neigungswinkel zu berechnen. Sie können dies nur zuverlässig tun, wenn sie statisch sind und sich nicht bewegen. Um einen genauen Neigungswinkel zu erhalten, werden sie oft mit einem oder mehreren Gyro39s kombiniert und die Kombination von Daten wird verwendet, um den Winkel zu berechnen. Digitale Beschleunigungssensoren geben Ihnen Informationen mit einem seriellen Protokoll wie I2C. SPI oder USART, während analoge Beschleunigungsmesser einen Spannungspegel innerhalb eines vordefinierten Bereichs ausgeben, den Sie mit einem ADC-Modul (Analog-Digital-Wandler) in einen digitalen Wert umwandeln müssen. In diesem Tutorial werden wir kurz die Funktionalität von Beschleunigungssensoren erklären, wie sie verwendet werden, um Neigungswinkel zu messen und schließlich einen Beispielcode zu liefern. Siehe auch das Tutorial zum Kombinieren von Beschleunigungssensoren und Gyro-Daten, um einen besseren Neigungswinkel für ein dynamisches System zu geben. Was bedeutet Beschleunigungsmesser-Messung Beschleunigungsmesser messen Beschleunigung. Für ein statisches Objekt, das die Beschleunigung aufgrund der Schwerkraft (1g) ist. Beachten Sie auch, dass die Ausgabe von Beschleunigungsmessern nicht linear ist, sondern eine Sinuswelle ist, so dass Sie die direkte Ausgabe nicht als eine proportionale Darstellung eines Neigungswinkels auf der Grundlage der Schwerkraft nehmen können. Normalerweise ist ein Beschleunigungsmesser39s x und y Ausgangsspannungen die Hälfte der Versorgungsspannung bei der Messung von Null g (d. h. das Gerät ist senkrecht zur Schwerkraft - horizontal). Kippen Sie es auf eine Weise und die Spannung erhöht sich, kippt es auf die andere Richtung und es wird abnehmen. Mit einem Triple-Achsen-Beschleunigungsmesser misst die z-Achse 1g mit dem Gerät horizontal. Die Ausgabe eines Beschleunigungsmessers ist eine Sinuswelle der Beschleunigung gemessen. Beschleunigungsmesser sind empfindlicher gegenüber kleinen Änderungen in der Neigung, wenn sie senkrecht zur Schwerkraft sind. I. e. Wenn horizontal, kleine Änderungen in Tilt geben nützliche Lesungen. Bis etwa 45 Grad Neigung werden sie immer weniger empfindlich. Aus diesem Grund ist es üblich, bei der Bestimmung des Neigungswinkels mehr als einen Achsenwert zu verwenden, wie nachfolgend zu sehen ist. Messen eines Neigungswinkels mit einer Achse Wenn Sie die Neigung sowohl in der x - als auch in der y-Achse mit einem 2-Achsen-Beschleunigungsmesser messen möchten, können Sie einfach sin-1 (a) verwenden, wobei a die Ausgabe von einer Achse des Beschleunigungsmessers ist. Denken Sie daran, dass über 45 und -45 Grad die Genauigkeit verringern Mess-Neigungswinkel mit zwei Achsen Die Verringerung der Auflösung und Genauigkeit über 45 Grad der Neigung kann durch die Verwendung von 2 Achsen verbessert werden, um die Neigung zu messen Die Schwerkraft, die auf die x-Achse wirkt, ist Eine Sinusfunktion, während das auf die y-Achse wirkt, ist ein Kosinus. Wenn die Empfindlichkeit der x-Achse nach 45 Grad Neigung abfällt, nimmt die Empfindlichkeit der y-Achse zu. Wie in der folgenden Tabelle zu sehen ist, zeigen die fettgedruckten Teile jeder Zeile den Bereich der meisten Empfindlichkeit. So kann durch Kombinieren der x - und y-Werte eine deutlich verbesserte Genauigkeit erreicht werden. Neigungs-Neigungswinkel mit drei Achsen Für genaue Messungen der Neigung in den x - und y-Ebenen benötigen wir daher einen 3-Achsen-Beschleunigungsmesser. Wir könnten die obige Formel verwenden, um die Winkel mit x und z für die x-Achse zu berechnen und mit y und z für die y-Achse zu verwenden. Allerdings können wir die Dinge weiter verbessern, indem wir alle drei Ausgänge verwenden, um jeden Winkel zu berechnen. Dies geschieht mit den folgenden Formeln. Lass uns auf einige Coding hoffen, wir sind jetzt ziemlich klar über die Prinzipien, aber wir sehen, wie dies in der Praxis getan wird. Wir verwenden einen 3-Achsen-Beschleunigungsmesser und erarbeiten Winkel für Roll (x) und Tonhöhe (y). Wir nehmen an, dass je nach Art des verwendeten Beschleunigungsmessers die Werte für x, y und z gelesen wurden und dass Sie auch Grundlinienwerte für x, y und z haben, wenn der Beschleunigungsmesser stationär und eben ist. (Void) Mit xy und z aus dem Beschleunigungsmesser berechnen x und y Winkel float xval, yval, zval, result unsigned short long x2, y2, z2 24 bit Lets get die Abweichungen von unserer Baseline xval (float) accelvaluex - (float (Float) accelvalyy - (float) accelvaly - (float) accelvaluez - (float) accelvalz - (float) accelcenterz Ausarbeiten der Quadrate x2 (unsigned short long) (xvalxval) y2 (unsigned short long) (yvalyval) z2 (unsigned short long) (Zvalzval) X Axis resultsqrt (y2z2) resultxvalresult accelanglex atan (Ergebnis) Y Axis resultsqrt (x2z2) resultyvalresult accelangley atan (Ergebnis) Ok, das ist es. Nur ein paar Notizen über Beschleunigungsmesser im Allgemeinen. Sie sind sehr empfindlich und sind daher sehr anfällig für Vibrationen. Wenn man in einem System mit Motoren oder anderen Schwingungsquellen einsetzt, schlage ich vor allem eine Form der Schaumdämpfung vor. Auch nehmen Sie mehrere Messwerte aus dem Beschleunigungsmesser und durchschnittlich sie zu filtern alle Lärm.

No comments:

Post a Comment