信息的编码--转载

1.2  信息的编码

计算机是作为数值计算工具而发明的,现代的计算机的内部是采用二进制(binary)代码进行运算和储存的。要使用计算机进行信息处理,就必须把要处理的信息用二进制代码来表示,把问题求解转变为二进制数的计算问题。当今的计算机已经能够处理文字、声音、图片、动画(animation)和影像等信息,这得归功于信息的数字化,或者说信息的编码。

1.2.1 记数系统

记数系统(number representation system),简称记数制或数制,是用一组统一的符号和规则来表示数的方法。根据基数的不同,有十进制、二进制和十六进制等。在日常生活中,我们大多采用“十进制”,每位数都用“0~9”十个符号中的一个来表示,并按照“逢十进一”的规则进位:当每位数的值达到10时,向高位进一,而该位变为0。其实,生活中还用到其他的进制,如时钟的分秒用的是60进制,英制的许多度量单位用的是12进制。

由于计算机内部工作采用的是二进制,也就是说,数的每一位(bit)只用“0”和“1”两个符号之一来表示,在计算时按照“逢二进一”的规则进位:当某位数的值达到2时,向高位进一,而该位变为0。例如,1加1的结果为10,读作“幺零”。

计算机之所以采用二进制,是因为它便于实现。晶体管的导通和截止、电压的高和低、磁表面的磁极性相反的两种状态、光盘薄膜上有凹坑和无凹坑等,这些两种截然不同的物理状态都可以用来分别表示二进制数的1和0。顺便提一下,在计算机采用的二进制表示法中,数的正号和负号也是分别用符号0和1来表示的。

下面简要介绍十进制数和二进制数之间的转换方法。

1.十进制数转换成二进制数

对整数部分采用“除2取余”法,即把一个十进制的整数部分连续地被2除,将依次得到的余数按相反顺序排列,得到的就是相应二进制数的整数部分。

对小数部分采用“乘2取整”法,即把一个十进制数的小数部分连续地乘以2,将依次得到的整数按顺序排列,得到的就是相应二进制数的小数部分。

例如,把十进制数37.25转换为二进制数。其整数部分连续地被2除得到的余数依次是1、0、1、0、0、1,而小数部分连续乘以2得到的整数依次是0、1,因此结果是100101.01。

2.二进制数转换成十进制数

把二进制数小数点前的第n位的值值乘以2n-1,把小数点后的第m位的值乘以2-m,然后把这些结果值相加即可。例如,100101.01的十进制数是

1×25+0×24+0×23+1×22+0×21+1×20+0×2-1+1×2-2=37.25。

二进制数不便于书写和记忆,人们经常采用十六进制数或八进制数来表示它们,因为它们之间的转换非常方便。例如,用十六进制数表示时,只要从小数点两侧每4位二进制数用一个十六进制数字(注意,10~15分别用A~F表示)代替即可。例如,上述的37.25,用十六进制表示时为25.4。

1.2.2 文字的编码

我们经常碰到的文字是英文和汉字,它们的二进制编码(coding)有相应的国家标准。英文字母和常用的数学符号与标点符号等字符通常采用ASCII(American Standard Code for Information Interchange,美国信息交换标准码)编码(见图1.2.1)。一个字符用七位二进制数表示,存放时占八位即一个字节(byte)。ASCII码共有128个码位,前32个是控制字符,用于通信、外部设备和文本等方面的控制。例如,回车、换行符就在这个区域。第33个是空格符,而第128个是delete符,这34个字符是不可打印的。在图1.2.1中,b7b6b5表示编码的高三位,b4b3b2b1表示编码的低四位。例如,字母H的七位ASCII码为1001000。英文字母按词典顺序进行编码,这给英文词汇的排序和检索带来很大方便;十进制数码高三位编码(011)相同,低四位按二进制编码顺序表示,这给十进制数字转换为二进制带来很大方便 (对于其他拉丁语系的文字,ASCII码有相应的版本)。IBM公司,除在PC机中改用ASCII码外,在其他计算机中均采用他们的EBCDIC(扩充的二十进制交换码)编码。它采用八位二进制数表示,故有256个码位。

b7b6b5

b4b3b2b1


