如果您将 DFT 视为一个(复杂的)FIR 滤波器,它与具有长度为 N 的内核的输入信号进行卷积,并且您在检查从输入信号之间的全长 N 重叠生成的最终输出之前丢弃 N-1 个输出和滤波器系数。
一个两抽头的 FIR 滤波器不能区分许多频段,而一个 2048 抽头的滤波器可以区分更多的频率,这是否具有直观的意义?
编辑:
使用以下 MATLAB 脚本生成频率扫描,执行长度为 N 个子部分的重叠窗口 FFT,并将幅度绘制为时间和频率的函数
fs = 10*100;
x = chirp(0:(1/fs):(1-1/fs), 0, 1, fs/2);
figidx = 1;
for N = [8 64]
x_b = buffer(x, N, N-1, "nodelay");
x_b = x_b.*hann(N);
W = fft(eye(N));
X = W*x_b;
figure(figidx),
subplot(2,2,2)
imagesc(real(W))
set(gca, 'ydir', 'normal')
title('Real(W)')
colormap gray
xlabel('time [frame]')
ylabel('frequency [DFT bin]')
subplot(2,2,3)
plot(x)
title('Input chirp')
subplot(2,2,4)
imagesc((abs(X)))
set(gca, 'ydir', 'normal')
title('Response')
axis tight
xlabel('time [frame]')
ylabel('frequency [DFT bin]')
figidx = figidx + 1;
end
对于 N = 8(顶部)和 N = 64(底部),我得到这些 2x2 子图,其中输入信号在左下角,DFT 矩阵的实际值在右上角,每个图的右下角显示8/64“车道”,其中上半部分是下半部分的镜像。显然,与 8 点 DFT 相比,64 点 DFT 的频率分辨率更高,因为 64 点的拖尾较少且数量较多。可能,对于这种特殊情况,可以在假设输入是单频的情况下对 8 点 DFT 进行插值,但通常不能假设这是真的。
这里的要点是,一个 64 个样本的 DFT 行或列包含许多在 fs/2 处给定中心频率的周期。人们会期望与大约该频率的输入很好地(唯一地)耦合。考虑到匹配的过滤器或相关器,具有长的独特模式通常比具有短模式更强大的“关键”。
我们得到从 0 (DC) 到 fs/2 的“频率”的统一部分。如果 N 较大,则每个分区更窄,正如我们所见,它也“更清晰”,这意味着我们可以解析更多的频率细节。
窗户形状的选择也很重要。尝试使用 hann 窗口注释该行并观察会发生什么。