2
使用AMDF进行基音提取时如何处理低基数?
我正在使用平均幅度差函数来估计准周期音频信号的基本频率。AMDF定义为 dñ= 1ñ− n∑k = nñ− 1| 小号ķ− Sk − n|dñ=1个ñ-ñ∑ķ=ññ-1个|小号ķ-小号ķ-ñ| D_n = \frac{1}{N-n}\sum_{k=n}^{N-1}|S_k - S_{k-n}| 其中是信号的长度。当信号偏移等于其周期的量时,此功能将显示最小值。ññN 这是我用来提取音高的代码(在Matlab中): a = amdf(f); a = a/max(a); [p l] = findpeaks(-a, 'minpeakprominence', 0.6); pitch = round(sample_freq/l(1); 但是,我正在处理基频非常低的音频信号: 结果,出现音调加倍问题:检测到的最小值对应于信号周期的一半(即二次谐波): 我试图提取最大的峰,而不仅仅是第一个峰,但有时这个问题仍然存在。我该如何改善我的代码和/或AMDF功能以应对低基础?