CD光盘的编码与纠错
赵效民 于 2005.01.18 14:42:04 | 源自:www.stor-age.com | 版权:转载 | 平均/总评分:10.00/270

CD光盘的数据结构

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

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

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

    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,将在本专题后面的章节详细讲述。

    CIRC编码流程

    上文已经讲过,每个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帧)中,也有可能被完全修复。显然,如果不进行交叉交错的话,这种可能性是不会存在的。

    C1与C2解码纠错

    好啦,当我们了解了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状态标记来表示纠错状态表

    有关CD光盘纠错的业界标准

    在业界标准中,并没有对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)。

    请评分
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    192.069.***.***
    192.069.***.***
    12
    001.085.019.***
    001.085.019.***
    发表于2012.10.17 22:22:24
    11
    113.076.***.***
    113.076.***.***
    acwell删除此贴于2012.07.21 00:12:56
    发表于2012.07.20 23:54:27
    10
    058.100.123.***
    058.100.123.***
    发表于2012.06.08 19:08:16
    9
    119.166.***.***
    119.166.***.***
    怎样下载使用啊?
    发表于2012.05.03 18:41:37
    8
    180.125.120.***
    180.125.120.***
    发表于2012.02.18 16:15:40
    7
    03
    发表于2010.05.04 11:24:27
    6
    发表于2005.05.11 16:19:49
    5
    发表于2005.01.19 11:19:24
    3
    221.197.***.***
    221.197.***.***
    发表于2005.01.18 20:53:18
    1
    提示
    本贴不可匿名回复,回复等级为:1 ,您现在正处在潜水状态
    回复
    验证码
    8186 为防止广告机贴垃圾,不得已而为之
    表情
    正文