刻录品质探幽(一):CD光盘的编码
上文已经讲过,每个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帧)中,也有可能被完全修复。显然,如果不进行交叉交错的话,这种可能性是不会存在的。<