Ich arbeite an einem mobilen Roboter, der über eine drahtlose 2,4-GHz-Verbindung gesteuert wird. Der Empfänger ist mit dem Arduino Uno verbunden, der als Hauptcontroller an Bord dient. Der kritischste (und wichtigste) Eingangskanal, der vom Empfänger kommt, erzeugt ein sehr verrauschtes Signal, was zu vielen geringfügigen Änderungen am Ausgang der Aktuatoren führt, obwohl diese nicht benötigt werden.
Darstellung der Eingabe des Arduino in einem Intervall von 30 Sekunden.
Ich suche Bibliotheken, die effizient glätten können. Gibt es irgendwelche Signalglättungsbibliotheken für das Arduino (Uno)?
library
signal-processing
Ascheshr
quelle
quelle
Antworten:
Microsmooth ist eine leichte Signalglättungsbibliothek, die derzeit von mir entwickelt wird.
Es wird noch daran gearbeitet und das Ziel ist es, es in Bezug auf das Gedächtnis leicht und schnell zu machen. Die Bibliothek bietet mehrere Filter zum Glätten:
Laden Sie die Bibliothek herunter und fügen Sie sie dem Quellverzeichnis hinzu, um sie zu verwenden. Fügen Sie Ihrer Quelldatei außerdem die folgende Zeile hinzu:
quelle
Ich glaube, ich sehe viele Single-Sample-Rauschspitzen in Ihrem verrauschten Signal.
Mit dem Medianfilter lassen sich Rauschspitzen bei einer Stichprobe besser beseitigen als mit jedem linearen Filter. (Es ist besser als jedes Tiefpassfilter, jeder gleitende Durchschnitt, jeder gewichtete gleitende Durchschnitt usw. in Bezug auf seine Reaktionszeit und seine Fähigkeit, solche Störspitzen-Ausreißer bei einer einzelnen Stichprobe zu ignorieren.)
Es gibt in der Tat viele signalglättende Bibliotheken für den Arduino, von denen viele einen Medianfilter enthalten.
Signalglättungsbibliotheken bei arduino.cc:
Signalglättungsbibliotheken bei github:
Würde so etwas in Ihrem Roboter funktionieren? (Der Median von 3 benötigt sehr wenig CPU-Leistung und ist daher schnell):
quelle
Haben Sie einen Tiefpassfilter ausprobiert? Ich habe hier ein anderes Beispiel gefunden .
In beiden Bibliotheken wird eine Liste der Daten angezeigt, die vom analogen Sensor Ihrer Wahl gelesen werden und deren Durchschnitt ermittelt wird. Jeder neue Sensorwert wird zur Liste hinzugefügt und der letzte wird wie folgt verworfen:
quelle
Sie können dies mit einem Tiefpassfilter digital filtern:
Ändern Sie 0,99, um die Grenzfrequenz zu ändern (näher an 1,0 liegt die niedrigere Frequenz). Der tatsächliche Ausdruck für diesen Wert ist exp (-2 * pi * f / fs), wobei f die gewünschte Grenzfrequenz und fs die Frequenz ist, mit der die Daten abgetastet werden.
Ein anderer Typ eines "digitalen Filters" ist ein Ereignisfilter. Es funktioniert gut bei Daten mit Ausreißern. zB 9,9,8,10,9,25,9. Ein Ereignisfilter gibt den häufigsten Wert zurück. Statistisch gesehen ist dies der Modus.
Statistische Mittelwerte wie Mittelwert, Modus usw. können mithilfe der Arduino Average Library berechnet werden .
Ein Beispiel aus der Arduino-Bibliothek bezieht sich auf:
quelle