循环冗余校验码(CRC)和海明校验码

二进制数据经过传送、存取等环节,会发生误码(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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容