第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 基音周期计算(pitch tracking)

基音周期计算(pitch tracking)

时间:2023-12-09 16:24:35

相关推荐

基音周期计算(pitch tracking)

基音(Pitch)计算笔记

音高(Pitch)

定义:

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

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

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

音高追踪(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)

一些处理步骤

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等于每秒钟的帧数

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

时域

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

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

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

归一化方差(Normalized squared difference)

nsdf(τ)=2∑s(t)s(t−τ)∑s2(t)+∑s2(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−τ)2∑s(t)s(t−τ)​, 可以验证 −1≤nsdf(τ)≤1-1\leq nsdf(\tau)\leq 1−1≤nsdf(τ)≤1

平均幅度方差函数(AMDF,Average Magnitude Difference Function):amdf(τ)=∑t=τn−1∣s(t)−s(t−τ)∣amdf(\tau)=\displaystyle{\sum_{t=\tau}^{n-1}|s(t)-s(t-\tau)|}amdf(τ)=t=τ∑n−1​∣s(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. 降采样并求和以加强在基础频率处的谐波:如图降采样并求和后FoF_oFo​处会被加强,理解:当降采样时,一帧对应的点数会变少,将降采样后的一帧频谱与原来对比,则只有原来长度的一半,且二倍基频的index和原来基频的index对齐,则降低三倍采样率后三倍基频index和原来基频index对其,以此类推,这样原来基频处的点变得到了加强

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

倒谱(cepstrum):cepstrum=ifft(log(∣fft(frame)∣))cepstrum = ifft(log(|fft(frame)|))cepstrum=ifft(log(∣fft(frame)∣))

a. 计算每一帧的谱能量

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

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

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

pitch tracking 性能评估

Raw pitch accuracy: Prob. of a correct pitch value over the voiced framesRaw chroma accuracy: Prob. that the chroma(i.e. the note name) is correct over the voiced framesOverall accuracy: Prob. of a correct pitch value(via pitch estimation) and pitch decision (via voicing detection) over all frames

一些常用的预处理(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)表示为前面mmm个信号的线性组合: s(n)=a1s(n−1)+a2s(n−2)+...+sms(n−m)+e(n)s(n)=a_1s(n-1)+a_2s(n-2)+...+s_ms(n-m)+e(n)s(n)=a1​s(n−1)+a2​s(n−2)+...+sm​s(n−m)+e(n),利用平方最小法来寻找最佳的系数a1,a2,a3,...,am{a_1,\ a_2,\ a_3,...,a_m}a1​,a2​,a3​,...,am​,使得∑e2(n)\sum e^2(n)∑e2(n)最小,则e(n)e(n)e(n)便是原始激发信号(excitation signal)。即:线性预测误差信号就是原始激发信号

音高追踪的后处理

平滑:移除音高突变插值:提高音高精确度。思想:利用pitch和它旁边的点来确认最大值位置

UPDUDP(Unbroken Pitch Determination Using DP):将pith的平滑度(smoothness)也计入考虑

cost(p,θ,m)=∑i=1namdfi(pi)+θ×∑i=1n∣pi−pi+1∣mcost(\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=1∑n​amdfi​(pi​)+θ×i=1∑n​∣pi​−pi+1​∣m,其中p=[p1,p2,...,pn]\mathbf{p}=[p_1,p_2,...,p_n]p=[p1​,p2​,...,pn​] 表示一个given path in the AMDF matrix,nnn为帧的数量,θ\thetaθ为转化惩罚因子(transition penalty),mmm为 exponent of the transition difference

Optimum-value functionD(i,j)D(i,j)D(i,j):从第一帧到位置(i,j)(i,j)(i,j)的最小costcostcost

D(i,j)=amdfi(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(i−1,k)+θ×∣k−j∣2},i∈[1,n],j∈[8,160],初始条件为:D(1,j)=amdf1(j),j∈[8,160]D(1,j)=amdf_1(j),\ j\in[8,160]D(1,j)=amdf1​(j),j∈[8,160] ,最优costcostcost为:min⁡j∈[8,160]D(n,j)\displaystyle{\min_{j\in [8,160]}D(n, j)}j∈[8,160]min​D(n,j)

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

semitone=12×log⁡2(fracfreq440)+69semitone=12\times \displaystyle{\log_2(frac{freq}{440})+69}semitone=12×log2​(fracfreq440)+69合理的pitch范围:E2-C6 也即82Hz - 1047Hz

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

semitone=12×log⁡2(fracfreq440)+69semitone=12\times \displaystyle{\log_2(frac{freq}{440})+69}semitone=12×log2​(fracfreq440)+69合理的pitch范围:E2-C6 也即82Hz - 1047Hz

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。