泡泡网存储频道 PCPOP首页      /      存储     /      评测    /    正文

刻录品质探幽(一):CD光盘的编码

    第二篇:《刻录品质探幽(二):DVD光盘的编码与纠错》

    第三篇:《刻录品质探幽(三):谁影响着光盘的品质?》

    本专题转载自《Stor-age 存储时代》网站,作者赵效民,原文链接请见《有多少错误可以忍耐?CD与DVD光盘质量深入探讨》

    随着刻录机的普及,别说单纯的CD-RW,就连包含CD-RW功能在内的DVD刻录机也逐步走进了越来越多的用户日常的应用领域。刻一张CD乃至刻一张DVD,现在已经真的不算什么了?(700多元的驱动器价格,5元左右的刻录盘,已经使DVD刻录的普及门槛大为降低)。然而,一直有一个问题在困扰着用户,那就是光盘的刻录质量。

    经常会有人遇到这样的情况,自己刻出的光盘,不能在朋友的光驱上读取,或者说委托朋友刻成的光盘自己的机器读起来很困难,或者说在VCD/DVD影碟机上出现马赛克等挑盘现象?这是为什么呢?是什么原因造成了上述的现象?不少人会认为,这是光盘的刻录质量问题。但也许,当你看完本专题后就会重新检查自己的这一判断。

    就像对内存的延迟的钻研一样,很多人开始了不懈的探索。渐渐的,那些往常只有在相关厂商专业人员之间交流的名词也渐渐被普通大众所听说。比如CD光盘有C1、C2错误之分,比如DVD刻录有PI、PO错误之分,比如Jitter对音频回放还原性的影响,再比如刻录时激光强度对质量的影响……

    与之相关的,则是那些以往只能出现在厂商中的测试工具也渐渐大众化,现在只要拥有相关的软件和与其配套的光驱,就可以进行更为专业的测试。而且,有关这方面的文章也越来越多,毫无疑问,在这方面的探索已经在刻录玩家中有了相当的普及程度与较高的积极性,而对这相关知识的阐述详细程度(先不论正确程度),也往往会被同行用来评定水平高低的重要标准,到一些相关的论坛上看看,这类的坛友大多会被尊称为“高手”。由此也能看出,普通大众对这一领域的向往之情。

    其实,单纯的去研究光盘的刻录质量的深层技术问题,并不能像了解内存时序那样有助于我们提高系统的性能,甚至可以说即使您知道什么在影响光盘的刻录质量,您也很难去人为的像调整主板BIOS一样,通过调校相关参数去改变它。可以说,当驱动器和刻录盘确定之后,刻录后的事实质量就基本决定了。而且,只有刻录之后,才能评价质量。为什么要说是事实质量,是因为当我们要去评测一张光盘的质量时,读取设备的素质有着关键性的影响,有时测试的结果并不是真正的事实——也许以我们普通大众所能接触到的手段,永远也无法得到事实的结果。因此,当你深入去研究刻录质量时,你就会发现这其实是一个非常复杂的问题,不能简单的一言蔽之……

    本专题在很大程度上可以说是一个技术性专题,它将让您清楚了解影响光盘刻录质量的主要原因,以及光盘的数据流程和纠错的原理,从而更明白那些测试软件所给出的测试结果的含义。当然,我们也会适当的给出相关建议与评论。<

    可以说,CD光盘是人类信息化历史上的一个重要的突破。CD最早于1982年10月份诞生,虽然距今已经有20多年的历史,但它的相关设计在今天看来,仍是非常先进的,而且生命力仍然旺盛,即使是在DVD日益盛行的今天,也是重要的数据载体(媒介)。

    要想了解CD光盘的纠错原理,就不能不先了解CD光盘的数据结构,确切的说就是CD光盘上数据的编码原理,它几乎囊括了当时非常先进的编码技术,DVD与之相比,也并没有本质的变化。

    CD光盘最早的产品是CD-Audio,其技术规范被称为红皮书(Red Book),应用于唱片领域,所以即使有了日后的其他扩展规范,也都是以它为基础制定的。

