音频基础概念:采样率、位深、声道数与I2S总线协议

做音频开发,有几个基础概念绕不开。我刚开始接触音频项目时,也对这些术语一头雾水。说白了,采样率、位深、声道数这三个参数,决定了你听到的声音质量有多好,也决定了你的系统需要处理多少数据。

1. 采样率(Sample Rate)

采样率,就是每秒钟对模拟音频信号采样的次数。单位是Hz(赫兹)。

根据奈奎斯特采样定理:采样率必须大于信号最高频率的两倍,才能无失真地重建原始信号。人耳能听到的频率范围大约是20Hz~20kHz,所以CD音质的采样率定为44.1kHz,刚好覆盖人耳范围并留有余量。

常见采样率:

  • 8kHz:电话语音,窄带通信
  • 16kHz:宽带语音,VoIP
  • 44.1kHz:CD音质,音乐播放
  • 48kHz:DVD、电影、专业音频设备
  • 96kHz / 192kHz:高解析度音频(Hi-Res)

我在项目中遇到过一个问题:用WM8960播放44.1kHz的音频文件,结果声音变调了。查了半天,发现是STM32的I2S时钟配置成了48kHz的倍频。嗯,这里要注意——采样率必须和时钟分频严格对应,否则声音要么变快要么变慢。

2. 位深(Bit Depth)

位深,也叫量化精度,表示每个采样点用多少位二进制数来表示。它决定了动态范围,也就是声音从最轻到最响能跨越多少级。

你想想看,16位能表示65536个等级,24位能表示16777216个等级。等级越多,声音的细节越丰富,底噪越低。

位深 动态范围 典型应用
8位 ~48dB 早期游戏、语音提示
16位 ~96dB CD、MP3
24位 ~144dB 录音棚、Hi-Res音频
32位 ~192dB 专业DSP内部处理

我的经验:在STM32+WM8960的方案中,我一般用24位位深。16位在安静环境下能听到量化噪声,32位又太浪费带宽和存储。24位是个很好的平衡点。

3. 声道数(Channels)

声道数就是音频信号的独立通道数量。

  • 单声道(Mono):1个通道,所有扬声器发出相同声音
  • 双声道(Stereo):2个通道,左声道和右声道,产生立体感
  • 多声道:5.1、7.1等,用于环绕声

在I2S总线上,双声道是最常见的配置。WM8960本身就是立体声编解码器,支持左右声道独立输入输出。

4. 数据率计算

这三个参数组合起来,就决定了音频数据流的速度:

数据率(bps)= 采样率 × 位深 × 声道数

举个例子:

CD音质:44100 × 16 × 2 = 1,411,200 bps ≈ 1.41 Mbps
高解析度:96000 × 24 × 2 = 4,608,000 bps ≈ 4.61 Mbps

我曾经在调试一个录音项目时,发现DMA传输总是断流。一算数据率,发现I2S时钟跑得太快,DMA带宽不够用了。所以,配置之前先算一下数据率,能省很多排查时间。

5. I2S总线协议详解

I2S(Inter-IC Sound)是飞利浦公司制定的数字音频设备间传输音频数据的串行总线标准。它有三条主要信号线:

  • SCK(BCLK):位时钟,每个脉冲对应一位数据
  • WS(LRCK):声道选择/帧时钟,低电平左声道,高电平右声道
  • SD(DATA):串行数据线

I2S有三种常见的对齐模式,我分别说一下。

5.1 标准I2S(Philips I2S)

标准I2S的特点是:WS切换后的第一个BCLK周期,不传输数据,数据从第二个BCLK开始传输。也就是说,数据相对于WS边沿有1个BCLK的延迟。

WS:   ____|‾‾‾‾‾‾‾‾|____|‾‾‾‾‾‾‾‾|____
BCLK: ‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_
DATA:     |MSB|...|LSB|   |MSB|...|LSB|
         ← 左声道 →    ← 右声道 →

这是最常用的模式,WM8960默认也支持这种模式。我个人习惯优先使用标准I2S,兼容性最好。

5.2 左对齐(Left Justified)

左对齐模式下,WS切换的同时,数据立即开始传输,没有延迟。MSB(最高有效位)对齐到WS边沿。

WS:   ____|‾‾‾‾‾‾‾‾|____|‾‾‾‾‾‾‾‾|____
BCLK: ‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_
DATA: |MSB|...|LSB|   |MSB|...|LSB|
      ← 左声道 →    ← 右声道 →

左对齐在一些老式DAC和DSP中比较常见。我在调试一个古董级音频设备时遇到过这种格式,当时没注意配置,结果声音全是噪声。

5.3 右对齐(Right Justified)

右对齐模式下,数据的LSB(最低有效位)对齐到WS边沿。也就是说,数据在WS切换之前传输完毕。

WS:   ____|‾‾‾‾‾‾‾‾|____|‾‾‾‾‾‾‾‾|____
BCLK: ‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_
DATA:   |MSB|...|LSB|   |MSB|...|LSB|
        ← 左声道 →    ← 右声道 →

右对齐在索尼和部分日本厂商的设备中比较流行。说实话,我在实际项目中遇到右对齐的情况不多,但知道总比不知道好。

6. 三种模式对比

特性 标准I2S 左对齐 右对齐
数据起始位置 WS边沿后1个BCLK WS边沿同时 WS边沿前
MSB对齐方式 延迟1位 立即对齐 LSB对齐WS
兼容性 最广泛 部分DSP/DAC 部分日本厂商设备
WM8960支持 ✅ 是 ✅ 是 ✅ 是

避坑指南:我曾经在配置STM32的I2S外设时,把数据格式设成了左对齐,但WM8960默认是标准I2S。结果播放出来的声音全是刺耳的噪声。后来花了整整一个下午才找到原因——I2S的对齐模式必须主从设备一致。所以,初始化时一定要检查两边的配置是否匹配。

7. 知识体系结构图

下面这张图总结了本章的核心知识点,方便你快速回顾:

音频基础概念与I2S协议知识体系 采样率 位深 声道数 数据率 = 采样率 × 位深 × 声道数 I2S总线协议 标准I2S 左对齐 右对齐 数据延迟1个BCLK 兼容性最好 MSB对齐WS边沿 部分DSP使用 LSB对齐WS边沿 日本厂商设备常见

这张图把采样率、位深、声道数三个参数串联到数据率计算,再引出I2S总线和三种对齐模式。你调试的时候,可以对照这张图检查配置链路,哪里出问题一目了然。

小结一下:采样率决定频率范围,位深决定动态范围,声道数决定空间感。I2S的三种对齐模式,本质上是数据在BCLK上的摆放位置不同。只要主设备和从设备配置一致,就不会出问题。嗯,记住这一点,能少踩很多坑。