信息技术导论
上QQ阅读APP看书,第一时间看更新

2.3 非数值数据编码

没有大小含义的数据,称之为非数值数据。目前计算机中主要的非数值数据包括:西文字符、汉字、音频、图像、视频等。

显然,在二进制中,如果只用1个二进制位,可以表示0和1两种情况。

如果用2个二进制位,则可以表示00、01、10、11四种情况。

采用归纳法,可以证得:

若有N个二进制位,则可以表示2N种情况。也就是说,如果用N个二进制位表示数据,就可以表示2N个数据。

现在的问题是如果已经目前有M个数据需要表示,那么需要多少个二进制位呢?

显然这是上面运算的逆运算,也就是:

N=log2M

假如有8个符号需要表示,那么需要用3个二进制位进行表示。

但是事实上,计算机中存取数据的基本单位是字节,1个字节是8个二进制位,因此即使只需3个二进制位,也必须用1个字节。所有非数值数据编码的基本原理本质上都是一样的,但是在表示不同类型的数据时,根据数据的特点,编码方法又有些不同。

2.3.1 西文字符编码

目前使用最广泛的西文字符集及其编码是ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),它同时也被国际标准化组织(International Organization for Standardization,ISO)批准为国际标准。ASCII码有两种版本,即标准的ASCII码和扩展的ASCII码,即7位码和8位码两种版本。除了ASCII码外,Unicode码在Internet和Windows中也有广泛的应用。

1.标准ASCII码

标准ASCII码共收集了128个字符,包括94个可见符号和34个控制符号。

根据前面非数值数据编码方法,表示128个字符,需要用到log2128=7个二进制位,因此用一个字节(8位)表示一个字符,但是最高位并未使用,被置为0。

94个可见符号包括10个阿拉伯数字、26个大写英文字母、26个小写英文字母、32个标点及运算符号。128个字符按照一定的顺序排列在一起,构成了ASCII表。表中每个字符都对应一个数值,称为该字符的ASCII码值。

ASCII码中每一个字符所对应的二进制数,称为该字符的ASCII码值,其范围是0~127。例如,数字字符0的ASCII码值是0110000B,即十进制数48;大写字母A的ASCII码值是1000001B,即十进制数65等。

ASCII码值的大小规律是:(a~z)>(A~Z)>(0~9)>空格>控制符。标准ASCII码字符集如表2-2所示。

表2-2 标准ASCII码字符集

2.扩展ASCII码

扩展ASCII码是将标准ASCII码最高位置为1,用完整的8位二进制数的编码形式表示一个字符,总共可以表示256个字符。其中,扩展部分的ASCII码值范围为128~255,共128个字符,通常被定义为一些图形符号。

3.Unicode

Unicode是统一字符集,也称大字符集。采用16位编码方案,可表示65000多个不同的字符。如此之大,足以涵盖世界所有通用语言的所有字母和数千种符号。

2.3.2 汉字编码

英文基本符号比较少,编码比较容易,因此,在计算机系统中,输入、内部处理、存储和输出都可以使用ASCII码完成。汉字字符繁多,编码比英文困难,因此在不同的场合要使用不同的编码。根据汉字输入、处理、输出的过程,通常有5种类型的编码,即国标码、机内码、输入码、输出码、地址码。

1.国标码

根据前面所述非数值数据编码的原则,首先要统计出需要表示的数据个数,然后计算需要多少个二进制位,再逐一编码。西文字符的编码是这样的,汉字的编码也是这样的。所不同的是西文字符数量少,128个字符足以。可是汉字量实在太大了,仅常用汉字就达到了6000多字。

我国在1980对常用的6763个汉字进行了编码,称作《信息交换用汉字编码字符集基本集》(GB 2312—1980),简称“国标码”。国标码中,所有收集的汉字被分成94个区,每个区94个位,因此,通过区号和位号两个维度方可定位到一个汉字。因此,在国标码中,汉字由区号和位号两部分组成。

要想表示94个区,需要用到[log294]=7个二进制位,因此需要用一个字节(8位)表示。同理,也需要一个字节(8位)表示位号。

