1. 课程导入

各位同学好,欢迎来到《声学特征提取实战技巧》的第一章。

做音频处理这么多年,我见过太多人一上来就调库、跑模型,结果数据预处理那关就翻车了。说白了,音频信号的基础概念就像房子的地基——你地基没打牢,后面盖多高的楼都得塌。今天咱们就把这四个核心概念掰开揉碎了讲清楚。

1.1 采样率:时间轴上的「快照」频率

先问个问题:声音明明是连续的波,计算机怎么存?

答案是——每隔一小段时间拍一张「快照」,记录下当时的振幅值。这个拍快照的频率,就是采样率。

采样率定义:每秒从连续信号中提取的样本点数,单位是 Hz(赫兹)。

例如 44100 Hz,意思是一秒钟拍了 44100 张「快照」。

常见的采样率有哪些?我整理了一张表,你一看就明白:

采样率 常见场景 最高可还原频率
8000 Hz 电话语音 4000 Hz
16000 Hz 语音识别、语音助手 8000 Hz
44100 Hz CD 音质、音乐 22050 Hz
48000 Hz 影视、专业音频 24000 Hz
96000 Hz 高解析度音频 48000 Hz

我个人习惯做语音特征提取时用 16000 Hz,做音乐分析用 44100 Hz。为什么?因为人声的主要能量集中在 4-8 kHz 以内,16000 Hz 的采样率足够覆盖了,再高就是浪费算力。

1.2 奈奎斯特定理:采样率的「天花板」

好,采样率定下来了,那它能采到多高的频率?

这就引出了数字信号处理里最核心的一条定理——奈奎斯特定理。

奈奎斯特定理:采样率必须大于信号最高频率的两倍,才能无失真地重建原始信号。

公式:f_s > 2 × f_max

换句话说,如果你用 44100 Hz 采样,能还原的最高频率是 22050 Hz。人耳能听到的上限大约是 20000 Hz,所以 CD 音质定在 44100 Hz 是有道理的。

我曾经在项目里踩过一个坑:采集超声波传感器数据时,信号频率是 30 kHz,我随手用了 48 kHz 的采样率。结果数据出来全是混叠失真,根本没法用。后来才反应过来——48 kHz 只能采到 24 kHz,30 kHz 的信号被「折叠」回来了。嗯,从那以后我每次选采样率之前,都会先确认信号的最高频率。

避坑指南:采样前一定要加抗混叠滤波器!把高于 f_s/2 的频率成分滤掉,否则混叠失真会让你怀疑人生。

1.3 量化位数:振幅轴上的「精度」

采样解决了时间轴上的连续性问题,那振幅轴呢?

量化位数决定了每个样本点用多少 bit 来表示。常见的量化位数有:

  • 8 bit:256 个等级,早期电话、低质量语音
  • 16 bit:65536 个等级,CD 音质、WAV 文件标准
  • 24 bit:16777216 个等级,录音棚、专业制作
  • 32 bit float:浮点数表示,动态范围极大,常用于内部处理

量化位数越高,动态范围越大,信噪比越高。每增加 1 bit,动态范围大约提升 6 dB。

公式很简单:动态范围 ≈ 6.02 × N + 1.76 dB,其中 N 是量化位数。

举个例子:16 bit 的动态范围大约是 96 dB,24 bit 大约是 144 dB。你想想看,一个安静的录音棚背景噪声可能只有 20 dB,而交响乐高潮能到 120 dB,这 100 dB 的动态范围,16 bit 刚好够用,24 bit 就游刃有余了。

我的建议:做特征提取时,如果原始数据是 16 bit,直接读进来用就行。如果是 24 bit,建议先归一化到 [-1, 1] 的浮点数范围,再进行处理。32 bit float 格式在 Python 里处理最方便,但文件体积也最大。

1.4 声道数:空间维度的「耳朵」数量

声道数这个概念最简单,但也最容易被人忽略。

  • 单声道 (Mono):1 个声道,所有声音混在一起
  • 立体声 (Stereo):2 个声道,左 + 右
  • 多声道 (5.1 / 7.1):多个声道,环绕声

做声学特征提取时,大部分情况下我们会把多声道混成单声道来处理。为什么?因为特征提取关注的是声音本身的频率和能量分布,声道信息反而会增加计算量。

不过也有例外。我记得有一次做声源定位项目,需要利用左右声道的相位差来估计声源方向,这时候就必须保留立体声信息。

实用技巧:用 Python 读取音频时,可以用 soundfile 或 librosa 指定 mono=True 自动混音。如果后续需要做空间音频分析,再保留多声道。

1.5 知识体系总览

这四个概念之间的关系,我画了一张图帮你理清思路:

音频信号基础概念关系图 音频信号基础概念关系图 模拟音频信号 采样 (Sampling) 量化 (Quantization) 数字音频信号 采样率 (Hz) 时间分辨率 量化位数 (bit) 振幅精度 声道数 空间维度 奈奎斯特定理 f_s > 2 × f_max 采样率决定最高可还原频率

从这张图可以看得很清楚:模拟信号经过采样和量化,变成了数字信号。而采样率、量化位数、声道数,就是描述这个数字信号的三个核心维度。

1.6 实战:用 Python 查看音频文件属性

光说不练假把式。咱们用 Python 实际读一个音频文件,看看这些参数长什么样。

import soundfile as sf
import librosa

# 方法一:用 soundfile 读取
file_path = "example.wav"
data, sr = sf.read(file_path)
print(f"采样率: {sr} Hz")
print(f"数据形状: {data.shape}")  # (样本点数, 声道数)
print(f"数据类型: {data.dtype}")  # 量化位数信息

# 方法二:用 librosa 读取(自动混音为单声道)
data_mono, sr = librosa.load(file_path, sr=16000, mono=True)
print(f"重采样后采样率: {sr} Hz")
print(f"单声道数据长度: {len(data_mono)} 个样本")
print(f"时长: {len(data_mono) / sr:.2f} 秒")

小提示:librosa.load 默认会重采样到 22050 Hz,并且混音为单声道。如果你需要保留原始采样率和声道数,记得设置 sr=None 和 mono=False。

1.7 本章小结

好,咱们把这一章的核心内容捋一遍:

  • 采样率:决定时间轴上的分辨率,也决定了能还原的最高频率(奈奎斯特定理)
  • 量化位数:决定振幅轴上的精度,影响动态范围和信噪比
  • 声道数:决定空间维度,大部分特征提取场景会混音为单声道
  • 奈奎斯特定理:采样率必须大于信号最高频率的两倍,否则会产生混叠失真

这四个概念是音频处理的基石。你以后不管做什么——语音识别、音乐信息检索、声学场景分类——都绕不开它们。把基础打扎实了,后面的路就好走了。