GB/T 7714-2015
RAO P S, S K, RAVISHANKAR S, et al. A comparative study of various pitch detection algorithms[C]//2020 IEEE International Conference on Electronics, Computing and Communication Technologies (CONECCT). IEEE, 2020.
文章目录
- GB/T 7714-2015
- 多种基音检测算法对比研究
- 摘要
- 关键词
- 一、引言
- 二、基音检测算法
- A 时域基音检测算法
- B 时域基音检测算法
- 1 改进自相关法
- 2 平均幅度差函数(AMDF)
- 3 YIN算法(平方差函数法)
- C 频域基音检测算法
- 1 倒谱法
- 三、多种基音检测算法对比
- A 时间复杂度/计算耗时
- B 算法检测误差
- 四、结果与分析
- A 各算法优缺点总结
- 1 改进自相关(AUTO)
- 2 AMDF平均幅度差函数
- 3 YIN算法
- 4 倒谱法(CEPS)
- 五、结论
- 参考文献
多种基音检测算法对比研究
普拉吉瓦尔·S·拉奥*, 库希克·S*, 斯里拉姆·拉维尚卡尔*, R·阿德瓦伊思·阿南克里什南*, 巴拉钱德拉·K*
*印度班加罗尔 B.M.S.工程学院 电信工程系
邮箱:balachandrak.tce@bmsce.ac.in
摘要
数字信号处理针对各类信号执行多种数学运算,本文研究应用于音乐信号的基音估计算法。文中详细研究时域、频域两类基音检测算法:改进自相关法、平均幅度差函数法、YIN算法、倒谱法。采用真实音乐信号与合成音乐信号完成算法测试,基于时间复杂度与检测误差对比各算法性能。
关键词
基音;自相关;平均幅度差函数;YIN;倒谱;杰拉德
一、引言
语音由肺部气流经气管到达口腔时声带振动产生,声带每秒振动次数称为人声音基频,也称作基音。声波等介质中波形每秒振动次数称为频率或基音。男性基音偏低,频率区间55Hz131Hz,大致对应标准钢琴A1C3音;女性基音更高,频率区间170Hz262Hz,大致对应F3C4音。乐器频率覆盖范围极宽,最低可达16Hz,最高至4000Hz(C0~B7),但1000Hz以上频率对基音分析意义较低,因此本文研究范围限定在1000Hz以下频段。
二、基音检测算法
基音可在时域或频域完成计算。时域基音检测直接利用音频原始采样数据;频域基音检测需借助傅里叶变换等运算将信号从时域转换至频域后再分析。
A 时域基音检测算法
时域算法处理声卡直接输出的原始采样序列,采样点为等时间间隔离散波形数值,常见采样率44100Hz。输入采样值KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲x[n]\)为[ − 1 , 1 ] [-1,1][−1,1]区间实数,代表离散时刻n nn处波形幅值。本节介绍自相关(AUTO)、平均幅度差函数(AMDF)、YIN平方差法、简单特征法等时域基音算法。
B 时域基音检测算法
时域算法处理声卡直接输出的原始采样序列,采样点为等时间间隔离散波形数值,常见采样率44100Hz。输入采样值KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲x[n]\)为[ − 1 , 1 ] [-1,1][−1,1]区间实数,代表离散时刻n nn处波形幅值。本节介绍自相关(AUTO)、平均幅度差函数(AMDF)、YIN平方差法、简单特征法等时域基音算法。
1 改进自相关法
自相关是最主流的基音估计算法之一,将输入信号KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲x[n]\)与自身做互相关运算:将信号逐位移位后与原信号相乘,全部乘积求和得到单组自相关值。
r [ n ] = ∑ N = 0 x [ n ] ⋅ x [ N − n ] r[n]=\sum_{N=0}x[n] \cdot x[N-n]r[n]=N=0∑x[n]⋅x[N−n]
式中n = 1 , 2 , … , N n=1,2,\dots,Nn=1,2,…,N,N NN为帧长。
自相关法至少需要两个完整基音周期才能完成基音检测;若基频为40Hz,至少需要50ms语音帧,因此窗口仅取前半段数据。上式为输入信号自相关计算公式。若信号周期为P PP,自相关函数会在P PP整数倍位置出现极大值;n = 0 n=0n=0原点处为全局主峰,各周期倍数位置为局部极大值。首个局部极大值对应的采样间隔即为基音周期,取倒数得到基频。算法通过阈值过滤低幅值峰值,简化峰值检索、降低误差,这也是“改进自相关”与基础自相关的核心区别。
图1 改进自相关基音估计框图
(图注:输入x [ n ] x[n]x[n]→2048点分窗→自相关运算→阈值筛选峰值→基音=F s / F_s/Fs/峰值索引;窗口指针未达音频末尾则滑动窗重复计算,计算完成后输出绘图)
改进自相关提取音频基音步骤:
- 整段音频分窗处理,窗长2048点;该窗长可检测最低基音约50Hz,分窗后乘合适窗函数;
- 对加窗信号执行自相关运算;
- 滤除低于阈值的自相关幅值,检索剩余峰值并记录峰值索引;
- 采样频率F s F_sFs除以峰值索引,得到当前帧基音;
- 按帧移滑动窗口,50%重叠时帧移取1024点;
- 判断窗口指针是否到达音频末尾,未到则返回步骤1,全部帧计算完成后绘制基音曲线等结果。
图2 加窗音频的自相关曲线
(图注:横轴采样索引,纵轴幅值;原点全局峰值坐标(0,6.99),首个局部极大值在索引61处,幅值6.505;采样率48000Hz,基音计算值48000 / 61 = 787 H z 48000/61=787\mathrm{Hz}48000/61=787Hz)
图2为加窗信号自相关结果,自相关为偶函数、关于原点对称,因此仅取半段分析。原点全局峰值对应信号总能量,首个局部极大值出现在第61个采样点,采样率48000Hz,基频48000 / 61 = 787 H z 48000/61=787\mathrm{Hz}48000/61=787Hz。
2 平均幅度差函数(AMDF)
伪周期波形相邻周期波形形状近似;将波形平移一个周期后与原波形对齐,波峰波谷完全重合。直接做差值求和会出现正负抵消,因此取差值绝对值再求平均,对应公式:
s [ n ] = ∑ N = 0 ∣ x [ n ] − x [ n − N ] ∣ / N s[n]=\sum_{N=0} |x[n]-x[n-N]| / Ns[n]=N=0∑∣x[n]−x[n−N]∣/N
式中n = 1 , 2 , … , N n=1,2,\dots,Nn=1,2,…,N,N NN为帧长。
平移量β \betaβ不等于周期时差值总和偏大;β \betaβ等于周期时差值总和取极小值,算法检索局部极小值位置作为周期索引。
图3 AMDF基音估计框图
(图注:输入x [ n ] x[n]x[n]→2048点分窗→循环移位求绝对值差→计算差值和→检索极小值索引→基音=F / F/F/极小索引;窗口未结束则滑动窗迭代,完成后绘图)
AMDF提取音频基音步骤:
- 整段音频分窗,窗长2048点,最低可检测基音约50Hz,分段后乘窗函数;
- 加窗信号与循环移位后的信号逐点求绝对值差;
- 累加所有差值并保存求和结果;
- 循环移位重复步骤2、3,直至移位后信号与原始窗完全重合;
- 检索所有差值和中的最小值,记录极小值对应索引;
- 采样频率除以极小索引得到当前帧基音;
- 按帧移滑动窗口,50%重叠帧移1024点;
- 判断窗口是否遍历完整音频,未遍历则返回步骤1,全部计算完成后输出绘图。
图4 加窗音频的平均幅度差函数曲线
(图注:横轴采样索引,纵轴绝对差值;首个局部极小值位于索引133,差值15.93;采样率44100Hz,基音44100 / 133 = 331.57 H z 44100/133=331.57\mathrm{Hz}44100/133=331.57Hz)
图4为加窗信号AMDF曲线,首个局部极小值在133号采样点,采样率44100Hz,基频44100 / 133 = 331.57 H z 44100/133=331.57\mathrm{Hz}44100/133=331.57Hz。
3 YIN算法(平方差函数法)
伪周期波形平移一个周期后与原波形高度重合;直接差值求和会正负抵消,因此采用差值平方求和,所有项恒非负,公式:
s [ n ] = ∑ ( x [ n ] − x [ n − N ] ) 2 s[n]=\sum (x[n]-x[n-N])^{2}s[n]=∑(x[n]−x[n−N])2
式中n = 1 , 2 , … , N n=1,2,\dots,Nn=1,2,…,N,N NN为帧长。
平移量不等于周期时平方和偏大;等于周期时平方和取极小值,算法检索局部极小值位置。
图5 YIN基音估计框图
(图注:输入x [ n ] x[n]x[n]→2048点分窗→循环移位求差值平方和→检索极小索引→基音=F s / F_s/Fs/极小索引;窗口未结束则滑动迭代,全部计算完成绘图)
YIN提取音频基音步骤:
- 整段音频分窗,窗长2048点,最低可检测基音约50Hz,分段后乘窗函数;
- 加窗信号与循环移位信号求差值平方;
- 累加所有平方项并保存;
- 循环移位重复步骤2、3,直至信号还原初始窗口;
- 检索所有平方和的最小值,记录极小值索引;
- 采样频率除以极小索引得到当前帧基音;
- 帧移1024点滑动窗口(50%重叠);
- 判断窗口是否遍历完整音频,未遍历返回步骤1,全部计算完成绘图。
图6 加窗音频YIN算法曲线
(图注:横轴采样索引,纵轴绝对平方差值;首个极小值索引343,数值0.9768;采样率44100Hz,基音44100 / 343 = 128.57 H z 44100/343=128.57\mathrm{Hz}44100/343=128.57Hz)
图6为加窗信号YIN函数曲线,首个局部极小值在343采样点,采样率44100Hz,基频44100 / 343 = 128.57 H z 44100/343=128.57\mathrm{Hz}44100/343=128.57Hz。
C 频域基音检测算法
频域算法不直接处理原始时域采样,先通过傅里叶变换将时域信号转换至频域,包括谐波积谱、次谐波谐波比、复倒谱、频谱峰值法。
1 倒谱法
倒谱适用于卷积型信号基音检测,核心思路:卷积在频域转为相乘,取对数将乘积转换为加法,再逆傅里叶变换还原类时域倒谱域。
X ( ω ) = ∑ n = − ∞ ∞ x [ n ] e − j ω n (4) X(\omega ) = \sum _{n=-\infty }^{\infty }x[n] e^{-j\omega n} \tag{4}X(ω)=n=−∞∑∞x[n]e−jωn(4)
l o g ( X ( ω ) ) = l o g ∣ X ( ω ) ∣ + j a r g ( X ( ω ) ) log (X(\omega))=log |X(\omega)|+j arg (X(\omega))log(X(ω))=log∣X(ω)∣+jarg(X(ω))
x ′ [ n ] = 1 2 π ∫ 0 2 π l o g ( X ( ω ) ) e j ω n d ω x'[n]=\frac{1}{2 \pi} \int_{0}^{2 \pi} log (X(\omega)) e^{j \omega n} d \omegax′[n]=2π1∫02πlog(X(ω))ejωndω
图7 倒谱(CEPS)基音估计框图
(图注:输入x [ n ] x[n]x[n]→2048点分窗→FFT傅里叶变换→取对数→IFFT逆傅里叶变换→检索峰值索引→基音=F s / F_s/Fs/峰值索引;窗口未结束则滑动迭代,计算完成绘图)
倒谱提取音频基音步骤(原文笔误写成YIN,实际为倒谱):
- 整段音频分窗,窗长2048点,最低可检测基音约50Hz,分段后乘窗函数;
- 对加窗信号执行FFT快速傅里叶变换,转换至频域;
- 对频谱幅值取对数;
- 执行IFFT逆傅里叶变换回到倒谱时域;
- 检索倒谱峰值并记录峰值索引;
- 采样频率除以峰值索引得到当前帧基音;
- 帧移1024点滑动窗口;
- 判断窗口是否遍历完整音频,未遍历返回步骤1,全部计算完成绘图。
三、多种基音检测算法对比
A 时间复杂度/计算耗时
所有算法均在MATLAB平台实现,表1汇总各类乐器采样的单段计算耗时。
表1 各基音算法计算耗时(单位:秒)
| 乐器采样 | 改进自相关(AUTO) | AMDF | YIN | 倒谱(CEPS) |
|---|---|---|---|---|
| 小提琴E6 | 0.267 | 0.769 | 1.373 | 0.125 |
| 小提琴E4 | 0.215 | 0.323 | 0.507 | 0.115 |
| 小号E3 | 0.307 | 1.396 | 2.432 | 0.134 |
| 双簧管G5 | 0.250 | 0.643 | 0.986 | 0.120 |
| 吉他B2 | 0.279 | 0.991 | 1.748 | 0.137 |
| 长笛A4 | 0.366 | 2.261 | 3.672 | 0.142 |
| 低音提琴C1 | 0.327 | 1.057 | 1.855 | 0.130 |
测试数据集包含各类乐器标准乐音:E6(1295Hz)、E4(324Hz)、E3(162Hz)、G5(770Hz)、B2(121Hz)、A4(440Hz)、C1(32Hz),乐器包含小提琴、小号、双簧管、吉他、长笛、低音提琴。
- 改进自相关(AUTO):时间复杂度O ( n ) O(n)O(n),仅单次遍历窗内采样,耗时主要消耗在峰值检索;
- AMDF:复杂度O ( n 2 ) O(n^2)O(n2),双层循环遍历信号与循环移位采样,差值运算开销较低;
- YIN:复杂度O ( n 2 ) O(n^2)O(n2),双层循环,差值平方运算计算量更大,整体耗时最长;
- 倒谱(CEPS):复杂度O ( n ) O(n)O(n),单次遍历,耗时集中在FFT/IFFT与峰值检索。
图8 各算法计算耗时对比柱状图
(图注:横轴乐器采样,纵轴计算时长(秒);图例:蓝色AUTO、青色AMDF、绿色YIN、紫色倒谱)
B 算法检测误差
采用总误差率GER衡量检测偏差,公式:
G E R = ∑ i = 1 N ∣ 实际频率 − 检测频率 ∣ 实际频率 × 100 % (7) GER= \sum _{i=1}^{N}\frac {|实际频率 - 检测频率 | }{ 实际频率 }× 100\% \tag{7}GER=i=1∑N实际频率∣实际频率−检测频率∣×100%(7)
求和覆盖全部音频帧,取绝对值避免正负误差抵消。改进自相关若阈值设置不当会误判峰值,倒谱也存在同类问题;当基频幅值低于谐波时倒谱失效,例如吉他B2音(121Hz基频幅值远低于242Hz一次谐波),总误差率高达187%。
所有算法在1000Hz以下低频段表现稳定,高频E6误差普遍更高。表2与图9为各算法误差百分比对比。
图9 各算法检测误差对比柱状图
(图注:横轴乐器采样,纵轴误差百分比;图例:蓝色AUTO、青色AMDF、绿色YIN、紫色倒谱)
表2 各基音算法检测误差(单位:%)
| 乐器采样 | AUTO | AMDF | YIN | CEPS |
|---|---|---|---|---|
| 小提琴E6 | 19.64 | 16.65 | 15.8 | 16.64 |
| 小提琴E4 | 2.78 | 1.36 | 1.56 | 4.55 |
| 小号E3 | 2.82 | 1.45 | 1.32 | 4.75 |
| 双簧管G5 | 4.61 | 1.25 | 1.25 | 9.42 |
| 长笛A4 | 1.79 | 1.02 | 1.21 | 4.62 |
| 低音提琴C1 | 9.74 | 5.42 | 5.25 | 6.92 |
四、结果与分析
本文在MATLAB中搭建实时基音检测系统,完成四类算法测试,得到如下结论:
AMDF、YIN算法实时延迟约1~2秒;AUTO与倒谱延迟小于1秒,延迟排序:
C E P S < A U T O < A M D F < Y I N CEPS < AUTO < AMDF < YINCEPS<AUTO<AMDF<YIN
取10秒音频(约50万采样)测试,YIN计算耗时最长,倒谱耗时最短;精度层面YIN多数帧检测值贴近真实频率,倒谱误差最大。
误差从高到低排序:
C E P S > A U T O > A M D F > Y I N CEPS > AUTO > AMDF > YINCEPS>AUTO>AMDF>YIN
计算耗时排序与实时测试完全一致。
图10 多算法基音曲线对比
(图注:横轴时间,纵轴频率;蓝线AUTO、橙线AMDF、黄线YIN、紫线CEPS,四段钢琴音频基音轨迹对比)
A 各算法优缺点总结
1 改进自相关(AUTO)
优点:
- 原理简单,计算速度快;
- 数学模型直观易懂。
缺点: - 峰值筛选阈值难以确定,易误取首个局部峰值前的伪峰,需自适应自相关优化;
- 检测误差中等。
2 AMDF平均幅度差函数
优点:
- 底层数学逻辑简单;
- 整体检测误差最小。
缺点: - 计算耗时中等偏高。
3 YIN算法
优点:
- 架构简洁,可高效实现,支持多种非周期信号拓展适配语音、音乐场景;
- 检测误差全局最低。
缺点: - 计算开销最大,耗时久。
4 倒谱法(CEPS)
优点:
- 无需处理相位,理解后频谱分解操作简单;
- 基础遍历运算耗时适中。
缺点: - FFT、IFFT变换计算开销大,易丢失频谱细节;
- 等效对频谱做平滑低通滤波;
- 基频幅值弱于谐波时误差急剧升高(前文吉他B2案例已验证)。
五、结论
本文详细介绍改进自相关、AMDF、YIN、倒谱四类基音估计算法,在MATLAB平台完成全部实现,从计算耗时、总误差率两个维度完成对比分析。
本研究成果可落地各类音乐处理应用:实时音高检测场景优先选用AUTO或倒谱,追求低延迟;音高偏移、高精度音频处理场景优先AMDF、YIN,允许更长计算时间以换取更低检测误差。
参考文献
[1] Denis Jouvet, Yves Laprie. Performance Analysis of Several Pitch Detection Algorithms on Simulated and Real Noisy Speech Data. EUSIPCO’2017, 25th European Signal Processing Conference, Aug 2017, Kos, Greece.
[2] Lyudmila Sukhostat and Yadigar Imamverdiyev (2014). “A Comparative Analysis of Pitch Detection Methods Under the Influence of Different Noise Conditions”.
[3] Lyudmila Sukhostat, Yadigar Imamverdiyev “A Comparative Analysis of Pitch Detection Methods under the Influence of Different Noise Conditions”, Journal of Voice September 2014.
[4] Rabiner, L.R. (1977), “On the Use of Autocorrelation Analysis for Pitch Detection," IEEE Trans. Acoustic, Speech, Signal Process. 25, 24-33.
[5] De Cheveigne, A., Kawahara, H. (2002). “YIN, a fundamental frequency estimator for speech and music," J. Acoustic Society Am. 111, 1917-1930.
[6] Alain de Cheveigne and Hideki Kawahara (2001). “Comparative evaluation of F0 estimation algorithms”.
[7] Gerhard, David. (2003). Pitch Extraction and Fundamental Frequency: History and Current Techniques.
[8] Camacho A. SWIPE: A saw tooth waveform inspired pitch estimator for speech and music. Gainesville, Florida: University of Florida; 2007.
[9] T. T. Swee, S. H. S. Salleh and M. R. Jamaludin, “Speech pitch detection using short-time energy,” International Conference on Computer and Communication Engineering (ICCCE’10), Kuala Lumpur, 2010, pp. 1-6, doi: 10.1109/ICCCE.2010.5556836.
[10] T. Drugman, G. Huybrechts, V. Klimkov and A. Moinet, “Traditional Machine Learning for Pitch Detection,” in IEEE Signal Processing Letters, vol. 25, no. 11, pp. 1745-1749, Nov. 2018, doi: 10.1109/LSP.2018.2874155.
[11] B. Faghih and J. Timoney, “An investigation into several pitch detection algorithms for singing phrases analysis,” 2019 30th Irish Signals and Systems Conference (ISSC), Maynooth, 10.1109/ISSC.2019.8904943. Ireland, 2019, pp. 1-5, doi: