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


67

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

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

Answers:


81

频率分辨率取决于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长度内的所有时间信息。

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

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

在您的示例中,如果将采样率降低至4096 Hz,则仅需要4096点FFT即可实现1 Hz频段* 4096 Hz,则仅需要4096点FFT即可实现1hz频段,并且仍然可以解析2khz信号。这减小了FFT仓的大小,但也减小了信号的带宽。

最终,使用FFT总是会在频率分辨率和时间分辨率之间进行权衡。您必须采取一些平衡的措施才能实现所有目标。


带有标题标签和某些格式的信息,这篇文章可能会变得越来越好。您触及了我要注意的所有内容,很好,但是帖子的格式设置方式使人们阅读它的方式少了,因为它的篇幅太长了,如果在讨论的每一部分都提供标题,人们会跳到多汁的位。适合他们,而您的+1数量会大大增加。当然不是从我这里来的,因为您已经赚到了。
Kortuk

@kurtuk我匆忙吐了出来,有空的时候我会清理格式(或者您可以随意编辑)。
标记

1
@kortuk,名称以“ o”开头。我以为您有(我只是在分享我的观点),如果您还不了解,那么对您来说都是,对整个社区来说,更多。
Kortuk

1
请注意,您不必计算FFT。如果您只想知道几个bin,则只计算这些bin的DFT比运行优化的FFT(通过共享许多操作一次计算所有bin)便宜。
克里斯·斯特拉顿

还值得注意的是,类似的频/时域折衷适用于模拟和IIR滤波器。
Caleb Reister

10

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

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

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

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


我是唯一看不到格式正确显示的Latex代码的人吗?
stevenvh 2011年

@stevenvh也不适合我。
露台

为我工作。乳胶只有2个地方。
Kortuk

2
已修复(已存在一段时间)。Firefox的NoScript附加组件阻止了mathjax.org。
stevenvh 2011年

3

值得注意的是,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采样窗口的FFT不能区分单个1975Hz音调,或N <25的频率组合(1975-N)Hz和(1975 + N)Hz,如果附近没有其他频谱内容,它可以用来测量隔离频率,其精度要比采样窗口更好。单独的1975Hz频率将在1950Hz和2000Hz频段中平均拾取,就像1974Hz和1976Hz音调的组合一样。但是,孤立的1974Hz音在1950Hz频段中比在2000Hz频段中更强地拾取,而1976Hz音在2000Hz频段中则更强。


1

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

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


0

如果您知道可能的输入频率范围,并且范围很窄,则可以应用欠采样来减少采样数量和计算FFT的时间。通过256个采样和256 Hz的采样频率,您可以获得所需的1 Hz分辨率和128 Hz的无混叠带宽。


-3

看这张照片。很明显。fs和fft分辨率之间的关系

在此处输入图片说明


5
从这张图中还不能完全清楚发生了什么。(图片不是英语也无济于事。)这有什么补充,而其他答案都没有提到?
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.