我正在开发用于频率检测的IOS应用程序,我使用的算法YIN,这是非常精确的:巫大胆,我已经生成的不同的矩形波频率 - 我的算法精度约为0.1% - 例如产生一个82,4 Hz(E字符串)的音调,我真的得到了82.4 Hz,没有别的。无论如何,当我弹奏吉他弦时,我经常会得到泛音,有时可能比基音(F0)更强(幅度更高)。因此,我的显示器开始“跳舞”和切换 - 有时甚至发生(当音调消失时),我的算法停止在泛音频率(例如A而不是E) - 因此用户必须再次弹奏字符串或查看他想要的音色(频率)是否存在。我知道这种现象与我的算法无关,因为它只是一个“硬件”问题(我的意思是简单地产生泛音的吉他)。贤频检测和色彩(吉他弦)
我一直试图平滑(频率检测)的结果,或者一旦关键频率(例如E弦+/-容差为82.4 Hz)已经被“捕捉”到固定频率检测。总之,我的算法经常会发生错误的频率。
我在问自己,吉他调音器(对于吉他店中的10美元)是多么便宜,因为它们的频率检测也是可靠和稳定的。
我不想改变算法,但有两个可能的解决方案进入我的脑海:
- 信号(可能是汉宁窗,低通或带通滤波)和/或
- 后处理的预处理的信号(某种频率平滑)。
有人想法如何克服“波涛汹涌”的结果?
谢谢,psybersonic - 我已经试过了你的建议,并有相关的频率稳定度略有改善。为了更好地理解音高或语音检测,论文“Pitch in Praat”为我提供了很多帮助。非常感谢! –
很高兴帮助Ulrich。数字音频并不容易。如果您使用Kevin Murphy的任何代码,则音频控制器中存在内存泄漏。需要添加免费(THIS-> bufferList.mBuffers [0] .mData);在录音回调结束时。 (如果我的记忆是正确的)。 – psybersonic