图1.2.1  ASCII码表

汉字编码的国家标准是信息交换用汉字编码字符集基本集(GB2312-80),一个汉字的交换码用两个ASCII字符表示,采用导入字符和导出字符指示文本中的汉字区域。该标准只使用ASCII编码中第34至第127个可打印字符,一共94个。所以,最多可编94区×94位即8836个符号。该标准包括6763个汉字和682个特殊符号。为了避免使用导入字符和导出字符并能与ASCII字符相区分,存放时每个字节的最高位处置1(即加128),称为内码 (我国港台地区采用的是Big5编码体系)。

最近,我国开始使用新的GB1300标准。该标准采纳国际标准通用多八位编码字符集(UCS)标准,它用四个8位,分别表征组、面、行、列,可表示264个符号。目前启用的UCS-2,规定统一用两个8位表示一个文字符号。它不是依据语言而是按文字编码的,所以是跨国度、跨地区的。同一个拉丁字母、同一个汉字,同一个符号,不论是哪个国家,都采用相同的16位编码。该标准包含65536个符号,其中有20902个汉字。

顺便指出,汉字输入法是另一种形式的编码,它们是用键盘字符来表示汉字的方法。

1.2.3 声音的编码

声音是由声波传递的,而声波是由各种频率的正弦波合成的,波形如图1.2.2所示。这是一种模拟信号,反映声音强弱的是波的振幅,反映声音高低的是波的频率。最常用的编码方法是脉冲编码调制(PCM),它需要经过采样、量化与编码两个步骤。当然,这些工作都是由硬件(如声卡)完成的。

图1.2.2  声音编码(注明:图1.2.2已经替换,到印刷厂重新画图)

第一步是采样,就是每隔一定的时间T,采集一个波幅“样品”的值。譬如,对一个振幅在+4v~-4v间的波形,每隔时间T取它一个振幅值,以后就用这些值来代表原来的波形。显然,T越小即采样频率越高越好,但结果得到的数据就越多。科学家已经证明,采样频率至少应该是原信号的最高频率的两倍,才不会产生大的失真。目前,普通的音乐采用11.025kHz的采样频率,而高品质的音乐采用44.1kHz的采样频率。

第二步是量化与编码。采样得到的值是随机变化的,如振幅在+4v~-4v间的波形,采样值可以是+4v~-4v间的任意值。量化与编码就是用一定位数的二进制数来表示采样的值。现在的计算机通常使用16位声卡(采样值用16位二进制数表示),即将可能得到的采样值划分成65536个等级,相当于十进制-32768~32767。按上例,+4v~-4v之间的值分为65536个等级,每一等级的值分别用相当于十进制-32768~32767范围内的一个16位二进制数表示。所有的采样值都按就近等级取值,好比十进制数的四舍五入。

这样,对于一首歌曲的声波,每隔固定的时间T(采样频率的倒数)采出一个样品值,然后把这些样品值用一定的二进制值表示,这些二进制数按采样时间的先后顺序存放在一起就是该歌曲的数字化表示。当该数字化的歌曲播放时,声卡会将它们还原为原来的声波。

另一种音频编码方法称为MIDI(乐器数字化接口)。一首MIDI乐曲记录的不是音乐本身,而是用数字描述的乐谱,包括有音符、节拍、定时以及所用乐器等。MIDI标准规定了128种乐器,一首乐曲中至多可用16种乐器。播放时,由声卡根据“乐谱”产生基波、谐波合成为音乐。利用MIDI,用户可以通过键盘自己编曲子。类似的一种方法称为MOD,它的声音是由预先录制好的乐器标准声音样本合成的。这样,用户可以自己定义乐器,也不受128种或16种乐器的限制。缺点是声音样本制作麻烦,播放时需要花费比较多的CPU时间。

1.2.4 图像的编码

一幅彩色图像(image)可以看成是由许许多多个彩色的点(像素)组成的,每个点有深浅不同的颜色。这种点越小,图像越清晰。以分辨率为800×600的计算机显示屏为例,一屏总共分成48万个小方格。每个小方格称为一个像素,每个像素有一种颜色。我们知道,任何一种颜色均可以用红、蓝、绿三种原色调配出来,假如每种原色从浅到深分为0~255共256个等级,那么一个像素可以用三个字节二进制数据来表示。这样,一幅图像需要用144万个字节的数据。采用这种方法表示的图像文件是位图(bitmap)图像文件,其扩展名为.bmp。