因此,国标码用两个字节表示一个汉字,每个字节只使用低7位,高位为0,分别表示一个汉字所在的区号和位号。

2.机内码

国标码用两个字节表示一个汉字,每个字节均用低7位,高位为0。而ASCII码是用一个字节表示,也是用低7位,高位为0。现在问题来了,当遇到两个字节时,到底是表示一个汉字还是两个西文字符呢?

为了将西文字符和汉字分开,我们在国标码的基础上进行了调整,得到了机内码。

机内码是在计算机内部处理汉字时使用的编码。方法是将国标码两字节的最高位由0改为1,其余7位不变。

如“保”字的国标码为3123H,前字节为00110001B,后字节为00100011B,高位改成1后得到10110001B和10100011B,转换成十六进制就得到“保”的内码为B1A3H。

将每个字节的最高位由0变为1,等于在国标码两个字节的基础上分别加了10000000B=80H。因此国标码转变成机内码时,其实是做了一个二进制的加法运算。书写上,习惯这样表达:国标码+8080H=机内码。

例如,“保”字的国标码为3123H,其机内码=3123H+8080H=B1A3H。

3.输入码

无论是国标码还是机内码,对于汉字的输入和输出而言都不方便。因为汉字符号太多,用人脑去记忆7000个字符的国标码或者机内码都是不现实的一件事,可是计算机为了将每个汉字表示出来,又必须采用这么多编码。为了解决输入和输出问题,又产生了输入码和输出码。

输入码又称汉字外码,指的是从键盘将汉字输入到计算机时使用的编码。输入码的要求有两个:方便使用,而且输入速度要快。为了达到这两个目的,出现了若干种输入码,大体可以分为3类:数字编码、拼音编码和字形编码。此外,语音和图像识别技术的发展也为汉字输入码提供了新的方向。

(1)数字编码

常用的数字编码是国标区位码。区位码的特点是编码方法简单,码与字一一对应,无重码。但因记忆困难,虽然Windows操作系统中自带有中文区位码输入法,但很少有人使用。

(2)拼音编码

拼音编码是按照汉字的拼音来输入汉字的。这种方法简单易学,但是由于汉字同音字太多,输入后一般要进行选择,输入速度较慢。智能ABC输入法就是拼音编码,其他常用的拼音编码还有清华紫光、微软拼音、搜狗拼音等。对拼音编码的改进主要围绕在降低重码率上,目前拼音编码的效率不断提高,成了汉字输入码的主要选择。

(3)字形编码

字形编码是以汉字的形状确定的编码。汉字都有一定的偏旁和部首,字形编码将这些偏旁部首用字母或数字进行编码。字形编码的重码率低,输入速度快,但是要熟记偏旁部首的编码,还要合理地将汉字拆分为一定的偏旁部首,所以字形码比较难学。典型的字形编码是五笔字型。早期,拼音编码重码率高的时候,拼音编码的效率远远低于字形编码,而今随着拼音编码效率的提高,需要大量记忆和拆分技巧的字形编码逐渐失去了用户。

(4)语音和图像识别技术

随着语音和图像识别技术的发展,通过语音和图像识别技术输入汉字已经实现。这种方式更直接、自然,但是准确度有待提高是这种输入方式的主要问题。目前已经有多种语音识别系统和多种手写体、印刷体的汉字识别系统面世,相信随着技术的发展还有更完美的产品推出。

4.输出码(字形码)

国标码和机内码解决的是汉字在计算机内部的表示和存储问题,输入码解决的是如何通过输入设备输入汉字的问题。无论输入码,还是国标码、机内码都不适合作为汉字的输出。汉字输出是给人观看的,我们无法想象如果输出的都是拼音,或者输出的都是二进制表示的机内码是怎样的景象,人们无法阅读这样的输出结果。因此,还需要设置输出码,以符合人自然阅读的方式作为汉字的输出。由于汉字是方块字,因此为每个汉字设置了字形码,记录每个汉字的字形,用作输出之用。

