购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 数据的表示

1.2.1 原码、反码、补码、移码

一个正数的原码、补码、反码是相同的,负数则不同。先提一个问题,为什么在计算机中要使用这些编码方式呢?

1.原码

将最高位用做符号位(0表示正数,1表示负数),其余各位代表数值本身的绝对值的表示形式。这种方式是最容易理解的。

例如,+11 的原码是00001011,-11 的原码是10001011。

但是直接使用原码在计算时会有麻烦,比如(1) 10 +(-1) 10 =0,如果直接使用原码则:

这样计算的结果是-2,也就是说,使用原码直接参与计算可能会出现错误的结果。所以原码的符号位不能直接参与运算,必须和其他位分开,这样会增加硬件的开销和复杂度。

2.反码

正数的反码与原码相同。负数的反码符号位为1,其余各位为该数绝对值的原码按位取反。这个取反的过程使得这种编码称为“反码”。

例如,-11的反码:11110100

同样对上面的加法,使用反码的结果是:

这样的结果是负0,而在人们普遍的观念中,0是不分正负的。反码的符号位可以直接参与计算,而且减法也可以转换为加法计算。

3.补码

正数的补码与原码相同。负数的补码是该数的反码加1,这个加1就是“补”。

例如,-11的补码:11110100+1 = 11110101

再次做加法是这样的:

直接使用补码进行计算的结果是正确的。注意到我们这里只是举例,并非证明。

对一个补码表示的数,要计算其原码,只要对它再次求补,可得该数的原码。

由于补码能使符号位与有效值部分一起参加运算,从而简化运算规则,同时它也使减法运算转换为加法运算,进一步简化计算机中运算器的电路,在大部分计算机系统中,数据都使用补码表示。

4.移码

移码常用于浮点数中的阶码的表示。一个n个数值位(不包含符号位)数的移码是将其真值加上2 n

例如,7 的移码是 0111 + 2 3 = 1111

移码的特点在于把可以表示的最小值转换成了1。这个特点将会用在浮点数的指数表示中。

1.2.2 定点数和浮点数

定点数和浮动数的区别在于如何对待小数点,在运算方式上也不相同,衡量一个计算机系统的性能,定点运算和浮点运算是两个重要的指标。定点数的小数点是隐含的,固定在某个位置。如果该位置是在数的最低位之后,就是定点整数。定点数表示比较简单,运算规则也比较容易实现,但是当数值范围变化大时,使用定点数表示和运算就比较困难。

为了表示更大范围的数值,可以使用浮点数表示法。

在表示一个数值很大的数时,我们常常使用一种称为科学计数法的方式:

其中M称为尾数,e是指数,R为基数。

浮点数就是使用这种方法来表示大范围的数,其中指数一般是2,8,16。而且对于特定机器而言,指数是固定不变的,所以在浮点数中指数并不出现。从上面这个表达式可以看出:浮点数表示的精度取决于尾数的长度,范围取决于基数的大小和指数的长度。

1.格式化数

使用格式化数是提高浮点数有效位的方法。格式化的含义是把尾数前面加0,同时修改指数,这样在尾数位数固定的情况下,能提供最多的有效位来表示尾数。当指数小于能够表示的最小值时,这个数称为机器零,此时会把尾数和指数同时清零。看到这里,应该能回答指数为什么常使用移码来表示问题了。

2.定点数的算术运算和溢出处理

如前所述,计算机中通常使用补码进行计算。两个正数相加,如果结果的符号位变成了1,则表示有溢出;同样两个负数相加,如果结果的符号位变成了0,也意味着溢出;如果是正数和负数相加,则不会出现溢出的情况。

判断处理的方法可以再增加一个符号位,称其为第一符号位,原来那个符号位变成了第二符号位。计算时两个符号位都参与计算。如果计算结果的两个符号位相同,表示没有溢出,如果不同,就表示出现了溢出。而第一符号位才是真正的符号。

也可以通过进位信号来判断,当结果的最高位和符号位的进位信号一致时(都有进位信号或都没有进位信号),则没有溢出;否则,表示有溢出。

