Forum: Digitale Signalverarbeitung / DSP / Machine Learning FFT mit FFTW, Output


von Michael W. (habnochkeinen)


Lesenswert?

Hallo Forum,

Durch meine online-Recherche bin ich auf dieses Forum gestoßen
und denke, dass sich hier einige mit der FFT auskennen.

Ich bin gerade dabei eine Frequenzanalyse zu versuchen
und scheitere an dem Problem,
dass ich den Output, den mir die fftw liefert, nicht interpretieren 
kann.

Das allgemeine verständnis von DFTs lese ich mir gerade mit dem Rüdiger 
Hoffmann Buch an, bin da aber noch nicht ganz durch.
Parallel dazu bilde ich mich mit C++ weiter, um das Ganze nachher 
richtig umsetzen zu können.
Die Analyse mit FFTW und C++ sind erstmal Rahmenbedingungen, die 
vorgegeben sind.


Ich gehe grade davon aus, dass mein output ein Array ist, mit jeweils 2 
Werten: Realteil und Imaginärteil.
Wenn ich davon den Betrag bilde, sollte ich doch die Amplitude erhalten.
Aber woher weiß ich die zugehörige Frequenz?

Kann ich davon ausgehen, dass meine höchste Frequenz, die halbe Anzahl 
meiner Eingangswerte ist?

Weiß jemand wie fftw, die Ausgabewerte sortiert?
Finde in der Dokumentation dazu leider nichts...

Ich hoffe, dass meine Fragen nicht all zu oft schon hier diskutiert 
wurden,
da ich trotz Suchfunktion sicher nicht alles threads dazu gefunden habe.

Vielen Dank für alle Tipps.

Beste Grüße
Michael

von Klaus (Gast)


Lesenswert?

Michael W. schrieb:
> Wenn ich davon den Betrag bilde, sollte ich doch die Amplitude erhalten.
ja
> Aber woher weiß ich die zugehörige Frequenz?
durch die nummer des datums

wenn sie in natürlicher reihenfolge kommen ist es bei der FFT immer ein 
Wert der 1/n-tel der Abtaste entspricht + 1/2n.

FFT auf 64 kHz real gesampelte Daten mit 64 Werten:

Nummer  0 = 1/2* 64kHz / 64  +  0* 64kHz =  0,5kHz
Nummer  1 = 1/2* 64kHz / 64  +  1* 64kHz =  1,5kHz
Nummer  2 = 1/2* 64kHz / 64  +  2* 64kHz =  2,5kHz
...
Nummer 30 = 1/2* 64kHz / 64  + 30* 64kHz = 30,5kHz
Nummer 31 = 1/2* 64kHz / 64  + 31* 64kHz = 31,5kHz
---------------------------------------------------
Nummer 32 = 1/2* 64kHz / 64  + 32* 64kHz = 33,5kHz  entspricht 31,5
Nummer 33 = 1/2* 64kHz / 64  + 33* 64kHz = 33,5kHz  entspricht 30,5
...
Nummer 63 = 1/2* 64kHz / 64  + 63* 64kHz = 33,5kHz  entspricht  0,5

von Anja (Gast)


Lesenswert?

Klaus schrieb:
> Nummer  0 = 1/2* 64kHz / 64  +  0* 64kHz =  0,5kHz

Nummer 0 ist der Gleichspannungsanteil

Gruß Anja

von Klaus (Gast)


Lesenswert?

Das ist wird immer wieder erzählt, ist aber nicht wirklich richtig, denn 
es beschreibt de facto den Frequenzbereich zwischen 0 und fs/k.

Hier in unserem Bespiel also alles von 0 bis 1kHz mit der theoretischen 
Mitte von 0,5kHz und wenn man das mal durchsweept, wird man sehen, dass 
die 500Hz besonders gut abgebildet werden, während sich nach 0 und zu 
1kHz eine abfallende Glocken bildet.

"Gleichspannungsanteil" wäre ja eine Frequenz mit f=0!

Die ganze Angelegenheit wird dann um so genauer, je mehr Frequenzen 
genutzt werden. Dann sind z.B. 0,1 Hz von 0,2 Hz besser unterscheidbar.

von Michael W. (habnochkeinen)


Angehängte Dateien:

Lesenswert?

Michael W. schrieb:
> Das allgemeine verständnis von DFTs lese ich mir gerade mit dem Rüdiger
> Hoffmann Buch an, bin da aber noch nicht ganz durch.
> Parallel dazu bilde ich mich mit C++ weiter, um das Ganze nachher
> richtig umsetzen zu können.

lange ists her, aber die ersten Hausaufgaben sind gemacht:

Vielen Dank hier für das Forum - eure Beiträge sind ungemein hilfreich!

fftw läuft und die Daten bekomm ich mit gnuplot auch ordentlich 
dargestellt.
Jetzt hätte ich aber eine Frage zu den Oberschwingungen, auf die ich 
keine Lösung habe:

Gibt es eine Möglichkeit Oberschwingungen zu verifizieren?

Hintergrund der Frage ist Folgendes Ergebnis meiner FFT (siehe Anhang):

Auf der X-Achse bekomme ich bei ~34, ~42.5, und 51 jeweils einen 
Ausschlag
und gehe jetzt davon aus, daß bei 42.5 der eigentlich peak ist und die 
beiden anderen Seitenmaxima.
Mein Problem ist, dass ich das Ausgangssignal nicht kenne und das jetzt 
aber irgendwie überprüfen muss.
Unterschiedliche Fensterungen ergaben dieselben Ergebnisse.
Eine vorangehende Filterung ist leider momentan nicht möglich.

Bin mal wieder sehr dankbar für Tipps, Anregungen, etc.

Gruß
Michael

von Georg A. (georga)


Lesenswert?

> und gehe jetzt davon aus, daß bei 42.5 der eigentlich peak ist

Wie soll das gehen, wenn die Grundfrequenz ca. 17 ist? 17*2=34, 17*3=51 
passt gut. Die 42 sind 17*2.5, was für eine normale Oberwelle eher 
seltsam ist. Allerdings ist bei 17*1.5=25.5 auch ein Peak zu sehen, 
evtl. gehört das einfach so zum Signal...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.