2012-05-11 4 views
7

Ho imparato a conoscere la trasformazione di Fourier in classi di matematica e ho pensato di averli compresi. Ora, sto cercando di giocare con R (linguaggio statistico) e interpretare i risultati di una FFT discreta in pratica. Questo è quello che ho fatto:Perché ottengo due picchi di frequenza da una semplice funzione sin via 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)) 

e ottenere questa trama:

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

Se ho capito questo diritto, questo rappresenta la 'meta' dello spettro di densità di energia. Poiché la trasformazione è simmetrica, potrei semplicemente riflettere tutti i valori sui valori negativi di x per ottenere l'intero spettro.

Tuttavia, quello che non capisco è, perché io sono sempre due punte? C'è solo una singola frequenza sinusale qui. È un effetto aliasing?

Inoltre, non ho idea di come ottenere le frequenze di questa trama. Supponiamo che le unità della funzione sinusale siano secondi, il picco a 1,0 nello spettro di densità 1Hz allora?

Ancora: comprendo la teoria alla base di FFT; l'applicazione pratica è il problema :).

Grazie per qualsiasi aiuto!

+0

In modo tangenziale, 'calcenergy' può essere scritto come' function (x) abs (x)^2'. (Questo sarà più efficiente). – huon

+0

@dbaupp oh grazie. Sapevo che c'era un modo per farlo, ma ero pigro a cercarlo :) –

risposta

10

Per un segnale di ingresso puramente reale di n punti si ottiene un'uscita complesso di N punti di complesso coniugato simmetria circa N/2. Puoi ignorare i punti di uscita sopra N/2, poiché non forniscono alcuna informazione aggiuntiva utile per un vero segnale di input, ma se li fai tracciare vedrai la simmetria di cui sopra, e per una singola onda sinusoidale vedrai i picchi nei cassonetti n e N - n. (Nota:. Si può pensare superiori N/2 scomparti come rappresentante frequenze negative) Riassumendo, per un segnale di ingresso reale di N punti, si ottiene N/2 utili raccoglitori di uscita complessi del FFT, che rappresentano frequenze da DC (0 Hz) a Nyquist (Fs/2).

+0

Grazie per la risposta. Ho appena provato ad usare un numero dispari di valori con '' seq (0,1.1, per = 0.1) '' e infatti la simmetria era esattamente attorno al sesto secchio come hai detto tu. Questo risponde già alla mia prima domanda. Che ne dici del secondo, come posso dedurre la frequenza di quei cassonetti? Avrei un voto in più se potessi (ha bisogno di 15 ripetizioni):/ –

+0

Oh, ti ho appena visto che lo hai già fatto nel frattempo :) Grazie! –

+2

+1 Finalmente ottenuto il rep per upvote yay :) –

2

Per ottenere le frequenze dal risultato di una FFT è necessario conoscere la frequenza di campionamento dei dati che era entrata per la FFT e la lunghezza della FFT. La frequenza centrale di ciascun raccoglitore è l'indice del contenitore per il tempo di campionamento diviso per la lunghezza della FFT. In questo modo si otterranno le frequenze da DC (0 Hz) a Fs/2 a metà scomparto.

La seconda metà dei risultati FFT sono solo coniugati complessi del primo per ingressi dati reali. Il motivo è che le porzioni immaginarie dei complessi coniugati si annullano, il che è necessario per rappresentare un risultato sommato con contenuto immaginario zero, ad es. rigorosamente reale.