主流基频提取算法总结与优缺点比较
1、引言
音高(Pitch)是人类感知声音的三大基本属性之一,与音量(Loudness)和音色(Timbre)共同构成了听觉体验的基础。对于周期性或准周期性的声音信号,例如语音中的元音和浊辅音,以及大多数乐器发出的乐音,音高主要由其基频(Fundamental Frequency, f0)决定。因此,在声学和信号处理文献中,“音高”与“基频”这两个术语常被混用。然而,并非所有声音都具有明确的基频;例如语音中的清辅音(如 /s/, /f/)和打击乐器的声音,其能量分布在较宽的频带上,听感上更接近噪声。音乐信号的基频范围较为宽广,低音可下探至 50 Hz 或更低,高音则可超过 1000 Hz。
人类对音高的感知遵循对数规律,即频率按比例变化时,引起的音高感觉变化是线性的。例如,从 100 Hz 到 200 Hz 的音高差距,听起来与从 200 Hz 到 400 Hz 的差距相似。这种感知特性使得在音乐和声学研究中常用对数尺度来表示音高。音乐理论中定义频率比为 2:1 的两个音的音程为一个八度(Octave)。一个八度被等分为 12 个半音(Semitone),而一个半音又被细分为 100 个音分(Cent)。实际应用中,MIDI (Musical Instrument Digital Interface) 编号是一种广泛使用的对数音高表示方法,它与基频 f0 的关系定义为:
频率每升高或降低一个八度,MIDI 编号相应增加或减少 12,单位为半音。这种对数表示法直接反映了人耳的感知特性,也解释了为何基频提取算法的设计常常需要考虑对数频率尺度,并且对八度关系上的错误(即倍频/半频错误)尤为关注。
基频提取(Pitch Estimation 或 Pitch Tracking)是音频信号处理中的一项核心技术,具有广泛的应用价值。在音乐信息检索(MIR)领域,它是自动旋律抽取、乐谱转录等任务的基础。在语音处理领域,基频信息对于带声调语言(如汉语)的自动语音识别(ASR)至关重要,因为它承载了区分词义的声调信息。此外,基频轮廓(Pitch Contour)的变化模式也与说话人的情感状态、意图以及身份特征紧密相关,可用于情感计算、语音合成和说话人识别等。然而,准确可靠地提取基频面临诸多挑战。首先,声音信号的基频通常随时间动态变化,因此需要进行分帧处理(典型帧长为几十毫秒),在短时片段内估计基频。其次,并非所有语音或音频帧都包含基频(如清辅音或静音段),算法需要具备清浊音判别(Voiced/Unvoiced Decision, U/V Decision)能力,判断当前帧是浊音(有基频)还是清音(无基频)。再次,即使在浊音段,提取出的基频也常常包含错误,最常见的便是倍频错误(估计值为真实基频的两倍)和半频错误(估计值为真实基频的一半)。
这些错误源于信号谐波成分的干扰或基频成分的微弱。为了获得符合实际发声规律的、平滑连续的基音轨迹,通常需要对逐帧提取的原始结果进行平滑处理(Smoothing),纠正局部错误。此外,现实环境中的背景噪声、混响等因素也会干扰信号的周期性或谐波结构,对基频提取的鲁棒性提出了更高要求。处理多个声源同时存在的混合音频(例如复调音乐或多人对话)中的基频提取则更为复杂,超出了本文的讨论范围。
基频提取算法的发展历程体现了信号处理和机器学习方法的演进。早期方法主要基于纯信号处理技术,利用信号的时域周期性或频域谐波结构设计规则。这些方法原理清晰,但往往难以在抑制倍频错误和半频错误之间取得理想的平衡,常常顾此失彼。近年来,随着机器学习尤其是深度学习的发展,数据驱动的方法开始涌现,它们通过从大规模数据中学习特征和模式,在多个基准测试中展现出超越传统信号处理方法的性能,尤其是在复杂声学场景和噪声鲁棒性方面。本文旨在综述并比较几类主流的单声源基频提取算法。我们将首先介绍两种基础的频域方法——短时傅里叶变换(STFT)和恒定Q变换(CQT),并从“相关性”的角度阐释其原理。随后,将详细介绍四种具有代表性的算法:基于时域差函数的 YIN 算法、基于频域峰谷距的 SWIPE 算法,以及基于卷积神经网络的 CREPE 算法。这四种方法覆盖了时域与频域、信号处理与机器学习两大维度,并在各自的时代或领域内具有广泛影响力和领先性能。本文将重点分析它们的核心思想、关键技术、优缺点,并比较它们在应对上述挑战方面的策略与表现。
2、基础频域方法:相关性视角
频域方法是基频提取的一大类主流技术。其核心思想是将时域信号通过某种变换映射到频域,然后通过分析频谱特征(主要是谐波结构)来估计基频。从“相关性”的角度理解,这些变换实质上是在衡量输入信号段与一组预定义基函数(代表特定频率或频率模式)的相似程度。
2.1 短时傅里叶变换 (STFT): 基于与复正弦基函数的相关性
短时傅里叶变换(Short-Time Fourier Transform, STFT)是最基础和广泛使用的时频分析工具。其基本过程是将长信号分割成若干短的、通常有重叠的帧,对每一帧加窗(如汉宁窗、汉明窗)以减小频谱泄漏,然后对加窗后的帧进行离散傅里叶变换(DFT)。
STFT 的计算可以表示为:
其中,x(t) 是从时间点 t 开始的信号帧,w(n) 是长度为 N 的窗函数,Fs 是采样率,f 是频率。Xt(f) 表示信号帧在频率 f 处与复指数基函数 e^j2πft 的相关性强度(幅度,一般取模长)。 对于基频提取,一种朴素的方法是在 STFT 幅度谱 |Xt(f)| 上寻找峰值。由于周期信号的频谱通常在基频 f0 及其整数倍(谐波,kf0)处出现峰值,更常用的方法是采用某种形式的谐波求和(Harmonic Summation)策略:对于每个候选基频 f_cand,计算其各次谐波位置上频谱能量(或幅度)的总和或加权和,将使得该和值最大的 fcand 作为当前帧的基频估计值。例如,可以定义一个显著度函数 H(f)=∑(k=1)^n|Xt (kf)| ,并寻找使 H(f) 最大的 f。
然而,基于 STFT 的朴素方法存在固有的局限性:
- 时频分辨率权衡 (Time-Frequency Resolution Trade-off): STFT 的时间和频率分辨率是相互制约的,遵循海森堡-伽柏不确定性原理。使用短窗可以获得良好的时间分辨率(能捕捉快速的音高变化),但频率分辨率差(难以区分靠近的谐波,尤其在低频段)。使用长窗则反之,频率分辨率好但时间分辨率差(会平滑掉快速的音高变化)。这种固定的分辨率对于覆盖宽广频率范围且动态变化的基频信号(如音乐和语音)来说往往不够理想。
- 谐波模糊性 (Harmonic Ambiguity): 简单的峰值提取或基础的谐波求和方法极易产生倍频或半频错误。如果基频 f0 处的能量较弱而某次谐波(如 2f0)能量很强,算法可能错误地将 2f0 识别为基频(倍频错误)。反之,如果 f0 缺失或非常弱,算法可能基于 2f0,3f0,… 等谐波错误地推断出 f0/2 作为基频(半频错误),因为 f0 的所有谐波也同时是 f0/2 的偶次谐波。
2.2 恒定Q变换 (CQT): 基于与对数频率尺度核函数的相关性
恒定 Q 变换(Constant-Q Transform, CQT)旨在克服 STFT 固定的频率分辨率问题,使其更符合人类听觉的对数频率感知特性。CQT 的核心特点是其频率轴是对数分布的,且每个频率分量的带宽与其中心频率成正比,即具有恒定的相对带宽 Δf/f=Q^(-1)(Q 为品质因数)。这意味着在低频区具有较高的频率分辨率(窄带宽),在高频区具有较高的时间分辨率(短时窗),这与音乐音阶的结构(如半音代表恒定的频率比率)以及语音基频分析的需求更为契合。
CQT 本质上也是计算信号与一组基函数的相关性,但这些基函数(或称为核函数、小波)的中心频率按几何级数(对数均匀)分布,且其持续时间(或等效窗长)随频率变化,低频对应长时窗,高频对应短时窗。
CQT 的优势在于其对数频率尺度天然匹配音乐和听觉特性,能够在低频段提供比相同时间分辨率下 STFT 更好的频率分辨能力。然而,CQT 也面临一些挑战:
- 计算成本: 传统上,CQT 的计算比 STFT 更复杂,尽管已有快速算法被提出。
- 谐波模糊性 (Harmonic Ambiguity): CQT 本身只是提供了一种更符合听觉感知的时频表示。若仅基于 CQT 谱进行简单的峰值拾取或谐波求和,仍然会面临与 STFT 类似的倍频/半频错误问题。解决这些问题仍需依赖更复杂的谐波结构分析逻辑。
基础的 STFT 和 CQT 方法虽然直观,但它们在时频分辨率和应对谐波模糊性方面的局限性,正是驱动后续更复杂、更精巧的基频提取算法(如 YIN 和 SWIPE)发展的重要原因。YIN 试图通过时域分析绕开频域分辨率的限制,而 SWIPE 则致力于在频域内设计更鲁棒的谐波结构检测机制。
3、YIN算法:基于差函数的时域自相关性分析[1]
YIN 算法是一种广泛使用的基于时域信号处理的基频提取方法。它不依赖于频域变换,而是直接在信号波形上寻找周期性。其核心思想是测量信号与其自身在不同时间延迟下的相似度,并寻找对应于基音周期的延迟量。
3.1 核心原理:差函数与周期性检测
时域方法寻找周期的基本思路是:确定一个最小的正延迟 τ,使得信号 x(t) 与其平移版本 x(t+τ) 在一个分析窗内最为相似。衡量相似度的一种常用方法是计算自相关函数(Auto-Correlation Function, ACF), 实际上就是自身和自身平移后的点积:
其中 W 是帧长(采样点数)。ACF 的峰值对应的延迟 τ 即为候选周期。
然而,YIN 算法的作者指出,ACF 对信号幅度的变化敏感。如果信号幅度在分析窗内逐渐增大,那么延迟 τ 越大,x_(i+τ) 的幅度可能越大,导致 r_t (τ) 倾向于在较大的 τ 处取得峰值,这容易引发半频错误(估计周期偏大,基频偏低)。
为了克服这个问题,YIN 算法采用了“差函数”(Difference Function)来衡量信号与其延迟版本之间的 不相似度:
差函数的谷值(最小值)对应的延迟 τ 代表了信号的周期。由于差函数计算的是差值的平方和,它对信号整体幅度的缓慢变化不敏感,从而避免了 ACF 可能存在的偏向大周期的系统偏差。YIN 的名称来源于中文“阴阳”中的“阴”,象征着它关注差函数的“谷”而非 ACF 的“峰”。
差函数与自相关函数之间存在数学关系:
其中 rt(0) 和 rt+τ(0) 分别是原信号段和延迟信号段的能量。这个关系表明,最小化差函数 dt(τ) 与最大化自相关函数 rt(τ) 相关,但同时考虑了信号段能量的影响。
3.2 累积均值归一化差函数 (CMNDF) 的作用与计算
直接使用差函数 dt(τ) 寻找谷值存在两个问题:
dt(τ) 在 τ=0 处必然取得全局最小值 0。这个位于原点的深谷会干扰对第一个非零周期的寻找。简单地设定一个最小周期阈值 τmin 并只在其右侧寻找谷值,效果并不理想,因为 τ=0 处谷的宽度会随信号特性变化,导致阈值难以设定。 dt(τ) 的谷值深度受信号整体能量或幅度影响,使得设定一个绝对的谷深阈值来判断周期显著性变得困难。 为了解决这两个问题,YIN 引入了累积均值归一化差函数(Cumulative Mean Normalized Difference Function, CMNDF),记为
CMNDF 将 τ 处的差函数值 d_t (τ) 用其之前所有正延迟(j=1 到 τ)的差函数值的平均值进行归一化。这种归一化带来了两个关键好处:
有效消除了 dt(τ) 在 τ=0 处的谷点干扰,因为 d’t (0) 被定义为 1,并且对于小的 τ>0,d_t (τ) 通常大于其累积均值,使得 d’t(τ) 在原点附近不再是深谷。 CMNDF 的值在一定程度上实现了归一化,不再直接依赖于信号的绝对幅度,这使得设定一个相对固定的阈值来判断谷的显著性成为可能。
3.3 周期估计与pYIN改进[2]
YIN 算法使用 CMNDF d’t(τ) 来估计周期。为了避免选择对应于真实周期整数倍的谷(可能导致半频错误),YIN 采用以下策略:设定一个阈值(例如 0.1),从 τ=1 开始寻找第一个深度低于该阈值的谷。该谷对应的延迟 τ 被选为周期估计值。如果所有谷的深度都高于阈值,则选择 d’t(τ) 的全局最小值对应的 τ。尽管阈值的选择带有一定任意性,但 YIN 的作者通过实验表明算法性能对此阈值不十分敏感。为了提高周期估计的精度,通常会在选定的谷附近进行二次(抛物线)插值,以找到更精确的谷底位置(可能具有亚采样点的分辨率)。最终的基频估计为 f0=Fs/τestimated。
原始的 YIN 算法是逐帧独立进行估计的,可能产生孤立的倍频或半频错误,导致基音轨迹不平滑。为了解决这个问题,后续提出了概率 YIN(Probabilistic YIN, pYIN)。pYIN 并非只输出单一的最佳周期估计,而是为每一帧保留多个候选谷(及其对应的周期和似然度,似然度可由 CMNDF 的谷深导出)。然后,它利用隐马尔可夫模型(Hidden Markov Model, HMM)对基频的时间连续性进行建模。HMM 的状态对应于候选基频(或无基频状态),转移概率体现了基频随时间平滑变化的先验知识。通过 Viterbi 算法寻找最优状态序列,pYIN 能够生成更平滑、更准确的基音轨迹,有效抑制孤立的帧级错误。同时,HMM 中包含的“无基频”状态也自然地实现了清浊音判别(U/V decision)。
3.4 优缺点
优点:
- 概念相对简单,基于直观的时域周期性检测。
- 差函数的使用使其对信号幅度缓变具有鲁棒性,优于传统 ACF。
- CMNDF 提供了有效的归一化手段,并解决了 τ=0 干扰问题。
- 在低频区域不受 STFT 频率分辨率的限制。
- pYIN 扩展通过 HMM 显著提升了轨迹平滑性和鲁棒性,并成了 U/V 判决。
缺点:
- 基础 YIN 算法对阈值的选择有一定依赖性,可能影响性能。
- 仍然可能产生倍频/半频错误,尤其是在信号周期性不强或谐波结构复杂时。
- 基础 YIN 缺乏内置的 U/V 判决和平滑机制(需要 pYIN)。
- 对破坏波形周期性的噪声较为敏感。
YIN 算法的核心在于其巧妙设计的 CMNDF,它通过归一化解决了原始差函数在实际应用中的关键问题。而 pYIN 的发展则表明,仅仅依赖单帧信息难以获得高质量的基音轨迹,引入时序依赖模型(如 HMM)对于提升鲁棒性和实用性至关重要。
[1] A. de Cheveigné and H. Kawahara, “YIN, a fundamental frequency estimator for speech and music”, Journal of the Acoustical Society of America, 2002
[2] M. Mauch and S. Dixon, “pYIN: A fundamental frequency estimator using probabilistic threshold distributions”, ICASSP, 2014.