3. 声卡硬件基础:数字信号处理(DSP)、数模转换(DAC)、模数转换(ADC)、采样率、位深、声道数

在深入 ALSA 工具链之前,必须理解声卡硬件的核心构成。声卡的本质是一个混合信号系统,它同时处理数字信号和模拟信号。本章将拆解声卡的关键硬件单元:DSP、DAC、ADC,以及决定音频质量的三大参数:采样率、位深、声道数。

核心概念: 数字音频信号在进入扬声器(模拟)之前,必须经过“数字→模拟”的转换;麦克风采集的模拟声音进入计算机前,必须经过“模拟→数字”的转换。DSP 则负责在数字域对音频数据进行加工。

3.1 声卡硬件架构总览

现代声卡(无论是独立声卡还是 SoC 内置编解码器)通常遵循以下数据流架构。理解这个流程是配置 ALSA 参数的前提。

声卡硬件数据流架构图 数字音频源 (I2S/PCM/USB) DSP (数字信号处理) DAC (数模转换) 模拟输出 (扬声器/耳机) 模拟输入 (麦克风/线路) ADC (模数转换) DSP (数字信号处理) 数字音频接收 (内存/总线) 说明:DSP 在数字域处理数据,DAC/ADC 负责数字与模拟域的桥接。ALSA 驱动通过控制这些单元的参数来管理音频流。

3.2 数字信号处理 (DSP)

DSP 是声卡的数字大脑。它不直接处理模拟信号,而是对 PCM(脉冲编码调制)数据进行运算。在嵌入式 Linux 声卡中,DSP 可能是一个独立的硬件单元,也可能是 SoC 中的协处理器。

3.2.1 DSP 的典型功能

  • 采样率转换 (SRC): 将音频流从一个采样率转换为另一个采样率(例如 48kHz → 44.1kHz)。
  • 混音 (Mixer): 将多个数字音频流叠加成一个输出流。
  • 滤波与均衡 (EQ): 实现低通、高通、带通滤波或图形均衡器。
  • 音量控制: 在数字域调整增益,避免模拟电路的噪声。
  • 效果处理: 回声、混响、噪声抑制等。
ALSA 视角: 在 ALSA 中,DSP 功能通常通过 dmix(混音)、plug(采样率/格式转换)等插件层实现。硬件 DSP 则通过 snd_kcontrol 接口暴露给用户空间。

3.3 数模转换 (DAC) 与模数转换 (ADC)

DAC 和 ADC 是连接数字世界与模拟世界的桥梁。它们的性能直接决定了声卡的音质上限。

特性 DAC (数模转换) ADC (模数转换)
方向 数字 → 模拟 模拟 → 数字
应用 播放音频到扬声器/耳机 从麦克风/线路输入录音
关键指标 信噪比(SNR)、总谐波失真(THD+N)、动态范围 信噪比(SNR)、总谐波失真(THD+N)、动态范围
时钟要求 低抖动时钟,保证模拟输出波形平滑 低抖动时钟,保证采样精度
ALSA 设备 hw:0,0 (播放子设备) hw:0,0 (录音子设备)
DAC 与 ADC 转换过程对比 数字 0101 DAC 模拟波形 播放路径 模拟波形 ADC 数字 0101 录音路径

3.4 采样率 (Sample Rate)

采样率表示每秒对模拟信号采样的次数,单位是 Hz(赫兹)。根据奈奎斯特采样定理,采样率必须至少为信号最高频率的两倍,才能无失真地重建信号。

3.4.1 常见采样率标准

采样率 常用场景 理论最高频率
8 kHz 电话语音、对讲系统 4 kHz
16 kHz VoIP、语音识别 8 kHz
44.1 kHz CD 音频、MP3 文件 22.05 kHz
48 kHz DVD、电影、专业音频设备 24 kHz
96 kHz 高清音频、录音棚 48 kHz
192 kHz 超高保真音频、专业母带 96 kHz
驱动配置陷阱: 声卡硬件支持的采样率是有限的。ALSA 驱动必须正确报告硬件支持的采样率列表。如果应用程序请求硬件不支持的采样率,驱动需要返回错误,或者通过 plug 插件进行隐式采样率转换(这会增加 CPU 负载和延迟)。

