这是一个窗口工件。
链接代码用零填充 10,000 个样本信号,因此长度是 2 的幂。
%% 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;
...
请注意,在上面的代码中,FFT 采用 FFT 大小NFFT,它是信号长度(在本例中为 16,384)的 2 次幂。来自Mathworksfft()文档:
Y = fft(X,n)返回 n 点 DFT。fft(X)相当于第一个非单一维度中fft(X, n)的n大小。X如果 的长度X小于n,X用尾随零填充到 length n。如果 的长度X大于n,则序列X被截断。当X是一个矩阵时,列的长度以相同的方式调整。
这意味着您实际上并没有对“纯正弦波”进行 FFT - 您正在对正弦波进行 FFT,其后是平坦信号。
这相当于将正弦波乘以方窗函数的 FFT。FFT 频谱是正弦波频谱(脉冲函数)与方波频谱(sinc(f))的卷积。
如果您进行更改L = 16,384以使信号没有零填充,您将观察到perfectFFT。
进一步搜索关键词:“光谱泄漏”、“窗函数”、“汉明窗”。
编辑:我清理了一些我在大学时写的关于这个主题的材料,这些材料更详细。我已经在我的博客上发布了。