3.定点数的逻辑运算

逻辑运算意味着各位的运算不产生进位,操作数的对应位独立计算。逻辑加实际就是按位“或”的计算,逻辑乘实际上是按位“与”的操作,逻辑非是按位“取反”。在校验码中,我们将接触到逻辑运算。

1.2.3 文字符号的编码

1.ASCII码

为了表示英文字母和其他一些符号、控制符,计算机中普遍采用的是ASCII码,如表1-1所示。它使用7位代表一个字符,包括字母的大小写、数字、标点、控制符等。计算机通常使用8位一个字节来存储,其高位为0。

汉字和拼音文字不同,拼音文字只需要定义少量的字母和符号的编码,即可完成所有文字的保存、显示任务。而汉字存在大量的单字,为了让计算机能够处理汉字,必须对汉字进行单独的编码。

表1-1 ASCII码表

(续表)

2.GB2312—1980

全称是GB2312—1980《信息交换用汉字编码字符集基本集》,于1980年发布。这种国家编码标准,已经得到了广泛的应用。它用两个字节表示一个汉字或符号,取值范围是A1A1~FEFE,共定义了682个符号,6 763个汉字。其中一级汉字3 755个,以拼音排序,二级汉字3008个,以偏旁排序。这个编码的缺点是收录的汉字太少,有许多常用字没有收录,在处理人名、地名时非常不方便。

3.BIG5编码

俗称“大五码”,是普遍使用的繁体汉字的编码标准,包括440个符号,一级汉字5 401个,二级汉字7 652个。

4.GBK编码(Chinese Internal Code Specification)

GBK编码是我国制订的中文编码扩展国家标准。GBK工作小组于1995年12月完成GBK规范。该编码标准兼容GB2312,共收录汉字21 003个、符号883个,并提供1894个造字码位,其特点是简、繁体字融于一库。

5.GB18030—2000

这是在原来的GB2312—1980编码标准和GBK编码标准的基础上进行扩充,增加了4字节部分的编码。向上则兼容ISO10646,共有150多万个码位。它在原来的2万多汉字的基础上增加了7000多个汉字的码位和字型,从而汉字达到27000多个。它能有效地解决一些生、偏、难字的问题,适用于需要人名、地名用字的系统。支持GB13000.1—1993的全部中日韩(CJK)统一汉字字符和全部中日韩统一汉字Extension A和Extension B的字符。

6.Unicode编码(Universal Multiple Octet Coded Character Set)

这是国际标准组织对各国文字、符号进行的统一性编码。目前Unicode采用16位编码体系,其字符集内容与ISO10646的BMP(Basic Multilingual Plane)相同。版本V2.0中包含了符号6811个,汉字20902个,韩文拼音11172个,造字区6400个,保留20 249个,共计65534个。

7.ISO10646 / Unicode字符集

全球可以共享的编码字符集。规定用4个字节表示世界各国语言文字的代码,其中汉字字符集可以扩大到6万字。但考虑到即使包括某些古籍汉字在内,现代一般使用的汉字,有2万字也已足够,这样ISO10646的字符编码就可以减缩成两个字节,和Unicode相同,从而达到兼容性。

1.2.4 声音编码

声音本身是模拟信息,在计算机中表示模拟量必须将模拟量进行数字化,数字化遵循采样定理。

采样定理:如果一个信号f(t)以固定的时间间隔,并以高于信号最高频率两倍的速率进行采样,那么这些采集到的样本就能还原信号中的信息。根据这些样本,通过使用低通滤波器,可以重建函数f(t)。

在实践中,通常使用3个参数来表示声音:采样位数、采样频率和声道数。声道有单声道和立体声之分,甚至更多。人能听见的声音的最高频率是20kHz,根据采样定理,44 100Hz(44kHz)的采样频率能够很好地还原各种声音,而普通人的声带能够达到4kHz,所以8kHz的采样频率能够满足语言采样的需要。其他采样频率有11 025Hz(11kHz)、22 050Hz(22kHz)等,能够适合不同的场景。采样位数是每个采样点采用多少位来保存声音的强度值,采样位数越高,则还原时越精确。如果不采用压缩技术,那么保存声音需要的空间可以这样计算:

