四、频域分析:短时傅里叶变换、频谱图、语谱图与频域特征提取

语音信号是非平稳的时变信号,其统计特性随时间快速变化。若直接对整段语音做傅里叶变换,得到的频谱只是所有时刻频率成分的“平均”,无法反映语音的动态发音过程。因此,语音频域分析的核心思路是“短时”:在足够短的时间窗内(通常10~30ms),将语音近似视为平稳信号,逐帧进行傅里叶变换,从而获得频率成分随时间演变的二维表示。本章将系统讲解短时傅里叶变换(STFT)的原理、频谱图与语谱图的构建与解读,以及基频(F0)和共振峰(Formant)这两类关键频域特征的提取方法,并结合TTS声学建模的实际需求进行案例拆解。

语音频域分析链路与特征提取框架 原始语音波形 s(n),16kHz/16bit 预加重 + 分帧 + 加窗 帧长25ms,帧移10ms,汉明窗 短时傅里叶变换 STFT: X(m,k) FFT点数512/1024 语谱图 横轴时间/纵轴频率 频谱包络估计 倒谱法 / LPC线性预测 共振峰提取 F1/F2/F3峰值检测 基频F0提取 自相关法 / 倒谱法 / RAPT TTS 声学模型 关键工程参数: • 采样率16kHz → 奈奎斯特频率8kHz;FFT点数512 → 频率分辨率 = 16000/512 ≈ 31.25Hz • 帧长25ms(400点)+ 帧移10ms(160点)→ 每秒约100帧,兼顾时间与频率分辨率

上图展示了语音频域分析从原始波形到特征输出的完整链路。原始语音经过预加重、分帧、加窗后,逐帧执行FFT得到STFT复数谱;对幅度谱取对数并映射为灰度或彩色,即得到语谱图;对频谱包络进行峰值检测可提取共振峰;对频谱或时域信号进行自相关/倒谱分析可提取基频。这些特征共同构成TTS声学模型(如FastSpeech、VITS等)的输入或训练目标。

4.1 短时傅里叶变换(STFT)的核心原理

STFT的数学定义为:对第m帧信号x_m(n)=x(n+mH)·w(n),计算离散傅里叶变换:

X(m,k) = Σ_{n=0}^{N-1} x(n+mH)·w(n)·e^{-j2πkn/N},  k=0,1,...,N-1

其中,w(n)为窗函数(常用汉明窗),H为帧移(hop size),N为FFT点数。STFT将一维时域信号映射为二维时频矩阵,每一列代表一帧的频谱,每一行代表某个频率分量随时间的变化轨迹。

窗函数的选择直接影响频谱质量。矩形窗主瓣窄但旁瓣泄漏严重(第一旁瓣约-13dB);汉明窗旁瓣衰减至-43dB,是语音分析最常用的折中选择;布莱克曼窗旁瓣更低(-58dB)但主瓣更宽,适用于需要高动态范围的场景。窗长N决定频率分辨率Δf=f_s/N,而帧移H决定时间分辨率。例如16kHz采样、N=512时Δf=31.25Hz,H=160时每秒100帧,时间分辨率10ms。

经验法则:频率分辨率与时间分辨率存在“测不准”关系——窗越长,频率越精细但时间越模糊;窗越短,时间定位越准但频率越粗糙。TTS特征提取通常采用25ms窗长+10ms帧移,这是经过大量实验验证的平衡点。

4.2 频谱图与语谱图的构建与判读

频谱图(Spectrum)是单帧信号的幅度-频率曲线,反映某一瞬间(或某一短时窗内)语音的能量分布。语谱图(Spectrogram)则是将连续多帧的频谱按时间顺序堆叠而成的二维图像:横轴为时间,纵轴为频率,颜色深浅表示能量强度(通常用dB刻度)。

对比维度频谱图语谱图
数据维度一维(频率-幅度)二维(时间-频率-幅度)
时间信息无(仅代表某一帧)完整保留时间演化
典型用途共振峰测量、谐波分析音素边界判断、韵律分析、TTS声学特征可视化
生成方式单帧FFT取幅度多帧STFT拼接,取20·log10(|X|)

语谱图中有两类典型模式:宽频带语谱图(窗长3~5ms)时间分辨率高,能清晰看到声门脉冲的垂直条纹,适合观察基频周期;窄频带语谱图(窗长20~30ms)频率分辨率高,谐波呈水平细线,适合观察共振峰走向。TTS分析中常用窄频带语谱图来检查合成语音的自然度——若共振峰过渡生硬或谐波断裂,说明声学模型预测的频谱参数不够平滑。

4.3 基频(F0)提取方法

基频是声带振动的基本频率,决定语音的声调高低和韵律变化。F0提取的难点在于:语音信号并非严格周期,且受共振峰调制影响,容易产生“半频错误”或“倍频错误”。常用方法包括:

  1. 自相关法(ACF):在时域计算短时自相关函数,寻找第一个显著峰值对应的延迟τ,则F0=fs/τ。该方法简单稳健,但对共振峰干扰敏感,需先进行中心削波或低通滤波预处理。
  2. 倒谱法(Cepstrum):对功率谱取对数后再做逆傅里叶变换,得到倒谱。基频对应的“倒谱峰”出现在倒频率(quefrency)等于基频周期处。该方法能有效分离声源激励与声道滤波,但计算量较大。
  3. RAPT算法(Robust Algorithm for Pitch Tracking):结合归一化互相关与动态规划,在候选F0路径中寻找全局最优,是Praat和ESPS工具的标准算法,对噪声和浊音/清音判别有较好鲁棒性。
