Analyse einer FFT-Transformation



  • Hallihallo,

    ich habe ein C-Programm zur Audioanalyse mit einer FFT-Berechnung (mittels FFTW3-Bibliothek) geschreiben, das mir eine transformiertes halbkomplexes Datenfeld ausgibt.
    Laut Doku von der FFTW-Bibliothek müßte die erste Hälfte die reellen Anteile sein und die andere Hälfte die imaginären Anteile der komplexen Zahlen.

    Meine Frage dazu:

    Wie kann ich aus den Anteilen die Werte der Frequenzen berechnen?

    Vielen Dank schonmal im Voraus 🙂



  • Also, erst ein Kommentar zur Frequenz: nach einer FFT gibt's keine Frequenzen mehr, sondern nur noch Frequenzbänder. Durch die diskrete Vorgehensweise hat man nämlich alles in Happen zerteilt und verliert im Frequenzbereich an Auflösung.

    Normal hast Du N Werte zwischen 0 Hz und der Cutoff-Frequency, d.h. jedes Band hat eine Breite von Cutoff-f/N. Und das entsprechend für den jeweiligen Index hochzählen. Physikalisch gesehen hast Du bei einer FFT eigentlich nur noch "Energie pro Frequenzband".

    Deine Frage nach den "Werten der Frequenzen" ist reichlich unscharf, aber Du kannst die Amplitude eines Frequenzbandes in Deinem Fall wohl so errechnen:

    ampl(i) = sqrt(array[i] * array[i] + array[N/2+i] * array[N/2+i]);

    Und zum jeweiligen Arrayindex i gehört das Frequenzband:

    fband = [i * Bandbreite, i * Bandbreite + Bandbreite)

    i darf demnach bei dieser Ablage der Werte im Array dann von 0 .. N/2 - 1 gehen.



  • @Marc++us

    Vielen Dank, das ist genau das wonach ich gesucht habe.



  • Hey,

    wieso habe ich am Ende der FFT nur noch eine Sample-Anzahl von N/2?

    Grüße, Andi


  • Mod

    andi123456 schrieb:

    Hey,

    wieso habe ich am Ende der FFT nur noch eine Sample-Anzahl von N/2?

    Grüße, Andi

    Dafür gräbst du einen 9 Jahre alten Thread aus? DFT geht normalerweise von N komplexen Zahlen zu N anderen komplexen Zahlen. Sind deine Ausgangswerte alle reell, so greifen gewisse Symmetrien und die Hälfte der Ergebniswerte sind das komplex Konjugierte der anderen Hälfte, enthalten also keine neue Information.



  • andi123456 schrieb:

    wieso habe ich am Ende der FFT nur noch eine Sample-Anzahl von N/2?

    Kommt drauf an, wie du zählst. Wenn du eine "reelle FFT" mit N reellen Werten fütterst, wobei N gerade ist, kommen da zwei reelle und N/2-1 komplexe Werte raus, die jeweils Real- und Imaginärteil besitzen, das sind dann zusammen immer noch 2+(N/2-1)*2=N reelle Werte.

    Dass der Realteil der Eingabe nur in der ersten Hälfte der FFT und der Imaginärteil in der zweiten Hälfte auftaucht, stimmt auch nicht. Die Vermischen sich beide. Wenn die Eingabe eienr komplexwertigen FFT aber reell ist, ergibt sich eine Symmetrie zwischen erster und zweiter Hälfte der Ausgabe: gespiegelt und komplex konjugiert. Man braucht die zweite Hälfte also nicht, um ein reelles Signal eindeutig darstellen zu können.


Anmelden zum Antworten