校验码(主要为海明码)

来源:互联网 发布:潘粤明 跨界歌王知乎 编辑:程序博客网 时间:2024/04/30 07:22

      今天讲校验码。有些问题讲前似乎很清楚,但讲的过程中发现思路还不是那么清楚。此处再回顾一下。

一、码字和码距问题。

     由若干位代码组成的一个字叫做码字。

     一种码制是若干种码字的组合。

     将两个合法码字逐位比较,不同二进制数的位数成为两个码字间的距离。

     一种码制中,各码字间的最小距离称为该码制的“码距”。  

 

     例如,8位补码,码字是8位二进制组成的字,不同码字最少1位不同,故码距为1。再如奇偶校验,9位的奇偶校验可以表示的合法码字共28个,另外28个为非法码字。一个合法码字要变到另外一个合法码字,至少要有两位同时变化,所以码距为2。

 

     为了增加码制的码距,要加入校验位,校验位和数据位组成“码字”。 如海明码中的码字包括数据位和校验位。

 

二、交叉奇偶校验

     交叉奇偶校验中,如果传输的数据1位发生了错误,则可以定位到错误。可以检测到两个位同时发生错误,无论它们位于同行、同列还是不同行列。但是不能保证发现4位同时出错,如四位构成长方形。

三、海明码

     1、海明码的基本原理及计算方法

     假定海明码为m位,其中信息码n位,校验码k位。k位校验位共2k个组合,1个用来表示传输信息无误,k个用来表示某个校验位出错,n个用来表示某个数据位出错。

     

    若要求海明码能指出并纠正一位错,则数据位的位数n和校验位的位数k应满足如下关系(海明不等式):

          

                                    2 kkn+1 ,即  2 km+1 , 2 k-1≥m(海明码位数不超过k个校验位的数据表示范围)
         
    设:海明码Hm Hm-1……H2 H1的最高位号为m ,最低位号为1。编码规则为:
    
    ① 每个校验位Pi在海明码中被分配在位号2i-1的位置,其余各位为数据位,并按从低向高逐位依次排列的关系分配。
 
    ② 海明码的每一位码Hi由多个校验位作校验,被校验的每一位的海明码位号等于校验它的各校验位的海明码位号之和,以便使校验的结果能正确反映出错位的位号。
 
    ③ 在增大合法码的码距时,尽量使所有码的码距均匀的增大,以保证对所有码的检错能力平衡提高。
   
    因为2 k-1≥m,海明码的下标用k位2进制数表示,对应位为1的相应校验位将校验该位。例如,如果校验位共4位,则H6的下标为0110,被P2和P3校验;H15的下标为1111,被P1、P2、P3和P4校验;数据位至少跟2个校验位相关,至多跟4个相关,故码距为3
         根据校验位对数据位分组,相关数据位和校验位形成奇校验或偶校验(以偶校验为例)。例如,如果信息码16位,校验位5位,则各校验位可以根据在下标中的出现情况找到相关数据并通过异或运算计算得到。
 
        如果要求海明码能检测发现2位错并能自动纠正一位错,根据纠错理论,码距必须增加到4。可以通过将原海明码中与两个校验位相关的数据位扩展为与3个校验位相关,即增加1个校验位,使该校验位Pk+1为这些校验位的异或值。这样,校验位增加到了k+1位,原海明不等式2 k’k’n+1(k’=k-1,代入海明不等式)变为:2 k-1k+n

     2、校验

    因为校验位的计算公式通过相关数据位的异或得到,当相关数据位出错时,会引起Si(相关公式参考课件)变为1。因为数据位的海明码下标正好可分解为相关校验位的加权和,通过构成的值可判断出错的数据位。

    海明码中,如果仅有一个Si1,除了相应校验位可能出错外,也可能同时三位海明码出错,例如 D1D2P3错会使S21D1D5P4错也会使S21,虽能检测到错误,但错误位置不确定。

    推广海明码中,因为附加校验位的引入,码距变为4。当出现两个Si1时,肯定是两位海明码出错,但无法定位错误。

四、CRC校验码

    相对比较简单,注意出错时余数的循环。