2.2 校验码:奇偶校验、海明码与 CRC
码距与检错纠错能力,奇偶校验码,海明码的编码、检错与纠错,循环冗余校验码的生成与校验。
码距
由若干位代码组成的一个字称为码字。将两个码字逐位进行对比,具有不同的位的个数称为这两个码字间的距离。一种编码方案可能有若干合法码字,各合法码字间的最小距离称为码距 。
奇偶校验码
在有效信息位上添加一位校验位,使整个校验码中”1”的个数为奇数(奇校验)或偶数(偶校验)。
- 偶校验位 = 所有信息位的异或:;奇校验位为其取反;
- 只能检测奇数位的错误,不能纠错,也不能检测偶数位的错误;
- 实现简单,常用于存储器读写检查或 ASCII 码传送。
海明码
海明码的设计思想:在有效信息位中加入几个校验位形成海明码,使码距比较均匀地拉大,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错误,还能指出错误的位置,为自动纠错提供依据。
校验位个数:设信息位为 位,校验位为 位,则需满足
即 位校验位能表示 种状态,其中 1 种表示无错,其余 种用于指出 位中哪一位出错。例如 时 ; 时 ; 时 。
编码步骤(以偶校验为例):
- 校验位 放在位号为 的位置上(),信息位按顺序放在其余位置;
- 每个信息位由位号的二进制表示中为 1 的那些校验位共同负责。例如 (111)由 、、 共同校验,(110)由 、 校验;
- = 它所负责的所有信息位的异或。
检错与纠错:接收端对每一组(含校验位本身)重新求异或,得到指错字 。若全为 0 则无错;否则其二进制值就是出错的位号,将该位取反即可纠正。
交互演示海明码:编码、出错与纠错(点击"接收端"的某一位使其出错)
指错字 S3…S1 = 011= 3,说明第 3 位(H3)出错,将其取反即可纠正。
循环冗余校验码(CRC)
CRC 码的基本思想:在 位信息码之后拼接 位校验码,整个编码长度为 位。生成规则:
- 根据生成多项式 写出对应的二进制位串(最高次为 ,共 位)。例如 对应 1101;
- 在信息码后面补 个 0;
- 用补 0 后的信息码对 进行模 2 除法(不借位、不进位的减法,即异或),得到 位余数;
- 把余数拼接在信息码后面,就得到 CRC 码。
动画演示CRC 循环冗余校验码:模 2 除法
1/14生成多项式 G(x) 对应 1101,最高次为 r = 3。先在信息位 101001 后面补 3 个 0,得到被除数 101001000
检错:接收端将收到的 CRC 码用同一个 进行模 2 除法,若余数为 0,则认为没有错误;若余数不为 0,则说明传输过程中出现了错误(在合理选取生成多项式时,余数与出错位置有一一对应关系,因此 CRC 码也可以纠正 1 位错误,但实际通常只用于检错)。
即时练习
即时练习4 题
点击选项即可作答
- 1用海明码对长度为 8 位的数据进行检/纠错时,若能纠正一位错,则校验位数至少为( )。
- 2下列编码中,能检测出所有长度小于或等于校验位(检测位)长度的突发错的校验码是( )。
- 3若信息码字为 111000110,生成多项式 G(x) = x⁵ + x³ + x + 1,则计算出的 CRC 校验码为( )。
- 4某数据的 7 位编码为 0100011,若要增加一位奇校验位(在最高位之前),则编码为( )。
学完了吗?
标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。