1

我正在开发一个用于频率检测的 IOS 应用程序,并且我正在使用非常精确的 YIN 算法:Witch Audacity,我生成了不同频率的矩形波 - 我的算法的精度约为 0.1 % - 对于例如生成 82.4 Hz(E 弦)的音调,我真的得到 82.4 Hz,仅此而已。

无论如何,当我弹奏吉他弦时,我经常会得到泛音,这些泛音有时会比基音 (F0) 更强(幅度更高)。因此,我的显示器开始“跳舞”并切换 - 有时,甚至会发生(当音调消失时)我的算法在泛音的频率处停止(例如 A 而不是 E) - 所以用户必须再次弹奏弦乐以便查看是否存在他想要的音调(频率)。

我知道这种现象与我的算法无关,因为它只是一个“硬件”问题(我的意思是吉他只会产生泛音)。

一旦检测到关键频率(例如 E 弦 +/- 容差的 82.4 Hz),我试图平滑(频率检测的)结果或“捕捉”到固定频率,但都徒劳无功。无论如何,我的算法也经常出现错误的频率。

我在问自己如何便宜的吉他调音器(吉他商店售价 10 美元)是如何工作的,因为它们的频率检测也可靠且稳定。

我不想更改算法,但我想到了两种可能的解决方案:

  1. 信号预处理(可能是汉宁窗、低通或带通滤波)和/或
  2. 信号的后处理(某种频率平滑)。

有人知道如何克服“不稳定”的结果吗?

4

1 回答 1

1

我为我的免费彩色应用程序 iTransposer 使用了自相关,并合并了一个 Hanning 窗口,因此这可能会对您有所帮助。我最初并没有寻找准确性,因为我想在五线谱上而不是米上显示音符。然而,我的一个朋友在他的工作中使用信号发生器将其测试到 0.1 Hz,并且在使用简单信号(如正弦波)时遇到了超过 383 Hz 的问题。我用各种铜管乐器、吉他和 Garageband 乐器进行了尝试,似乎没问题调音。基本上我使用 VDSP 实现了这个http://www.ucl.ac.uk/~ucjt465/tutorials/praatpitch.html 并更新了 Kevin P Murphy https://github.com/kevmdev/PitchDetectorExample提供的示例项目

于 2015-04-15T23:26:00.863 回答