纠错码

来源:互联网 发布:解放台湾 知乎 编辑:程序博客网 时间:2024/04/30 01:10
在计算机系统中的各种信息,数据都是以二进制位串的形式存在,在计算机中进行读写,存取和传递的过程中都可能产生错误,为了减少和避免这些错误,一方面需要精心设计提高硬件电路的可靠性,另一方面是在数据编码上找方法,即采用某种编码法,通过少量的附加位,使之能够发现某些错误,甚至能够确定出错位置,进而具有自动改错的能力。

由于电源线的尖峰电压或其他原因,计算机内存偶尔也会出错。为防止这些错误,一些内存采用检错码或纠错码,即按特别的规则在每个内存字中增加一些附加位。当从内存中读出一个字时,用这些附加位来检验内存是否出错。
假设某内存字有m位数据位,往上加了r位附加位,或称校验位,其总长为n位,即n=m+r.我们把包含m位数据位和r位校验位的n位单元叫做n位码字。
两个码字间不同的位数称为汉明码距,即如果两个码字的码距为d,则将其中一个码字修改d位可以得到另一个码字。
在一个带检验位的内存中,所以码字中可以找到两个码距最小的码字,这个码距就是所有这些码字的码距。

编码的检错和纠错能力和它们的汉明码距有关。要检查d位错,编码的码距需要d+1,因为这样编码的话,一个码字d位出错了也无法成为另一个合法码字。
类似地,为纠错d位错,编码的码距需要为2d+1,这样即使其中d位出错,它和原来的码字的码距还是比其他任何合法码距要小,这样就可以唯一确定它的合法码了。

假如我们要纠错1位错,需对2M个合法的内存字中的每一个,它的n各二进制位中的每一位出错都是一个非法字,即每个合法码字都对应n个与它码距为1的非法码字,它们可以通过将合法码字中的n位逐一改变得到。
这样2M个合法码字的每个都需要n+1个码字与它对应(一个正确码字和n个非法码字)。又因为n位编码最多有2N个组合,因此有(n+1)*2M要小于或等于2N,因为n=m+r,代入得m+r+1小于或等于2R。

1.奇偶效验
奇偶校验是一种添加一个奇偶位用来指示之前的数据中包含有奇数还是偶数个1的检验方式。如果在传输的过程中,有奇数个位发生了改变,那么这个错误将被检测出来
奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性,简单说就是让数据序列中(包括你要加上的一位)1的个数为奇数,如1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。

2.汉明码
在汉明码中,n位码字,这个码字的位从1而不是从0开始计数,最左边的位第1位,所以2的整数幂的位是校验位,而其他位是数据位。
如对于16位字长,需要加入5位校验位,即第1,2,4,8,16位为校验位,其他位为数据,存储器的实际长度为21位。
每个校验位校验特定的位,一般来说,第b位是由第,b1,b2,...,bj位一起校验的,其中b1+b2+...+bj=b。如第5位由第1位和第4位一起校验,因为5=1+4.
发现出错位的一个简单办法是先计算所以检验位,如果都正确,则表明没有出错(或多位出错),然后将所有出错的校验位的位号相加,
求出的和就是出错的位号,比如第1位和第4位校验位不对,则1+4=5,所以第5位出错。

0 0
原创粉丝点击