信息为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
转载于:https://blog.51cto.com/867645/1158015