在FT(傅里叶变换)和STFT(短时傅里叶变换)的理论中,据说 “宽窗口提供更好的频率分辨率但较差的时间分辨率。较窄的窗口提供良好的时间分辨率但较差的频率分辨率”
有人可以解释为什么较窄的窗口会产生较差的频率分辨率吗?
在FT(傅里叶变换)和STFT(短时傅里叶变换)的理论中,据说 “宽窗口提供更好的频率分辨率但较差的时间分辨率。较窄的窗口提供良好的时间分辨率但较差的频率分辨率”
有人可以解释为什么较窄的窗口会产生较差的频率分辨率吗?
其他答案很好,但我认为我会尝试给出更直观/直观的答案,因为我是一个直观/直观的人。
下图是频率几乎相同的两个音调的图。一种色调用红色绘制,另一种用蓝色绘制。
我在 Matlab 中使用以下代码生成了图片:
tone1 = sin(2*pi*.05 * (0:99));
tone2 = sin(2*pi*.0501 * (0:99));
plot(tone1)
hold on
plot(tone2, 'r')
从图片和代码都可以看出,两种音调的频率非常接近。在这个短窗口结束时,它们开始有点分离,但它们仍然非常相似,以至于 DFT 无法区分它们。
如果我创建具有相同频率的相同音调,只有我使窗口更长(这次是 5000 个样本而不是 100 个),我们会得到一个截然不同的画面。显然每个音会有更多的循环......
...但这不是有趣的部分。当我们在窗口末尾放大时,我们看到了有趣的部分。
我们看到两个音调在窗口末端相差 180 度,这使得它们非常容易区分。那么我怎么知道要挑选 5000 个样本呢?两种音调的区别是, 所以样品弧度。
正如提到的另一个答案,DFT 的分辨率是采样频率除以采样数(即窗口长度)。我隐含地将采样频率设为 1,因此如果我们将 1 除以 5000(采样数),我们得到分辨率为 0.0002 Hz。我们的音调实际上相差 0.0001 Hz,这意味着tone2 将在tone1 的bin 和它旁边的bin 中都有能量(在所有其他bin 中也有一点点,但这是另一回事)。
在计算 DFT 的频率分辨率或 bin 宽度时,公式如下:
frequency_resolution = sample_rate/fft_size
假设您有一个 8000 Hz 采样率的音频信号,但您想要非常高的频率分辨率。一秒钟内只有 8000 个样本,但您想要进行 32K FFT 以获得非常高的频率分辨率。当您对 8000 个样本的序列进行 32K FFT 时,您需要用大量零填充序列以填充 FFT。这样做没有任何附加价值,因此当您在频域中获得高分辨率时,没有足够的样本支持,因此它只是插值数据。频域图是平滑的和插值的。
现在假设你有很多数据,但是很多数据需要时间来填充 FFT 寄存器。假设您的采样率为 8000,但您想要真正的高分辨率并且您将等待它。您等待 4 秒来填充 32K FFT。现在,当您采用 FFT 时,没有额外的零填充来填充它。因此,当您查看绘图时,这些箱不是插值的,而是由大量数据支持的,因为您等待它。
这就是区别。当您具有低样本支持的长 FFT 时,您将获得插值数据。这就是你所说的时频权衡。如果你想要高分辨率,你需要数据来支持它。