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í:
Sin embargo, si por ejemplo Fs = 30, L = 80
(no es un múltiple), el resultado es impar:
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?
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
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
Gracias! Ahora está claro :) – Tobold