计算机校验码的思考--挖掘之三

来源:互联网 发布:查看淘宝关键词搜索量 编辑:程序博客网 时间:2024/06/06 00:03

校验码是用来校验计算机部件之间交换的数据正确性。

但是为什么说计算机中一个传输错误在一个校验单元中最多有一个,很少出现两个以上的错位呢?


通常来说计算机部件之间数据传输的可靠性是很高的,假设是99%以上的正确率。为了表示的更清楚,我们就假设错位率为1%。这样的话,在一个字节中,有7位是可以用来传输真实数据的,有两位的错位的概率大概是1%*1%这个数量级的。我们大概要传输上千个字节才会遇到这么一个奇葩,让它逃脱。因此各种校验码机制中才会设定出现一个校验数据段只检测出一个错位的这种机制,然后才会有后面的校验码机制。


奇偶校验码

奇/偶校验是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。
如果是采用奇校验,在传送每一个数据(一般是1个字节)的时候另外附加一位作为校验位,当实际数据中1的个数为偶数的时候,这个校验位就是1。否则,这个校验位就是0,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中1的个数,如果是奇数,表示传送正确。否则,表示传送错误。
偶校验的过程和奇校验的过程一样,只是检测数据中1的个数为偶数。当实际数据中1的个数为偶数的时候,这个校验位就是0,否则这个校验位就是1。这样,就可以保证传送数据满足偶校验的要求。在接收方收到数据时,将按照偶校验的要求检测数据中1的个数,如果是偶数个1,表示传送正确。否则,表示传送错误。

这样才会明白奇偶校验是解决了全部问题的大部分,只留下少部分。当传输的样本足够小的时候,它的校验能力会得到很高的体现。


海明码

海明码是奇偶校验的另一种扩充,和奇偶校验不同之处在于海明码采用多位校验码的方式,在信息数据位中合理加入校验位,将码距均匀拉大,校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。
海明码是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足关系式:2r³n+1或2r³k+r+1。
海明码的编码规则:在一般情况下,校验码会被插入到数据的1,2,4,8,…,2n位置,那么,在数据生成时,按照提供的海明校验方程计算出b1,b2,b4,…,bn各位,在数据校验时,按照海明检验方程进行计算,如果所有的方程式计算都为0,则表示数据是正确的。如果出现1位错误,则至少有一个方程不为0。海明码的特殊之处在于,只要将①②③三个方程左边计算数据按③②①排列,得到的二进制数值就是该数据中出错的位,例如第6位出错,则③②①为110为二进制数6。
当出现两位错误时,这种海明码能够查错,但无法纠错。它比奇偶校验好在可以纠错了,不仅仅只是查错。


循环冗余校验

参考高等代数的多项式除法问题,这里重点的是除数多项式的生成。

C(n,k)  信息码占k位,校验码占n-k位。当校验码比较长的时候可以纠错,当校验码短的时候,传输效率提高,无法纠错。但是检错i的基本能力仍然存在。


0 0
原创粉丝点击