这种现象与频谱泄漏无关。您正在观察的是零填充的效果。给定样本的数量ñ,有最大可能的频率分辨率 Δ ˚F能够实现:
Δ ˚F= fsñ
在你的情况Δ ˚F正好是2^ h ž。如果您将信号调零,则没有其他信息可检索-您只会减小频率间隔。
在上面的示例中,将ñ增加到1000,频率间隔为1个^ h ž。所有额外的观察样本仅仅是插值,由窗函数来完成(š 我Ñ Ç你的情况)。您将开始观察窗谱的旁瓣。既然你隐含矩形窗口乘以你的信号,这将导致你的信号与频谱(二狄拉克+ DC)的卷积š 我Ñ Ç功能。
另一种方式来看待它是想象DFT基本上是一个滤波器组,组成的移动š 我Ñ Ç功能。那些以这样的方式对齐,即1的峰值是所有其余1的零出现的位置。如果您开始在这些零之间寻找,则将开始获取这些样本。这里是这样的示例曲线š 我Ñ Ç滤波器组。
š 我Ñ Ç0š 我Ñ Ç
ñ= 1000ñ= 10000
放大部分:
注意事项:
很明显,用于重现结果的代码:
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'})