¿Por qué la transformada de Fourier de un solo ciclo sinusoidal no es una sola barra?

12

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

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

Un ciclo:

100ciclos:

100000 ciclos:

ParecequelatransformadadeFourierconvergesoloparaunnúmeroinfinitodeciclos,¿porqué?¿NodeberíaunaventanadetiempodeexactamenteunciclotraerlosmismosresultadosqueladeNciclos?

Aplicación:Estoesporcuriosidadytambiénporquequierosaberhastaquépuntolarespuestaalescalóndeunsistemadeprimerordenestimularálaresonanciadeunconjuntomecánico.Porlotanto,necesitounatransformadadeFourierprecisadelarespuesta...enlaqueyanoconfío.¿Quépodríahacerparamejorarlaprecisión,enfuncióndelcasode"onda sinusoidal"?

PS:estascapturasdepantallaenparticularsebasanenelcódigo aquí .

    
pregunta Mister Mystère

1 respuesta

29

Este es un artefacto de ventanas.

El código vinculado elimina una señal de 10,000 muestras 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 NFFT , que es la siguiente potencia de 2 mayor que la longitud de la señal (en este caso, 16,384). Desde Mathworks fft() documentation :

  

Y = fft(X,n) devuelve el DFT de n puntos. fft(X) es equivalente a fft(X, n) , donde n es el tamaño de X en la primera dimensión noningingleton. Si la longitud de X es menor que n , X se rellena con ceros a la longitud n . Si la longitud de X es mayor que n , la secuencia X se trunca. Cuando X es una matriz, la longitud de las columnas se ajusta de la misma manera.

Esto significa que en realidad no estás tomando un FFT de una 'onda sinusoidal pura'; estás tomando el FFT de una onda sinusoidal con una señal plana detrás de él.

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

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

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

Edit: Limpié un poco del material que escribí sobre este tema en la universidad, lo cual entra en más detalles. Lo he publicado en mi blog .

    
respondido por el Li-aung Yip

Lea otras preguntas en las etiquetas