通过限制频率范围来提高FFT输出的频率分辨率?

时间:2010-11-02 21:42:54

标签: audio signal-processing fft frequency-analysis

我是FFT和信号处理的新手,所以希望这个问题有意义和/或不愚蠢。

我想对现场音频信号进行频谱分析。我的目标是在响应度和频率分辨率之间找到一个很好的权衡,这样我就可以近乎实时地猜测传入音频的音高。

从我收集的关于傅里叶变换背后的数学的方面来看,样本大小和频率分辨率之间存在固有的平衡。样本越大,分辨率越高。由于我试图最小化样本大小(以达到近实时要求),这意味着我的分辨率受到影响(输出缓冲区中的每个时隙对应一个宽频率范围,这是不可取的)。

然而,对于我的预期应用,我并不关心大部分频谱。我只需要一个窄频率范围的频谱信息,例如100hz - 1600hz。有没有办法修改FFT实现,这样我可以提高频域输出的分辨率,同时保持输入缓冲区大小不变(和小)?换句话说,我可以将输出总带宽换成输出分辨率吗?如果是这样,这是怎么做到的?

虽然我对数学的掌握最好,但似乎用零填充输入缓冲区可能很有意思,不是吗?

提前感谢您提供的任何帮助。

6 个答案:

答案 0 :(得分:8)

您无法从任何地方获取其他信息,但您可以通过重叠连续的FFT来减少延迟。对于实时功率谱估计,通常将连续输入窗口重叠50%。

在样本之间插入零是另一个有用的技巧 - 它在输出箱中提供更明显的分辨率,但实际上你所做的只是插值,即没有获得额外的信息(当然)。除了上面的重叠建议之外,您可能会发现此技术很有用。

答案 1 :(得分:3)

正如Mark所说,添加零会引入谐波(不需要的频率)。

另外,当您说“样本量越大”时,您的意思是更多的样本,还是更高的采样率?较高频率的采样率将导致每单位时间更多的样本,但似乎您意味着以固定采样率(即分析更大的时间块)的更多样本。

你提到1600Hz的上限频率,所以你需要一个至少3200Hz的采样率,即。双

对于一次处理的时间段:您将需要交易响应性(10秒缓冲区将在获得结果之前花费10秒+处理时间)与降低噪声。较小的缓冲区更有可能拾取杂散噪声信号。

顺便说一句,在频域思考起初可能具有挑战性。我找到了最好的东西,不是我在大学里学过的各种应用数学课,而是结晶学课。晶体衍射图案仅仅是二维傅立叶变换。当我在第一份工作中使用地震数据的FFT时,了解衍射图案在视觉上与晶体结构的关系非常有用。

答案 2 :(得分:3)

我认为没有超越FFT的“技巧”。 “添加零”也可能意味着过度采样信号。为了摆脱谐波,必须对信号进行滤波(这肯定会引入额外的噪声)。然后你会做更长的FFT,但之后整体分辨率仍然是相同的。

此外,您的窗口功能还会扩大结果中的频率峰值。

OTOH,如果频率落在两个FFT区间之间,则可以通过查看相邻区间的比率来获得更好的分辨率: http://www.tedknowlton.com/resume/FFT_Bin_Interp.html

但这对于更复杂的信号(具有许多同时发生的频率)不起作用。

  • 如果你想知道某些频率是否存在,我会研究过滤器和相关性。

  • 如果您想要确定一个特定频率,您可以先将其过滤掉,然后检测过零点。设计滤波器时有许多参数,因此滤波器长度只是导致某个滤波器(步进)响应时间的一个参数。您可以针对多个频率,一个接一个地执行此操作...

加法:有些直觉:

  1. 因为FFT足以进行重建,所以主要是无限多的高分辨率光谱导致相同的样本向量,并且没有一个更正确。 bin插值基本上计算了另一个('更好拟合')表示,而不是 Fast -Fourier-Transform的均匀间隔的bin。

  2. 在离散的量化情况下,例如8位,考虑两个非常接近的频率。如果差异足够小,它们将产生相同的,例如256个样本。但是看一下更多的样本(可能是1024),你会发现差异变得足够大,可以看到。

  3. PS:过滤后的过滤也可以在FFT之后通过忽略较高的箱来完成。

答案 3 :(得分:2)

您可以以1600 Hz(或稍高,比如2k)对数据进行低通滤波,然后重新采样到较低的采样率(滤波器频率的两倍,例如4k),以减少采样数。然后使用零填充来提高频率分辨率。

答案 4 :(得分:0)

您声明的目标与您的问题不符。音频的音高与解析的频率峰值不同。请阅读关于人声和音高估计的大量文献(适用于许多其他类型的具有感知音高的声音)。自适应/增量/滑动时域技术可以提供比基于频域块的技术更低的延迟。

音频样本矢量的零填充几乎与频域数据的内插相同。如果噪声很小或附近有干扰,您可能会发现更准确(更高“分辨率”)的频率峰值位置。但是你不会更好地拒绝附近的光谱峰值(分离分辨率)或噪声。

在FFT之前对数据进行加窗(von Hann等)可能有助于消除由附近但非bin或2-bin相邻频率引起的一些噪声。

补充:除非您的后采样低通滤波器接近完美且相位线性,否则您实际上可能会失去所需频段边缘附近的频率分辨率。过滤不会将任何实际信息添加到感兴趣的波段中,因此无助于增加“分辨率”。窗口化更有可能减少来自其他频率的干扰。

答案 5 :(得分:0)

您可能需要查看Compressed Sensing。您可以采样(并存储)本质上是预压缩信号,您可以在以后重建。只要信号稀疏性很高(在您的情况下可能就是这种情况),Shanon-Nyquist约束可以稍微弯曲。缺点是重新创建原始信号的后处理在计算上可能是时间密集的。此外,您可能需要开发自己的设备驱动程序来管理您用于采样信号的任何硬件,因为工厂驱动程序可能假设您有兴趣遵守Nyquist-Shannon约束。可以找到更多信息here