基音检测算法
目录
基音检测算法
音高检测算法 (PDA) 是一种算法,旨在估计准周期或振荡信号的音高或基频,通常是语音或音符或音调的数字记录。 这可以在时域、频域或两者中完成。
PDA 用于各种环境(例如语音学、音乐信息检索、语音编码、音乐表演系统),因此可能对算法提出不同的要求。 目前还没有单一的理想 PDA,因此存在多种算法,大多数大致属于下面给出的类别。
PDA 通常会估计准周期信号的周期,然后反转该值以给出频率。
一般方法
一种简单的方法是测量信号的过零点之间的距离(即过零率)。 然而,这不适用于由多个具有不同周期或噪声数据的正弦波组成的复杂波形。 然而,在某些情况下,过零可能是一种有用的衡量标准,例如 在某些假定单一来源的语音应用中。 该算法的简单性使其实施起来成本低廉。
更复杂的方法将信号段与试用期偏移的其他段进行比较以找到匹配。 AMDF(平均幅度差函数)、ASMDF(平均平方差函数)和其他类似的自相关算法以这种方式工作。 这些算法可以为高度周期性信号提供相当准确的结果。 然而,它们存在错误检测问题(通常是八度音阶错误),有时无法很好地处理噪声信号(取决于实现方式),并且 – 在它们的基本实现方式中 – 不能很好地处理复调声音(涉及不同音高的多个音符) ).
当前的时域音高检测器算法倾向于建立在上述基本方法的基础上,并进行额外的改进以使性能更符合人类对音高的评估。 例如,YIN 算法和 MPM 算法都是基于自相关的。
频域方法
频域、和弦检测是可能的,通常利用周期图将信号转换为频谱估计。 随着所需精度的提高,这需要更多的处理能力,尽管众所周知的 FFT 效率(周期图算法的关键部分)使其在许多用途上都非常高效。
流行的频域算法包括:谐波乘积谱; 倒谱分析和xxx似然法,它试图将频域特性与预定义的频率图相匹配(对于检测固定调谐仪器的音高很有用); 以及由谐波级数引起的峰值检测。
为了改进从离散傅立叶频谱导出的音高估计,可以使用频谱重新分配(基于相位)或 Grandke 插值(基于幅度)等技术来超越 FFT 区间提供的精度。 Brown 和 Puckette 提供了另一种基于阶段的方法
频谱/时间方法
频谱/时间音调检测算法,例如 YAAPT 音高跟踪算法基于使用自相关函数(例如归一化互相关)的时域处理和使用频谱信息识别音高的频域处理的组合。 然后,在从两个域估计的候选者中,可以使用动态规划计算最终音高轨迹。 这些方法的优点是一个域中的跟踪误差可以通过另一个域中的过程来减少。

语音音调检测
语音的基本频率可以从低音调的 40 赫兹到高音调的 600 赫兹不等。
自相关方法至少需要两个音高周期来检测音高。 这意味着为了检测 40 Hz 的基频,必须分析至少 50 毫秒 (ms) 的语音信号。 然而,在 50 ms 期间,具有较高基频的语音可能不一定在整个窗口中具有相同的基频。