1.WAV

WAV(Wave Audio Files)作为最经典的Windows多媒体音频格式,应用非常广泛。它依照声音的波形进行存储,存放的一般是未经压缩处理的音频数据,因此拥有惊人的存储容量(1分钟的CD音质需要10M字节)。

2.MIDI

MIDI是Musical Instrument Data Interface的简称,MIDI是数字乐器接口的国际标准,它定义了电子音乐设备与计算机的通信接口,规定了使用数字编码来描述音乐乐谱的规范。

和WAVE不同,它并不记录采样位数、采样频率和声道数这些信息,它采用数字方式对乐器所奏出来的声音进行记录(每个音符记录为一个数字),然后播放时再对这些记录通过FM或波表合成。FM合成是通过多个频率的声音混合来模拟乐器的声音;波表合成是将乐器的声音样本存储在声卡波形表中,播放时从波形表中取出产生声音。

由于只是像记乐谱一样记录下演奏的符号,仅是一堆声音或乐器符号的集合,所以它的容量是所有音频格式中最小的。缺点是播放效果因软、硬件而异。使用媒体播放机可以播放,但如果想有比较好的播放效果,电脑必须支持波表功能。

3.AU

SUN的AU压缩声音文件格式,只支持8位的声音,是互联网上常用到的声音文件格式,多由SUN工作站创建。Java语言直接支持这种声音格式。

4.MP3

MP3的全称实际上是MPEG Audio Layer-3,而不是MPEG 3。MP3是一种有损压缩格式,它压缩了人耳不敏感的部分,所以能做到压缩程度高(1分钟CD音质音乐一般需要1M字节)、音质好,这使得MP3成为目前流行的一种音乐文件。MP3如此流行,涉及版权问题,已经遭到了音乐工业界的强烈抵制。

5.MOD

传统的MOD是一种类似波表的音乐格式,但它的结构却类似 MIDI,由控制信息和具体的乐器音效数据组合而成,使用真实采样,体积很小,播放MOD文件只需要386机器。在DOS年代,MOD经常被作为游戏的背景音乐。这种音乐格式曾经在网上风行一时,直至MP3的兴起才逐渐减退。现在的MOD可以包含很多音轨,而且格式众多,如S3M、NST、669、MTM、XM、IT、XT和RT等。

6.流媒体格式

Internet的兴起使得在线音乐成为热门,在线音乐必须在音质和带宽上取得平衡,现在随着宽带的普及,对这些在线音乐的要求也由对带宽的严格要求逐渐过渡到对音质的要求上。另外能够加入版权保证信息也是对这类格式的要求。RA、RAM和RM是RealNetwork公司推出的一种流式声音格式,采用了“音频流”技术,所以非常适合网络传输。这是一种在网络上很常见的音频文件格式,但是为了确保在网络上的传输速率,在压缩时声音的质量成了牺牲的对象。在制作时可以加入版权、演唱者、制作者、Mail和歌曲的Title等信息。ASF和WMA(Windows Media Audio)是微软公司针对Real公司开发的新一代网上流式数字音频压缩技术。这种压缩技术的特点是同时兼顾了保真度和网络传输需求,采用WMA格式压缩的声音文件比起由相同文件转化而来的MP3文件要小得多,并且在音质上也毫不逊色。

7.音乐CD

我们通常所见的CD唱片采用双声道、44.1kHz的采样频率和16bit的采样位数。一张CD可以存放74分钟左右的声音文件。

1.2.5 图像编码

图像的保存和传输也需要大量的存储空间,一个没有进行压缩的图像需要占用的存储空间可以使用如下公式进行计算:

