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 .