图1.2.3  图像编码

电视和电影是由连续的图像帧组成,电视每秒25帧,电影每秒24帧。以800×600的分辨率为例,一秒钟的电视需要处理144×25万字节的数据,其容量大约是36M字节。所以,能够播放视频的计算机需要有处理速度较高的CPU和容量较大的存储器。

1.2.5 信息的压缩

显然,一个多媒体文件,例如一幅画,一段音乐或一段影视节目数字化后所生成的信息量比较大。所以,声音、图像和视频的数字化信息一般都要采用压缩(compress)技术。比如,MP3是音乐信息压缩标准,JPG是静态图像信息的压缩标准,MPEG和RM是视频信息的压缩标准等。这些标准都有很高的压缩比。

一般地说,信息都是可以压缩的。之所以可以压缩,是因为有冗余信息存在的缘故。在用高级语言编写的规范格式的程序中,也会出现比较多的冗余数据。例如,比较多的空格,如果对于一串空格用一个字节表示空格的代码外加一个字节表示空格数,则可以压缩一定的数据量。又如,高级语言使用的关键字出现的频率比较高,如BIGEN、END、THEN、PROCEDURE等,如果用一个控制字符加一个编码表示它们也能减少一定的存储量。我们可以看一个例子,设有8个字节的数据:

    00000000  00000111  10000000  00000000

    00000000  00000000  00000000  111111111

这是一串0和1组成的数据,0和1的重复的次数很多。假定用一个字节表示一串0或1,字节的第一位表示是0的串还是1的串,后七位表示0或1的个数,因为有七位,可以表示从0到127之间的任一整数,若0或1的重复次数超过127则再用一个字节。这样,上述数据可用下列字节表示:

    00001101(13个0) 10000100(4个1)

    00100111(39个0) 10001000(8个1)

这里只用了4个字节就完整地表示出原来8个字节的数据内容,压缩了50%。

另一种方法是利用码元的出现频率,对于出现频率高的用较短的编码,对于出现频率低的用较长的编码。例如,在英语的文章中,英文字母出现的频率大不相同:频率最高的三个字母是E、T和A,分别占13%、9%和8%;频率最低的是Z、Q和X,分别占0.25%、0.25%和0.5%。如果用000、0010和0011表示E、T和A,用1111111、11111110和111110表示Z、Q和X,其他字母类似,则能够压缩不少存储量。这种不定长编码是霍夫曼(Huffman)发明的,故称为霍夫曼编码。

上述压缩方法是无损压缩,也就是说,能够完全还原为原来的数据。另一种方法是有损压缩,也就是说,还原的数据没有原来的精确,质量有所损失,但在可接受的限度之内。这种方法主要用于音频和视频数据,它们除了使用类似于上述方法外,还利用了人们感观能力的限制。例如,普通人对于过低的和过高的频率的声音不太能够分辨,如果将这部分略去,则能够大大压缩数据量,又能够使复原后的声音质量保持在可接受的限度之内。

同样,对于图形和图像,冗余表现在三个方面。一是空间冗余。如在一幅照片上,许多相邻的像素具有同样的颜色和亮度,例如蓝色的天空和白色的衣服等。二是时序冗余。像一部电影的武打场面,虽然动作眼花缭乱,但实际上(如果不切换场景)后面一帧图像与前面一帧图像相比,画面上大部分像素都没有变,特别是背景。电影每秒钟要放24帧,即使正在打斗中的人,在1/24秒中也不是身体的每个部位都在动的。三是光谱(spectral)冗余。明亮的像素在所有的颜色中都明亮,不局限于个别颜色。而且,人眼对亮度比对颜色敏感。利用这些冗余特征,多媒体信息可以大幅度地压缩。例如,MPEG-1的压缩比,理论值是200:1,一般实际实现的是50:1。VCD就是一种采用MPEG-1标准来压缩图像信息的。

 

 

 

 

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章