基音周期计算(pitch tracking)

基音(Pitch)计算笔记

  1. 音高(Pitch)

    • 定义:

      基础频率:准周期(quasi-periodic, 指周期几乎确定,但有小幅波动)波的基础频率的倒数,单位为Hz

      Pitch(in semitone, 半音):由基础频率经过类对数(log-based)变换得到

    • 特点:噪声和非语音没有Pitch

  2. 音高追踪(Pitch Tracking)

    • 定义:即对整段音频求取音高
    • 前处理(Pre-processing):
      • 滤波(Filtering)
      • 激励提取(Excitation extraction)
    • 主要过程:
      • 分帧(Frame blocking)
      • 周期检测函数计算(periodicity detection function)
      • 通过追踪PDF最大值获取候选Pitch(Pitch Candidates via max picking over PDF)
    • 后处理:
      • 通过音量/纯净度阈值去除不可靠的Pitch(Unreliable pitch removal via volume/clarity thresholding)
      • 通过抛物插值优化结果(Pitch refinement via parabolic interpolation)
      • 通过中值滤波进行平滑(Pitch smoothing via median filters)

一些处理步骤

  1. Frame Blocking

    • 分帧:例子:

      Sample rate = 16kHz

      Frame size = 512 samples,Frame duration = 512 / 16000 = 32ms

      Overlap = 192 samples

      Hop size = frame size - overlap = 512-192 = 320 samples

      Frame rate = Sample rate / Hop size =16000/320 = 50 frames/sec= Pitch rate,即 Pitch rate等于每秒钟的帧数

  2. PDF(Periodicity Detection Functions):分为两个categories

    • 时域

      • 自相关函数(ACF, Autocorrelation function):假设原本的frame为 s ( t ) ,   t = 0... n − 1 s(t),\ t = 0...n-1 s(t), t=0...n1,移动后的frame为 s ( t − τ ) s(t-\tau) s(tτ)也即向后移动 τ \tau τ个采样点,则 a c f ( τ ) = ∑ t = τ n − 1 s ( t ) s ( t − τ ) acf(\tau) = \displaystyle{\sum_{t=\tau}^{n-1}s(t)s(t-\tau)} acf(τ)=t=τn1s(t)s(tτ) , 即对两帧的重合部分相乘相加。重合的长度为 n − τ n-\tau nτ,显然 τ \tau τ越大,重合长度越短,则其实质为截断(truncated)ACF. 当然ACF还有多种不同形式,如归一化(即除以重叠长度)、半帧移等

      在这里插入图片描述
      在这里插入图片描述

      • 定位基础频率(FP, Pundamental period):

        • 设每个采样点为一个index,显然 a c f ( 0 ) acf(0) acf(0)取到了最大值,假设在index 131也即 a c f ( 131 ) acf(131) acf(131)取到次极大值,则基础频率(FF)= 16000/131 = 123.077 Hz。假如人类的基频区间为 [ 40 , 1000 ] [40, 1000] [40,1000]内: 40 ≤ f s F P ≤ 1000 40\leq \frac{fs}{FP}\leq 1000 40FPfs1000,则我们可以得到基础周期的区间 f s 1000 ≤ F P ≤ f s 40 \frac{fs}{1000}\leq FP\leq \frac{fs}{40} 1000fsFP40fs ,我理解的 F P FP FP就是截断ACF的次极大值对应的index
        • 基础频率可能计算出错:如海豚音或者吹口哨会使其变高;低声唱歌或者哼哼则需要更大的frame size
      • 归一化方差(Normalized squared difference)

        n s d f ( τ ) = 2 ∑ s ( t ) s ( t − τ ) ∑ s 2 ( t ) + ∑ s 2 ( t − τ ) nsdf(\tau)=\displaystyle{\frac{2\sum s(t)s(t-\tau)}{\sum s^2(t)+\sum s^2(t-\tau)}} nsdf(τ)=s2(t)+s2(tτ)2s(t)s(tτ), 可以验证 − 1 ≤ n s d f ( τ ) ≤ 1 -1\leq nsdf(\tau)\leq 1 1nsdf(τ)1

      • 平均幅度方差函数(AMDF,Average Magnitude Difference Function): a m d f ( τ ) = ∑ t = τ n − 1 ∣ s ( t ) − s ( t − τ ) ∣ amdf(\tau)=\displaystyle{\sum_{t=\tau}^{n-1}|s(t)-s(t-\tau)|} amdf(τ)=t=τn1s(t)s(tτ), 显然其在index 0处取0,此函数应该寻找第二个最小值的index

        和ACF比较的优势:AMDF需要的算力更少,数据溢出的风险更小

        也有归一化版本和半帧移版本

        在这里插入图片描述

      • 结合:可用将ACF和AMDF结合,即ACF/AMDF,其峰值更为尖锐

        在这里插入图片描述

    • 频域

      • 几个概念

        • 能量:频谱平方和
        • Pitch:谐波之间的距离(Distance between harmonics)
        • Timber:平滑后的频谱(Smoothed spectrum)
      • 谐波基谱(HPS, Harmonic Product Spectrum):

        a. 计算一帧的的谱能量

        b. 消除通过20阶多项式拟合后的趋势(Eliminate its trend obtained from 20-order polynomial fitting -> Formants are removed)

        c. 使用指数权重来抑制高频谐波(Apply exponential weighting to suppress high-frequency harmonics)

        d. 降采样并求和以加强在基础频率处的谐波:如图降采样并求和后 F o F_o Fo处会被加强,理解:当降采样时,一帧对应的点数会变少,将降采样后的一帧频谱与原来对比,则只有原来长度的一半,且二倍基频的index和原来基频的index对齐,则降低三倍采样率后三倍基频index和原来基频index对其,以此类推,这样原来基频处的点变得到了加强

        在这里插入图片描述

        e. 找到最大值作为音高点(pitch point)

      • 倒谱(cepstrum): c e p s t r u m = i f f t ( l o g ( ∣ f f t ( f r a m e ) ∣ ) ) cepstrum = ifft(log(|fft(frame)|)) cepstrum=ifft(log(fft(frame)))

        a. 计算每一帧的谱能量

        b. 如有必要,消除能量谱的趋势

        c. 对能量谱进行逆fft变化(结果是实的)

        d. 找到最大值的位置并计算pitch

  3. pitch tracking 性能评估

    • Raw pitch accuracy: Prob. of a correct pitch value over the voiced frames
    • Raw chroma accuracy: Prob. that the chroma(i.e. the note name) is correct over the voiced frames
    • Overall accuracy: Prob. of a correct pitch value(via pitch estimation) and pitch decision (via voicing detection) over all frames
  4. 一些常用的预处理(Pre-Processing)

    • Pre-filter the signal:人的pitch在 [ 40 , 1000 ] [40, 1000] [40,1000] 的区间内,因而可以用使用截止频率在800-1000的滤波器进行过滤

    • Clipping:在0附近进的小信号很可能会导致音高追踪出现错误,因而可以设置一定区间,在区间范围内的值置0
      在这里插入图片描述

    • SIFT(simple inverse filter tracking):通道效应(channel effect)可能会导致pitch track出现错误,即声带信号经过口腔鼻腔等会发生变形,希望找到声带原始信号。我们可将当前信号 s ( n ) s(n) s(n)表示为前面 m m m个信号的线性组合: s ( n ) = a 1 s ( n − 1 ) + a 2 s ( n − 2 ) + . . . + s m s ( n − m ) + e ( n ) s(n)=a_1s(n-1)+a_2s(n-2)+...+s_ms(n-m)+e(n) s(n)=a1s(n1)+a2s(n2)+...+sms(nm)+e(n),利用平方最小法来寻找最佳的系数 a 1 ,   a 2 ,   a 3 , . . . , a m {a_1,\ a_2,\ a_3,...,a_m} a1, a2, a3,...,am,使得 ∑ e 2 ( n ) \sum e^2(n) e2(n)最小,则 e ( n ) e(n) e(n)便是原始激发信号(excitation signal)。即:线性预测误差信号就是原始激发信号

  5. 音高追踪的后处理

    • 平滑:移除音高突变
    • 插值:提高音高精确度。思想:利用pitch和它旁边的点来确认最大值位置
  6. UPDUDP(Unbroken Pitch Determination Using DP):将pith的平滑度(smoothness)也计入考虑

    • c o s t ( p , θ , m ) = ∑ i = 1 n a m d f i ( p i ) + θ × ∑ i = 1 n ∣ p i − p i + 1 ∣ m cost(\mathbf{p},\theta, m)=\displaystyle{\sum_{i=1}^n amdf_i(p_i)+\theta\times \sum_{i=1}^n|p_i-p_{i+1}|^m} cost(p,θ,m)=i=1namdfi(pi)+θ×i=1npipi+1m,其中 p = [ p 1 , p 2 , . . . , p n ] \mathbf{p}=[p_1,p_2,...,p_n] p=[p1,p2,...,pn] 表示一个given path in the AMDF matrix, n n n为帧的数量, θ \theta θ为转化惩罚因子(transition penalty), m m m为 exponent of the transition difference

    • Optimum-value function D ( i , j ) D(i,j) D(i,j):从第一帧到位置 ( i , j ) (i,j) (i,j)的最小 c o s t cost cost

      D ( i , j ) = a m d f i ( j ) + min ⁡ k ∈ [ 8 , 160 ] { D ( i − 1 , k ) + θ × ∣ k − j ∣ 2 } ,   i ∈ [ 1 , n ] ,   j ∈ [ 8 , 160 ] D(i,j)=amdf_i(j)+\displaystyle{\min_{k\in [8,160]}\{D(i-1,k)+\theta\times |k-j|^2\}},\ i\in[1,n],\ j\in [8,160] D(i,j)=amdfi(j)+k[8,160]min{D(i1,k)+θ×kj2}, i[1,n], j[8,160],初始条件为: D ( 1 , j ) = a m d f 1 ( j ) ,   j ∈ [ 8 , 160 ] D(1,j)=amdf_1(j),\ j\in[8,160] D(1,j)=amdf1(j), j[8,160] ,最优 c o s t cost cost为: min ⁡ j ∈ [ 8 , 160 ] D ( n , j ) \displaystyle{\min_{j\in [8,160]}D(n, j)} j[8,160]minD(n,j)

  7. 频域到半音的转换(Frequency to Semitone):semitone是一个基于A440的音乐尺度

    • s e m i t o n e = 12 × log ⁡ 2 ( f r a c f r e q 440 ) + 69 semitone=12\times \displaystyle{\log_2(frac{freq}{440})+69} semitone=12×log2(fracfreq440)+69
    • 合理的pitch范围:E2-C6 也即82Hz - 1047Hz

semitone是一个基于A440的音乐尺度

  • s e m i t o n e = 12 × log ⁡ 2 ( f r a c f r e q 440 ) + 69 semitone=12\times \displaystyle{\log_2(frac{freq}{440})+69} semitone=12×log2(fracfreq440)+69
  • 合理的pitch范围:E2-C6 也即82Hz - 1047Hz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值