我试图了解使用 DFT 时的泄漏现象。下面我指的是里昂:了解数字信号处理(第 2 版),第 69-71 页。
具有实值余弦样本作为输入,N 点 DFT 的幅度响应可以近似为(根据 bin 索引)
,
在哪里是内部的循环数样品。
如果是一个整数,只有 1 个 bin 非零。否则会发生频谱泄漏。到现在为止还挺好。
现在我想使用以下代码在 Matlab 中复制它。
N = 32; % No of samples
fs = 32000; % sampling frequency
m = linspace(0,N-1,N);
k = 8.5; % No of cycles within N samples
X = sin(2*pi*k/N*m); % cosine signal
Y = fft(X);
f = linspace(0,fs*(N-1)/N,N);
stem(f,abs(Y));hold on
和作为整数,没有泄漏。
但是,使用在 8 kHz 和 9 kHz 处产生峰值,尽管幅度略有不同(和)。在我的参考书中给出了 10.17 号。
我的问题是:
两个峰不应该完全一样吗?为什么他们不是?
另外,我已经绘制了函数与“连续”. 原始光谱的 bin 应该正好在得到的 sinc 函数上。然而,我们离 8.5 kHz 越远,差异越大。DFT bin 不只是底层连续光谱的“未覆盖”部分吗?