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 小结
这一章我们聊了声音的物理本质,采样率和位深度怎么选,以及常见的编码格式。说白了,音频基础就是三个核心问题:
- 频率:决定了你能听到什么。
- 采样率和位深度:决定了数字化的精度。
- 编码格式:决定了存储和传输的效率。
下一章,我们会进入实战,聊聊PIS系统里音频硬件怎么选型,以及I2S接口怎么配置。到时候我会拿出我踩过的坑,一个一个讲给你听。
课后小练习:打开你的开发板,看看音频Codec的驱动配置。找到采样率和位深度的设置项。试着改成8kHz/8位,听听效果有什么变化。再改回16kHz/16位,对比一下。你会对「够用就好」有更深的体会。
公众号:蓝海资料掘金营,微信deep3321