小资料:CD光盘的规范种类

    CD光盘的规范被业界以不同颜色的Book来区分,目前共有以下几种:

  除此之外,还有两个从黄皮书和绿皮书扩展出来的规范,它们分别是Multisession CD和Photo CD,索尼与飞利浦(CD的发明者并没有给它们单独规定颜色)。

    在CD光盘中,数据的最小的可访问存储单位是Block(块),在CD-ROM规范中则称之为Sector(扇区)。在Red Book规范中规定,它们由若干个子块组成,这个子块就是比较难于理解的帧(Frame)。什么叫帧呢?我们可以理解为CD光盘编码的单位。从下面这张CD光盘的数据流程图中,我们可以了解帧与块的关系和概念。

 CD光盘的数据流程,以CD-Audio为例(点击放大)

    我们现在可以反向的来理解CD-Audio的数据结构的设计原理。由于CD-Audio分为左右立体声道,每个声道的取样精度为16bit,取样频率为44.1KHz,也就是说每秒取样44100次。CD-Audio规定,每一秒钟所读取的块数为75个,每个块又包含98个帧,那么采样数分摊下来是多少呢?44100÷75÷98=6,也就是说每一帧的取样次数为6次,每次两个声道,每声道的取样精度为16bit,因此一帧的容量就是6×2×16=192bit=24字节。这就是一帧数据为什么是24字节的来历(请注意图中红圈的部分,那就是决定CD光盘纠错的重要部分,也将是下文中着重介绍的内容)。

    我们现在知道了CD光盘一个块的容量就是2352字节,这也是所有CD规范的通用块容量。但是,后来出现的CD-ROM规范中则将扇区的内部设计进行了更改,

     CD-ROM的几种扇区格式(点击放大):Mode 1就是我们常用的CD-ROM电脑数据光盘的格式,Mode 2则是CD-I、VCD、CD-ROM XA等光盘的格式(其中Form 1也是电脑数据光盘格式)。其中ECC代表额外的错误纠正码,EDC为错误检测码(CRC校验)

    注意,上图只是扇区(块)的格式图,不要将它与上面的CD数据流程图弄混了,尤其是ECC部分,与图1中的“校验”是两码事,这一点我们将在下文会进一步讲到。<

    CD光盘使用了两种编码来分别保证光盘的刻录质量,一个是从信息的逻辑正确性上保证,一个是从物理刻录的通道脉冲的识别可靠性上保证。它们分别是CIRC编码与EFM调制编码。

    CIRC的全称是交叉交错理德-所罗门编码(Cross Interleaved Read-Solomon Code),它的主旨是除了增加二维纠错编码外,还将源数据打散,根据一定的规则进行扰频和交错编码,使数据相互交叉交错,从而进一步提高纠错的能力,因为这样一来用户数据的错误将很难连续起来,有利于提高整体的纠错能力。

    我们现在再来看看上面这张CD数据流程图(点击放大),图中的编号就是CD刻录时的数据生成的过程。

    第一步首先生成一个帧的原始数据,24字节,我们可以称之为初始帧(在相关标准中则叫Frame-1,简称F1)

    第二步就是加入CIRC编码,一共8个字节,我们可以称之为校验帧(在相关标准中则叫Frame-2,简称F2),总字节数为32个。我们常说的,所谓的C1与C2纠错码就是在这一阶段加进去的,C1与C2的C就是CIRC编码的缩写。

    第三步就是加入控制码,一个字节,我们可以称之为数据帧(在相关标准中则叫Frame-3,简称F3),此时帧的容量为33字节。

    之后每个F3帧再加入3个字节的同步信息码就成为了最终用于刻录的帧,总容量为36字节。最后经过EFM调制,基本上是以每字节8bit转换成每字节17 bit的方式生成最终的信道脉冲(Channel bit)以控制刻录激光的开与关。

    什么是EFM编码呢?就是Eight to Fourteen Modulation的缩写,即8至14调制。为什么会使用这样的编码对源数据进行“修改”呢?这还要从光盘的读取原理说起。

光盘上的凹坑与平面并不直接代表0和1

    光盘的读取是根据反射激光的强弱来进行逻辑1与0的分辨,但激光反射功率的强与弱并不直接代表1或0。反射功率强弱的突变点,也就是反射电平的翻转点,将被判断为逻辑值1,长时间的凹坑与平面则都是逻辑值0。

    这样一来,如果是连续的1,那么就意味着凹坑与平面要突变多次,会占用更多的刻录空间,从而将影响有效的数据容积(或者说是信息量),而若以电平的高低来代表1和0,如果连续的0或1很长,又很难判断有多少个1和0,0与1的转变也较难分辨,所以必须要加以一定的规则限制。这个规则可以借助某种编码方式来禁止连续的1,并且又能把连续的0的长度限制在某种范围之内以利于识别,这就是所谓的“游程限制(RLL,Run Length Limited)编码规则”。

    EFM就是这样的一种专用于信息记录的信道调制编码,它将原始数据重新进行编排,以保证不会有连续的1出现,而连续的0则被控制在2至10个之间,可以表示为RLL(2,10)。也就是说,光盘上的信息中,两个逻辑1之间,最多有连续10个0,最少要有连续两个0。这样,有了相应的规则后,再配合时钟计时信息(每个信道脉冲的时间长度),就可以准确的分辨出数据了。需要指出的是,当8bit数据重新编成14bit数据后,两个14bit代码之间则还要符合RLL(2,10)的要求,因此还要根据相邻14bit代码的情况加入3bit的合并码(Merging bit),从而使最终的编码长度变为17bit。

    EFM调制编码示意图,为了保证两个14位编码之间仍符合RLL(2,10)的要求又加入了3位合并码,因此EFM其实是8至17编码

    了解了CIRC与EFM在CD数据刻录中的作用,就不难理解与之相关的CD刻录质量标准的含义,下面我们就将深入介绍有关CD光盘的C1与C2编码与纠错标准。而与EFM相关的就是我们常常能听到“高手”们讨论的Jitter,将在本专题后面的章节详细讲述。<

    上文已经讲过,每个24字节的原始数据帧都要附加上8字节的校验码以保证帧数据的可靠性,而这个校验码则分为两个步骤来生成,我们来具体看一下。

    CIRC编码流程图(点击放大),图出的W12代表组成一个F1帧的12个字(16bit),n代表F1帧的编号,A、B代表组成一个字的两个字节(8bit)

