书城计算机网络多媒体技术
15865500000010

第10章 多媒体数据压缩编码技术(3)

假定将语音数据分成组,每组有k个数据,这样,一组就是一个k维的矢量。可把每个组形成的矢量看成一个元素,又叫做码字,那么语音分成的组就形成了各自的码字。这些码字排列起来,就构成了一个表,人们将此表叫做码本或码书。形象一点,码书类似于汉字的电报号码本,码本里面是复杂的汉字,在这里是一组原始的语音数据,其边上标有只用4位阿拉伯数字表示的号码,而在矢量量化方法的码本上是码字的下标。

将语音分成k个数为一组的若干组,则码本C就是具有k维矢量的码字yi的集合:

C={yi},i=1,2,…,N

式中,i就是码字的下标。

矢量量化编码及译码过程如图310所示,编码过程实际上就是,首先将输入的语音信号进行分组,形成一个k维矢量;而后,在码本中搜索最接近输入矢量的码字yi。所谓最接近,也就是引起的误差最小,常称为失真测度。搜索到码本中最接近的码字yi后,传送的不是yi本身,而是它的下标i。传送下标i所用的数据量比传送原始的k维数据要小得多,从而达到了数据压缩的目的。

图310矢量量化编码及译码过程在接收端放置同样的码本。当接收到对方传来的矢量下标i时,即可根据下标i在码本C中查出相应的码字yi,从而,用yi重建了原始数据。

如果码本的长度为N,则下标可用lbN二进制位来表示。而k个数据构成一个码字,所以,矢量量化编码的比特压缩量可达到(lbN)/k。

矢量量化的关键在于设计一个优良的码本,例如LBG算法。另外一个问题就是,当码本比较大时,如何提高搜索(或称匹配)的速度。

3.3.3线性预测编码(LPC)

在本书的前面已分别给出了预测方程和预测误差。在DPCM中,只用低阶进行预测,有时甚至取ai=1,即只用前面一个采样值来代替(预测)当前采样值。

在LPC中,对输入的音频信号分帧(例如,每10ms为一帧)提取参数,发送这些参数以达到数据压缩的目的。接收端利用所得到的参数进行合成,重建语音。

在要提取的参数中,最重要的是预测系数ai。求取线性预测系统的依据就是预测方差的e20为最小。也就是说,要提取在一帧数据中使e20为最小的那些ai。在实际应用中,通常要取10阶或12阶预测系数,这就需要求出各ai下的e20的最小值,通过解联立方程的方法求出ai来。

实际上,求10阶(或12阶)预测系数需要计算本帧语音信号的协方差或自相关。现在求取线性预测系数的软件和硬件均可以找到。

除了预测系数外,其他要提取的参数有音调、清音/浊音以及信号的幅度。LPC系统将预测系数及其他有关参数进行编码并进行传送。接收端利用收到的线性预测系数和其他参数使用语音合成器重建原始语音。

一个典型的例子是美国使用的LPC10算法。在此系统中,语音的采样率为8kHz,样本编码字长为12位,以180个采样值为一帧。

LPC10对每帧信号采样值进行处理。分别计算出10阶预测系数、音调、幅度及清音还是浊音,利用迭代法计算协方差矩阵,求得10阶预测系数。前4个系数各用5bit表示,第5到第8个系数各用4bit表示,第9个系数为3bit,第10个系数为2bit。这样,10个线性预测系数共用41bit来表示。用7bit传送音调和清/浊音,再用5bit表示幅度,另外还要加1位同步位。这样一来,原来一帧(180个采样值)数据可用54bit来传送,从而使系统的传送速率为(8000÷180)×54=2.4kbps。

3.3.4混合编码

混合编码是指同时使用两种或两种以上编码方法进行编码的过程。由于每种编码方法都有自己的优势和不足,因此,若使用两种甚至两种以上的编码方法进行编码,可以实现优势互补,克服各自的不足,从而达到高效数据压缩的目的。无论是在音频信号的数据压缩还是图像信号的数据压缩中,混合编码均被广泛采用,值得我们重视。

在这里,简单介绍CCITT在1988年公布的G.722音频编码标准。这个标准是针对50Hz~7kHz音频信号的,其主要目的就是利用混合编码在64kbps的传输速率上获得更高质量的音频信号。CCITT关于语音300Hz~3.4kHz采样的G.711标准,每个采样点为8bit,此标准的传输率为64kbps。在同样的数据率下,G.722传送的音频信号质量明显地优于G.711。这是因为G.722采用了子带自适应差分脉冲编码调制这种混合编码方案,而G.711只采用了PCM编码。

子带自适应差分脉冲编码调制(SBADPCM)的发送端框图如图311所示,由麦克风(或其他)部件产生的音频信号经放大滤波后变为具有一定频宽的信号。此信号经采样、保持加到A/D变换器上。经过A/D变换器得到采样率为16kHz、编码长度为14bit的均匀PCM信号。

14bit的均匀PCM信号加到带有两个子带的带通滤波器上,分别输出高子带(4000~8000Hz)的信号和低子带(0~4000Hz)的信号。带通滤波器是两个线性相位非递归数字滤波器,它们的输出--高子带信号和低子带信号再用同样的ADPCM方法进行编码:对低子带信号以8kHz速率非线性自适应量化其差分信号为6bit,从而使低子带信号的速率为48kbps;对高子带信号,同样以8kHz的速率自适应量化其差分信号为2bit,从而使高子带信号的速率为16kbps。

在多路复用部件中,将同样速率的两个子带的信号组合起来。每一次采样将高子带的2bit放在高2位而低子带的6bit放在低6位,从而组合成一个采样为8位的数据,如下所示:bHbHbLbLbLbLbLbL。

可见,最后经复用器得到8kHz×8bit速率的信号。该信号以串行传送,恰好是64kbps。G.722标准的子带自适应差分脉冲编码调制的接收部分框图如图312所示,接收部分的输入信号就是经过SBADPCM编码的传输速率为64kbps的已压缩音频信号。此信号首先进行分路,分出6bit低子带ADPCM信号和2bit的高子带ADPCM信号。两个子带的ADPCM信号分别进行译码,恢复原始的两个子带的信号。两子带信号加到线性相位非递归数字滤波器上,重建原始发送端的16kHz×14bit的PCM音频信号。在获得均匀的16kHz字长为14bit的均匀PCM的信号后,再经D/A变换、滤波、放大等电路即可获得原始的音频信号。

以上只是简单地介绍了SBADPCM的大致过程,并未涉及技术细节,目的仅仅在于说明混合编码的概况。

混合编码有许多种组合方式,上面提到的SBADPCM仅仅是其中的一种。其他如码本激励线性预测编码(CELP)、矢量与激励线性预测编码(VSELP)、规则脉冲激励编码(RPELTP)等也都是采取了多种编码措施并获得了很好的音频质量,因此,作为标准在世界各地使用。

再特别强调以下几个问题。

①用于数据压缩的方法很多,目前这方面的研究工作都在进行。这个领域的理论研究和工程上的实现都有大量的问题有待于研究。

②本节只是简单地介绍了部分经常用于音频信号数据压缩的方法,这些方法也是可以用于压缩其他信号的。

③本节所提到的压缩方法在应用中常用前面已提到的方法来实现:利用厂家生产的专用集成电路芯片,即用硬件来实现;用数字信号处理器(DSP)的硬件加上相应软件来实现;用微型机软件来实现。

3.4图像数据编码压缩方法

图像数据十分巨大,一幅分辨率为640×480、24bit的真彩图像的数据达0.92MB,即接近1兆字节。若是动态的视频信号,每秒需要几十个画面,则1s内的数据量就非常庞大。如此大的数据量,无论存储还是经信道传输,就当前条件来说,都是十分困难和不便的,因此,对图像信息进行数据压缩是势在必行的。目前,常用的图像(视频)压缩方法如图313所示。

用于音频和用于图像(视频)的数据压缩方法有许多相同之处,这是可以理解的,因为它们都是为了减少信息的冗余度。但由于音频和视频信息有各自的一些特点,因而有些方法用于音频压缩效果好,而有些方法用于视频压缩效果更好些。在本节中,凡在前面已介绍的压缩方法将不作说明,只对常用于图像(视频)信号压缩的某些方法进行简要介绍。

3.4.1行程编码

在图像中,尤其是一些不太复杂的图像和计算机生成的图像,往往存在着灰度或颜色相同的图块,有的甚至有较大的面积,例如,大片的蓝天,大片的白雪等。可以想像,对这样的图像进行扫描时,对应这些相同颜色的图像块就会有连续多行扫描行数具有相同的数值,而且在同一行上会有许多连续的像素点具有同样的数值。

于是,人们就想在这种情况下是否可以只保留连续相同像素值中的一个值并保留具有相同数值的像素点数目呢?答案是肯定的,而且这种方法可以用较少的数据量来表示图像信息,因此就叫做行程编码或游程编码,具有相同数值的连续像素的数目就称为行程(游程)长度。

例如,在一行扫描图像中,有一段的连续扫描数据为。

利用行程编码方法对这一段数据进行编码后可得到如下结果:

其中,7表示有连续7个像素具有相同值,3表示像素的值为3。后面各数码的含义依次类推。可以看到,原来这一小段图像行数据用37个代码表示,而现在只用10个代码便可表示。这说明行程长度编码可以对数据进行压缩。这种压缩方法的压缩比取决于信号的特点。当图像中具有相同灰度(或颜色)的图块越大、越多时,压缩的效果就越好;反之,当图像复杂,颜色多样时,其压缩效果就不好,甚至当连续相同像素点--行程长度平均值不及所选行程长度码位数时,其压缩比会小于1。因此,对复杂的图像不是单纯地采用行程编码,而是多采用混合编码或其他压缩方式。

从前面所提到的行程长度编码过程,可以很容易想到对此编码进行译码解压缩恢复原始数据的方法。利用软件或硬件均可方便地重建原始信号。

【例3.1】如下所示为8×8的矩阵数据。

AAAAAAAA

AAAAABBB

BBBBBBBB

CCCCDDDD

DDDEEEEE

EEEEFFFF

FFFFFFFG

GGGGHHHH

以行游程进行编码后得到:

(A,8)

(A,5)(B,3)

(B,8)

(C,4)(D,4)

(D,3)(E,5)

(E,4)(F,4)

(F,7)(G,1)

(G,4)(H,4)

可以看出,数据的均匀性程度越高,则游程编码的压缩率越大;反之,矩阵的元素值频繁变化,则游程的压缩率越小,有时甚至小于1,即非但没有压缩,数据量反而膨胀。游程编码由于简单,编码/解码的速度非常快,因此仍然得到广泛的应用。许多图形和视频文件,如BMP、TIF及AVI等,都使用了这种压缩方法。

3.4.2哈夫曼编码

1.哈夫曼(Huffman)编码原理

由于信源集合的符号出现的概率并不相等,例如,在文章中,英文字母出现的概率并不一样。有人做过统计,出现概率由大到小依次为E,T,A,O,N,R,…,Z。就汉字来说,出现的频率也是不一样的。

为了节省存储空间或降低传送速率,在对数据进行编码时,对那些出现频率高的数据分配较少的位数,而对那些不常出现的数据可分配较多的位数。这样做从总的效果来看还是节约了存储空间。

但这样一来,就使得用这种方式编码的数据码长是不一样的。这种码长不固定的编码方法称为变长度编码。由于这种编码方法是哈夫曼于1952年在香农(Shannon)和范诺(Fano)原理的基础上提出来的改进方法,故人们又常称为哈夫曼编码。现举例说明哈夫曼编码过程。

【例3.2】若信源符号及其出现的概率如表31所示,则哈夫曼编码过程如图314所示。首先从概率最小的两个字符开始,如图中的0.01和0.10,可以规定两个电平的概率分别对应0或1。并可以规定小概率为0,大概率为1;也可以规定小概率为1,大概率为0。一旦规定了,在整个编码过程中都必须遵守这种规定。在本例中,规定小概率为0,大概率为1。规定好后,首先算出两个最小概率的和,图314中为0.11。

此时,可将求出的两个最小概率之和看成一个概率,再与剩余的其他概率重复上面的过程,则第二次可求出概率之和为0.26。依次类推。

而后就可以由图314得出各符号的编码值,见表31。这些编码值可以直接从图314中读出来。

由表31可以算出,利用这种编码方式所得到的平均码长为2.72bit。若是用固定长度编码表示7个字符,则需要3bit。还可以算出这7个信源符号的熵,即H(x)=-7j=1P(xj)lbP(xj)=2.61。

可见,用哈夫曼编码所得到的平均码长接近信息源的熵。

哈夫曼编码具有以下特点。

①哈夫曼方法构造出来的码不唯一。这是因为在给两个分支赋值时,可以是左支(或上支)为0,也可以是右支(或下支)为0,这样就造成了编码的不唯一。另外,当两个消息的概率相等时,谁前谁后也是随机的,构造出来的码字也就不是唯一的,但是能保证各种哈夫曼编码的平均码长完全相同。

②哈夫曼编码虽具有最优的压缩率,但码字字长参差不齐,因此硬件实现起来不大方便,加之译码电路很复杂,而且在传输中误码的校验和恢复特别困难,以致限制了其在实际中的应用。

③哈夫曼编码对不同信源的编码效率是不同的。当信源概率相等时,其编码效率最低(定长码);当信源概率是2的负幂时,哈夫曼码的编码效率达到100%。因此,只有在概率分布很不均匀时,哈夫曼编码才会收到显着的效果,而在信源分布均匀的情况下,一般不使用哈夫曼编码。

④哈夫曼编码对每个符号都给定了一个编码,形成了一个哈夫曼编码表。编码表必须保存,解码时需要参照该表才能正确译码。为了节省时间,常将哈夫曼编码表存储在发送端和接收端。这样既可以减少编码时间,也便于用硬件实现。

2.译码过程