汉字的字形码是汉字字库中存储的汉字字形的数字化信息,用于汉字的显示和打印。汉字字库是汉字字形库的简称,是汉字字形数字化后以二进制文件形式存储在存储器而形成的汉字字形库。汉字字形库可以用点阵或矢量来表示,目前大多采用点阵方式。例如,汉字“大”的字形码如图2-10所示。

图2-10 汉字“大”的24×24字形点阵

字形点阵主要有16×16点阵、24×24点阵、32×32点阵、48×48点阵、128×128点阵及256×256点阵等。点阵数越大,字形质量越高。但因点阵中每个点的信息要用1位二进制位来表示,所以,随着点阵数的增大,字形码占用的字节数也相应增大。例如,16×16点阵的字形码,每个汉字占用的存储空间为32B(16×16/8=32B);而24×24点阵的字形码则需要72B(24×24/8=72B)存储空间。

5.地址码

汉字在计算机内部是以机内码的形式存放的,但是输出时却需要输出字形码,那么如何通过机内码找到字形码呢?这就需要地址码。

地址码是指汉字库中存储汉字字形信息的逻辑地址码。它与机内码有着简单的对应关系,以简化内码到地址码的转换。

综上所述,汉字的输入、处理和输出是个非常复杂的过程,涉及多种编码,整个过程如图2-11所示。首先,借助于输入码输入汉字;在机器内部,将输入码转换成相应的机内码进行存储;输出时,根据机内码计算出地址码,然后根据地址码,取出字形码,再输出到输出设备上(显示器或者打印机等)。

图2-11 汉字编码过程

2.3.3 图形与图像的编码

图形图像的编码有两种方式:位图和矢量图。

1.位图编码原理

位图编码是指将整副图像分解为若干点,称为像素(Pixel),记录每个像素点的颜色值,就等于保存了整副图像,如图2-12所示。可以想象一下十字绣或者夜晚彩色的霓虹灯做出的图案,这就是位图的编码原理。由于位图是由若干像素点构成的二维阵列,因此,位图也称点阵图。这样位图的编码就转变为每个像素点颜色的表示。

图2-12 位图的表示

根据非数值数据编码原理,首先需要统计共有多少种颜色需要表示,假设共有N种颜色,则需要log2N个二进制位。例如要表示256种颜色,那么每个像素点需要log2256=8个二进制位,即一个字节。目前,常用的颜色编码方式有1位、8位16位、24位、32位等。表示每种颜色需要的二进制的位数,称为颜色深度。显然颜色深度越大,颜色越丰富,图像越逼真,但同时也意味着需要更多的存储空间。位图文件还有一些术语:图像大小、分辨率等。

图像大小是指一幅图像包含的像素点的规模,用两个维度衡量:行和列。例如,一幅图像的分辨率为1024×768像素,那么意味着有768行,每行有1024个像素。这幅图像共有1024×768个像素点。如果颜色深度为32位(4B),那么存储这样一幅图像就需要1024×768×4B=3MB。显然图像大小和颜色深度决定着图像文件的大小。

图像大小有时也会用物理单位进行表示,比如英寸、厘米等。那么此时图像文件的大小则不仅和图像大小有关,还和另一个术语“图像分辨率”有关。

图像分辨率是指每个单位距离上有多少个像素点,常用PPI(Pixel/Inch)。显然图像分辨率越高,图像越逼真,但是也同时意味着需要更多的存储空间。

原始状态下的位图对存储空间的需求是很惊人的。为了解决这个问题,又诞生了很多图像的压缩算法。比如,通常看到的图像文件以jpg文件居多,jpg其实是一系列压缩算法,它在保持逼真度和压缩比方面具有较高的性价比,是比较常用的一种压缩算法。图像压缩算法有很多种,因此图像文件的格式也非常丰富,具体请参见第6章。

2.矢量图编码原理

矢量图编码是指以记录图形的外部轮廓的方式对图形进行编码,如图2-13所示。矢量图文件中存储的是一组描述各个图元的大小、位置、形状、颜色和维数等属性的指令集合,通过相应的绘图软件读取这些指令,即可将其转换为输出设备上显示的图形。因此,矢量图文件的最大优点是对图形中的各个图元进行缩放、移动、旋转而不失真,而且它占用的存储空间小。但是,矢量图输出时最终还是要转换成位图输出,这个转换是在输出时实时计算的,因此需要一定的时间开销。

