【论文笔记之 YIN】YIN, a fundamental frequency estimator for speech and music

本文对 Alain de Cheveigne´ 等人于 2002 年在 The Journal of the Acoustical Society of America 上发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。

论文链接http://audition.ens.fr/adc/pdf/2002_JASA_YIN.pdf

1. 论文目的

提出一种语音和音乐场景下估计基频的方法:YIN.

2. 摘要

论文提出了一种用于估计语音和音乐基频( F 0 F_0 F0)的算法。该算法基于著名的自相关方法,并加入了一些修改,以减少错误。在语音和喉镜信号数据集上的评估显示,该算法的错误率比最佳竞争方法低 3 倍左右。由于没有对频率搜索范围的上界做限制,因此,该算法适合音调较高的声音和音乐。算法相对简单,延迟低,而且可调参数少。该算法基于一个周期信号模型,该模型可以以各种方式被扩展,以处理特定应用中出现的各种形式的非周期性。

3. 介绍

周期信号的基频( F 0 F_0 F0)是其周期的逆,而周期可以定义为:使得信号保持不变的所有时间偏移集合中的最小正整数。该定义只适用于完美的周期性信号。然而,所关注的语音或音乐信号并不具备完美的周期性,基频估计的艺术就是以有用且一致的方式来处理这类信号。

声音的主观音高 (pitch) 通常取决于它的基频,但也有例外。然而,宽泛地来说,音高和周期是一对一的关系。以至于“音高”一词通常被用来代替 F 0 F_0 F0,而且 F 0 F_0 F0 估计方法通常被称为 “音高检测算法” 或 PDA(pitch detection algorithms). 现代音高感知模型假设:音高要么来源于时域中神经模式的周期性,要么来源于耳蜗在频域中分辨出的局部谐波模式。这两个过程都会产生基频或者周期。

一些应用给出了对 F 0 F_0 F0 的不同定义。对于语音来说, F 0 F_0 F0 通常定义为声带的振动频率。声门处的周期性振动可能产生不太完美的周期性语音,because of movements of the vocal tract that filters the glottal source waveform. 然而,声门振动本身也会表现出非周期性。各种因素叠加在一起,使得获得语音信号 F 0 F_0 F0 的有用估计是相当困难的。尽管已经有很多方法被提了出来,但 F 0 F_0 F0 估计是一个持续吸引业界关注的话题。最全面的综述出自于 Hess, 由 HessHermes 作以更新。近期的方法包括:瞬时频率法、统计学习和神经网络、听觉模型等,当然还有很多其它的方法。

F 0 F_0 F0 可被用于很多应用中,在语音识别系统中使用 F 0 F_0 F0 的尝试已经取得了一定的成功。一些音乐类的应用需要估计 F 0 F_0 F0, 比如自动乐谱转录或实时交互系统。 F 0 F_0 F0 是许多信号处理方法中很有用的特征。

本文介绍了一种比其它著名方法产生更少错误的 F 0 F_0 F0 估计方法。名称 “YIN” (来自于东方哲学的“阴”和“阳”)暗示了它所涉及的 autocorrelationcancellation 之间的相互作用。

4. 方法

本章逐步介绍该方法,以深入了解该方法的有效性。首先,给出了经典的自相关算法;接着,分析了其误差机理;最后,提出了一系列的改进措施来降低错误率;出于说明目的,每一步都在一个小数据集上对错误率进行了测试。下一章提出了更全面的评估。

A. 步骤 1: 自相关方法

离散信号 x t x_t xt 的自相关函数 (ACF) 可以被定义为:
r t ( τ ) = ∑ j = t + 1 t + W x j x j + τ , \begin{align} r_t(\tau) = \sum_{j=t+1}^{t+W} x_j x_{j+\tau}, \end{align} rt(τ)=j=t+1t+Wxjxj+τ,

