7.4 音频压缩

就像我们刚刚看到的,CD品质的音频需要一个1.411 Mbps带宽的传送。很清楚,在Internet的实际传送中,需要有效的压缩。正是因为这一点,已经发展起来许多不同的音频压缩算法。或许最流行的算法是拥有三个层(变体)的MPEG音频,其中,MP3(MPEG音频层3)是功能最强大也是最出名的。在Internet上随处可见大量MP3格式的音乐,它们并非都合法,因此引发了许多来自艺术家与版权拥有者的案件。MP3属于MPEG视频压缩标准里的音频部分。

音频压缩可以用两种方法完成。在波形编码技术中,信号通过傅立叶变换(Fourier transform)变换成频率分量。图7-11给出一个时间与它最初的15个傅立叶振幅的实例函数。然后每一个分量的振幅用最简短的方法编码。目标是在另一端用尽可能少的二进制位精确地重建其波形。

阅读 ‧ 电子书库
图 7-11 a)二进制信号和它的均方根傅立叶振幅;b)~e)成功逼近原始信号

另一种方法是感知编码,这种技术是在人类听觉系统中寻找某种细纹,用来对信号编码,这种信号听起来与人的正常收听相同,尽管在示波器上看起来却大相径庭。感知编码是基于心理声学的——人们如何感知声音的科学。MP3正是基于感知编码。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

感知编码的关键特性在于一些声音可以掩盖住其他声音。想象在一个温暖夏天举办的现场直播的长笛音乐会,突然间,附近的一群工人打开他们的风镐开始挖掘街道。这时没有人可以再听到笛子的声音,因为它已经被风镐的声音给掩盖了。从传送角度看,只编码风镐的频段就足够了,因为听众无论如何都听不到笛子的声音。这种技术就叫做频段屏蔽——在一个频段里响亮的声音掩盖住另一频段中较柔和声音的能力,这种较柔和声音只有在没有响亮声音时才可以听到。事实上,即使风镐停止工作,在一个短时间内笛子的声音也很难再被听到,因为耳朵在开始工作时已经调低了增益,并且需要在一段时间之后才会再次调高增益。这种效果称为暂时屏蔽。

为了使得这些影响能尽量被量化,设想实验1。某个人在一间安静的屋子里戴着与计算机声卡相连的耳机。计算机产生最低100Hz但功率逐渐增加的纯正弦波。这个人被命令在他/她听到一个音调的时候敲击一个键。计算机在记录当前功率级之后,以200Hz、300hz以及其他所有不超过人类听力极限的频率重复之前的实验。在把许多实验者的实验平均值计算出来后,一张关于“需要多大功率才能使人们听到一个音调”的对数-对数图就展现出来了,如图7-12a所示。图中曲线的给出直接结果是:人们并没有必要对那些功率在可听阈值之下的频率编码。例如,在图7-12a中,如果100Hz的功率是20dB,那么在输出上就可以忽略掉,而且不会感觉到声音质量的损失,因为在100Hz处20dB是低于可听水平的。

阅读 ‧ 电子书库
图 7-12 a)作为频率函数的可听阈值;b)屏蔽效应

现在考虑实验2。计算机再次运行实验1,但是这次却一有个大约150赫兹的等幅正弦波叠加在实验频率上。我们发现,在150Hz频率附近的可听阈值上升了,如图7-12b所示。

这一新实验的结果表明:通过跟踪那些被附近频段能量更强的信号所屏蔽的信号,可以省略越来越多的编码信号中的频率,以此来节约二进制位。在图7-12中,125Hz信号的输出是可以完全忽略掉的,并且没有人能够听出其中的不同。甚至当某个频段中的一个强大信号停止后,出于对暂时屏蔽这一知识的了解,也会让我们在耳朵恢复期的时间段内省略掉那些被屏蔽的频率。MP3编码的实质就是对声音做傅立叶变换从而得到每个频率的能量,之后只传递那些不被屏蔽掉的频率,并且用尽可能少的二进制位数来编码这些频率。

有了这些信息作为背景,现在来考察有关编码是如何完成的。通过抽取32kHz、44.1kHz或者48 kHz的波形,完成声音压缩。第一个和最后一个都是四舍五入的整数。44.1kHz是用于Audio CD的,因为这个值能很好地捕获人耳可听到的所有音频信息。可以在以下四个配置中任选一个,用一或两个通道完成抽样:

1)单声道(一个输入流)。

2)双声道(例如,一个英语的和一个日语的音轨)。

3)分立立体声(每个通道分开压缩)。

4)联合立体声(完全利用通道间的冗余)。

首先,选择输出的比特率。MP3可以将摇滚CD的立体声降低到96kbps,并且在质量上几乎没有任何失真,甚至连摇滚迷都听不出差别。而对于一场钢琴音乐会,至少需要128kbps。造成这样不同的原因是因为摇滚的信噪比要比一场钢琴音乐会要高得多(至少从工程角度上看)。也可以选择稍低一点的输出比率,接受质量上的少许失真。

然后将这些样本处理成1152(大概26ms)的一些组,每组首先通过32个数字滤波器,获得32个频率波段。同时,将输入放进一个心理声学的模型中,测定被屏蔽的频率。接下来,进一步转换32频率波段中的每一个,以提供一个更精确的频谱解决方案。

接着,将现有的二进制位分配到各个波段中,大部分二进制位分配给拥有多数频谱能量的未屏蔽波段,小部分二进制位分配给拥有较少频谱能量的未屏蔽波段,已屏蔽的波段不分配二进制位。最后,用霍夫曼编码来对这些二进制位进行编码,它可以将经常出现的数字赋予较短的代码,而对不常出现的数字赋予较长的代码。

实际的工作过程更复杂。为了减少噪音,消除混淆,以及利用通道间冗余,需要各种各样的技术,不过这些内容超出了本书的范围。