此链接提供了基于自相关的音高检测算法的代码,但说:
缺点:不准确,不适用于乐器等不和谐的东西,这种实现很难找到真正的峰值
这是为什么?如果我想创建一个吉他音高检测器会有什么影响(假设我现在只使用单声道音频)。是噪音造成了这些影响吗?我以为乐器是和声的东西,不是不和谐的。
YIN算法在这方面是不是有所改进?如果不是,它有什么改进?
此链接提供了基于自相关的音高检测算法的代码,但说:
缺点:不准确,不适用于乐器等不和谐的东西,这种实现很难找到真正的峰值
这是为什么?如果我想创建一个吉他音高检测器会有什么影响(假设我现在只使用单声道音频)。是噪音造成了这些影响吗?我以为乐器是和声的东西,不是不和谐的。
YIN算法在这方面是不是有所改进?如果不是,它有什么改进?
缺点:不准确
这只是与其他方法进行比较。我非常准确地测量频率以查找时钟漂移等:例如,1000.000004 Hz 对应 1000 Hz。对于吉他音高检测,它会很好。
不适用于乐器等不和谐的东西
我应该说“如果有不和谐,它就找不到准确的基本面”。它将向上移动,因为弹拨的弦乐分音略显尖锐。
在你的情况下,你不想找到基本的,但是,你想找到感知的音高,这是自相关擅长的。(虽然我不知道有多准确,以及是否需要加权等)
http://www.utdallas.edu/~assmann/hcs6367/yost09.pdf
https://ccrma.stanford.edu/~dattorro/Humans.pdf
这个实现很难找到真正的峰值
因为自相关会在正确的频率上产生峰值,但也会在其所有次谐波处产生峰值,而这个函数只是天真地选择了最高峰。您需要绘制相关曲线并找到一种方法来为您的波形选择正确的结果。
由于吉他弦具有非零刚度、非零直径和非零位移,因此弦的泛音的物理振动频率可能会略微尖锐。从而不和谐。但是这种轻微的不和谐可能是某些真正的弦乐器听起来比一些简单的加法和波形采样合成器更“有趣”的部分原因。
然而,音乐音高感知可能与振动模式不同。有一些实验证据表明,对于基本音较弱的弦乐器音符,感知的音高更多地与某些谐波之间的距离有关,而不是与基本振动模式有关。请注意,对于轻微不和谐的乐器,这个频率距离与更纯谐波的乐器不同。
与其他方法相比,自相关可能更接近或可能不会更接近估计人类感知的音高周期,但肯定比天真地选择 FFT 幅度峰值要好。
对自相关峰值结果进行插值可以改进音调估计。
或者,如果您研究基于参数模型的基音估计方法类 [1],您会发现将不和谐性 [2] 考虑在内是相当直接的。在[3]中,提出了一种吉他信号的多音高估计器。
您可以查看的一些参考资料:
[1] MG Christensen 和 A. Jakobsson,“多音高估计,系列。关于语音和音频处理的综合讲座”。摩根和克莱普尔出版社,2009 年。
[2] H. Fletcher,“刚性钢琴弦的正常振动频率”,J. Acoust。社会党。美国,第一卷。36(1),1962。
[3] T. Nilsson、SI Adalbjörnsson、NR Butt 和 A. Jakobsson -“非谐波信号的多音高估计”,Proc。欧洲信号处理会议,2014。