一.什么是校验码?
校验码是指能够发现或能够自动纠正错误的数据编码,也称作检错纠错码。通常某种编码有许多码字构成,任意两个合法码字之间最少变化的二进制位数,称为数据校验码的码距,如 1100 和 1101 之间的码距为 1,因为只有最低位翻转了;而 1001 和 0010 之间的码距为 3,因为只有 1 位没有变化。对于码距不小于 2 的数据校验码,开始具有检错的能力。码距越大,检错纠错的能力越强,而且检错能力总是大于等于纠错能力。常用的校验码有奇偶校验码、海明校验码和循环冗余校验码。
原理:通过增加一些冗余码,来检验或纠错编码。
二.奇偶校验码
1、定义
- 在被传送的 n 位代码上增加一位校验位,并使其配置后的 n+1 位代码中“1”个数为奇数,则称为奇校验;若配置后“1”的个数为偶数,则称为偶校验。
2、特点 - 奇偶校验码的码距为 2,可以检测出一位错误(或奇数错误),但不能确定出错的位置,也不能够检测出偶数位错误。
3、例子
- 简单例子如下:
4、缺点
- 具有局限性,奇偶校验只能发现数据代码中奇数位的出错情况,但不能纠正错误。
5、使用范围
- 奇偶校验通常用于 I/O 设备,如键盘输入时使用的 ASCII 码,对存储器数据的检查,对传输数据的检查。
6、8421 码的奇偶校验码
7、补充带符号的 BCD 码的表示
三.海明校验码
1、概念
海明码是一种多重奇偶校验码,原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中;当某一位出错后,就会引起有关的几个校验位的值发生变化,不但可以发现错位,还能指出出错的位置,为自动纠错提供依据。
根据纠错理论得:
L - 1 = D + C 且 D≥C
即编码最小码距 L 越大,其检测错误的位数 D 越大,纠正错误的位数 C 也越大,且纠错能力恒小于等于检错能力。
————————————————
2、步骤
在 n=4,k=3 时,求 1010 的海明码
1)确定海明码的位数
设 n 为有效信息的位数,k 为校验位的位数,则 n,k 应当满足:n+k≤2k-1(若要检测两位错,则需要再增加 1 位校验位,即 k+1 位)
代入 n,k 式子成立,则 n,k 有效。设信息位为 D4D3D2D1(1010),共四位,校验位为 P3P2P1,共 3 位,对应的海明码为:H7H6H5H4H3H2H1。
————————————————
2)确定校验位的分布
规定校验位 Pi 在海明位号为 2^(i-1) 的位置上,其余各位为信息位,例如:P1 的海明位号为 2^0=1,即 H1 为 P1,所以海明码各位的分布如下:
3)分组以形成校验关系
每个数据位用多个校验位进行校验,但要满足条件:被校验数据位的海明位号等于校验该数据位的各校验位海明号之和。另外,校验位不需要再被校验。分组形成的校验关系如下:
4)校验拉取值
- 校验位 Pi 的值为第 I 组(由该校验位校验的数据位)所有位求异或(则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0;同为0,异为1)。由3)得:
- 所以,1010 对应得海明码为 1010010
5)校验
3、校验原理
参考文献:博主御承扬的文章、《计算机组成原理》(第六版·立体化教材)白中英 戴志涛 主编