音频压缩的心理声学原理
频域遮蔽
一个频率的声音能量小于某个阈值之后,人耳就会听不到,这个阈值称为最小可闻阈,也就是静音门槛。(PS: 不同频率的声音静音门槛不一样)
当有另外能量较大的声音出现的时候,该声音频率附近的阈值会提高很多,也就是说,即使附近频率的声音能量超过了静音门槛,人耳也听不见。

时域遮蔽
强音信号和弱音信号发生时间很接近时,会出现时域遮蔽。时域遮蔽分为前遮蔽、同时遮蔽、后遮蔽三部分。前遮蔽指人耳在听到强音信号之前的短暂时间内,已经存在的弱音信号会被遮蔽而听不到。同时遮蔽是指强音信号和弱音信号同时存在时,强信号会遮蔽弱信号。后遮蔽是指当强信号消失后,需要经过较长的一段时间才能重新听见弱信号。

音频压缩算法分类
分为有损压缩和无损压缩。有损压缩的原理就是前面的心理声学原理。根据压缩方案的不同,还可以划分时域压缩、变换压缩、子带压缩,以及多种技术相互融合的混合压缩。
时域压缩(或称为波形编码)
直接针对音频PCM码流的量化值进行处理,比如将原本16bit的采样值编码压缩到8bit。时域压缩采用的办法有静音检测、差分编码、非线性量化等,一般算法简单,实时性高,但压缩比小,声音质量一般,所以一般多用于语音压缩,低码率场景。时域压缩技术主要包括G711、ADPCM。
变换压缩
将音频的时域信号转换到频域,然后利用心理声学模型,移除不相关频带的信号,对不同频带的信号分配不同的比重,再进行编码压缩,比如MP3编码。
各种波形编码(LPCM/ADPCM/G711等)
从脉冲编码调制说起,脉冲编码调制包含三步:
- 采样
- 量化
- 编码
采样与采样率有关,一般有8k, 16k, 32k, 44.1k等。量化与位深有关,有8bit, 16bit等。最后一步编码,决定了是否对音频进行压缩,以及音频数据最终的内容。
LPCM
LPCM: linear pulse code modulation,线性量化编码,直接取量化后的值进行编码,这种编码是音频的最原始编码,属于无损编码。CD音频使用的就是线性PCM编码,由此可以计算CD音频的数据量:
2声道 x 44.1k采样率 x 16bit = 1411.1kbps
ADPCM
基于DPCM,也就是差分脉冲编码调制(Differential Pulse Code Modulation)。
DPCM的工作原理是原始PCM相邻采样点之间通常是比较连续的,差值不会很大,所以可以用较小的bit位数来表示,比如只用4bit表示差值,这样只需要知道起始点的值和每个点的差值,就可以还原得到原来的序列。记录的差值序列就是DPCM数据, 这样数据量会小很多。(与视频中的P帧类似,存储与关键帧的差值)
DPCM使用固定的位数来表示差值,在遇到相邻采样点之间差异很大时会丢失精度,所以是有损压缩。可以通过使用更大的位数来增大精度,但数据量也会增大。
为了优化DPCM,提出了ADPCM(Adaptive Differential Pulse Code Modulation, 自适应差分脉冲编码调),其思想是先定义差值表(例如IMA ADPCM 中使用 89个固定差值, 取值从7到32767),差值表的范围放宽到16bit,此时差值在数组中的编号只需要6bit就可以表示(0 - 88), 再进一步只记录编号的变化值, 就将变化量压缩到了4bit。

G711
G.711是一种由国际电信联盟(ITU-T)订定音频编码方式,又称为ITU-T G.711。
G.711使用64Kbps的带宽,可将14bits转换成8bits。目前G.711有两个编码方式,A-law以及μ-law。A-law 编码是以 13-bit 带符号的线性音效样品输入并转换成 8 bit 的值如下:

A律13折线,u律15折线。A律输入13位,其实就是16bit量化后的高13位,u律输入14位,同样是16bit量化后的高14位。u律使用在北美和日本,A律使用在欧洲和其他地区。
A律13折线的由来:
将输入区间归一化到[0, 1],并按照低半区二等分分割7次,得到8个输入区间。
将量化输出区间也归一化到[0, 1],并平均分成8等份,得到正极的8根折线。
相同的操作在负极也重复一次,一共就有16根线,但纵坐标区间[-2/8, 2/8]内的4根折线斜率相同,可以算作一根折线,所以总共有13段折线。

假如使用8bit进行PCM量化,则每个码字的位宽为8bit,其结构如下表所示:
名称 | 位置 | 长度 | 含义 |
---|
极性码 | b0 | 1bit | 表示电平的正负极 |
段落码 | b1b2b3 | 3bit | 表示落在哪根折线上 |
段内码 | b4b5b6b7 | 4bit | 表示在拆线中的位置 |
MP3格式与MP3编码标准
MP3概述
MP3编码
MP3编码标准细节不在本节讨论范围。
MP3格式封装
AAC格式与AAC编码标准
AAC概述
AAC编码
AAC格式封装
参考链接: