2、音频基础理论:声音的物理特性、采样率与位深度、音频编码格式概述

好,咱们正式开始聊音频。说实话,很多做嵌入式开发的朋友,一听到「音频」两个字就觉得头大。觉得那是搞音乐的人该操心的事。其实不然。你想想看,PIS系统里那些语音播报、到站提示、紧急广播,哪个离得开音频?搞懂基础,后面写驱动、调算法,心里才有底。

这一章,我就带你从最根本的东西说起。声音到底是什么?我们怎么把它变成电脑能处理的数字信号?又有哪些常见的坑等着你?嗯,咱们一个一个来。

2.1 声音的物理特性

声音,说白了就是振动。空气被振动,形成疏密波,传到我们耳朵里。这个波有两个关键参数:频率振幅

  • 频率:单位是赫兹(Hz)。表示每秒振动多少次。频率越高,音调越高。人耳能听到的大概是20Hz到20kHz。低于20Hz的叫次声波,高于20kHz的叫超声波。PIS系统里,我们最关心的是人声范围,大概300Hz到3.4kHz。电话线路就是按这个标准设计的。
  • 振幅:表示振动的幅度。振幅越大,声音越响。我们通常用分贝(dB)来表示响度。0dB是人耳能听到的最微弱声音,120dB就开始让人感到疼痛了。

重要概念:声压级(SPL)

在嵌入式系统里,我们很少直接处理声压。但你要知道,麦克风采集到的电压信号,和声压是成正比的。ADC转换后的数值,就代表了振幅。这个数值越大,声音越响。

我在项目中遇到过一个问题:某次调试车载广播,发现播放出来的声音总是破音。查了半天,发现是麦克风输入的信号幅度太大,超过了ADC的参考电压。嗯,这就是典型的「削波失真」。所以,设计前端电路时,一定要留足余量。

2.2 采样率与位深度

模拟信号要变成数字信号,得经过两个步骤:采样和量化。这两个步骤决定了数字音频的质量。

2.4.1 采样率

采样率,就是每秒采集多少个样本点。单位是Hz(或kHz)。

这里有个核心定理:奈奎斯特采样定理。简单说就是:采样率必须大于信号最高频率的两倍,才能无失真地还原信号。

举个例子:人声最高频率按4kHz算,那采样率至少得8kHz。电话系统就是这么干的。CD音质的采样率是44.1kHz,为什么?因为人耳能听到20kHz,两倍就是40kHz,再留点余量,就定成了44.1kHz。

应用场景 常用采样率 说明
电话语音 8 kHz 窄带,够用就行
PIS语音播报 16 kHz 宽带,清晰度不错
CD音质 44.1 kHz 高保真,音乐常用
专业录音 48 kHz / 96 kHz 后期处理留余量

我的建议:PIS系统做语音播报,用16kHz采样率就够了。既能保证清晰度,又能节省存储空间和带宽。我曾经见过有人用44.1kHz去录报站语音,结果文件大了好几倍,播放效果其实没区别。没必要。

2.4.2 位深度

位深度,也叫量化精度。它决定了每个样本点用多少位来表示。常见的位深度有8位、16位、24位、32位。

位深度越高,动态范围越大,声音的细节越丰富。动态范围的计算公式是:动态范围(dB) ≈ 6.02 × 位深度 + 1.76

  • 8位:动态范围约48dB。听起来会有明显的底噪,像老式收音机。一般不用在PIS里。
  • 16位:动态范围约96dB。CD音质就是这个标准。PIS系统用16位完全足够。
  • 24位:动态范围约144dB。录音棚级别。除非你做高端音频处理,否则用不上。

你想想看,PIS系统里播放的是语音,不是交响乐。16位、16kHz,这个组合性价比最高。我做过一个项目,客户非要32位浮点,结果MCU算力不够,播放时卡顿。后来改成16位定点,一切正常。所以,别盲目追求高参数。

2.3 音频编码格式概述

原始音频数据(PCM)太大了。举个例子:16位、16kHz、单声道,一秒钟就是16 × 16000 = 256000比特,约32KB。一分钟就快2MB了。对于嵌入式系统来说,这太奢侈了。所以,我们需要编码压缩。

编码格式分两大类:无损压缩有损压缩

2.3.1 无损压缩

压缩后能完全还原原始数据。常见的有:

  • WAV(PCM):严格来说WAV是一种容器格式,里面可以装PCM数据。PCM就是原始数据,不压缩。优点是解码简单,几乎零延迟。缺点是文件大。
  • FLAC:自由无损音频压缩编码。压缩比大概2:1。解码需要一定算力。嵌入式MCU上跑FLAC解码器,有点吃力。
  • ALAC:苹果的无损格式。和FLAC类似。

注意:在PIS系统里,我几乎不用无损压缩。原因很简单:存储成本不是主要矛盾,解码的实时性和CPU占用才是。WAV(PCM)虽然大,但直接DMA搬运就行,不占CPU。你想想看,如果系统里同时要播报多路语音,CPU还要处理其他任务,用FLAC解码可能就扛不住了。

2.3.2 有损压缩

利用人耳的听觉掩蔽效应,去掉人耳不敏感的声音成分。压缩比高,但会损失一部分信息。

  • MP3:最经典的有损格式。压缩比可达10:1。128kbps的MP3听起来和CD差别不大。但MP3有专利问题,虽然现在过期了,但解码器代码比较老。
  • AAC:MP3的升级版。同等码率下音质更好。苹果和YouTube都用它。解码器比MP3复杂一点。
  • Opus:新一代开源编码格式。非常优秀。支持从语音到音乐的全场景。延迟极低,特别适合实时通信。我个人非常推荐在PIS系统中使用Opus。
  • ADPCM:自适应差分脉冲编码调制。一种轻量级的压缩算法。压缩比4:1。解码极其简单,很多MCU都有硬件支持。适合对音质要求不高的语音场景。
格式 压缩类型 典型码率 解码复杂度 PIS适用性
WAV (PCM) 无损 256 kbps (16kHz/16bit) 极低 ★★★★★
ADPCM 有损 64 kbps 极低 ★★★★☆
Opus 有损 16-128 kbps 中等 ★★★★★
MP3 有损 128 kbps 中等 ★★★☆☆
FLAC 无损 ~130 kbps 较高 ★★☆☆☆

我的选择:如果MCU算力够,我首选Opus。码率低、音质好、延迟低。如果MCU资源紧张,比如只有几十MHz的主频,那就用ADPCM或者直接上PCM。我曾经在一个Cortex-M0的项目里,用8kHz、8位、ADPCM压缩,把整条地铁线的报站语音塞进了256KB的Flash里。嗯,够用就好。

2.4 小结

这一章我们聊了声音的物理本质,采样率和位深度怎么选,以及常见的编码格式。说白了,音频基础就是三个核心问题:

  1. 频率:决定了你能听到什么。
  2. 采样率和位深度:决定了数字化的精度。
  3. 编码格式:决定了存储和传输的效率。

下一章,我们会进入实战,聊聊PIS系统里音频硬件怎么选型,以及I2S接口怎么配置。到时候我会拿出我踩过的坑,一个一个讲给你听。

课后小练习:打开你的开发板,看看音频Codec的驱动配置。找到采样率和位深度的设置项。试着改成8kHz/8位,听听效果有什么变化。再改回16kHz/16位,对比一下。你会对「够用就好」有更深的体会。


公众号:蓝海资料掘金营,微信deep3321