# 自相关法F0提取核心步骤(Python伪代码)
def extract_f0(frame, fs, f0_min=80, f0_max=400):
    # 1. 预滤波:去除300Hz以下和1000Hz以上成分
    filtered = bandpass(frame, 300, 1000, fs)
    # 2. 计算自相关
    acf = np.correlate(filtered, filtered, mode='full')[len(filtered)-1:]
    # 3. 在f0_min~f0_max对应延迟范围内搜索峰值
    lag_min = int(fs / f0_max)
    lag_max = int(fs / f0_min)
    peak_lag = lag_min + np.argmax(acf[lag_min:lag_max])
    f0 = fs / peak_lag
    return f0
常见陷阱:清音段(如/s/、/f/)没有基频,算法会输出随机值或0。TTS系统中必须结合“浊音/清音判决”(Voicing Decision),否则将导致合成语音出现异常音高跳跃。建议使用动态规划平滑F0轨迹,并设置合理的F0范围(男性80~200Hz,女性150~350Hz)。

4.4 共振峰(Formant)提取

共振峰是声道谐振产生的频谱峰值,通常用F1、F2、F3表示,它们与元音音色直接相关。例如/a/的F1约700Hz、F2约1200Hz,而/i/的F1约300Hz、F2约2300Hz。共振峰提取的经典方法有两种:

  • 倒谱包络法:对STFT幅度谱取对数,做逆傅里叶变换得到倒谱,将倒谱中低倒频率部分(对应声道冲激响应)保留,高倒频率部分(对应声源激励)去除,再正变换回频域即得到平滑的频谱包络。包络上的局部最大值即为共振峰。
  • 线性预测编码(LPC)法:用全极点模型逼近声道传输函数,阶数p通常取12~16(对应4~5个共振峰)。通过求解自相关方程得到LPC系数,再对模型频率响应求峰值。LPC法计算效率高,但对鼻化音和摩擦音建模误差较大。

实际工程中,共振峰提取还需考虑:预加重补偿高频衰减、动态范围限制(避免将谐波误判为共振峰)、以及共振峰轨迹平滑。TTS声学模型中,共振峰常作为辅助特征用于韵律控制或音色迁移。

4.5 案例拆解:基于STFT的TTS声学特征提取与质量诊断

背景与目标:某TTS团队在训练FastSpeech模型时,发现合成语音的元音部分“发闷”,辅音过渡不自然。需要定位问题根源——是声学特征提取环节出错,还是模型训练不足。

初始现象与数据:选取一段5秒的录音“今天天气很好”,采样率16kHz。使用25ms汉明窗、10ms帧移、512点FFT提取80维梅尔谱作为模型输入。训练200k步后,合成音频的语谱图显示:/i/和/u/的F2明显偏低(约低200Hz),且F2过渡段出现“台阶状”不连续。

分析判断过程:首先检查原始录音的语谱图,确认F2位置正常(约2300Hz)。随后检查特征提取代码,发现预加重系数设为0.97,但未对高频段进行适当补偿,导致高频共振峰能量被削弱,LPC包络峰值检测时漏检或偏移。进一步排查发现,梅尔滤波器组在2000~3000Hz区间的滤波器带宽过宽(约300Hz),导致F2和F3被合并为一个宽峰,模型无法区分。

实际操作步骤:

  1. 将预加重系数调整为0.95,并在STFT后增加一阶高通滤波补偿(+6dB/oct,截止频率2kHz)。
  2. 重新设计梅尔滤波器组:在1000~4000Hz区间增加滤波器数量(从12个增至18个),使F2/F3分辨率提升。
  3. 对提取的频谱包络进行中值滤波(窗口3帧),消除帧间抖动。
  4. 重新训练模型,保持其他超参数不变。

结果对比:调整后,合成语音的F2偏差从-200Hz缩小至-30Hz以内,语谱图共振峰过渡平滑,主观MOS分从3.2提升至4.1。训练收敛速度加快约15%(因输入特征更准确)。

风险与代价:增加滤波器数量使特征维度从80升至96,模型参数量增加约5%,推理时间增加3%。但换来的自然度提升明显,可接受。

复盘经验:频域特征提取的“小参数”往往对TTS质量有“大影响”。建议在特征提取后增加可视化检查环节——将提取的频谱包络与原始语谱图叠加显示,人工抽查10~20个音素边界,确保共振峰位置和走向合理。

4.6 常见误区与总结复盘

误区后果正确做法
FFT点数过大(如2048)频率分辨率过高但时间模糊,语谱图“糊”成一片根据采样率选择512或1024,保证Δf在20~50Hz
忽略预加重高频共振峰能量弱,提取不稳定预加重系数0.95~0.97,或等效高频提升
F0提取未做清浊判决清音段产生随机F0,韵律异常结合能量和过零率判决,或使用RAPT
共振峰提取未限制搜索范围将谐波误判为共振峰F1范围200~900Hz,F2范围500~2500Hz,F3范围1500~3500Hz
语谱图显示动态范围过窄弱音成分不可见,难以诊断使用60~80dB动态范围,或自适应归一化

本章从STFT的数学原理出发,系统梳理了频谱图、语谱图的构建与解读方法,深入讲解了基频和共振峰提取的经典算法与工程要点。频域分析是连接语音信号与TTS声学模型的桥梁——无论是传统参数合成还是端到端神经TTS,高质量的频域特征都是合成语音自然度和可懂度的基石。建议读者在实操中建立“波形→STFT→语谱图→特征→模型”的完整可视化链路,每次调整特征提取参数后,务必通过语谱图对比验证效果,避免“盲调”参数。