3.5 位深 (Bit Depth)

位深决定了每个采样点能够表示的动态范围(音量精度)。位深越大,量化噪声越低,信噪比越高。

3.5.1 位深与动态范围

动态范围的理论计算公式:动态范围 (dB) ≈ 6.02 × N + 1.76,其中 N 为位深。

位深 理论动态范围 量化等级数 常见用途
8 位 ~49.9 dB 256 早期游戏、低质量语音
16 位 ~96.3 dB 65,536 CD 音频、标准 WAV 文件
24 位 ~144.5 dB 16,777,216 录音棚、高清音频、混音
32 位浮点 ~1528 dB (理论) 极高精度 DAW 内部处理、音频插件
ALSA 格式表示: 在 ALSA 中,位深通过 snd_pcm_format_t 枚举定义。例如 SND_PCM_FORMAT_S16_LE 表示有符号 16 位小端格式,SND_PCM_FORMAT_S24_LE 表示有符号 24 位小端格式。驱动必须正确设置 format 掩码。

3.6 声道数 (Channels)

声道数表示音频流中包含的独立音频通道数量。每个声道对应一个独立的扬声器或麦克风信号。

3.6.1 常见声道配置

声道数 名称 布局 应用
1 单声道 (Mono) 中央 语音、电话、对讲
2 立体声 (Stereo) 左、右 音乐、电影、游戏
4 四声道 (Quad) 前左、前右、后左、后右 早期环绕声
6 5.1 环绕声 前左、前右、中置、低音、后左、后右 家庭影院、游戏
8 7.1 环绕声 前左、前右、中置、低音、侧左、侧右、后左、后右 高端游戏、专业影院
声道布局示例:5.1 环绕声 前左 前右 中置 低音 后左 后右 听 ALSA 通过 channel map 定义声道与物理扬声器的对应关系

3.7 三参数的关系与 ALSA 配置

采样率、位深、声道数共同决定了音频数据流的带宽(比特率)。

比特率计算公式: 比特率 (bps) = 采样率 (Hz) × 位深 (bits) × 声道数

例如:CD 音质的比特率 = 44100 × 16 × 2 = 1,411,200 bps ≈ 1.41 Mbps。

在 ALSA 驱动中,这三个参数通过 snd_pcm_hw_params_t 结构体进行配置。驱动必须提供硬件支持的参数范围(最小/最大值),应用程序在此范围内选择具体值。

// ALSA 驱动中设置硬件参数的典型流程
snd_pcm_hw_params_t *params;
snd_pcm_hw_params_any(handle, params);

// 设置采样率
unsigned int rate = 48000;
snd_pcm_hw_params_set_rate_near(handle, params, &rate, 0);

// 设置位深 (格式)
snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE);

// 设置声道数
unsigned int channels = 2;
snd_pcm_hw_params_set_channels_near(handle, params, &channels);

// 应用参数
snd_pcm_hw_params(handle, params);
硬件约束检查: 并非所有采样率、位深、声道数的组合都是硬件支持的。例如,某些声卡在 192kHz 采样率下只支持 2 声道,不支持 6 声道。驱动开发者在实现 hw_params 回调时,必须严格校验参数组合的合法性,避免硬件进入未定义状态。

3.8 本章小结

  • 声卡硬件由 DSP(数字处理)、DAC(播放转换)、ADC(录音转换)三大核心单元组成。
  • 采样率 决定频率响应上限,位深 决定动态范围,声道数 决定空间维度。
  • ALSA 驱动通过 hw_params 接口暴露硬件支持的参数范围,应用程序在此范围内选择配置。
  • 理解这些硬件基础是后续配置 ALSA 工具链(如 aplay、arecord、amixer)的前提。