二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),就有了如何发现及纠正误码的问题。
验错、纠错、码距
验错顾名思义,检验错误。纠错,在验错的基础上,还要纠正错误。
码距,一言蔽之:不同位的个数即是码距。两个码组对应位上数字的不同位的个数称为码组的距离,简称码距,又称海明(Hamming)距离。例如00110和00100码距为1,12345和13344码距为2,Caus和Daun码距为2。
海明校验码公式(假设为k个数据位设置r个校验位)
2r ≥ k + r + 1
海明校验码
求1011的海明码
1.根据公式:k等于4。代入2r ≥ 5 + r可知,r最小为3。所以海明码位数为4+3=7位
2.填表:信息位从高到低依次存放;海明校验码放在2的幂次位上
 位数       1      2      3      4      5      6      7
信息位                    1             1      0      1
校验位      r1     r2            r3
 下标       1      2     1+2     4     4+1    4+2    4+3    
海明码      r1     r2    r1+r2   r3    r3+r1  r3+r2  r3+r2+r1
得到r1、r2、r3位置:
r1:3、5、7
r2:3、6、7
r3:5、6、7
3.异或运算(同0异1):
第3、5、6、7位分别为1、1、0、1,则
r1=3⊕5⊕7 ==> 1⊕1⊕1 ==> 0⊕1  ==> 1
r2=3⊕6⊕7 ==> 1⊕0⊕1 ==> 1⊕1  ==> 0
r3=5⊕6⊕7 ==> 1⊕0⊕1 ==> 1⊕1  ==> 0
4.代入表格,从低位到高位排序的海明码为:1010101
 位数       1      2      3      4      5      6      7
信息位                    1             1      0      1
校验位      1      0             0
循环冗余校验码(CRC)
假设使用的生成多项式是 G(x)=x3+x+1。4位的原始报文为1010,求编码后的报文?
1.根据G(x)=x3+x+1得到二进制1011:G(x)=x3+x+1等价于G(x)=x3+x1+x0。其中x2没有,而指数3、1、0位有。则第3、1、0为1,第2位为0,即1011
2.1101共有4位,在原始报文后添(4 - 1)个0,得到1010 000
3.对第二步的1010 000进行模2除法(同0异1):
                 1 0 0 1
        ___________________
        |               
1 0 1 1 |  1 0 1 0 0 0 0
        /  1 0 1 1      
         ——————————————————
             0 0 1 0
             0 0 0 0
         ——————————————————
               0 1 0 0
               0 0 0 0
         ——————————————————
                 1 0 0 0
                 1 0 1 1
         ——————————————————
                   0 1 1  (余数,校验位)
4.编码后的报文(CRC码):原始报文1010加上余数011,即1010 011