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

gga*_*a80 7 audio signal-processing fft frequency-analysis

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

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

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

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

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

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

Pau*_*l R 8

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

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


win*_*aed 3

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

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

您提到的上限频率为 1600Hz,因此您需要至少 3200Hz 的采样率,即。双倍的。

至于一次处理的时间:您需要权衡响应能力(10 秒的缓冲区需要 10 秒+处理时间才能得到结果)与减少噪音。较小的缓冲器更有可能拾取寄生噪声信号。

顺便说一句,一开始在频域中思考可能具有挑战性。我发现对此最好的不是我在大学参加的各种应用数学课程,而是晶体学课程。晶体衍射图仅仅是二维傅里叶变换。事实证明,在我的第一份工作中处理地震数据的 FFT 时,了解衍射图样在视觉上与晶体结构的关系非常有用。