Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 阴频率检测和泛音(吉他弦)_C_Audio_Core Audio_Pitch Tracking - Fatal编程技术网

C 阴频率检测和泛音(吉他弦)

C 阴频率检测和泛音(吉他弦),c,audio,core-audio,pitch-tracking,C,Audio,Core Audio,Pitch Tracking,我正在开发一个用于频率检测的IOS应用程序,我使用的是YIN算法,它非常精确:witch Audacity,我生成了不同频率的矩形波——我的算法的精度约为0.1%——例如生成82,4 Hz(E字符串)的音调,我真的得到了82,4 Hz,其他什么都没有 不管怎样,当我弹奏吉他弦时,我经常得到泛音,有时泛音比基音(F0)强(振幅更大)。因此,我的显示器开始“跳舞”和切换-有时,甚至会发生(当音调消失时)我的算法在泛音的频率(例如A而不是E)处停止-因此用户必须再次拨动字符串,以查看其所需的音调(频率

我正在开发一个用于频率检测的IOS应用程序,我使用的是YIN算法,它非常精确:witch Audacity,我生成了不同频率的矩形波——我的算法的精度约为0.1%——例如生成82,4 Hz(E字符串)的音调,我真的得到了82,4 Hz,其他什么都没有

不管怎样,当我弹奏吉他弦时,我经常得到泛音,有时泛音比基音(F0)强(振幅更大)。因此,我的显示器开始“跳舞”和切换-有时,甚至会发生(当音调消失时)我的算法在泛音的频率(例如A而不是E)处停止-因此用户必须再次拨动字符串,以查看其所需的音调(频率)是否存在

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

我试图平滑(频率检测)的结果,或在检测到关键频率(例如,E字符串+/-公差为82.4 Hz)后立即“捕捉”到固定频率,但都是徒劳的。无论如何,我的算法也经常出现错误频率

我在问我自己,便宜的吉他调谐器(在吉他店里卖10美元)有多好用,因为它们的频率检测也是可靠和稳定的

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

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

  • 有人知道如何克服“起伏”的结果吗?

    我在我的免费彩色应用程序iTransposer中使用了自相关,并加入了汉宁窗口,因此这可能会对您有所帮助。一开始我并不是在寻找准确度,因为我想把音符显示在一个横杠上,而不是一个仪表上。然而,我的一个朋友在他的工作中用信号发生器将其测试到0.1 Hz,在使用简单信号(如正弦波)时出现383 Hz以上的问题。我用各种铜管乐器、吉他和车库乐队乐器进行了尝试,似乎可以进行调谐。 基本上我实现了这个
    使用VDSP并更新了Kevin P Murphy提供的示例项目

    谢谢你,psybersonic-我已经尝试了你的建议,在频率稳定性方面有一些轻微的改进。“Praat中的音调”这篇论文帮助我更好地理解音调或语音检测。非常感谢你!很高兴帮助乌尔里奇。数字音频并不容易。如果使用Kevin Murphy的任何代码,音频控制器中就会出现内存泄漏。需要添加空闲数据(此->bufferList.mBuffers[0].mData);在录制回调的末尾。(如果我的记忆正确的话)。