图2-13 矢量图的表示

位图、矢量图各有自己的优缺点,适用于不同的场合,具体如表2-3所示。

表2-3 位图和矢量图的比较

2.3.4 数字音频编码

前面无论数值、还是西文字符、汉字、图像都是看得见的,很容易理解这些数据的编码原理。那么声音又是如何存到计算机中,如何通过扬声器(俗称音箱)输出的呢?

声音本质上是一种波,是模拟数据、连续数据。而计算机中存储的不是0就是1,不存在介于0和1之间的状态,是离散的数据。所以,将声音数据保存到计算机中,需要经过一个模拟数据至离散数据(也称数字数据)的转换。

声音来自机械振动,并通过周围的弹性介质以波的形式向周围传播。最简单的声音表现为正弦波。表述一个正弦波需要3个参数:

① 频率——振动的快慢,它决定声音的高低。人耳能听到的范围为20Hz~20KHz。

② 振幅——振动的大小,决定声音的强弱。振幅越大,声音越强,传播越远。

③ 相位——振动开始的时间。一个正弦波相位不能对听觉产生影响。

复杂的声波由许多具有不同振幅和频率、相位的正弦波组成。声波具有周期性和一定的幅度,波形中两个相邻的波峰(或波谷)之间的距离称为振动周期,波形相对基线的最大位移称为振幅。周期性表现为频率,控制音调的高低。频率越高,声音就越尖,反之就越沉。幅度控制的就是声音的音量,幅度越大,声音越响,反之就越弱。声波在时间上和幅度上都是连续变化的模拟信号,可以用模拟波形来表示,如图2-14所示。

图2-14 声波的表示

对声音波形信息数字化的方法就是对声音信号采样、量化和编码,其过程如图2-15所示。

图2-15 模拟音频的数字化过程

声音波形信息采样是每隔一定时间间隔对模拟波形取一个幅度值,把时间上的连续信号变成时间上的离散信号。该时间间隔为采样周期,其倒数为采样频率。采样频率即每秒的采样次数。采样频率越高,数字化的音频质量越高,但数据量也越大。根据Harry Nyquist采样定律,采样频率高于输入的声音信号中最高频率的两倍就可以从采样中恢复原始波形。这就是在实际采样中采取40.1KHz作为高质量声音的采样标准的原因。

声音波形信息量化是将每个采样点得到的幅度值以数字存储。量化位数(采样精度)表示存放采样点振幅的二进制位数,它决定了模拟信号数字化以后的动态范围。例如,采用3位二进制进行量化编码,如表2-4所示。一般来讲,量化位数越多,采样精度越高,音质越细腻,但信息的存储量也越大。量化位数主要有8位和16位两种。8位的声音从最低到最高只有28(即256个)级别,16位声音有216(即65536个)级别。专业级别使用24位甚至32位。

表2-4 声音采样点的量化和编码

声音波形信息编码是将采样和量化后的数字数据以一定的格式记录下来,主要解决数据表示的有效性问题,如图2-16所示。但是,原始编码的音频文件也会非常大,所以,通常都需要经过压缩算法进行处理。常见的压缩算法是MP3,具体音频的压缩算法详见第6章。

图2-16 数字化编码后的音频

2.3.5 数字视频编码

视频文件是由一系列的静态图像按一定的顺序排列组成的,每一幅图像画面称为帧(Frame)。电影、电视通过快速播放每帧画面,再加上人眼的视觉滞留效应便产生了连续运动的效果。当帧速率达到12帧/秒以上时,就可以产生连续的视频显示效果。如果再把音频信号也加进来,便可以实现视频、音频信号的同时播放。数字视频也存在数据量大的问题,为存储和传递数字视频信号带来了一些困难。所以,视频信息编码本质上是图像编码和音频编码,但是由于帧数非常多,因此视频信息编码后的数据量更是惊人,不经压缩几乎无法存储。常用的视频压缩算法是MPEG,有关视频压缩算法详见第6章。