Skip to content

奇偶校验与 CRC

考情分析

校验码是 408 数据表示章节的固定考点。奇偶校验以概念选择题为主,CRC 则经常出大题,要求手工做模 2 除法求出校验码。海明码由于内容较多,单独成篇讨论。

检错与纠错的基础:码距

码距(Hamming Distance):两个合法编码之间不同位的个数。编码方案的最小码距 d 决定了检错纠错能力。

最小码距 d能力
d2检测 1 位错误
d3检测 2 位,或纠正 1 位
d2t+1纠正 t 位错误
dtd+tc+1td>tc同时检测 td 位、纠正 tc

检错和纠错不能同时达到理论上限。如 d=3,可选"检 2 纠 0"或"检 0 纠 1",不能同时"检 2 纠 1"。

奇偶校验

在数据后附加 1 位校验位,使整个编码中 1 的个数满足奇偶性要求。

偶校验

所有位(含校验位)中 1 的个数为偶数

P=bn1bn2b0

奇校验

所有位中 1 的个数为奇数

P=bn1bn2b0

检错能力与局限

奇偶校验的最小码距 d=2

错误类型能否检测原因
1 位出错1 的奇偶性改变
2 位出错不能奇偶性不变
3 位出错奇偶性改变
偶数位出错不能奇偶性始终不变

总结:只能检测奇数位错误,不能纠错(不知道哪一位出错),也不能检测偶数位错误。

硬件实现极其简单——只需一个多输入 XOR 门。

三种校验方式

方式校验范围检错能力
水平校验每个字按行加 1 位检单字内奇数位错
垂直校验同一位列加 1 位检同列奇数位错
水平 + 垂直行列都加校验位可定位出错位,能纠 1 位错

CRC 循环冗余校验

CRC 是一种基于多项式除法的校验方法,检错能力远强于奇偶校验,广泛用于网络通信和存储系统。

基本原理

  1. 将数据位串看作一个二进制多项式 M(x)
  2. 选定一个 r 阶的生成多项式 G(x)(最高次幂为 r,共 r+1 位)
  3. M(x) 左移 r 位(数据后补 r 个 0),得到 M(x)xr
  4. G(x)模 2 除法,余数即为 r 位 CRC 校验码
  5. 用余数替换补的 0,拼接在数据后面发送

模 2 运算规则

模 2 运算中加法和减法都是 XOR(异或),不进位不借位:

1+1=0,0+1=1,11=0,01=1

模 2 除法的过程类似普通长除法,但每步"减法"用 XOR 替代,且对齐被除数最高位为 1 时商 1、为 0 时商 0。

CRC 计算步骤

  1. 数据 k 位,生成多项式 r+1 位(r 阶)
  2. 数据后补 r 个 0,得到 k+r 位被除数
  3. 模 2 除法除以生成多项式
  4. 余数不足 r 位时高位补 0
  5. 余数替换第 2 步中补的 0 → 发送的完整编码为 k+r

接收端校验

接收到 k+r 位数据后,用同一个生成多项式做模 2 除法:

  • 余数 = 0:传输正确(或未检测到的错误)
  • 余数 0:传输出错

CRC 的检错能力

能力条件
检测所有 1 位错误G(x) 至少有两项
检测所有奇数位错误G(x) 含因子 (x+1)
检测所有双位错误G(x) 为本原多项式
检测所有长度 r 的突发错误总是成立

常见生成多项式

名称多项式二进制校验位数
CRC-4(ITU)x4+x+1100114
CRC-8x8+x2+x+11000001118
CRC-16(IBM)x16+x15+x2+117 位16
CRC-32(IEEE)x32+x26++133 位32

例题

例 1:数据 M=1011001(7 位),生成多项式 G(x)=x4+x+1(即 10011,4 阶),求 CRC 校验码。

数据后补 4 个 0:10110010000

模 2 除法过程:

10110010000 | 10011
10011       |
─────       |
 01010      |
 00000      |
 ─────      |
  10100     |
  10011     |
  ─────     |
   01110    |
   00000    |
   ─────    |
    11100   |
    10011   |
    ─────   |
     11110  |
     10011  |
     ─────  |
      11010 |
      10011 |
      ───── |
       1001 ← 余数

CRC 校验码 = 1001

发送数据 = 10110011001(原数据 + 校验码)

例 2:接收到数据 10110011001,用生成多项式 10011 校验。

1011001100110011 做模 2 除法,余数为 0000,传输正确。

若接收到 10110011011(最后一位翻转),模 2 除法余数不为 0,检测到错误。

例 3:对 8 位数据 11001010 做偶校验编码。

数据中 1 的个数 = 4(偶数),偶校验位 P=0

编码结果:110010100

考点清单

  • [ ] 码距与检错纠错能力:d2 检 1 位,d3 检 2 或纠 1
  • [ ] 偶校验:所有位异或为 0;奇校验:异或为 1
  • [ ] 奇偶校验只能检测奇数位错误,不能纠错
  • [ ] CRC 计算步骤:数据补 r 个 0 → 模 2 除法 → 取余数
  • [ ] 模 2 运算规则:加减都是 XOR,不进位不借位
  • [ ] 接收端校验:整体除以生成多项式,余数为 0 则无错
  • [ ] CRC 能检测所有长度 r 的突发错误

真题练习

相关真题(1题)

2013Q15选择题2分

海明码校验位数的计算