奇偶校验:
奇偶校验是一种通过增加冗余位使得码字中“1”的个数恒为奇数个或者偶数个的编码方式,是一种检错码,是不能纠错的。
奇偶校验分为三种:水平奇偶校验、垂直奇偶校验、水平垂直奇偶校验
eg:(红色的数字是校验位添加的数字,使得其中的1的个数始终未奇数(偶数)个)
原编码 奇校验 偶校验
0000 0000 1 0000 0
0010 0010 0 0010 1
1100 1100 1 1100 0
1010 1010 1 1010 0
如果发生奇数个位传输错误,name编码中的1的个数会发生变化,从而校验出错,要求重新传输数据,这种方式无法纠正错误。
海明码
核心公式:2r ≥k+r+1
异或:1的个数为奇数为1,1的个数为偶数为0;
其中k为信息的个数,r为校验位的个数,那么我们怎样来确定校验位?
按照教材中的示例:
eg:
二进制码 101101100,求它的海明编码
1、信息为k=9;r的最小值为4,所以校验位为4
2、所以校验码的位数为13位,如何分配校验码位置和信息位?以及校验位的值为多少?
3、分配校验码的位置:校验位的位置一般为2^n(n≥0),针对此题来说就是1、2、4、8的位置上。
4、信息位的位置:除了校验码位,其余的从高到低依次存放。如图
5、R1、R2、R3、R4的数值如何确定?
想要确定校正位的数值,就首先必须知道哪些信息位需要校正位来校正,校正的原则:想要校正第几(i)位,则应该满足对应的
那几个校正位相加等于i。例如3=1+2;7=1+2+4(2的n次方相加)。
从上面的位置能知道每一个校验码参与的信息位,然后就是异或⊕(相同的两个数异或为0,不同的两个数为1)
R1=B3⊕B5⊕B7⊕B9⊕B11⊕B13=1⊕0⊕1⊕0⊕1⊕0=1;
根据上表和计算公式得出R1=1,R2=1,R3=0;R4=0;则把结果填入其中得到
纠错
把海明校验码中的第11位改为0,验证错误,并找出错误位。
R1=B3⊕B5⊕B7⊕B9⊕B11⊕B13=1⊕0⊕1⊕0⊕1⊕0=1
R2=B2⊕B3⊕B6⊕B7⊕B10⊕B11=1⊕1⊕1⊕1⊕1⊕0=1
R3=B4⊕B5⊕ B6⊕B7⊕B12⊕B13=0⊕0⊕1⊕1⊕0⊕0=0
R4=B8⊕B9⊕B10⊕B11⊕B12⊕B13=0⊕0⊕1⊕0⊕0⊕0=1
从高位往下写得到1101,即十进制的11,因此错误的位数为第11位。