数据的表示和运算 —— 奇偶校验码、海明码、CRC码

校验码是指能够发现或能够自动纠正错误的数据编码,也称为检错纠错编码。任意两个合法码字之间 最少变化 的二进制位数,称为数据校验码的码距。对于码距不小于2的数据校验码,开始具有检错的能力。码距越大,检错、纠错的能力就越强,而且检错能力总是大于等于纠错能力。(如1100和1101之间的码距是1,因为只有最低位翻转了。而1001和0010之间的码距为3,因为只有1位没有发生变化)

一、奇偶校验码

  • 奇偶校验无法纠错

在这里插入图片描述

在数据传输之前,我们会求一次校验位,传输后,会求一次校验位,那么,在奇偶校验中,我们通过比较这两个校验位是否相同,若结果为1,则说明有奇数个错误,结果为0,则说明正确或者偶数个错误。


二、海明码

  • 海明码能发现2位错误并纠正1位错误

海明码是一种多重奇偶校验码,有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,还能指出错位的位置,为自动纠错提供依据。

在n=4,k=3时,求 1010 的海明码

1. 确定海明码的位数

在这里插入图片描述
在这里插入图片描述
若要检测两位错,则需再加1位检验位,即k+1=3+1=4位

2. 确定校验位的分布

在这里插入图片描述

3. 求校验位的值

在这里插入图片描述
所以,1010对应的海明码为1010010(加粗部分为校验位,其余为信息位)

4. 海明码的校验

每个校验组分别利用校验位和参与形成该校验位的信息位进行奇偶校验检查
在这里插入图片描述

010说明H2(P2)出错,直接将该位取反就达到了纠错的目的


三、循环冗余校验码(CRC码)

  • CRC码可以发现并纠正信息串行读/写、存储或传送中出现的一位或多位错(与多项式的选取有关)

在发送端,将要传送的K位二进制信息码左移R位,将它与生成多项式的G(x)做模2除法,生成一个R位校验码,并附在信息码后,构成一个新的二进制码(CRC码),共K+R位

在接收端,利用生成多项式对接收到的编码做模2除法,以检测和确定的位置,如可以整除则说明没有发生错误。

1. 确定K、R以及生成多项式对应的二进制码

在这里插入图片描述

2. 移位

信息码左移R位,低位补0,得到101001000

3. 相除

模2除法:模2加法和减法的结果相同,都是做异或运算,模2除法的结果不影响其他位,即不借位。
在这里插入图片描述

4. 检错和纠错

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/starter_____/article/details/95160657
今日推荐