信息为m位,校验位为k个。计算k的最小值公式为:2^k-1>=m+k

例子:数据为11001100,k的数值是多少?

      2^k-1-k>=8

      经推导k=4,所以m+k=12位

然后推导出督导公式

数据位  D    C    B    A

  1     0    0    0    1

  2     0    0    1    0

  3     0    0    1    1

  4     0    1    0    0

  5     0    1    0    1

  6     0    1    1    0

  7     0    1    1    1

  8     1    0    0    0

  9     1    0    0    1

  10    1    0    1    0

  11    1    0    1    1

  12    1    1    0    0

k位校验位放在如下位址:

码字位置:B1   B2   B3   B4   B5  B6  B7   B8   B9   B10   B11   B12

校验码  :x    x         x            x

数据位  :          d1        d2  d3       d4   d5   d6    d7    d8

                    1         1   0        0    1    1     0     0

督导公式:

A=b1+b3+b5+b7+b9+b11(这里的+是异或运算,b1就是数据位1)

B=b2+b3+b6+b7+b10+b11

C=b4+b5+b6+b7+b12

D=b8+b9+b10+b11+b12

接着推导:

A=B1+D1+D2+B7+d5+D7=0  ==>B1=D1+D2+0+D5+D7=1+1+0+1+0=1(如果是校验位,就填零做补)

B=B2+d1+d3+B7+d6+d7=0  ==>B2=d1+d3+0+d6+d7=1+0+0+1+0=0

C=B4+d2+d3+B7+d8=0  ==>B4=d2+d3+0+d8=1+0+0+0=1

D=B8+d5+d6+d7+d8=0 ==>B8=d5+d6+d7+d8=1+1+0+0=0

推导出海明码字

101110001100

如果接受这个海明码字的话,1001 1000 1100 冗余位k=4,怎样计算出原来的信息码?

1、设置错误累加器err=0;

2、求出冗余码的偶校验和,并按码位累加到err中:

   A=b1+b3+b5+b7+b9+b11=1+0+1+0+1+0=1 err=err+2^0=1

   B=b2+b3+b6+b7+b10+b11=0+0+0+0+1+0=1 err=err+2^1=3

   C=b4+b5+b6+b7+b12=1+1+0+0+0=0

   D=b8+b9+b10+b11+b12=0+1+1+0+0=0

   err=3,累加和是3

3、纠错第三位的错误

   1011 1000 1100

   得到的信息:11001100

 CRC校验过程:

例如:信息位为:1010 0110,生成多项式为a(x)=x^5+x^4+x+1

      这里的生成多项式选择是有讲究的

      1、最高和最低位为1

      2、添加了CRC冗余码后,除以生成多项式,余数为0正确,不为零继续补零

         继续除以生成多项式,余数还不为零

      第一步:因为生成多项式最高R=5所以

              C(x)=x^7+x^5+x^2+x^1

              C(x)*x^5=x^12+x^10+x^7+x^6

       第二步:除以生成多项式

               

余数为:11000

所以添加CRC校验码后的信息为:1010 0110 11000