C14 Speech Signal Basics

主线

这一章先把 speech 从“语言”还原成“信号”:

air pressure over time
→ sampled waveform
→ frequency / energy / duration features
→ perceptual features like pitch, loudness, mel
→ controllable speech model inputs

语音模型处理的不是抽象文字,而是被数字化的声波。理解 audio feature 的关键,是分清三组关系:

  • 物理量 vs 感知量:F0 是物理频率,pitch 是听觉音高;power/intensity 是物理强度,loudness 是听觉响度。
  • 连续信号 vs 离散表示:真实声波连续,数字音频通过 sampling 和 quantization 存储。
mindmap
  root((Speech Signal))
    Waveform
      sr
        samples per second
        16000 samples/s
      samples
        一长串离散点
    Framing
      window length
        25 ms
      N
        N = sr × window length
        16000 × 0.025 = 400 samples
      hop length
        10 ms
        控制相邻帧间隔
      overlap
        window length > hop length
    STFT
      Short-Time Fourier Transform
      每帧做一次 DFT/FFT
      time frame → frequency bins
    Spectrogram
      x-axis = time frames
      y-axis = frequency bins
      value = energy / magnitude
    Mel
      mel filterbank
      mel spectrogram
      log mel spectrum
flowchart LR
  A["waveform<br/>一长串 samples"] --> B["sr<br/>16000 samples/s"]
  B --> C["window length<br/>25 ms"]
  C --> D["N = sr × window<br/>400 samples/frame"]
  D --> E["hop length<br/>10 ms"]
  E --> F["overlapping frames<br/>0-25, 10-35, 20-45 ms"]
  F --> G["STFT<br/>每帧做 DFT/FFT"]
  G --> H["frequency bins<br/>每帧一排频率能量"]
  H --> I["spectrogram<br/>time × frequency"]
  I --> J["mel filterbank<br/>压缩到 mel 频带"]
  J --> K["log mel spectrum<br/>模型常用输入"]

  classDef raw fill:#e8f3ff,stroke:#4f8cff,color:#111827;
  classDef frame fill:#fff3d8,stroke:#d99a00,color:#111827;
  classDef transform fill:#efe7ff,stroke:#8b5cf6,color:#111827;
  classDef output fill:#e7f8ef,stroke:#20a464,color:#111827;

  class A,B raw;
  class C,D,E,F frame;
  class G,H transform;
  class I,J,K output;

1. 声音是什么

声音是空气压力随时间的变化。麦克风记录的是某个位置上的 pressure deviation:

time → pressure deviation

waveform 的横轴是时间,纵轴是相对正常气压的偏离:

  • 正值:压缩
  • 0:正常气压
  • 负值:稀疏

这是 speech signal 的最底层表示。

2. 模拟声波到数字音频

真实声音是连续的,电脑只能存离散数字,所以需要:

analog waveform → sampling → quantization → digital audio

sampling 是每隔一小段时间量一次振幅。16 kHz 采样率表示每秒采 16000 个点,不是声音频率为 16000 Hz。

Nyquist frequency 是采样率的一半。一个周期至少需要两个采样点才能被可靠表示: (Nyquist : Harry Nyquist,贝尔实验室的人)

sampling rate = 16000 Hz
max reliable frequency ≈ 8000 Hz

超过 Nyquist 频率的成分会产生 aliasing,高频被系统误看成低频。

quantization 是把连续振幅映射到有限数值格子中。bit depth 越低,可用振幅级别越少,quantization error 越明显。

3. Frequency, F0, Pitch

frequency 是每秒重复次数,单位 Hz。

10 cycles / 0.04 s = 250 Hz

F0 / fundamental frequency 是声带周期性振动的频率。元音等 voiced sound 有稳定周期,可以估 F0;[s]、[f] 这类清擦音主要来自气流湍流,没有稳定 F0。

pitch 是人的听觉音高感受。F0 和 pitch 强相关,但不是同一个东西:

F0 = physical
pitch = perceptual

4. Source-Filter Model

语音可以用 source-filter model 理解:

