2012-05-11 2 views
7

Ich lernte die Fourier-Transformation im Mathematikunterricht und dachte, ich hätte sie verstanden. Jetzt versuche ich mit R (statistische Sprache) herumzuspielen und die Ergebnisse einer diskreten FFT in der Praxis zu interpretieren. Dies ist, was ich getan habe:Warum bekomme ich zwei Frequenzspitzen von einer einfachen sin-Funktion über FFT in R?

x = seq(0,1,by=0.1) 
y = sin(2*pi*(x)) 

calcenergy <- function(x) Im(x) * Im(x) + Re(x) * Re(x) 

fy <- fft(y) 
plot(x, calcenergy(fy)) 

und dieses Grundstück erhalten:

energy density spectrum of sin(2*pi*(x)) from 0 to 1 with a 0.1 step

Wenn ich das richtig verstehen, dies steht für die ‚Hälfte‘ des Energiedichtespektrums. Da die Transformation symmetrisch ist, könnte ich einfach alle Werte auf die negativen Werte von x spiegeln, um das volle Spektrum zu erhalten.

Was ich jedoch nicht verstehe ist, warum ich zwei Spikes bekomme? Hier gibt es nur eine einzige Sinusfrequenz. Ist das ein Aliasing-Effekt?

Auch habe ich keine Ahnung, wie die Frequenzen aus dieser Handlung zu bekommen. Nehmen wir an, die Einheiten der Sinusfunktion waren Sekunden, ist der Peak bei 1,0 im Dichtespektrum 1Hz dann?

Nochmal: Ich verstehe die Theorie hinter FFT; die praktische Anwendung ist das Problem :).

Danke für jede Hilfe!

+0

Tangential kann 'calenergy' als' function (x) abs (x)^2' geschrieben werden. (Dies wird effizienter sein). – huon

+0

@ dbaupp oh danke. Ich wusste, dass es einen eingebauten Weg gab, aber ich war faul, danach zu suchen :) –

Antwort

10

Für ein rein reelles Eingangssignal von N Punkten erhalten Sie eine komplexe Ausgabe von N Punkten mit komplexer konjugierter Symmetrie um N/2. Sie können die Ausgangspunkte oberhalb von N/2 ignorieren, da sie keine nützlichen zusätzlichen Informationen für ein echtes Eingangssignal liefern, aber wenn Sie sie plotten, sehen Sie die oben erwähnte Symmetrie, und für eine einzelne Sinuswelle werden Sie Spitzen bei Bins n sehen und N - n. (Anmerkung: Sie können sich die oberen N/2 Bins als negative Frequenzen vorstellen.) Zusammenfassend erhalten Sie für ein reelles Eingangssignal von N Punkten, N/2 nützliche komplexe Ausgabefächer von der FFT, die Frequenzen von darstellen DC (0 Hz) bis Nyquist (Fs/2).

+0

Danke für deine Antwort. Ich habe gerade versucht, eine ungerade Anzahl von Werten mit '' seq (0,1.1, by = 0.1) '' zu verwenden, und tatsächlich war die Symmetrie genau um den 6. Eimer, wie du gesagt hast. Dies beantwortet meine erste Frage bereits. Wie wäre es mit dem zweiten, wie kann ich die Häufigkeit dieser Behälter ableiten? Wäre upvote, wenn ich könnte (braucht 15 rep):/ –

+0

Oh, sah Sie nur angeklickt, dass schon in der Zwischenzeit :) Danke! –

+2

+1 Endlich bekam der rep zu upvote yay :) –

2

Um die Frequenzen aus dem Ergebnis einer FFT zu erhalten, müssen Sie die Abtastrate der Daten, die in die FFT eingegeben wurden, und die Länge der FFT kennen. Die Mittenfrequenz jedes Bins ist der BIN-Index multipliziert mit der Abtastrate dividiert durch die Länge der FFT. Auf diese Weise erhalten Sie Frequenzen von DC (0 Hz) bis Fs/2 auf halber Strecke.

Die zweite Hälfte der FFT-Ergebnisse sind nur komplexe Konjugationen der ersten für echte Dateneingaben. Der Grund ist, dass die Imaginärteile von komplexen Konjugaten sich aufheben, was erforderlich ist, um ein summiertes Ergebnis mit einem imaginären Inhalt von Null, z. streng real.

Verwandte Themen