Linux内核驱动ALSA音频框架与声卡驱动开发 - 第1节

1.1 音频信号基础

音频信号本质上是随时间变化的声波压力在介质(通常为空气)中的传播。在物理层面,声波是一种纵波,通过压缩和稀疏介质分子来传递能量。人耳可感知的频率范围大约为 20 Hz 至 20 kHz,这一范围被称为听觉频率范围。

关键概念:音频信号是模拟量,具有连续的时间和幅度特性。在自然界中,声音的强度(响度)用分贝(dB)表示,频率(音调)用赫兹(Hz)表示。
模拟音频信号波形示意图 时间 幅度 连续模拟信号(蓝色实线:原始声波,红色虚线:衰减谐波)

1.2 数字音频原理

数字音频的核心是将连续的模拟音频信号转换为离散的数字表示,这一过程称为模数转换(ADC)。数字音频系统通过三个基本步骤完成转换:采样、量化和编码。

1.2.1 采样(Sampling)

采样是在时间轴上以固定间隔对模拟信号进行瞬时值提取的过程。根据奈奎斯特采样定理,采样频率必须至少为信号最高频率的两倍,才能无失真地重建原始信号。

采样率 常见应用 最高可表示频率
8 kHz 电话语音 4 kHz
44.1 kHz CD 音频 22.05 kHz
48 kHz DVD / 专业音频 24 kHz
96 kHz 高解析度音频 48 kHz
192 kHz 录音室母带 96 kHz

1.2.2 量化(Quantization)

量化是将采样得到的连续幅度值映射到有限个离散电平的过程。量化精度由位深度决定,常见位深度包括 8-bit、16-bit、24-bit 和 32-bit。位深度越高,动态范围越大,量化噪声越低。

量化噪声公式:动态范围 ≈ 6.02 × N + 1.76 dB,其中 N 为位深度。例如 16-bit 音频的理论动态范围约为 98 dB。

1.3 PCM 编码

脉冲编码调制(Pulse Code Modulation, PCM)是数字音频最基础的编码格式。PCM 将模拟信号经过采样、量化后,每个采样值用固定位数的二进制码字表示。PCM 数据通常以线性或非线性(如 μ-law、A-law)方式存储。

1.3.1 PCM 数据格式

在 Linux ALSA 框架中,PCM 数据以帧(Frame)为单位组织。一帧包含所有声道在当前采样点的数据。常见的 PCM 格式包括:

  • S16_LE:有符号 16 位小端序,最常用的格式
  • S24_LE:有符号 24 位小端序,存储在 32 位容器中
  • S32_LE:有符号 32 位小端序
  • FLOAT_LE:32 位浮点数格式,用于高精度处理
// PCM 帧结构示例(双声道,16-bit 立体声)
// 帧大小 = 声道数 × 采样位宽 / 8
// 例如:2 声道 × 16-bit = 4 字节/帧
struct pcm_frame_stereo16 {
    int16_t left;   // 左声道采样值
    int16_t right;  // 右声道采样值
};
PCM 编码流程与数据组织 模拟信号 采样 量化 PCM 数据 PCM 帧 = [L声道采样值] [R声道采样值] [L] [R] ...

1.4 采样率与位深度

采样率和位深度是数字音频的两个核心参数,直接影响音频质量和数据量。

参数 定义 对质量的影响 对数据量的影响
采样率 每秒采集的样本数(Hz) 决定频率上限,越高高频还原越好 线性增加:采样率×2 → 数据量×2
位深度 每个样本的比特数(bit) 决定动态范围和信噪比 线性增加:位深×2 → 数据量×2
常见误区:更高的采样率并不总是更好。对于人耳听觉范围(20 Hz - 20 kHz),44.1 kHz 采样率已满足奈奎斯特定理。过高的采样率会增加处理开销和存储需求,而对听觉改善有限。

1.4.1 数据速率计算

数字音频的数据速率(比特率)计算公式为:

比特率 (bps) = 采样率 (Hz) × 位深度 (bit) × 声道数

示例:CD 质量立体声音频
比特率 = 44100 × 16 × 2 = 1,411,200 bps ≈ 1.41 Mbps
每分钟数据量 = 1.41 Mbps × 60 / 8 ≈ 10.6 MB

1.5 音频硬件架构

典型的音频硬件架构由多个功能模块组成,从模拟信号输入/输出到数字信号处理,最终与 CPU 和内存交互。在嵌入式系统中,音频硬件通常集成在 SoC 内部或通过外部编解码器(Codec)连接。

1.5.1 核心组件

  • 音频编解码器(Audio Codec):负责 ADC/DAC 转换,通常包含模拟混音器、增益控制、滤波器等
  • 数字音频接口(DAI):如 I²S、PCM、TDM 等,用于在 SoC 和 Codec 之间传输数字音频数据
  • DMA 控制器:负责在内存和音频外设之间搬运 PCM 数据,无需 CPU 逐字节干预
  • 时钟源(Clock):提供采样时钟和主时钟,保证音频同步
  • 模拟前端(Analog Front-End):包括麦克风放大器、耳机放大器、线路输入/输出等
嵌入式音频硬件架构框图 CPU / 应用处理器 系统内存 (DDR) DMA 控制器 I²S / TDM 接口 音频 Codec 模拟输出 (耳机/喇叭) 模拟输入 (麦克风) 数据流:麦克风 → Codec (ADC) → I²S → DMA → 内存 → CPU 处理 → DMA → I²S → Codec (DAC) → 耳机

1.5.2 常见音频总线协议

协议 特点 典型应用
I²S 3 线制(BCLK、LRCLK、DATA),支持立体声 消费电子、嵌入式音频
TDM 时分复用,支持多声道(最多 16 声道) 专业音频、车载音响
PCM 同步串行接口,支持单声道/立体声 蓝牙音频、数字无线通信
AC'97 5 线制,包含 Codec 控制通道 老旧 PC 主板、早期嵌入式
HDMI ARC 通过 HDMI 线缆传输音频回传 电视、家庭影院
嵌入式开发提示:在 Linux 音频驱动开发中,I²S 是最常见的 DAI 接口。ALSA 框架通过 snd_soc_dai_driver 结构体来描述 DAI 的能力,包括支持的数据格式、时钟极性、帧格式等。

1.6 本章小结

本章建立了音频系统的基础知识框架。从模拟音频信号的物理特性出发,理解了数字音频的采样、量化和 PCM 编码原理,掌握了采样率和位深度对音频质量和数据量的影响,最后梳理了嵌入式音频硬件的典型架构和总线协议。这些概念是后续学习 ALSA 框架和声卡驱动开发的基石。