是否有一种算法可以在没有 DFT 或 FFT 的情况下找到频率?

信息处理 声音的 fft 频率 自由度
2021-12-24 21:51:05

我在 Android 应用商店中寻找吉他调音器。我发现一个调谐器应用程序声称它比其他应用程序更快。它声称它可以在不使用 DFT 的情况下找到频率(我希望我仍然拥有该规范的 URL)。

我从来没有听说过这个。您能否在不使用 DFT 或 FFT 算法的情况下获取音频信号并计算频率?

4个回答

FFT 实际上并不是制作调谐器的好方法。FFT 本质上具有有限的频率分辨率,如果不使时间窗口变得非常长,就不容易检测到非常小的频率变化,这使得它变得笨拙和迟缓。

更好的解决方案可以基于锁相环延迟锁定环、自动相关、过零检测和跟踪、最大或最小检测和跟踪,当然还有这些方法的智能组合。

预处理总是有帮助的。

FFT 报告与音高不同的频谱频率峰值(由 FFT bin 大小量化)。感知到的音高频率可能完全从 FFT 频谱中丢失。

一些最简单的吉他调音器只是使用低通或带通滤波并测量过零之间的时间。倒数给出频率估计。

自相关是另一种常见的音高估计方法。滑动相关或其他自相似度量有很多变化,例如滑动 ASDF(平方差)、AMDF(平均差)、非线性模式匹配器、仅针对有限滞后范围的自适应检查、滞后插值、加窗和自适应窗口选择、各种加权或使用决策理论在多个潜在滞后历史序列中进行选择等。大多数自相似性度量的一个问题是选择合适的倍频程,因为子倍频程可能显示出几乎相同的相似性。

其他可能性包括使用 PLL、滤波正交解调器、滤波希尔伯特变换等。

但请注意,某些 DSP 滤波和解调方法在计算上几乎等同于对窗口 DFT 进行 1-bin,这可能适合也可能不适合作为您问题的答案。

音高检测可以通过许多通用和奇怪的方式完成。一种方法是使用自相关本文给出了如何使用它的示例。使用 1 位相关器可以使自相关变得非常简单(由于某种原因,找不到任何像样的论文)。所以理论上,可以比 FFT 更快地检测音高,但我怀疑如果没有真正聪明的预处理,它会更加精确。

还可以看看相对较新的算法定义的 Hilbert-Huang 变换(HHT)。它可以处理可能与您的应用相关的非平稳非线性信号。