声学特征(三) pitch


基本含义

pitch跟声音的基频fundamental frequency(F0)有关,反应的是音高的信息,即声调。计算F0也被称为‘‘pitch detection algorithms(PDA)。


YIN算法

sphinx使用的YIN算法提取pitch特征,相对简单而且进行了定点化。
YIN来自于“阴阳”哲学,寓意在autocorrelation和cancellation之间的变换。YIN算法的演化流程:

Step 1: The autocorrelation method

autocorrelation function(ACF)运算可以用于寻找周期信号的周期。因为周期信号的自相关函数也是周期信号,而且周期一致。

rt(τ)=j=t+1t+Wxjxj+τ             (1)

W表示相关函数的窗口, τ 表示相关函数的延时。

Step 2: Difference function

dt(τ)=j=1W(xjxj+τ)2

YIN算法使用该函数替换上面的第一步的自相关函数,优势在于:
当时域信号随着时间幅值变大的时候,导致自相关函数的峰值也会逐渐变大,最大的峰值就会后移,从而导致 周期变长。而对于差分函数,幅值的变化会导致所有的 τ 对应的差分值都会改变,减弱了这种影响。

Step 3: Cumulative mean normalized difference function

dt(τ)=1dt(τ)1ττj=1dt(j)if τ=0otherwise

相比于step2,减少了 τ 比较小的时候出现零点的情况,减弱了 小周期的产生。

Step 4: Absolute threshold

step3,如果极小值出现的时间点比周期对应的时间点要长,会出现周期变长的情况。为了解决这类问题,可以设置一个绝对的门限(比如0.1),找到低于这个门限的每一段的极小值,这些极小值中的第一个极小值对应 τ 作为周期(第三步是使用这些极小值的中的最小值对应的 τ 作为周期)。如果没有低于门限的点,那么选择全局最小值作为周期。

Step 5: Parabolic interpolation

前面的步骤有一个假设,即信号的周期是采样周期的倍数。如果不满足的话,会引起错误。
为了解决这个问题,每个 d(τ) 的局部最小值以及相邻的点,可以使用二次函数抛物线进行拟合。后续周期计算的时候使用每个局部最小值对应的拟合值。找到的最小值对应的时间即为周期。使用这种方法有可能存在bias,可以用 d(τ) 来避免这个问题。

Step 6: Best local estimate

在找到的周期值附近,在时间窗口 [tTmax/2,t+Tmax/2] 寻找极小值对应的时间作为周期, Tmax 是最大期望周期值。
总体上,YIN算法使用 d(τ) 进行周期估计,同时设置一个绝对门限,在找得到周期值附近重新进行搜索获得最优值。


参考

《YIN, a fundamental frequency estimator for speech and music》

你可能感兴趣的:(声学模型)