校验码

时间:2024-04-11 14:57:57

检验码的检错和纠错原理

码距任何编码都由一组码字(code word)组成,两个码字间变化的二进制位数称为码距(code distance)

例如:

   若用1位长度的二进制编码。A=1,B=0。则A和B之间最小的码距为1

   若用2位长度的二进制编码。A=11,B=00。则A和B之前最小的码距为2

   若用3位长度的二进制编码。A=111,B=222。则A和B之间最小的码距为3

码距与检错和纠错之间的关系

     若在一个码组内为了检测e个误码,最小的码距d应该满足 d>=e+1

     若在一个码组内为了纠正t个误码,最小的码距d应该满足 d>=2t+1

     若在一个码组内为了纠正t个错误,同时检测e(e>=t)个错误,要求最小码距d满足 d>t+e+1

循环冗余校验码CRC

      循环冗余检验码在进行编码时,其编码的结果有数据位+校验位组成,其中数据位在前,校验位在后

     ps:用到了模2除法

     ①:信息码  K

     ②:检验码  R

     ③:编码长度N=K+R

     ④:生成的多项是为G(X),最高次幂是R,多项式一共有R+1项

     ⑤:多项式转化为二进制序列,一共R+1位二进制,用来做除数,我们把它叫多项式的二进制除数

     ⑥:在信息码(原始报文)的后面加上R个0,。我们把它叫做加0的原始报文

     ⑦:用加0的原始报文 多项式的二进制序列做模2除法,得到余数(余数的位数和R的位数是一样的,要是几个都是几个)

     ⑧:把余数加在原始报文的后面(把原始报文左移),得到总的编码 余数就是校验码

     ⑨:接收端对数据的校验: 除数不变,用模2除法,验证余数是否为0,若为0则说明数据帧没有出

校验码

海明码校验 

① 计算校验码位数  

N 整个传输信息的二进制位数

 K有效信息的位数

 R校验位的位数

  它们之间的关系满足   N=K+R<=2^n - 1 (确定了校验位的位数)

有效信息位数 1 2~4 5~11 12~26 27~57 58~120
校验码位数 2 3 4 5 6 7

 

确定校验位的位置

校验码Pi 必须是在2的n次方位置,即只能放在H1,H2,H4,H8...(1、2、4、8、16)

计算校验位 Pi

1101  -----即: D3  D2  D1  D0 = 1 1 0 1

整理可得: H7 H6 H5 H4 H3 H2 H1

                = D3 D2 D1 P3 D0 P2 P1

代入数字  =  1   1    0  P3  1   P2 P1

根据:H3 = H1+H2   (右下标之和等于左下标。)

           H5 = H1+H4

           H6 = H2 + H4

           H7 = H1 + H2 + H4

可得:P1(H1) = H3 ⊕ H5 ⊕ H7 (⊕表示异或,即:与H1有关的信息码进行异或)

           P2(H2) = H3 ⊕ H6 ⊕ H7

           P3(H4) = H5 ⊕ H6 ⊕ H7

计算可得:P1 = 0,P2 = 1,P3 = 0

所以:最终海明码: H7 H6 H5 H4 H3 H2 H1 = 1 1 0 0 1 1 0

④纠错和检错

设检测位G1,G2,G3:

则有:G1 = P1 ⊕ H3 ⊕ H5 ⊕ H7 ;

           G2 = P2 ⊕ H3 ⊕ H6 ⊕ H7;

           G3 = P3 ⊕ H5 ⊕ H6 ⊕ H7;

当偶校验时:G3 G2 G1 值皆为0则数据无误,若G3 G2 G1不全为0说明数据传输有误,且其十进制指出了错误发生的位置。

(例:G3 G2 G1 = 101,其十进制为 5 ,即:H5 发生了错误,H5的位置为D1,则说明D1传输错误,则将D1的位置取反,即可纠错。)

所以海明码定义:具有纠正一位错误的能力