首页/计算机组成原理/02-data-representation/奇偶校验码 🔗 在 Obsidian 中打开
计算机组成原理 · 02-data-representation

奇偶校验码

重要度 ⭐⭐⭐校验码奇校验偶校验码距
速查
奇校验:1 的个数为奇数;偶校验:1 的个数为偶数。偶校验位 $P = D_n \oplus \cdots \oplus D_1$,奇校验位取反。只能检奇数位错、不能纠错,码距 2;分组(矩阵)奇偶校验可定位单个错误

基本概念

奇偶校验码是最简单的检错编码方法,在原始数据基础上增加一位校验位,使整个码字中"1"的个数满足奇数或偶数要求。

  • 奇校验(Odd Parity):使码字中"1"的个数为奇数。
  • 偶校验(Even Parity):使码字中"1"的个数为偶数。

编码方法

校验位计算

对于数据位 $D_n D_{n-1} \cdots D_1$,校验位 $P$:

  • 偶校验:$P = D_n \oplus D_{n-1} \oplus \cdots \oplus D_1$。
  • 奇校验:$P = \overline{D_n \oplus D_{n-1} \oplus \cdots \oplus D_1}$。

检测方法

接收端将所有位(含校验位)异或:偶校验结果为 0 无错、1 出错;奇校验结果为 1 无错、0 出错。

手算示例

例 1:偶校验编码

数据 = 1011001,$P = 1 \oplus 0 \oplus 1 \oplus 1 \oplus 0 \oplus 0 \oplus 1 = 0$,偶校验码 = 0_1011001(1 的个数 = 4,偶数 ✓)。

例 2:奇校验编码

数据 = 1011001,$P = \overline{0} = 1$,奇校验码 = 1_1011001(1 的个数 = 5,奇数 ✓)。

例 3:检错过程

发送 01011001(偶校验)
接收 01011001(无错):0⊕1⊕0⊕1⊕1⊕0⊕0⊕1 = 0 ✓
接收 01111001(第2位出错):0⊕1⊕1⊕1⊕1⊕0⊕0⊕1 = 1 ✗ 检测到错误

奇偶校验的局限性

特性说明
能检测奇数个位出错
不能检测偶数个位同时出错
能否纠正不能纠正任何错误
冗余度仅 1 位校验位,开销最小

奇偶校验的扩展应用

分组奇偶校验(交叉校验)

将数据排成矩阵,分别对行和列进行奇偶校验,行列交叉点定位单个错误

数据矩阵(4×8):
  D1 D2 D3 D4 D5 D6 D7 D8  行校验
A  1  0  1  1  0  0  1  0   0
B  0  1  1  0  1  0  0  1   0
C  1  1  0  0  0  1  1  0   0
D  0  0  1  1  1  1  0  1   1
列校验 0  0  1  0  0  0  0  0   0
  • 可检测并定位单个错误(行列交叉定位)。
  • 可检测多位错误但不能纠正。

与海明校验的关系

海明码本质上是多个校验组的奇偶校验组合使用。

实际应用场景

  • 内存 ECC:服务器内存常用奇偶校验检测错误。
  • 串口通信:UART 通信可配置奇偶校验位。
  • 磁盘存储:部分存储系统用奇偶校验做初步检错。

与其他校验码对比

编码方式校验位数检错能力纠错能力冗余度
奇偶校验1 位检 1 位错最低
海明码r 位检多位错纠 1 位错中等
CRCr 位检多位错可控

记忆卡片

奇偶校验能检测多少位错误?
能检测奇数位错误,不能检测偶数位错误。记忆:奇偶 → 只看奇偶 → 奇数个位出错能发现。
偶校验的校验位怎么算?
校验位 = 所有数据位的异或,使总 1 的个数为偶数。记忆:偶校验 = 异或结果直接取。
奇偶校验能否纠正错误?
不能纠正,只能检错。记忆:1 位校验位只能"发现"问题,无法"定位"问题。
为什么分组奇偶校验能定位错误?
同时标记出错的行和列,交叉点即为错误位。记忆:像坐标定位 (x,y)。

交互动画 · 分组奇偶校验定位错误

点击任一数据位制造错误,红色行列交叉即定位到该位 列校验 行 校验 单个错误 → 唯一出错的 行 + 列 → 定位;偶数个错误 → 行列校验均不报警(漏检)。
点击数据位制造错误,观察行列校验报警并定位
点击按钮开始

相关知识点

hamming-code

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。