3、音频基础:声音的物理特性、采样率、位深、声道、音频文件格式(WAV/MP3)及频谱概念
在进入 TinyML 音频分类模型训练之前,必须首先建立对音频数据本身的准确认知。音频分类任务(如声学事件检测)的输入不是“声音”,而是经过数字化编码的数值序列。理解声音从物理振动到数字文件的全链路转换,是设计特征工程、选择模型输入维度、判断数据质量的前提。本章将系统梳理声音的物理本质、数字音频的核心参数(采样率、位深、声道)、常见文件格式的差异,以及频谱分析的基本概念,为后续章节的 MFCC 特征提取和模型训练打下扎实基础。
3.1 声音的物理特性与数字化基础
声音本质上是介质(空气、水、固体)中的机械纵波,由振动源产生,以疏密相间的压力波形式传播。描述声音的物理量主要包括频率(Frequency)、振幅(Amplitude)和相位(Phase)。频率决定音高,人耳可听范围约为 20Hz 至 20kHz;振幅决定响度,通常用声压级(SPL,单位 dB)衡量;相位描述波形在时间轴上的位置,对单一声源感知影响较小,但对多麦克风阵列和波束成形至关重要。
麦克风将声压变化转换为连续的电信号(模拟信号),此时信号在时间和幅度上都是连续的。计算机无法直接处理连续信号,必须通过模数转换器(ADC)进行离散化。这一过程包含两个核心步骤:时间采样(按固定时间间隔取瞬时值)和幅度量化(将连续幅度映射到有限个离散电平)。这两个步骤分别对应采样率和位深两个参数。
3.2 采样率、位深与声道:三个决定性参数
这三个参数直接决定了数字音频的数据量、频率范围、动态范围和空间信息,是音频分类任务中必须首先确定的超参数。
| 参数 | 定义 | 常见取值 | 对TinyML的影响 |
|---|---|---|---|
| 采样率(Sample Rate) | 每秒对模拟信号采样的次数,单位 Hz | 8k / 16k / 22.05k / 44.1k / 48k | 决定可表示的最高频率(采样率/2);采样率越高,每秒数据量越大,MCU 计算和内存压力越大 |
| 位深(Bit Depth) | 每个采样点用多少比特表示幅度 | 8-bit / 16-bit / 24-bit / 32-bit float | 决定动态范围(每 bit ≈ 6dB);16-bit 提供 96dB 动态范围,对大多数环境声足够;8-bit 量化噪声明显 |
| 声道数(Channels) | 独立音频信号的数量 | 单声道(Mono)/ 双声道(Stereo)/ 多声道 | 单声道数据量减半,且对声学事件检测通常足够;多声道可提供空间信息但增加计算量 |
判断方法:在嵌入式设备上选择采样率时,应遵循“够用就好”原则。首先分析目标声音的频谱范围——如果事件声音的主要能量集中在 4kHz 以下(如人声、电机噪声),16kHz 采样率已留出充足余量;如果包含高频瞬态(如玻璃破碎、金属撞击),则可能需要 22.05kHz 或更高。位深方面,16-bit 是性价比最高的选择,既保证信噪比,又避免 32-bit float 带来的存储和计算开销。声道数在 TinyML 场景下几乎总是选择单声道,除非使用麦克风阵列进行声源定位。
3.3 音频文件格式:WAV 与 MP3 的取舍
音频文件格式决定了数据如何存储和压缩,直接影响解码复杂度和信息保留程度。在 TinyML 工作流中,训练阶段和推理阶段对格式的要求截然不同。
WAV(Waveform Audio File Format)是一种未压缩或无损压缩的容器格式,由 RIFF 头(包含采样率、位深、声道数等元数据)和 PCM 数据块组成。其优点是解码简单(直接读取整数样本)、无信息损失、时间定位精确;缺点是文件体积大。对于模型训练,WAV 是首选格式,因为特征提取(如 MFCC)需要精确的时域样本值,任何有损压缩都会引入不可预测的失真。
MP3(MPEG-1 Audio Layer III)是一种有损压缩格式,通过心理声学模型去除人耳不敏感的频率成分,压缩比可达 10:1 以上。其优点是文件体积小,适合存储和传输;缺点是解码需要浮点运算(对 MCU 负担较重),且压缩过程会引入伪影(Artifacts),可能影响模型对细微声学特征的识别。在 TinyML 推理阶段,通常不直接在设备端解码 MP3,而是预先在 PC 端将音频转换为 WAV 或直接提取特征。
3.4 频谱概念:从时域到频域的转换
音频分类的核心挑战在于:时域波形(横轴时间、纵轴振幅)难以直接体现声音的“内容”特征。例如,狗叫声和玻璃破碎声在时域波形上可能看起来相似(都是短促的瞬态),但它们的频率分布截然不同。因此,需要将时域信号转换为频域表示,观察不同频率成分的能量分布。
傅里叶变换(FT)是这一转换的数学基础,它将时域信号分解为不同频率的正弦波叠加。对于数字信号,使用离散傅里叶变换(DFT),其高效实现为快速傅里叶变换(FFT)。然而,直接对整段音频做 FFT 会丢失时间信息——我们只知道整段音频包含哪些频率,却不知道这些频率出现在哪个时间点。对于声学事件检测,时间信息至关重要(例如,狗叫是“间断的”,而空调噪声是“持续的”)。
短时傅里叶变换(STFT)解决了这一问题:将长信号切分为短帧(通常 20-40ms),对每一帧加窗(如汉明窗)后做 FFT,得到该时刻的频谱。将所有帧的频谱按时间排列,就得到语谱图(Spectrogram)——横轴为时间、纵轴为频率、颜色深浅表示能量强度。语谱图是音频分类模型最常用的输入特征之一。
3.5 案例拆解:环境声音分类任务中的参数选择
假设我们要设计一个嵌入式设备上的“婴儿哭声检测”系统,使用 Cortex-M4 内核 MCU(主频 80MHz,RAM 256KB)。以下是完整的参数决策过程:
背景与约束:设备需连续监听环境声音,当检测到婴儿哭声时触发报警。电池供电,要求平均功耗低于 50mW。音频采集使用板载 MEMS 麦克风,ADC 支持最高 48kHz 采样率。
初始目标与数据:目标声音(婴儿哭声)的主要频率范围在 300Hz 至 3.5kHz 之间,包含丰富的谐波成分。环境噪声(如风扇、交通)主要集中在 1kHz 以下。我们采集了 200 段婴儿哭声(每段 2-3 秒)和 200 段环境噪声作为训练数据。
分析判断过程:
- 采样率选择:婴儿哭声最高有效频率约 3.5kHz,根据奈奎斯特定理,采样率至少 7kHz。考虑滤波器过渡带,选择 16kHz 采样率,既满足要求,又比 44.1kHz 减少约 2/3 的数据量。
- 位深选择:环境噪声可能达到 60dB SPL,婴儿哭声约 70dB SPL,动态范围需求约 40dB。16-bit 提供 96dB 动态范围,余量充足;8-bit 仅 48dB,接近临界值,可能引入可闻量化噪声。
- 声道选择:单声道足够,因为哭声检测不依赖空间位置信息。
- 特征提取:使用 STFT 帧长 30ms(480 样本)、帧移 10ms(160 样本)、FFT 点数 512,得到 257 个频率 bin。进一步计算梅尔谱图(40 个梅尔滤波器组),最终输入特征为 40 维梅尔能量特征。
实际操作步骤:
# Python 伪代码:参数配置
SAMPLE_RATE = 16000
FRAME_LEN = int(0.03 * SAMPLE_RATE) # 480 samples
FRAME_SHIFT = int(0.01 * SAMPLE_RATE) # 160 samples
N_FFT = 512
N_MELS = 40
# 读取 WAV 文件并预处理
import librosa
y, sr = librosa.load('baby_cry.wav', sr=SAMPLE_RATE, mono=True)
mel_spec = librosa.feature.melspectrogram(y=y, sr=sr, n_fft=N_FFT,
hop_length=FRAME_SHIFT, n_mels=N_MELS)
log_mel = librosa.power_to_db(mel_spec)
结果对比:使用 16kHz/16-bit/单声道配置,每秒钟音频数据量为 32KB,MCU 上运行 MFCC 特征提取约耗时 15ms(使用 CMSIS-DSP 库优化),满足实时处理需求。若改用 44.1kHz 采样率,数据量增至 88.2KB/s,特征提取耗时增至约 40ms,且内存占用翻倍,可能导致系统无法在 256KB RAM 内运行。
风险与代价:降低采样率至 16kHz 意味着丢失 8kHz 以上的频率信息。如果未来需要检测其他高频事件(如玻璃破碎),可能需要重新采集数据。为规避此风险,可在硬件设计时保留 48kHz 采样能力,但在软件层面默认使用 16kHz,留出升级空间。
复盘经验:参数选择应基于目标声音的频谱分析,而非经验猜测。建议在项目初期对采集的音频做快速 FFT 分析,确认能量分布范围,再决定采样率。同时,所有训练数据必须经过与设备端完全相同的预处理链路(包括降采样、量化、帧切分),避免训练-推理不一致。
3.6 常见误区与总结复盘
在音频基础参数设置上,初学者常犯以下错误,需要特别注意规避:
- 误区一:采样率越高越好。高采样率带来更大的数据量和计算负担,在 TinyML 场景下可能导致实时性不达标或内存溢出。正确做法是根据目标声音的频谱上限确定最小采样率,再留出 20-30% 余量。
- 误区二:忽略位深对动态范围的影响。在嘈杂环境中,如果位深不足,微弱的目标声音可能被量化噪声淹没。建议在数据采集时使用 16-bit,若环境信噪比极低,可考虑 24-bit 采集后软件降噪。
- 误区三:直接使用 MP3 训练模型。MP3 压缩会去除高频细节和弱信号成分,这些可能正是区分不同声学事件的关键特征。务必使用 WAV 或 FLAC 等无损格式进行训练。
- 误区四:混淆频谱图与梅尔谱图。线性频率刻度会过度强调高频区域(人耳不敏感),而梅尔刻度模拟人耳感知,在低频区域分辨率更高。对于大多数声学事件检测任务,梅尔谱图或 MFCC 是更好的输入特征。
- 误区五:忽视帧长与帧移的配合。帧长决定频率分辨率,帧移决定时间分辨率。如果帧移过大(如 30ms),快速变化的事件(如拍手)可能被遗漏;如果帧移过小(如 2ms),计算量急剧增加且相邻帧高度冗余。