Inhaltsverzeichnis:

Arduino: Frequenztransformation (DFT) - Gunook
Arduino: Frequenztransformation (DFT) - Gunook

Video: Arduino: Frequenztransformation (DFT) - Gunook

Video: Arduino: Frequenztransformation (DFT) - Gunook
Video: Lazy Discrete Fourier Transform on the Arduino Uno 2024, November
Anonim
Arduino: Frequenztransformation (DFT)
Arduino: Frequenztransformation (DFT)

Dieses Programm soll die Frequenztransformation auf Arduino mit Batteriekontrolle über Parameter berechnen. Es wird mit der Entweihung der Fouriior-Transformation gelöst.

das ist nicht FFT

FFT ist ein Algorithmus, der verwendet wird, um DFT mit geringerer Zeit zu lösen.

Code für FFT finden Sie hier.

Schritt 1: Wie es funktioniert (Konzept):

Wie es funktioniert (Konzept)
Wie es funktioniert (Konzept)
Wie es funktioniert (Konzept)
Wie es funktioniert (Konzept)

Das angegebene Programm für die Frequenztransformation bietet eine große Kontrolle über die von Ihnen benötigte Ausgabe. Dieses Programm wertet den Frequenzbereich aus, der vom Benutzer bei einer bestimmten Eingabe für den Datensatz angegeben wurde.

  • In Abbildung ist ein Datensatz aus zwei Frequenzen mit den Namen f2 und f5 gegeben, die getestet werden müssen. f2 und f5 sind zufällige Namen für zwei Frequenzen, höhere Zahlen für relativ höhere Frequenzen. hier hat die kleinere Frequenz f2 eine höhere Amplitude und f5 hat eine kleinere Amplitude.
  • Es kann mathematisch gezeigt werden, dass die Summe der Multiplikation von zwei harmonischen Datensätzen mit unterschiedlicher Frequenz gegen Null tendiert (eine höhere Anzahl von Daten kann zu einem Schlagergebnis führen). In unserem Fall, wenn diese beiden Multiplikationsfrequenzen dieselbe (oder sehr nahe) Frequenz haben, ist diese Multiplikationssumme eine Zahl ungleich Null, wobei die Amplitude von der Amplitude der Daten abhängt.
  • um eine bestimmte Frequenz zu erkennen, kann ein gegebener Datensatz mit verschiedenen Testfrequenzen multipliziert werden und das Ergebnis kann eine Komponente dieser Frequenz in den Daten ergeben.

Schritt 2: Wie es funktioniert (im Code):

Wie es funktioniert (im Code)
Wie es funktioniert (im Code)
Wie es funktioniert (im Code)
Wie es funktioniert (im Code)

für diese gegebenen Daten (f2+f5) wird eins nach dem anderen von f1 bis f6 multipliziert und der Wert der Summe wird notiert. diese Endsumme repräsentiert den Inhalt dieser Frequenz. Rest (Nichtübereinstimmung) der Frequenz sollte idealerweise Null sein, aber dies ist im realen Fall nicht möglich. um die Summe Null zu machen, ist es erforderlich, eine unendliche Größe von Datensätzen zu haben.

  • wie in den Abbildungen f1 bis f6 gezeigt wird, ist die Versuchsfrequenz und ihre Multiplikation mit dem Datensatz an jedem Punkt gezeigt.
  • in der zweiten Figur ist die Summation dieser Multiplikation bei jeder Frequenz aufgetragen. zwei Peaks bei 1 und 5 sind identifizierbar.

Wenn wir also den gleichen Ansatz für Zufallsdaten verwenden, können wir so viele Frequenzen auswerten und den Frequenzinhalt von Daten analysieren.

Schritt 3: Verwenden von Code für die Frequenzanalyse:

Verwenden von Code für die Frequenzanalyse
Verwenden von Code für die Frequenzanalyse

Als Beispiel verwenden wir diesen Code, um die DFT der Rechteckwelle zu finden.

Fügen Sie zuerst den angehängten Code (dft-Funktion) nach der Schleife ein, wie im Bild gezeigt

8 BEDINGUNGEN, DIE ANGEGEBEN WERDEN MÜSSEN

  1. ein Array, von dem dft genommen werden muss
  2. Größe eines Arrays
  3. Zeitintervall zwischen 2 Messwerten im Array in Millisekunden
  4. unterer Wert des Frequenzbereichs in Hz
  5. oberer Wert des Frequenzbereichs in Hz
  6. Schrittweite für Frequenzbereich
  7. Wiederholung eines Signals (mindestens 1) höhere Schlagzahlgenauigkeit, aber längere Lösungszeit
  8. Fensterfunktion:

    0 für kein Fenster1 für Flat-Top-Fenster 2 für Hann-Fenster 3 für Hamming-Fenster

(Wenn Sie keine Ahnung haben, wie Sie das Fenster auswählen sollen, behalten Sie die Standardeinstellung bei 3)

Beispiel: dft(a, 8, 0,5, 0, 30, 0,5, 10, 3); hier ist a ein Array der Größe 8 zu prüfendes Element für 0 Hz bis 30 Hz mit 0.5 Schritt (0, 0.5, 1, 1.5, …, 29, 29.5, 30) 10 Wiederholung und Hamming Window

Hier ist es möglich, ein größeres Array zu verwenden, so viel wie Arduino verarbeiten kann.

Schritt 4: Ausgabe:

Ausgabe
Ausgabe
Ausgabe
Ausgabe

wenn du auskommentierst

Serial.print (f); Serial.print ("\t");

vom seriellen Code-Plotter gibt die Art des Frequenzspektrums an und wenn nicht, würde der serielle Monitor die Frequenz mit seiner Amplitude angeben.

Schritt 5: Überprüfen verschiedener Fenster- und Stichprobengrößen:

Überprüfen verschiedener Fenster- und Stichprobengrößen
Überprüfen verschiedener Fenster- und Stichprobengrößen

In der Abbildung wird die Frequenz der Sinuswelle mit einer anderen Einstellung gemessen.

Schritt 6: Beispiel:

Beispiel
Beispiel

in Abbildung Transformation von Daten mit SciLab und Arduino verglichen.

Empfohlen: