2012-05-11 15 views
7

Aprendí sobre la transformación de fourier en las clases de matemáticas y pensé que las había entendido. Ahora, estoy tratando de jugar con R (lenguaje estadístico) e interpretar los resultados de una FFT discreta en la práctica. Esto es lo que he hecho:¿Por qué obtengo dos picos de frecuencia a partir de una función sen simple mediante FFT en 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)) 

y obtener esta trama:

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

Si entiendo este derecho, esto representa el 'medio' del espectro de densidad de energía. Como la transformación es simétrica, podría simplemente reflejar todos los valores a los valores negativos de x para obtener el espectro completo.

Sin embargo, lo que no entiendo es, ¿por qué estoy recibiendo dos picos? Aquí solo hay una frecuencia sinusal única. ¿Es esto un efecto de aliasing?

Además, no tengo ni idea de cómo obtener las frecuencias de esta trama. Supongamos que las unidades de la función seno fueron segundos, ¿es el pico en 1.0 en el espectro de densidad 1Hz entonces?

De nuevo: entiendo la teoría detrás de FFT; la aplicación práctica es el problema :).

¡Gracias por cualquier ayuda!

+0

Tangencialmente, 'calcenergy' se puede escribir como' función (x) abs (x)^2'. (Esto será más eficiente). – huon

+0

@dbaupp oh gracias. Sabía que había una manera de hacerlo, pero estaba perezosamente buscándolo :) –

Respuesta

10

Para una señal de entrada puramente real de N puntos, se obtiene una salida compleja de N puntos con simetría compleja conjugada alrededor de N/2. Puede ignorar los puntos de salida superiores a N/2, ya que no proporcionan información adicional útil para una señal de entrada real, pero si los traza verá la simetría antes mencionada, y para una sola onda sinusoidal verá picos en los contenedores n y N - n. (Nota: puede pensar que los contenedores N/2 superiores representan frecuencias negativas.) En resumen, para una señal de entrada real de N puntos, obtiene N/2 contenedores de salida complejos útiles de la FFT, que representan frecuencias de DC (0 Hz) a Nyquist (Fs/2).

+0

Gracias por su respuesta. Simplemente lo intenté usar un número impar de valores con '' seq (0,1.1, by = 0.1) '' y de hecho la simetría fue exactamente alrededor del sexto cubo como dijiste. Esto ya responde mi primera pregunta. ¿Qué tal el segundo, cómo puedo inferir la frecuencia de esos contenedores? Me gustaría votar si pudiera (necesita 15 repeticiones):/ –

+0

Oh, ya te vi andered que ya en el momento :) ¡Gracias! –

+2

+1 Finalmente obtuve el representante de vota up yay :) –

2

Para obtener frecuencias del resultado de una FFT, necesita conocer la frecuencia de muestreo de los datos que se introdujeron en la FFT y la longitud de la FFT. La frecuencia central de cada contenedor es el índice de contenedor por la frecuencia de muestreo dividida por la longitud de la FFT. Por lo tanto, obtendrá frecuencias de CC (0 Hz) a Fs/2 en la bandeja intermedia.

La segunda mitad de los resultados de FFT son simplemente conjugados complejos de la primera para entradas de datos reales. La razón es que las porciones imaginarias de conjugados complejos se cancelan, lo que se requiere para representar un resultado sumado con cero contenido imaginario, p. estrictamente real.

Cuestiones relacionadas