但是,如果我这样做:
Fs=1000;
Ns=500;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);
X=fft(x);
频率分辨率为1,但存在频谱泄漏。在这里看到类似的效果。
在我看来,两个窗口的傅立叶变换(一个长度为500的窗口,一个长度为1000的窗口)在信号出现的频率处都为零,所以我没有看看为什么会发生泄漏?
#1 楼
这种现象与频谱泄漏无关。您正在观察的是零填充的效果。给定多个样本$ N $,可以实现最大可能的频率分辨率$ \ Delta f $:$$ \ Delta f = \ frac {f_s} {N} $$
在您的情况下,$ \ Delta f $恰好是$ 2 \; \ mathrm {Hz} $。如果您将信号调零,则没有多余的信息可检索-您只会减小频率间隔。在上面的示例中,当您将$ N $增加到$ 1000 $时,您会得到一个$ 1 ;; \ mathrm {Hz} $的频率间隔。所有额外观察到的样本仅仅是窗口函数(在您的情况下为$ \ mathrm {sinc} $)进行的插值。您将开始观察窗谱的旁瓣。由于您将信号隐式乘以一个矩形窗口,因此将导致信号频谱(两个Dirac's + DC)与$ \ mathrm {sinc} $函数进行卷积。
另一种看待它的方法是,假设DFT基本上是一个滤波器组,由移位的$ \ mathrm {sinc} $函数组成。那些以这样的方式对齐,即峰值1是所有其余的零都存在的位置。如果您开始在这些零之间寻找,则将开始获取这些样本。这是此类$ \ mathrm {sinc} $滤波器组的示例图。
让我们假设存在与蓝色滤波器相对应的频率。这将在相应的仓中产生振幅。其余所有频率均不存在(橙色和黄色),因此将$ \ mathrm {sinc} $乘以$ 0 $便不会得到任何结果。在零填充的情况下,将不再是这种情况。蓝色$ \ mathrm {sinc} $的样本将落入中间容器并进行sinc插值。
这是$ N = 1000 $和$ N =发生的情况。 10000 $:
放大的部分:
注意事项:
对于$ N = 500 $,没有任何泄漏。有完美的尖峰,代表您的每个频率和DC偏移。
我们还可以在最底部观察FFT噪声。
对于$ N = 10000 $,$ \ mathrm {sinc} $的形状函数清晰可见。
很显然,用于重现结果的代码:
Fs=1000;
Ns=500;
Ns2=1000;
Ns3=10000;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);
X1 = abs(fft(x))/length(x);
X2 = abs(fft(x, Ns2))/Ns;
X3 = abs(fft(x, Ns3))/Ns;
F1 = 0:Fs/Ns:Fs-Fs/Ns;
F2 = 0:Fs/Ns2:Fs-Fs/Ns2;
F3 = 0:Fs/Ns3:Fs-Fs/Ns3;
plot(F1, 20*log10(X1))
hold on
plot(F2, 20*log10(X2))
plot(F3, 20*log10(X3))
xlim([0, Fs/2])
grid on
legend({'N=500', 'N=1000', 'N=10000'})
评论
$ \ begingroup $
非常完整的答案+1。 “ [...]您只会增加频率间隔。”我认为应该减少。
$ \ endgroup $
– Matt L.
16年7月15日在12:20
#2 楼
频谱泄漏通常是Sinc卷积效应或其他域中矩形窗(在您的情况下为t或时间)的伪影。零填充是通过将矩形窗口(这是您原始的非零填充数据)添加到更长的FFT来完成的。您的假设FT应该为零,但一个频率为假一般来说。任何有限长度(且非零)的信号将具有无限范围的非零频谱。频谱的无限范围(Sinc形或其他Windows的变换)在DFT / FFT结果中仅会出现在纯正弦曲线上,而不是整个FFT宽度上具有精确整数周期的正弦波。零填充不允许这样做。
#3 楼
泄漏是由于有限长度的窗口而引起的,实际上您经常会遇到这种情况。但是,如果正弦分量的周期数正好是整数,则FFT固有的周期化就好像正弦是“无穷大”一样,其频率恰好落在离散化的区间上。因此,由于纯粹的运气,泄漏得到了某种程度的消除:如果您提前知道信号的周期,则无需使用傅立叶工具对其进行分析。使用零填充,您无需有了一个纯正弦。都不具有非整数周期的多个窗口。您正在串联在窗口边界处发生突变的一系列正弦波。因此,整个周期信号不再是“无限正弦”。因此,您可以获得与泄漏同化的效果,但这是零填充效果,正如@jojek完美解释的那样。
评论
零填充不会减少明显的频谱泄漏,而只会使频谱泄漏的凸起显得更加平滑。