¿Por qué la transformación de Fourier de un solo ciclo de onda sinusoidal no es una sola barra?

12

He intentado diferentes códigos de transformada de Fourier en ondas sinusoidales, y todos producen un espectro distribuido con una resonancia en la frecuencia de la señal cuando teóricamente deberían mostrar una sola barra.

La frecuencia de muestreo tiene poco efecto (10 kHz aquí), sin embargo, el número de ciclos:

Un ciclo:

ingrese la descripción de la imagen aquí

100 ciclos:

ingrese la descripción de la imagen aquí

100000 ciclos:

ingrese la descripción de la imagen aquí

Parece que la transformada de Fourier converge solo por un número infinito de ciclos, ¿por qué es eso? ¿No debería una ventana de tiempo de exactamente un ciclo traer los mismos resultados que la de N ciclos?

Aplicación: Esto es por curiosidad y también porque quiero obtener cuánto la respuesta escalonada de un sistema de primer orden excitará la resonancia de un ensamblaje mecánico. Por lo tanto, necesito una transformación precisa de Fourier de la respuesta ... en la que ya no confío. ¿Qué podría hacer para mejorar la precisión en base al caso de "onda sinusoidal"?

ingrese la descripción de la imagen aquí

PD: Estas capturas de pantalla particulares se basan en el código aquí .

Señor Mystère
fuente
66
Además de la respuesta aceptada, tenga en cuenta que no hay razón para creer que la transformada de Fourier de tiempo discreto (que está calculando usando el DFT) sería un impulso para una señal de entrada que es un período de una sinusoide. La transformación de Fourier de tiempo continuo de una sinusoide es un impulso, sí, pero esa sinusoide tiene una duración infinita. Cuando limitas la señal a tiempo, eso es equivalente a multiplicar por una función de ventana rectangular. El resultado del dominio de frecuencia es la convolución del impulso y la transformación de Fourier de la ventana, que es esencialmente lo que estás observando.
Jason R
Gracias por el comentario. Entonces, ¿cómo explicas que si cambio el número NFFT a la longitud del vector, el resultado es una sola barra?
Señor Mystère
1
Buena pregunta. Esto ocurre debido a una suposición inherente en el DFT. Se supone que la señal de longitud finita dada a la entrada del DFT se extiende periódicamente en ambas direcciones con una duración infinita. Por lo tanto, cuando tiene un número entero de ciclos dentro de la "apertura" del DFT, termina con la transformación de una sinusoide de duración infinita: un solo impulso. Esto corresponde al caso de fuga espectral exactamente cero, y rara vez ocurre en la práctica.
Jason R

Respuestas:

30

Este es un artefacto de ventanas.

El código vinculado rellena una señal de muestra de 10,000 con ceros para que la longitud sea una potencia de dos.

%% Author :- Embedded Laboratory

%%This Project shows how to apply FFT on a signal and its physical 
% significance.

fSampling = 10000;          %Sampling Frequency
tSampling = 1/fSampling;    %Sampling Time
L = 10000;                  %Length of Signal
t = (0:L-1)*tSampling;      %Time Vector
F = 100;                    %Frequency of Signal

%% Signal Without Noise
xsig = sin(2*pi*F*t);
...

%%Frequency Transform of above Signal
subplot(2,1,2)
NFFT = 2^nextpow2(L);
Xsig = fft(xsig,NFFT)/L;
...

Tenga en cuenta que en el código anterior, la FFT se toma con el tamaño de FFT, NFFTque es la siguiente potencia de 2 más grande que la longitud de la señal (en este caso, 16,384). De la documentación de Mathworksfft() :

Y = fft(X,n)devuelve el punto n DFT. fft(X)es equivalente a fft(X, n)donde nes el tamaño de Xen la primera dimensión no singleton. Si la longitud de Xes menor que n, Xse rellena con ceros finales a la longitud n. Si la longitud de Xes mayor que n, la secuencia Xse trunca. Cuando Xes una matriz, la longitud de las columnas se ajusta de la misma manera.

Esto significa que en realidad no está tomando una FFT de una 'onda sinusoidal pura', está tomando la FFT de una onda sinusoidal con una señal plana después de ella.

Esto es equivalente a tomar la FFT de una onda sinusoidal multiplicada por una función de ventana cuadrada. El espectro FFT es entonces la convolución del espectro de frecuencia de onda sinusoidal (una función de impulso) con el espectro de frecuencia de onda cuadrada (sinc (f)).

Si cambia L = 16,384para que no haya relleno de cero de la señal, observará una perfectFFT.

Otras palabras clave de búsqueda: "Fuga espectral", "Función de ventana", "Ventana de Hamming".


Editar: Limpié parte del material que escribí sobre este tema en la universidad, que entra en detalles sustancialmente más. Lo publiqué en mi blog .

Li-aung Yip
fuente
Estaba justo en frente de mi cara todo este tiempo. Bien hecho señor, acabo de cambiar el número NFFT a la longitud del vector y eso fue todo.
Señor Mystère
1
@ MisterMystère: Vea la edición para ver el enlace al material relevante que escribí en la universidad. Una explicación mucho más exhaustiva, que incluye imágenes.
Li-aung Yip
(Aunque olvidé volver a escribir las fórmulas matemáticas, solucionadas ahora.)
Li-aung Yip
Solo un recordatorio de que hay poca ventaja en el relleno para nextpow2 utilizando los algoritmos matlab FFT, que creo que es fftw (la transformación de Fourier más rápida en el oeste)
Scott Seidman