其中, r t ( τ ) r_t(\tau) rt(τ) 是在 t t t 时刻计算的滞后了 τ \tau τ 之后的自相关函数, W W W 是积分窗口的长度。图 1 给出了一个示例。在信号处理中,通常使用略微不同的定义:
r t ′ ( τ ) = ∑ j = t + 1 t + W − τ x j x j + τ . \begin{align} r_t^{'}(\tau) = \sum_{j=t+1}^{t+W-\tau} x_j x_{j+\tau}. \end{align} rt(τ)=j=t+1t+Wτxjxj+τ.

这里积分窗口的长度随着 τ \tau τ 值的增加而减少,这会导致函数的包络线作为滞后的函数而减少。如果信号在区域 [ t + 1 , t + W ] \left[t+1, t+W\right] [t+1,t+W] 之外的值全是零,那么上述两个定义将给出相同的结果,否则,将给出不同的结果。除非另有说明,否则本文采用第一种定义。

图 1
对于周期信号,ACF 在周期的倍数处显示出了峰值。“自相关方法”通过在滞后范围内的穷举搜索来选择最高的非零滞后峰值(图 1 中水平箭头)。显然,如果下限太接近零,算法可能会错误地选择零滞后峰值。反过来,如果上限足够大,它可能会错误地选择更高阶的峰值。 ( 1 ) (1) (1) 中的定义很容易出现第二个问题,而 ( 2 ) (2) (2) 中的定义又很容易出现第一个问题(当窗口长度 W W W 较小时,更是如此)。

为了评估 tapered ACF 包络对错误率的影响,对 ( 1 ) (1) (1) 中计算的函数乘以 a negative ramp 来模拟 ( 2 ) (2) (2) 的结果,且令 W = τ m a x W=\tau_{max} W=τmax:
r t ′ ′ ( τ ) = { r t ( τ ) ( 1 − τ / τ m a x ) if    τ ≤ τ m a x , 0 , otherwise . \begin{align} r_t^{''}(\tau) = \begin{cases} r_t(\tau)(1-\tau/\tau_{max}) & \text{if} \; \tau \leq \tau_{max}, \\ 0, & \text{otherwise}. \end{cases} \end{align} rt′′(τ)={ rt(τ)(1τ/τmax)0,ifττmax,otherwise.

在一个小语音数据集上对错误率进行了评估(细节参见下章),并在图 2 中给出了其与 τ m a x \tau_{max} τmax 的关系。参数 τ m a x \tau_{max} τmax 允许算法以牺牲两种错误中的一种为代价,而偏向另一种,with a minimum of total error for intermediate values. 如果使用 ( 2 ) (2) (2) 而不是 ( 1 ) (1) (1) 会引入 a natural bias that can be tuned by adjusting W W W. 然而,改变窗长还会产生其它影响,and one can argue that a bias of this sort, if useful, should be applied explicitly rather than implicitly. 这是为啥使用 ( 1 ) (1) (1) 的原因之一。

图 2
自相关方法将信号与其自身的平移版本进行比较。从这个意义上讲它和 AMDF(average magnitude difference function)方法是有关联的,后者比较的是差值而不是乘积,而且它是一种更通用的测量事件之间时间间隔的时域方法。ACF 是功率谱的傅立叶变换,and can be seen as measuring the regular spacing of harmonics within that spectrum. 倒谱方法用对数幅度谱代替功率谱,因此对频谱的高频幅度部分所施加的权重变小(particularly near the first formant that often dominates the ACF.) 类似地,‘谱白化’(‘spectral whitening’)效果可以通过线性预测逆滤波(linear predictive inverse filtering)或者中心剪切(center-clipping),或者通过使用滤波器组对信号进行分解,然后在每个通道内计算 ACFs,并将幅度归一化之后的结果相加来得到。基于自相关的听觉模型是目前解释音高感知的更流行的方法之一。

尽管自相关方法(以及与此相关的其它方法)很具有吸引力,而且研究者们付出了很多努力来提升其性能,但它在许多应用中仍会产生很多错误。接下来的内容会逐步降低其错误率。表 1 的第一行给出了基于 ( 1 ) (1) (1) 的基础自相关方法所产生的 gross error rate(定义在下一章中,且是在下一章所使用的数据集的一个子集上测量的)。表 1 中的其它行是通过一系列改进所得到的结果,下一章给出了更正式的报告。

表 1

B. 步骤 2: 差分函数

首先,将信号 x t x_t xt 建模为周期为 T T T 的周期函数,可得:
x t − x t + T = 0 , ∀ t . \begin{align} x_t - x_{t+T} = 0, \quad \forall t. \end{align} xtxt+T=0,t.

在一个窗口内对其取平方、求均值后也是如此:
∑ j = t + 1 t + W ( x j − x j + T ) 2 = 0. \begin{align} \sum_{j=t+1}^{t+W} (x_j - x_{j+T})^2 = 0. \end{align} j=t+1t+W(xjxj+T)2=0.

反过来,可以通过计算差分函数,并搜找使得函数值为零的 τ \tau τ 值,来找到一个未知的周期:
d t ( τ ) = ∑ j = 1 W ( x j − x j + τ ) 2 , \begin{align} d_t(\tau) = \sum_{j=1}^{W}(x_j-x_{j+\tau})^2, \end{align} dt(τ)=j=1W(xjx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值