FFT长度和频率分辨率之间有什么关系?

电器工程 数字信号处理器
2022-01-16 23:28:07

如果我使用适当的采样方法(奈奎斯特、滤波等)对信号进行了采样,我如何将 FFT 的长度与我可以获得的频率分辨率相关联?

就像我有一个 2,000 Hz 和 1,999 Hz 正弦波一样,我将如何确定准确分辨这两个波之间差异所需的 FFT 长度?

4个回答

频率分辨率取决于 FFT 长度和输入信号的采样率之间的关系。

如果我们为 FFT 收集 8192 个样本,那么我们将有:

8192 samples2=4096 FFT bins

如果我们的采样率为 10 kHz,则 Nyquist-Shannon 采样定理表明我们的信号可以包含高达 5 kHz 的频率内容。然后,我们的频点分辨率为:

5 kHz4096 FFT bins1.22 Hzbin

这可能是从概念上解释但简化的更简单方法:您的 bin 分辨率只是,其中是输入信号的采样率, N 是 FFT 点的数量使用(样本长度)。fsampNfsamp

从上面我们可以看出,要获得更小的 FFT 箱,我们可以运行更长的 FFT(即,在运行 FFT 之前以相同的速率采集更多样本)或降低我们的采样率。

渔获:

在时间分辨率和频率分辨率之间总是存在权衡。

在上面的示例中,我们需要收集 8192 个样本才能运行 FFT,在 10 kHz 采样时需要 0.82 秒。

如果我们试图通过运行更长的 FFT 来获得更小的 FFT 箱,那么收集所需样本将需要更长的时间。

这可能没问题,也可能不行。重要的一点是,在固定采样率下,增加频率分辨率会降低时间分辨率。也就是说,您在频域中的测量越准确,您在时域中的准确度就越低。您实际上会丢失 FFT 长度内的所有时间信息。

在此示例中,如果 1999 Hz 音调在 8192 样本 FFT 的前半部分开始和停止,并且在窗口的后半部分播放 2002 Hz 音调,我们会看到两者,但它们似乎同时发生时间。

您还必须考虑处理时间。8192 点 FFT 需要一些不错的处理能力。减少这种需求的一种方法是降低采样率,这是提高频率分辨率的第二种方法。

在您的示例中,如果您将采样率降低到 4096 Hz,那么您只需要 4096 点 FFT 即可实现 1 Hz 箱 *4096 Hz,那么您只需要 4096 点 FFT 即可实现 1hz 箱并且仍然可以解决2khz 信号。这减小了 FFT bin 大小,但也减小了信号的带宽。

最终,FFT 总是在频率分辨率和时间分辨率之间进行权衡。您必须执行一些平衡操作才能实现所有目标。

基本 FFT 分辨率是,其中是采样频率。fsNfs

区分两个非常接近的信号的能力很大程度上取决于相对幅度和使用的窗口函数。

您可能会发现使用Baudline 信号分析仪是培养对此事的一些直觉的好方法 - 不,在 Matlab 或 Python/Numpy 中运行一些 FFT 并一次绘制一个频谱确实不一样。

编辑:还有一个技巧可以用零填充输入并采用更大的 FFT。它不会提高您的区分能力,但可能会使光谱更具可读性。它基本上是一种类似于矢量图形中的抗锯齿的技巧。

值得注意的是,FFT 是计算 Sample[k]*SineRefWave[j][k] 和 Sample[j]*CosRefWave[j 的多个单独的和 (k=0..sample_length-1) 对的替代方法][k],对于所有 j 不超过样本长度的一半。如果需要所有这些频率的幅度读数,FFT 将在 O(NlgN) 时间内计算它们,而单独计算它们需要 O(N^2) 时间。另一方面,如果只需要几个频率的幅度读数,通常最好单独计算它们,特别是如果使用可以有效计算这种求和方式的处理器或 DSP。

还值得注意的是,虽然具有例如 20ms 采样窗口的 F​​FT 将无法区分单个 1975Hz 音调,或 N<25 的频率 (1975-N)Hz 和 (1975+N)Hz 的组合,如果附近没有其他频谱内容,它可用于以比采样窗口更精细的精度测量孤立频率。一个单独的 1975Hz 频率将在 1950Hz 和 2000Hz 箱中平均拾取,就像 1974Hz 和 1976Hz 音调的组合一样。然而,一个孤立的 1974Hz 音调在 1950Hz 箱中的拾音比在 2000Hz 箱中的拾音更强,而 1976Hz 的音调在 2000Hz 箱中拾音更强烈。

频率分辨率不取决于FFT的长度,而是总采样时间T的长度,即1/T,这也是你得到的最低频率分量。

注意,零填充不会增加频率分辨率;零填充信号的 DFT 仅仅是原始信号的 DTFT 的更好近似。