Ich arbeite an einem mobilen Roboter, der über einen drahtlosen 2,4 GHz Link gesteuert wird. Der Empfänger ist mit dem Arduino Uno verbunden, der an Bord als Hauptregler dient. Der kritischste (und Haupt-) Eingangskanal des Empfängers erzeugt ein sehr lautes Signal, was zu vielen geringfügigen Änderungen der Leistung der Aktoren führt, auch wenn diese nicht benötigt werden. Ich suche Bibliotheken, die eine effiziente Glättung durchführen können. Gibt es irgendwelche Signal Glättung Bibliotheken für die Arduino (Uno) gefragt 16. Februar 14 um 13:57 Ich denke, ich sehe eine Menge von Single-Probe Rauschen Spikes in Ihrem lauten Signal. Der Median-Filter ist besser bei der Beseitigung von Single-Probe Rauschspitzen als jeder lineare Filter. (Es ist besser als irgendein Tiefpassfilter, gleitender Durchschnitt, gewichteter gleitender Durchschnitt usw. in Bezug auf seine Reaktionszeit und seine Fähigkeit, solche Einzelproben-Rauschspitzen-Ausreißer zu ignorieren). Es gibt in der Tat viele Signalglättungsbibliotheken für den Arduino, von denen viele einen Medianfilter enthalten. Signal-Glättungsbibliotheken bei arduino. cc: Signalglättungsbibliotheken bei github: Würde so etwas in deinem Roboter arbeiten (Der Median-of-3 erfordert sehr wenig CPU-Leistung und damit schnell): Du könntest diese digital mit einem Low filtern Pass-Filter: Ändern Sie die 0,99, um die Cut-Off-Frequenz zu ändern (näher bei 1,0 ist die niedrigere Frequenz). Der tatsächliche Ausdruck für diesen Wert ist exp (-2piffs) wobei f die Cutoff-Frequenz ist, die du willst und fs die Frequenz ist, die die Daten abgetastet werden. Eine andere Art von Digitalfilter ist ein Ereignisfilter. Es funktioniert gut auf Daten, die Ausreißer, z. B. 9,9,8,10,9,25,9 Ein Ereignisfilter gibt den häufigsten Wert zurück. Statistisch ist dies der Modus. Statistische Mittelwerte wie Mean, Mode etc. können mit der Arduino Average Library berechnet werden. Ein Beispiel, das auf der Seite der Arduino-Bibliothek entnommen wurde: Filtern von Beschleunigungsmesser-Daten mit Matlab und Arduino 15. April 2016 von Ryan Morrison Bei der Erforschung der MATLABArduino-Anbindung untersucht dieser Beitrag zwei Methoden zur Entfernung von Rauschen aus Sensordaten: exponentieller gleitender Durchschnitt und einfacher Gleitende Mittelfilter. Als Vorläufer dazu steht eine Einführung in die serielle Kommunikation und Datenplotten mit Arduino und MATLAB auf meiner vorherigen Stelle. Der ganze Code, der in diesen Beiträgen verwendet wird, steht bei meinem GitHub Repo zur Verfügung. Auch hier verwende ich die Tutorial-Videos von matlabarduino. org als Referenz, während ich meine eigenen Featuresimprovements auf dem Weg hinzufüge. Exponentieller bewegter Durchschnitt (EMA) Der exponentielle gleitende Durchschnitt weist einen Gewichtungsfaktor zu, wobei die aktuellsten Daten das größte Gewicht haben. Es wird durch die folgende Gleichung berechnet: Pro meiner vorherigen Post ist der LSM303DLHC Beschleunigungsmesser mit einem Arduino Uno verbunden, serielle Kommunikation zwischen Arduino und MATLAB wird etabliert, und MATLAB zeichnet die Gravitationsbeschleunigungsvektoren auf. Der vorherige MATLAB-Code wird modifiziert, um die EMA zu berechnen und nebeneinander liegende Plots von rohen und gefilterten Daten anzuzeigen. Das Ergebnis wird unten dargestellt, um den Unterschied zwischen rohen und gefilterten Daten zu bemerken, da der Schieberegler den Alpha-Wert ändert. Vergleich von rohen (links) und EMA-gefilterten (rechten) Beschleunigungsvektoren. In der obigen Grafik wird der Beschleunigungsmesser im Raum mit dem z-Vektor senkrecht zur Erde gehalten. Bewegung und Vibration werden auf den Beschleunigungsmesser angewendet, um die Reaktion auf plötzliche Orientierungsänderungen zu zeigen. Beim Vergleich der Rohdaten links mit den gefilterten Daten auf der rechten Seite werden folgende Beobachtungen gemacht: Alpha-Wert, der sich an 1 annähert, führt zu einer hohen Filterung der gefilterten Kurve, die sich sehr wenig in Bewegung auf die Bewegung bewegt. Alpha-Wert Annäherung 0 Ergebnisse in Low-Filtering gibt es wenig Unterschied zwischen rohen und gefilterten Plots. Alpha-Wert um 0,5 bietet ein optimales Niveau der Filterung der gefilterten Handlung ist frei von unregelmäßigen Jitter und reagiert auf Bewegung. Einfacher gleitender Durchschnitt (sma) Wie der Name schon sagt, verwendet dieser Filter einen einfachen Durchschnitt zu eingehenden Sensordaten. Bei jeder Iteration der Code-Schleife wird der älteste Wert im Datensatz gelöscht und durch den letzten Messwert ersetzt und ein neuer Mittelwert berechnet. Die SMA wird durch die folgende Gleichung gegeben, bei der die Lärmreduzierung durch n (die Anzahl der Abgriffe) bestimmt wird. Die Größen der xyz-Achsenbeschleunigungen werden in 2D-Plots mit MATLAB visualisiert. Sowohl rohe als auch gefilterte Daten werden dargestellt, und ein Schieberegler wird verwendet, um die Menge der Filterung (Anzahl der Abgriffe) anzupassen. Vergleich von Roh - (Top-) und SMA-gefilterten (unteren) xyz-Beschleunigungsgrößen. Der Beschleunigungsmesser wird in gleicher Weise wie beim EMA-Filter manipuliert. Um die Effekte des SMA-Filters zusammenzufassen: Zero-Taps keine Filter-Rohbeschleuniger-Messwerte zeigen eine hohe Empfindlichkeit gegenüber leichten Störungen. Zehn Hähne hohe Filterung kräftige Beschleunigungsmesser Bewegung ist ungesehen in gefilterten Ergebnissen. Fünf Hähne optimal filternde Jitter werden eliminiert, doch gefilterte Ergebnisse spiegeln große Bewegungen wider. Schlussfolgerung Ich bin jetzt ziemlich kompetent mit der Verwendung von MATLAB für die Sensorcharakterisierung und wird das bei zukünftigen Projekten nutzen. Was sofort in den Sinn kommt, ist dies in der Beobachtungsdefinition von Schwellenwerten bei der Verwendung von Beschleunigungssensoren in Robotikautomotive Anwendungen. Ein Beispiel ist die Verbesserung der Aufprall-Erkennung durch Filterung fehlerhafter Jitter durch Körper Vibrationen eingeführt. MovingAverage Bibliothek für Arduino oder Verdrahtung von Sofian Audry Inspiriert von Code von Karsten Kutza Eine Gedächtnis-effiziente exponentielle gleitende durchschnittliche Bibliothek. Ein gleitender Durchschnitt ist eine einfache Möglichkeit, ein Signal zu glätten. Durch die Anpassung eines Parameters, der als Gewichtungskoeffizient bezeichnet wird, ist es möglich, den Glättungsgrad zu steuern, wodurch das Signal mehr oder weniger auf Änderungen reagiert. Ähnliche und alternative Bibliotheken: Microsmooth Eine leichte und schnelle Signalglättungsbibliothek für Arduino. Bietet viele Arten Arten von Glättungsalgorithmus durch eine funktionsbasierte API. Arduino Signal Filtering Library Bietet ein Framework und Klassen für verschiedene Arten von Tiefpass-Signal-Filter und Median-Filter. RunningAverage Eine Bibliothek für die Berechnung eines einfachen gleitenden Durchschnitts (SMA) über ein Zeitfenster. RunningMedian Eine Bibliothek zum Rechnen des laufenden Medians über ein Zeitfenster. Kopiere den MovingAverage-Ordner in den Arduino-Bibliotheksordner. Include the library Eine Instanz erstellen Eine MovingAverage-Instanz kann in einer Reihe von Möglichkeiten erstellt werden. Ein gleitender Durchschnitt arbeitet mit einem Gewichtungsabfallkoeffizienten (), einem Wert zwischen 0 und 1, der verwendet wird, um den aktuellen Wert mit der Spur aller vorhergehenden Werte zu mischen. Eine höhere Ermäßigung der älteren Beobachtungen schneller. So erstellen Sie eine Instanz mit Standard (0.1): So erstellen Sie eine Instanz mit einem bestimmten Wert (hier 0.01): Es ist auch möglich, eine Fenstergröße N anzugeben, anstatt ein Argument gt 1 als ersten Parameter des Konstruktors zu senden. In diesem Fall wird der Koeffizient angenähert, um die Fenstergröße unter Verwendung der Formel 2 (N1) anzupassen. Das ist natürlich nicht genau, aber eher wie eine Faustregel für die Einstellung. Zum Beispiel, um eine Instanz zu erstellen, die dem gleitenden Durchschnitt über eine Fenstergröße von ungefähr 100 Samples entspricht: Mit dem zweiten Parameter können Sie den Startwert des gleitenden Mittelwertes festlegen (Standardwert 0). Es empfiehlt sich jedoch, sie mit dem Reset (Wert) zu initialisieren, wobei ein neutraler Wert für die Verteilung verwendet wird, wie z. B. eine einzelne Probe. Aktualisiert den gleitenden Durchschnitt mit neuem Wert. Die Funktion gibt auch den aktuellen Wert zurück (optional):
No comments:
Post a Comment