vocal folds = source
vocal tract / nasal cavity / tongue / lips = filter

声带主要影响 F0 和 pitch;口腔、舌头、嘴唇等声道形状主要影响 formants、音色和元音质量。

所以同一个 F0 下,可以发出 [iy]、[aa]、[uw] 等不同元音。音高可能接近,但 formants 不同,听起来就是不同的音。

5. Amplitude, Power, Loudness

amplitude 是某一时刻波形偏离 0 的大小。因为 waveform 有正有负,直接平均会抵消,所以常用 RMS amplitude

square → mean → square root

power 近似为振幅平方的平均:

Power = average(x²)

因此振幅翻 2 倍,power 约翻 4 倍。

更具体地说:

Power = (1/N) Σ xi²
RMS = sqrt((1/N) Σ xi²)
Power = RMS²
RMS = sqrt(Power)
Intensity(dB) = 10 log10(Power / P_ref)

intensity 常用 dB 表示,本质是对 power 做 log 压缩。人耳更接近感知比例变化,而不是线性绝对差值。

loudness 是听觉响度感受,不等于 power。同样的 power,在不同频率上可能听起来不一样响。

6. Frame, STFT, Spectrogram

这一节要钉住的不是所有声学概念,而是几个变量怎么接起来:

sr → window length → N → hop length → frames → STFT → bins → spectrogram

frame 是从原始 waveform 里切出来的一小段短时间 window。它的时间长度就是 window length

比如:

sr = 16000
window length = 25 ms
N = 16000 × 0.025 = 400 samples

所以“一帧 400 点”和“一帧 25 ms”是在说同一件事,只是一个用采样点数表达,一个用时间长度表达。

切帧时还会有 hop length,表示隔多久切下一帧:

window length = 25 ms
hop length = 10 ms
 
frame 1: 0–25 ms
frame 2: 10–35 ms
frame 3: 20–45 ms
frame 4: 30–55 ms

因此相邻帧通常会重叠。这样做是为了在保留短时局部结构的同时,让时间轴上的变化足够平滑。

特征提取链条:

waveform = 一长串采样点
→ 按 window length 切成 frames
→ 每帧做 DFT/FFT
→ 每帧得到一排 frequency bins
→ 每个 bin 有能量
→ 多帧排起来形成 spectrogram
→ 过 mel filterbank 得到 mel spectrogram
→ 取 log 得到 log mel spectrum

这里的关键直觉是:FFT 不是对整段语音一次性做,而是对每个短时 frame 做。spectrogram 就是把每一帧的频率能量分布沿时间排起来。

变量关系:

sr = sample rate = 每秒多少个采样点
window length = 每帧覆盖多长时间
N = 每帧包含多少个 sample
N = sr × window length
hop length = 相邻两帧起点之间隔多久
STFT = 对每个短时 frame 做 Fourier transform

STFT 的意思是 Short-Time Fourier Transform。它不是新的神秘变换,而是:

先切短时间 frame
再对每个 frame 做 DFT/FFT

所以:

DFT/FFT: 一段信号 → 一排频率 bins
STFT: 多个短时 frames → 多排频率 bins
Spectrogram: 把这些 bins 按时间排成图

7. Mel Scale

人耳对低频差异更敏感,对高频差异没那么敏感。mel scale 把线性频率轴改造成更接近听觉感知的尺度:

raw frequency → mel frequency

直觉:

  • 低频:保留更细
  • 高频:压缩更多

这就是语音识别常用 mel features 的原因:它把频率表示提前注入了人耳听觉先验。

8. Duration, Energy, Prosody

duration 是 phone、音节、词持续多久。强调时常会拖长。

energy 是一段时间里的能量强弱,和响度相关。元音通常 energy 高,停顿或清音 energy 低。

prosody 主要由三类量共同形成:

F0 + energy + duration

它们一起决定语气、强调、节奏、疑问/陈述、情绪:

  • 句末 F0 上升:疑问感
  • 句末 F0 下降:陈述感
  • duration 变长:强调或拖长
  • energy 变大:更响、更突出