光盘错误检测和校正
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
光盘错误检测和校正
光盘、磁盘和磁带一类的数据记录媒体一样,由于盘的制作材料的性能、盘制造生产技术水平的限制、驱动器的性能以及使用不当等诸多原因,从盘上读出的数据不可能完全正确。据有关厂家的测试和统计,一片未使用过的只读光盘,某原始误码率约为3×10-4;沾有指纹的盘的误码率约为6×10-4;有伤痕的盘的误码率约为5×10-3。针对这种情况,激光盘存储器采用了功能强大的错误码检测和纠正措施。采用的具体对策归纳起来有三种:
(1) 错误检测:采用CRC(Cyclic Redundancy Code)检测读出数据是否有错。
(2) 错误校正码:采用里德-索洛蒙码(Reed-Solomon Code),简称为RS码,进行纠错。RS码被认为是性能很好的纠错码。
(3) 交叉交插里德-索洛蒙码CIRC(Cross Interleaved Reed-Solomon Code), 这个码的含义可理解为在用RS编译码前后,对数据进行交插处理和交叉处理。
对这些码的理论分析和计算有许多专著作了详尽的深入论述,对不需要开发纠错技术的读者仅需要了解错误检测和校正的一些基本概念即可。
1 .CRC错误检测原理
在纠错编码代数中,把以二进制数字表示的一个数据系列看成一个多项式。例如,二进制数字序列10101111,用多项式可以表示成:
=
式中的表示代码的位置,或某个二进制数位的位置,前面的系数a i表示码的值。若a i
是一位二进制代码,则取值是0或1。称为信息代码多项式。
在模2多项式代数运算中定义的运算规则有:
例如,模2多项式的加法和减法:
从这两个例子中可以看到,对于模2运算来说,代码多项式的加法和减法运算所得的结果相同。所以在做代码多项式的减法时,可用做加法来代替做减法。
代码多项式的除法可按长除法做。例如:
如果一个k位的二进制信息代码多项式为,再增加(n-k)位的校验码,那么增加(n -k)位之后,信息代码多项式在新的数据块中就表示成,如图13-01所示。
图13-01 信息代码结构
如果用一个校验码生成多项式去除代码多项式,得到的商假定为,余
式为,则可写成
因为模2多项式的加法和减法运算结果相同,所以又可把上式写成:
称为校验码生成多项式。从该式中可以看到,代表新的代码多项式
是能够被校验码生成多项式除尽的,即它的余项为0。
例如,CD盘中的q通道和软磁盘存储器中使用的CRC校验码生成多项式是
若用二进制表示,则为
=100010000000100001(B)
=11021(H)
假定要写到盘上的信息代码为
=4D6F746F (H)
由于增加了2个字节共16位的校验码,所以信息代码变成: 4D6F746F0000(H)。 CRC 检验码计算如下:
两数相除的结果,其商可不必关心,其余数为B994(H)就是CRC校验码。把信息代码写到盘上时,将原来的信息代码和CRC码一起写到盘上。在这个例子中,写到盘上的信息代码和CRC码是4D6F746F B994,
这个码是能被11021(H)除尽的。
从盘上把这块数据读出时,用同样的CRC码生成多项式去除这块数据,相除后得到的两种可能结果是:①余数为0,表示读出没有出现错误;②余数不为0,表示读出有错。
CD-ROM中也采用了相同的CRC检错。CD-ROM扇区方式01中,有一个4字节共32位的EDC 字域,它就是用来存放CRC码。不过,CD-ROM采用的CRC校验码生成多项式与软磁盘采用的生成多项式不同,它是一个32阶的多项式,
计算CRC码时用的数据块是从扇区的开头到用户数据区结束为止的数据字节,即字节0~2063共2064个字节。在EDC中存放的CRC码的次序如下:
2 .RS编码和纠错算法
13.2.1. GF(2m)域
RS(Reed-Solomon)码在伽罗华域(Galois Field,GF)中运算的,因此在介绍RS码之前先简要介绍一下伽罗华域。
CD-ROM中的数据、地址、校验码等都可以看成是属于GF(2m) = GF(28)中的元素或称符号。GF(28)表示域中有256个元素,除0,1之外的254个元素由本原多项式P(x)生成。本原多
项式的特性是得到的余式等于0。CD-ROM用来构造GF(28)域的是
(13-1)
而GF(28)域中的本原元素为
α = (0 0 0 0 0 0 1 0)
下面以一个较简单例子说明域的构造。
[例13.1]构造GF(23)域的本原多项式假定为
α定义为 = 0的根,即
α3+α+1 = 0
和α3 = α+1
GF(23)中的元素可计算如下:
用二进制数表示域元素得到表13-01所示的对照表
表13-01 GF(23)域中与二进制代码对照表,
这样一来就建立了GF(23)域中的元素与3位二进制数之间的一一对应关系。用同样的方法可建立GF(28)域中的256个元素与8位二进制数之间的一一对应关系。在纠错编码运算过程中,加、减、乘和除的运算是在伽罗华域中进行。现仍以GF(23)域中运算为例:
加法例:α0+α3 = 001+011
= 010 = α 1
减法例:与加法相同
乘法例:α5·α4 = α(5+4)mod7
= α 2
除法例:α5/α3 = α 2
α3/α5 = α-2
= α(-2+7)
= α 5
取对数:log(α5) = 5
这些运算的结果仍然在GF(23)域中。
13.2.2 RS的编码算法
RS的编码就是计算信息码符多项式除以校验码生成多项式之后的余数。
在介绍之前需要说明一些符号。在GF(2m)域中,符号(n,k)RS的含义如下:
m表示符号的大小,如m = 8表示符号由8位二进制数组成
n表示码块长度,
k表示码块中的信息长度
K=n-k = 2t表示校验码的符号数
t表示能够纠正的错误数目
例如,(28,24)RS码表示码块长度共28个符号,其中信息代码的长度为24,检验码有4个检验符号。在这个由28个符号组成的码块中,可以纠正在这个码块中出现的2个分散的或者2个连续的符号错误,但不能纠正3个或者3个以上的符号错误。
对一个信息码符多项式,RS校验码生成多项式的一般形式为
(13-2)
式中,m0是偏移量,通常取K0 = 0或K0 = 1,而(n-k)≥2t (t为要校正的错误符号数)。下面用两个例子来说明RS码的编码原理。
[例13.2] 设在GF(23)域中的元素对应表如表13-01所示。假设(6,4)RS码中的4个信息符号为m3、m2、m1和m0,信息码符多项式为
(13-3)
并假设RS校验码的2个符号为Q1和Q0,的剩余多项式为
这个多项式的阶次比的阶次少一阶。