www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Frage zur FFT


Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @ all

Ich habe 1024 Abtastwerte. Diese übergebe ich an einen FFT-Funktion. 
Zurück bekomme ich die wieder 1024 Werte. --> 512 Werte für den Realteil 
und 512 Werte für den Imaginärteil. Wie kann ich denn jetzt das Spektrum 
davon zeichnen?

Ist die Amplitude r = Wurzel aus (R^2+I^2) ? --> Kann ich die Amplitude 
aus Realteil zum Quadrat und Imaginärteil zum Quadrat berechnen?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gegenfrage:

Was kommt denn nach der FFT raus?

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lipinsky Danke für DEINE super Antwort. Sie hat mir echt geholfen. Da 
stellt man eine Frage und Du kommst mit so einem Scheiß.

Autor: Ralf Schwarz (spacedog) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist die Amplitude r = Wurzel aus (R^2+I^2) ?

Ja klar, was denn sonst?
http://de.wikipedia.org/wiki/Komplexe_Zahl#Umrechn...

Benötigst du die FFT in einer bestimmte Anwendung? Es gibt nämlich noch 
ein paar coole Tricks, wenn die Berechnung schnell gehen muss.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, Matthias stellt ja schon die richtige Frage.

Das Ergebnis bei der Diskreten Fouriertransformation sind Koeffizienten, 
mit denen sich mit Hilfe der Einheitswurzeln wieder die ursprünglichen 
Abtastwerte rekonstruieren lassen.

Einer der Witze bei Einheitswurzeln ist, dass ihr Betrag = 1 ist ist. 
Insbesonders kann also die Amplitude nicht in den Einheitswurzeln 
stecken.

Insofern hast Du mit deiner Vermutung recht, der Betrag der 
Koeffizienten beschreibt die Amplitude. Allerdings gibt es durchaus 
verschiedene Formulierungen der DFT, ggf. musst Du noch durch N oder 
srqt(N) teilen, das hängt von Deiner Implementation ab.

Insofern: gucken was bei deiner FFT rauskommt und ggf. Doku lesen.

Grüße,
        Simon

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche gerade die FFT auf einer Grafikkarte berechnen zu lassen. 
Da brauch ich sehr viele coole Tricks. ^^

Dies steht leider nicht in der Doku drin. Ich verwendet die cuFFT von 
NVIDIA. Dort berechne ich aus reellen Abtastwerten eine complexe FFT. 
Die ist bis jetzt ohne Fensterrung.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir mit dem Programm Labview ein Testsignal erzeugt (kann 
später noch einige Screenshots bereitstellen) Das Signal stelle ich auf 
einem Graphen da. Anschließend berechne ich mit einer Labview Funktion 
die spektrale Leistungsdichte und gebe diese auch auf einen Graphen aus. 
Dann übergebe ich meine bekanntest Testsignal an die Grafikkarte und 
lasse mir da die FFT ausrechnen. Das Ergebnis verrechne ich dann wie 
oben beschrieben und stelle es in einem Graphen da.

Die beiden FFT-Graphen unterscheiden sich jetzt nur noch in der 
Amplidtude und ich weiß halt nich woran dies leigt.

Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, siehe mein Posting von oben. Wenn die sich nur in der Amplitude 
unterscheiden, dann finde doch mal raus, um welchen Faktor die sich 
unterscheiden.

Wenn dieser Faktor N oder sqrt(N) (bzw. 1/N oder 1/sqrt(N)) ist, würde 
ich letztlich darauf tippen, dass die FFT leicht unterschiedlich 
aufgefasst wird.

Hintergrund hinter dem sqrt(N) ist, dass man die FFT auch mit dem Faktor 
1/sqrt(N) formulieren kann, dann sind Hin- und Rücktransformation fast 
identisch und man kann sich ggf. etwas Code sparen.

Grüße,
       Simon

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde mal versuche verrauszufinden um welchen Faktor sich die 
Amplitude unterscheidet. Und dann werde ich mal testen wie lange eine 
FFT Berechnung auf einer Grafikkarte dauert. Hierzu werde ich eine FFT 
von 1000 Signalen mit je 4096 Abtastpunkten machen.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ich habe die FFT auf der Grafikkarte hinbekommen. Die Grafikkarte 
benötigt für 4096x1024 unter 1ms ^^. DAs heiß die Grafikkarte rechnet 
1024 mal eine FFT von 4096 Sample in unter 1ms aus.

Autor: T. H. (pumpkin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Tip am Rande: Wenn du "fensterst" dann musst du das bei der 
Bestimmung der ursprünglichen Signalamplitude (im Zeitbereich) 
berücksichtigen, da man beim Gewichten die Signalenergie reduziert. 
Hierbei handelt es sich um einen konstanten Faktor der sich aus der 
Fläche unter der Gewichtungsfunktion ergibt.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte eine FFT von 4096 Werten machen. Ist es jetzt ratsam das 
Fenster über die 4096 Werte zu legen und dann die FFT zu berechnen, oder 
einen Ausschnitt von z.B. 512 Werten nehmen die Fensterung machen, 
anschließend die FFT berechnen und dann das ganze 8 mal durchführen?

Autor: Strubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Johann,

das haengt davon ab, welche Frequenzen/Zeiten dich interessieren. Je 
kleiner das Fenster, desto weniger tiefe Frequenzen nimmst Du dabei mit, 
dafuer nimmt offensichtlich die Aufloesung der zeitlichen Veraenderung 
des Spektrums zu.
Also 1x4096 und 8x512 kommt nicht aufs Selbe raus. Ausser, Du hast die 
entsprechenden Algorithmen parat, das eine ins andere umzurechnen (was 
mich, sofern ich mich recht erinnere, eine recht fiese Sache war und 
natuerlich nicht mit gewichteten Window-Funktionen ohne Artefakte geht).

Gruss,

- Strubi

Autor: T. H. (pumpkin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johann wrote:
> Ich möchte eine FFT von 4096 Werten machen. Ist es jetzt ratsam das
> Fenster über die 4096 Werte zu legen und dann die FFT zu berechnen, oder
> einen Ausschnitt von z.B. 512 Werten nehmen die Fensterung machen,
> anschließend die FFT berechnen und dann das ganze 8 mal durchführen?

Ersteres kann man machen. Zweiteres ist - zumindest in der angedachten 
Version - nur wenig sinnvoll. Sag uns mal was du vor hast, dann können 
wir dir Ratschläge geben. Noch ein paar Stichworte zum nachschlagen: 
"Spektrogramm", "Short-Time-Fourier-Transformation (STFT)", 
"Modifizierte diskrete Kosinustransformation (MDCT)".

Strubi wrote:
> Je kleiner das Fenster, desto weniger tiefe Frequenzen nimmst Du dabei
> mit [...]

Das ist so nicht ganz richtig und auch nicht der eigentliche Punkt. Der 
eigentliche Punkt ist die schlechtere spektrale Auflösung.

> Also 1x4096 und 8x512 kommt nicht aufs Selbe raus. Ausser, Du hast die
> entsprechenden Algorithmen parat, das eine ins andere umzurechnen (was
> mich, sofern ich mich recht erinnere, eine recht fiese Sache war und
> natuerlich nicht mit gewichteten Window-Funktionen ohne Artefakte geht).

Ich bezweifle stark, dass das so überhaupt geht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.