其中图像长度和宽度使用“点”作为单位,而颜色深度指的是表示每个点的颜色等信息使用的位数。例如,对于一个只有黑白两种色彩的图像,可以只使用1位表示颜色;而对于存在灰度的黑白图像,则需要多位来表示一个点。一般来说,用24位来表示颜色,即2 24 =16777216种颜色,人的肉眼就认为是非常逼真了,即可以认为是真彩色。如果要保存一幅1024×768的真彩色图像,需要1024×768×24/8=2359296字节。这显然太大,于是人们采用多种压缩技术来保存图像。

对人的视觉查看的研究表明:人的眼睛对光线比较敏感,光线对景物的作用比颜色的作用更为重要,这就是有损压缩技术的基本依据。利用这个特性,保持颜色的逐渐变化,而删除图像中颜色的突然变化。生物学中的大量实验证明,人类大脑会利用与附近最接近的颜色来填补所丢失的颜色。这样丢失的颜色没有对人的观看造成太大的不良影响。这和MP3的压缩原理有相似的地方。这种以损害原始信息的压缩技术是有损压缩。与之相对应的是无损压缩技术,无损压缩不是删除图像的信息,而是利用图像中存在大量的颜色相同的块的特点,减少这些相同的颜色块所占用的存储空间。例如使用“行程长度编码(RLE)”等。

1.BMP

BMP是一种与硬件设备无关的图像文件格式,使用非常广泛。它没有采用压缩技术,而是采用位映射存储格式,按从左到右、从下到上的顺序进行图像扫描,支持l位、4位、8位及24位的颜色深度。

典型的BMP图像文件由两部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含BMP图像的宽、高、压缩方法,以及定义颜色等信息。

2.PCX

PCX格式常用于IBM PC兼容计算机。PCX是最早支持彩色图像的一种文件格式,现在最高可以支持256种彩色,PCX图像文件由文件头和实际图像数据构成。文件头由128字节组成,描述版本信息和图像显示设备的横向、纵向分辨率,以及调色板等信息。在实际图像数据中,表示图像数据类型和彩色类型。PCX的图像深度可选为l位、4位、8位。PCX文件采用RLE行程编码,

3.JPEG

JPEG(Joint Photographic Experts Group)提出对适用于连续色调、多级灰度、彩色或单色静止图像数据的国际标准。JPEG编码以惊人的压缩比和足够的图像质量来压缩图像,已经成为因特网上最常用的图像压缩标准。

和MP3忽略了人们难以分辨的音频部分来达到高压缩比一样,JPEG也是一种有损压缩技术。它基于以下事实:人的眼睛对细微的颜色不如对亮度变化的敏感。所以可以保持图像的亮度变化信息,而减少颜色变化的信息,将相近的颜色取平均,然后进行大面积着色。这样就能在得到大压缩比的同时,仍然有让人满意的图像。

JPEG算法第一步将图像分成8*8的区域,然后进行离散余弦变换(DCT),DCT是一种不可逆的算法,但它有着压缩比高且能得到较高的图像质量的优点。JPEG将RGB的颜色系统通过线性变化为YUV信息。这里的Y是亮度、U和V是色差,DCT之后,对这3种元素进行量化,在量化过程中对Y信息的采样更加精确,而对U和V则采用大幅度压缩的方式。

JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24位真彩色,也普遍应用于需要连续色调的图像。提供11级压缩级别,以0~10级表示。其中0级压缩比最高,图像品质最差。即使采用细节几乎无损的10级质量保存时,压缩比也可达5:1。

JPEG2000是JPEG的升级版,同时支持有损和无损压缩,其压缩率比JPEG高约30%。它能实现渐进传输,让图像由朦胧到清晰显示,即先传输图像的轮廓,然后逐步传输数据。此外,JPEG2000还支持“感兴趣区域”特性,可以任意指定影像上感兴趣区域的压缩质量,还可以选择指定部分先解压缩。

4.GIF

GIF(Graphics Interchange Format)的原义是“图像互换格式”,也是一种现在广为流传的图像格式,和JPEG在连续色调真彩色的杰出表现不同,GIF特别适合于文字和线条图像的保存。在压缩过程中,其图像的像素资料不会丢失,但颜色深度从l位到8位,即最多只能存储256色。

