2012-06-11 22 views
5

Esto es tomado en parte de la FFT-documentación de MATLAB:FFT/IFFT: Frecuencia de muestreo y duración de la señal

Fs = 30;     % Sampling frequency 
T = 1/Fs;     % Sample time 
L = 130;     % Length of signal 
t = (0:L-1)*T;    % Time vector 

x = sin(2*pi*1*t);   % 1 Hz sinus 

plot(real(ifft(abs(fft(x))))); % fft then ifft 

% Fs = 30, L = 60/90/120 ... : ok 
% Fs = 20, L = 60/80/100 ... : ok 
% Fs = 30, L = 50/70/80 ... : not ok 

Me parece que siempre que la longitud de la señal es un múltiplo de la frecuencia de muestreo, la sinusoide se reconstruye correctamente (aparte de algún cambio), por ejemplo Fs = 30, L = 60 aquí:

enter image description here

Sin embargo, si por ejemplo Fs = 30, L = 80 (no es un múltiple), el resultado es impar:

enter image description here

es correcto este comportamiento? ¿Por qué está sucediendo esto y cómo puedo evitar esto? ¿Desechar una parte de la señal de tal manera que la longitud "encaje" con la frecuencia de muestreo?

Respuesta

7

Cuando usa abs (fft()) en ifft, está utilizando solo la amplitud de la señal y eliminando la información de fase, que es necesaria.

utilizar toda la señal (abs eliminado):

plot(real(ifft(fft(x)))); % fft then ifft 
+0

Gracias, que lo resuelve. Aún así, no entiendo por qué se necesita la información de fase. ¿Podrías profundizar en esto un poco más? ¿Por qué funciona correctamente (aparte del cambio) en algunos casos? – Tobold

+3

Verifique la definición de fft (o dft). Las frecuencias en el resultado de fft (X) son (Fs/2) * (0 ... (N/2) +1)/(N/2 + 1). Para llegar a su seno de 1 Hz necesita encontrar k tal que (Fs/2) * k/(N/2 + 1) = 1. cuando k es un número entero (número redondo), no se necesita fase (retardo) para representar 1Hz, y eso sucede cuando N/F (o L/F en su caso) es un número entero. Cuando no lo es, no hay 1Hz en su salida de FFT, y el algoritmo "representa" 1Hz en un valor k que está cerca de 1Hz más un valor de fase que lo retrasa a 1Hz. Espero que mi explicación sea algo clara. :) – Ran

+0

Gracias! Ahora está claro :) – Tobold

Cuestiones relacionadas