第一步:交叉交错后生成C2校验码

    在介绍CD数据生成过程的时候,我们知道CIRC编码处于F2生成阶段,因此要先导入F1原始数据帧,也就是24字节。要知道,之所以称为CIRC编码,是因为在编码的过程中,源数据有交叉和交错的过程。首先,源数据要按两个字(图中的A、B)一组分成6个大组,偶数组进行两个字节的延迟,从而形成扰频交错编码。

    这里要解释一下所谓的延迟,两个字节的延迟意味着延迟两帧。也就是说,当进行交错之后,偶数组已经不再是原来F1帧中的源数据,而是当前帧的前两帧中的偶数组数据(相对于前两帧,当前帧就意味着两个字节的延迟),原始的偶数组将在后两帧的交错编码中出现。另外,从图中可以看出,字的顺序在交错后发生了很大不同,这种前后帧数据交叉并且顺序交错的过程就是扰频交错编码。

    此后,扰频交错后生成的新数据进入C2编码器生成Q校验码。Q校验码为4字节,最后生成的新数据为28字节,因此C2也被称为(28,24)编码,意思是指输入24个字节,输出28个字节。

    由此可见,C2编码并是针对原始F1帧的数据进行,但为什么要进行如此复杂的交叉交错的编码呢?这是为了保证纠错效率而设计,下文将有更详细的讲述。

第二步:字节依次延迟4帧后生成C1编码

    将C2编码完成后,将进行大规模的字节延迟交错编码,执行这个操作的就是延迟线,延迟单位为4字节,也就是说4帧,操作单位是每个字中的单个字节。这个要怎么理解呢?比方说,C2编码后的的第一个字节不延迟,第二个字节则将延后4帧,第三字节将延后8帧……如此反复直至第28个字节,将被延后108帧。也就是说,C2编码后的28个字节,将被有规律的分散到109个帧中(第一个字节延后0帧,加上最后一个字节延后108帧,一共是109帧)。

   延迟操作之后则进入了C1编码器,显然此时的数据与原始的F1帧数据差别更大了,C1编码器将在28个字节的基础上再生成4个字节的P校验码,从而完成了建立了F2帧的操作。由于输出28个字节,输出32个字节,因此C1也被称为(32,28)编码。从这个过程中不难看出,C1编码的对象中包含了C2编码(虽然是交错延后的),也承担了对Q校验码进行保护的任务。

    现在的F2帧已经与F1帧有了很大不同,如果帧编号为n,那么F2-n帧中只有一个字节来自于F1-n帧。所以,严格的讲,C1、C2并不是对F1帧的校验编码,因为从C2编码开始,对象就已经不再是F1帧中的原始数据。

    这样(交叉交错)的目的就在于防止一帧中出现连续大量的错误而无法纠正,如果原原本本地按原始F1——C2编码——C1编码的过程生成校验码,将是非常脆弱的,如果这一帧的24个字节中出现连续大量的错误码,仅凭CIRC的设计,纠错能力仍然有限。

    若将源数据分散到不同的数据帧中,然后再进行校验,将大大提供单个数据帧的纠错能力。理论上即使24个字节原始数据全有问题,但由于每个字节最终分布在间距为4的28个帧(跨度为109帧)中,也有可能被完全修复。显然,如果不进行交叉交错的话,这种可能性是不会存在的。<

    好啦,当我们了解了CD光盘的CIRC编码过程之后,就不难理解CD的解码过程,而解码过程就涉及到了纠错,纠错的效果将体现刻录的质量,或者说是驱动器的读盘能力。