GIF采用基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右。GIF格式的另一个特点是其在一个GIF文件中可以保存多幅彩色图像,如果把保存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。

GIF的另外一个特点是可以采用隔行存放,这样就可以先把整幅图像的概貌显示出来了。在显示GIF图像时,这种图像的存放方式会让您感觉到它的显示速度似乎要比其他图像快一些。

5.TIFF

TIFF(Tag Image File Format)图像文件是较为通用的图像文件格式。TIFF格式的特点是灵活易变。支持包括RGB无压缩、RLE压缩及JPEG压缩等多种编码方法。它又定义了4类不同的格式:TIFF-B适用于二值图像;TIFF-G适用于黑白灰度图像;TIFF-P适用于带调色板的彩色图像;TIFF-R适用于RGB真彩图像。TIFF是现存图像文件格式中最复杂的一种,它具有扩展性、方便性、可改性。

6.TGA

TGA格式(Tagged Graphics)结构比较简单,在多媒体领域有很大影响,是计算机生成图像向电视转换的一种首选格式,已被国际上的图形、图像工业所接受。

这种图像格式最大的特点是可以做出不规则形状的图形、图像文件,和一般图形、图像文件都为四方形不同,它能表示圆形、菱形甚至是镂空的图像。TGA格式支持不失真的压缩算法。

1.2.6 校验码概述

1.编码体系

体系这个词总是比较高深,但在这里有些大材小用之嫌,编码体系指一种编码方式中所有合法码字的集合。合法码字占所有码字的比率就是编码效率。读者可以自行计算一下BCD编码的编码效率。

2.码距

码距是恒量一种编码方式的抗错误能力的一个指标。数字信息在传输和存取的过程中,由于各种意外情况的发生,数据可能会发生错误,即所谓误码。

一种编码,如果所有可能的码字都是合法码字,如ASCII,当码字中的一位发生错误时,这个错误的码仍然在编码体系中,这样编码的码距小,如果我们把编码体系变得稀疏一点,使得很多的信号值不在编码体系内,这样合法的码字如果出现错误,可能就变成了不合法的编码,这样的编码的码距就大。

定义:一个编码系统中任意两个合法的编码之间的不同的二进制位,称为这两个码字的码距。该编码系统的任意两个编码之间距离的最小值,称为该编码系统的码距。

显然,码距越大,编码系统的抗偶然错误能力越强,甚至可以纠错(纠错详见各种编码的介绍)。码距的增加,数据冗余增加,必须提供更多的空间来存放码字,编码效率则降低了,系统设计师需要综合考虑系统效率和系统健壮性两方面,在众多的编码体系中选择适合特定目标系统的编码。

1.2.7 奇偶校验

奇偶校验较为简单,被广泛地采用,常见的串口通信中基本都使用奇偶校验作为数据校验的方法。

一个码距为1的编码系统加上一位奇偶校验码后,码距就成为2。产生奇偶校验时将信息数据的各位进行模二加法,直接使用这个加法结果的称为“奇校验”。把这个加法值取反后作为校验码的称为“偶校验”。从直观的角度而言,奇校验的规则是:信息数据各位中1的个数为奇数,校验码为1,否则校验码为0,偶校验则相反。

使用一位奇偶校验的方法能够检测出一位错误,但无法判断是哪一位出错。当两位同时出错时,奇偶校验也无法检测出来。所以奇偶校验通常用于对少量数据的校验,如一个字节。在串口通信中,通常是一个字节带上起始位、结束位和校验位共11位来传送。

如果对一位奇偶校验进行扩充,在若干个带有奇偶校验码的数据之后,再附上一个纵向的奇偶校验数据,如表1-2所示。

表1-2 奇偶校验位组成

这样在出现一个错误的情况下,就能找到这个错误。而如果出现两个以上的错误,则可能无法判断误码的位置。这种方式在移动通信领域中被广泛采用。

1.2.8 海明码和恒比码

海明码是奇偶校验的另一种扩充。和上面提到的奇偶校验不同之处在于海明码采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。

