热度 37
2010-6-18 15:49
3351 次阅读|
16 个评论
一张数码照片,如果冲印出来,经过几年颜色就会变得暗淡,但放在电脑中的照片文件即便是过去一百年,也不会出现和冲印照片一样的褪色问题。这就是将声像信息保存为数字记录的优点,记录的信息永远都不会发生变化。这一优点已经得到大众的认可,不然声像产品数码机不会如此快将磁带机的市场主导地位替代掉,人们都相信,只要存放数码文件的存储介质没有损坏,文件内容就会永远保持不变。 可生活中有一种情况会让人们犯晕,去音像店买CD时,正版的价格会相当贵,如果你对售货员抱怨太贵,他们会告诉你这价格贵有所值,盗版CD效果要差一些。许多人可能都不会相信这个说法,会认为是售货员为了推销才有这么一说,CD和其它电脑软件光盘都是同样的东西,软件光盘用电脑复制刻录的同样能用,如果复制刻录的光盘不能完全一样,肯定不能使用,可复制出来的软件光盘从来没听人说过会有问题。CD同样是用光盘记录的歌曲数码信息,我自己复制怎么可能效果要差呢?道理上解释不通。 可实际情况是售货员真没说谎,不管是谁,自己用电脑将原版CD复制另外刻录一张,播放出来的效果就是比不上原版CD,这可真是一个神奇的现象。要是问售货员这是为什么,售货员只能是含糊回答盗版的碟质量要差,做得没有原版的好,别的他也说不出个所以然来。电脑知识不多的人会认可这个解释,但有一定电脑知识的人,就会是坚决不信这个解释,他知道现在做盗版的材质和设备甚至比正版的都要好,绝对不是盗版碟本身质量有问题,到底是什么原因是越想越糊涂。 要弄清楚这个问题需要先对光盘的数据存储方式做一个初步了解,你可以这样理解,从光盘的内圈开始有一条线,线绕成蚊香状的螺旋型,当然这条线实际上是不存在的,只是我们为了便于理解才这样假设。光盘的数据信息就记录在这条“线”上,我们可以在这条“线”上制定一个规则来记录0和1状态,比如每毫米为一个数据位,黑色为0,白色为1,我们只要有一把刻度尺就能将上面记录的数据位信息读出来。 光盘用的是同样的方法,只是每个位占用的长度要小许多,0.163毫米的长度能记录288个数据位,数据位的0和1状态也不是黑和白,而是平面凹下去为 0,否则为1。光驱是用激光头去读取数据位,对于数据位0和1,是高低两个平面,反射效果几乎相同,但两者交界处反射会有明显差异,光头利用这一特性辅以其它技术判断当前数据位是0还是1。刻度是通过光头的旋转来进行计算,光盘的旋转和常见的电机不同,是恒线速度,这样就可以在“线”上标定出正确的位置,你可以观察一下影碟机,光头位置越靠外,转得越慢。可不要小看这个恒线速度的技术,这可是全世界花了二十余年才得到的成果。 因为误差的存在,是不可能将线速度完全控制在绝对值上,一定存在一个误差,如果不做其它处理,是以“线”的起点为参照点,越往后偏差就会越大,一张光盘就算是600M字节的容量,到最后也会把小小误差累计成一个天文数字,接下来看看到底是用什么技术来实现0和1的识别的。 图一 光盘数据结构示意图 图一中凹坑和突起分别叫“坑”和“岸”,这些"坑"和"岸"是原始数据信号先经过EFM(8位到14位编码调制)调制,再加上3位间隔代码,最后形成通道代码就是光盘里的实际数据序列,这样处理就能保证正确读出0和1。 光驱的激光头读取光盘数据时,“坑”和“岸”对激光的反射效果几乎相同,规定此时读到的状态位为0,这个0的个数由“坑”和“岸”的连续个数决定。在 “坑”和“岸”的交界边沿处,光头会读到另外一个状态1。这样对于8位原始数据中的两个或两个以上的连续的1,此方法无法进行表示,两个边沿之间一定会读到至少一个0。为此需要将两个连续的1,要中间插入0的方法分隔开。 如果我们直接规定连续两个1中间就插入一个0,这样原来为11的数据就变成了101,可8位的原始数据中也有这样的可能,两者会混淆在一起,显然不能这么简单处理。EFM就是用一个14位数据来表示一个8位数据,从 16384中组合总提取256种不出现连续两个1的数据组合(通道码)与8位数据对应。为避免调制所得相邻两个14位数据(通道码)出现两个1连续,在 14位数据(通道码)之间再加上3位合并码(DVD中用2位合并码),形成17位的最终数据码。光盘中的数据就是这种17位的数据,读取光盘时,将读到的 17位数据码经过解码系统反向转换为8位二进制数。 对于EFM编解码我们不用过多了解,可以看成一个简单的查表转换操作,具体转转也是由激光头硬件自己完成,对于用户来说并不公开,只需要知道存在这一步处理就可以。 虽然光盘上记录的是数字信号的位状态0和1,理论上两者是不会弄混,实际情况并不如此。比如写在纸上的0和1的字样,通常我们是可以准确认出,但如果纸被水打湿,字迹模糊后就难以分辨,同样道理,激光头读光盘数据时,也会有一定几率出错,而且这个几率还比较大,全新的光盘也高达10-4,对于旧盘尤其是刮花的盘,误码率更是会大幅度上升,如此高的误码率显然是不能接受的,不然播放的音乐随时都是杂音。设计者在制定CD数据格式标准时考虑到了这一点,并不是将所有的数据都用来记录声音数据,而是以扇区为单位,每个扇区实际有3528字节数据,但用来记录声音数据的只有2352字节,另外的 1176字节数据用作同步、控制和纠错,经过这个纠错处理新的光盘误码率可以降低到10-9。 这里的纠错简称为 EDC/ECC,这个误码率对于音乐播放来说可以接受,但不能用于计算机数据存储。简化计算可知道这个误码率读新盘平均1G位就会出现错误,也就是说读 100M字节理论上就会有一个字节出错,象WINDOWS之类的安装碟很大机会读回来包含好几处错误,所以误码率要求降低到10-12才能用做计算机数据存储。 说这些目的只有一个,虽然光盘里面记录的是0和1这样的数字信息,但在光驱读盘的过程中会出错,这样对于CD碟电脑抓到的数据相较原始数据就已经包含了一些错误,再将抓到的数据刻录到CD碟中又会产生另外一些错误,这样就使得自己复制的翻版CD效果要差过正版CD。 正版CD --- (电脑复制正版CD) --- 电脑中CD数据文件 --- (电脑刻录CD) --- 翻版CD 和压缩算法一样,纠错算法也有许多种,而且更为复杂,我们常说的CHECK_SUM和CRC不属于纠错算法,它们只是有简单的错误判断功能,并不能纠正中间的错误。比如有0x12 0x34 0x56 0x78这样一组数据,传输过程中错为0x02 0x34 0x56 0x78,CHECK_SUM和CRC只能发现出了错,并不能改正,而纠错算法不但可以知道是什么地方出错,并能将错误的0x02改回正确的0x12。好的纠错算法功能会非常强,有的理论上可以在误码率50%的情况下依然能将原始信息恢复。