CD光盘中的C1与C2解码流程图(点击放大)

    在解码时,其实就是CIRC解码的反过程,原先C2先编码,现在是C1先解码,原先延迟的,解码时不延迟,而原先不延迟的则会根据规则进行延迟以反交叉交错进行数据还原。

    从流程图中,我们可以发现,C1、C2解码是必经的过程,而并不像某些文章中所说的,C1应付不了的错误才会交给C2解码。事实上,不管C1解码过程中有没有错误,都要C2解码。从编码过程中,我们可以知道,两者所解码的对象完全不同,这也是为什么C1纠正不了的错误,C2反而能纠正,其实就是这个道理,而并不是说C2的纠错级别比C1高。

    言归正传,C1与C2的纠错标准是怎样的呢?这里,业界使用了错误等级来对C1与C2解码进行了规定,可简写为En1和En2,其中E代表Error(错误),n代表出现错误的次数,1代表一次C1解码过程,2代表一次C2解码过程。

    如果在一次C1解码中,发现了一个错误字节,即为E11,如果发现了两个错误字节即为E21,如果发现3个或更多的错误字节即为E31。其中,E11与E21都可以在C1阶段纠正,而E31则不行。但是,不要忘了延迟交错的设计,当前帧(F2)的错误字节是分散在跨度为109帧的28个帧中,经过反延迟后,这些错误的字节肯定不会再在同一帧中了,所以通过C2编码仍然有可能被纠正。

    此时,如果在一次C2解码中,发现了一个错误字节,即为E12,如果发现了两个错误字节即为E22,如果发现了3个或更多的错误字节,即为E32。与E31一样,E32也不能在C2解码过程被纠正,由于C2是最后一个CIRC解码器,所以E32的出现就意味着出现了一个不可修复的错误帧,因此它又称为CU(C-Uncorrectable,不可修复),对于CD来说,CU是绝对要尽量避免出现的。

    在CD测试系统中,专门为C1与C2设置了状态标记(Flag),通过它们即可知道当前的纠错状态:

通过4个C1、C2状态标记来表示纠错状态表<

    在业界标准中,并没有对C2错误水平进行明确规定,而是更多的对C1错误率进行了限定,这是因为如果C2错误肯定会有C1错误,但如果有C1错误,不见得会有C2错误。

    在CD-ROM的规范中规定,随机错误的标准是,每10秒钟出现C1解码的错误(E11、E21或E31)帧数不超过3%。我们可以算一下,按一倍速1秒读取75个扇区,每扇区98个帧计算,10秒钟里共有10×75×98=73500个帧,3%就是2205个帧,约为平均一秒220个帧。由于一个坏帧就意味着一个坏块(扇区),因此也可以认为块错误率(BLER,BLock Error Rate)为每秒220个,我们可以理解为1秒钟C1错误的总合(E11+E21+E31)不能超过220个。

    对于连续的突发性错误,CD-ROM规范中规定,当在C1解码时出现E31,则视为不可修复的帧错误,连续出现C1不可修复错误的帧要少于7个。

    这里需要指出的是,BLER并不区分哪些块是可以被修复的,哪些块是不能被修复的,因为这里仍包括E31这一C1解码器所不能修复的错误。所以低的BLER并不能说明光盘质量的好坏。比如一张光盘的BLER=210,但没有E31错误,而另一张光盘的BLER=50,但全是E31错误,那么完全可以说后者的质量不及前者,虽然它的BLER更低,但有着E32的隐患。

小常识:关于CD光盘的C3解码

    在很多相关的文章中,大都提到CD光盘还会有一个C3解码的过程,但这并不确切。

    在上文中,我们已经讲到CD光盘有多种规范,而各规范中的扇区格式并不相同,有的有ECC校验码,有的没有ECC校验码,而这个ECC校验就是所谓的C3解码,可见并不是每个CD光盘规格都具备。

     严格的说,扇区的ECC校验并不是C3解码,而是被称为RSPC(Reed-Solomon Product-like Code,理德-所罗门乘积编码)解码。注意,CIRC是给每一帧进行校验的编码,而RSPC是给数据扇区进行校验的编码,两者不要混淆。我们可以这样理解:每个扇区——RSPC编码——分成98个帧——每个帧再进行CIRC编码——生成最后的 刻录数据。

    在支持CD-ROM/-R/-RW的驱动器中,也都会有相应的RSPC解码器,由于RSPC的存在,因此即使在C2解码中出现了E32错误,仍有可能在RSPC解码过程中进行修正。这也是为什么CD-ROM(Mode 1和Mode 2-Form 1)是针对计算机数据存储而开发的原因,保证数据文件的准确性远比保证歌曲数据的准确性更重要。如果是普通的CD-Audio播放机,则不会有RSPC解码器(Decoder)。

 

    下一篇:《刻录品质探幽(二):DVD光盘的编码与纠错》

    第三篇:《刻录品质探幽(三):谁影响着光盘的品质?》<

1人已赞

关注我们

泡泡网

手机扫码关注