假设数据位有m位,如何设定校验位k的长度才能满足纠正一位错误的要求呢?我们这里做一个简单的推导。

k位的校验码可以有2 k 个值。显然,其中一个值表示数据是正确的,而剩下的2 k -1个值意味着数据中存在错误,如果能够满足:2 k -1>m + k (m + k为编码后的总长度),在理论上k个校验码就可以判断是哪一位(包括信息码和校验码)出现问题。

1.校验方程

校验方程是指示每个校验位对哪些信息位进行校验的等式。

确定了k的值后,如何确定每k位中的每一位对哪些数据进行校验呢?上面的推导只是说能够做的,那么如何达到纠错的目的呢?幸好考试中都会列出海明校验方程。例如:

其中“ ”表示逻辑加。

一般情况下,校验码会被插入到数据的1,2,4,8,…位置;在数据生成时,按照提供的海明校验方程计算出b 1 ,b 2 ,b 4 ,…各位;在数据校验时,按照海明检验方程进行计算,如果所有的方程式计算都为0,则表示数据是正确的。如果出现1位错误,则至少有一个方程不为0。海明码的特殊之处在于,只要将①②③三个方程左边计算数据按③②①排列,得到的二进制数值就是该数据中出错的位,例如第6位出错,则③②①为110。

当出现两位错误时,这种海明码能够查错,但无法纠错。

2.恒比码

在采用恒比码编码的体系中,所有有效的编码中为1的位都相同,所以被称为“恒比”。在邮电部门的电传、电报及条形码中就广泛地使用恒比码。这种编码生成时是查表,接收检验时是检查每个编码中1出现的次数是否正确。

1.2.9 循环冗余校验码

1.多项式

在循环冗余校验码中,无一例外地要提到多项式的概念。一个二进制数可以以一个多项式来表示。如1011表示为多项式x 3 +x 1 +x 0 ,在这里,x并不表示未知数这个概念,如果把这里的x替换为2,这个多项式的值就是该数的值。从这个转换我们可以看出多项式最高幂次为n,则转换为二进制数有n+1位。

2.编码的组成

循环冗余校验码校验由k位信息码,加上R位的校验码。

3.生成多项式

和海明码的校验方程一样,生成多项式非常重要,以至于考试中总是直接给出。

由K位信息码如何生成R位的校验码的关键在于生成多项式。这个多项式是编码方程和解码方程共同约定的,编码方程将信息码的多项式除以生成多项式,将得到余数多项式作为校验码,解码方程将收到的信息除以生成多项式,如果余数为0,则认为没有错误。如果不为0,余数则作为确定错误位置的依据。

生成多项式并非任意指定,它必须具备以下条件:最高位和最低位为1,2。数据发生错误时,余数不为0,对余数补0后,继续做按位除,余数循环出现,这也是冗余循环校验中循环一词的来源。

4.校验码的生成

(1)将k位数据C(x)左移R位,给校验位留下空间,得到移位后的多项式:C(x)×x R

(2)将移位后的信息多项式除以生成多项式,得到R位的余数多项式。

(3)将余数嵌入信息位左移后的空间。

例:信息位为10100110 生成多项式:a(x)=x 5 +x 4 +x+1

求余式:

得到余式为x 4 +x 3 即校验码为11000,所以得到CRC码是:1010011011000。

循环冗余校验码的纠错能力取决于k值和R值。在实践中,k值往往取得非常大,远远大于R的值,提高了编码效率。在这种情况下,循环冗余校验就只能检错不能纠错。一般来说,R位生成多项式可检测出所有双错、奇数位错和突发位错小于等于R的突发错误。使用循环冗余校验码能用很少的校验码检测出大多数的错误,检错能力是非常强的,这使得它得到了广泛的应用。 N3a6t1K5YaqHX7+zTjeM4KGt4ACO2qDP9bHLGH2iL/jil4cjXYbbsCDFfXHXskgv

点击中间区域
呼出菜单
上一章
目录
下一章
×