0%

Hanming Code

汉明码的组成

汉明码是由 Richard Hanming 于 1950 年提出的,具有一位纠错能力

由纠错理论得 L - 1 = D + C (D ≥ C)
即编码最小距离 L 越大,则其检测错误的位数 D 越大,纠正错误的位数 C 也越大,且纠错能力恒小于或等于检错能力

设欲检测的二进制代码为 n 位,为使其具有纠错能力,需添加 k 位检测位,组成 n + k 位的代码,k 应满足
2k - 1 ≥ n + k

nk(min)
12
2~43
5~114
12~265
27~576
58~1207

设 n + k 位代码自左至右依次编为第 1, 2, 3, …, n + k 位,而将 k 位检测位记作 Ci (i = 1, 2, 4, 8, …),分别安插在 n + k 位代码编号的第 1, 2, 4, 8, …,
2k - 1 位上

Ci检测
C1检测的 g1 小组包含 1, 3, 5, 7, 9, 11, … 位
C2检测的 g2 小组包含 2, 3, 6, 7, 10, 11, 14, 15, … 位
C4检测的 g3 小组包含 4, 5, 6, 7, 12, 13, 14, 15, … 位
C8检测的 g4 小组包含 8, 9, 10, 11, 12, 13, 14, 15, 24, … 位

有如下特点:

  1. 每个小组 gi 有一位且仅有以为为它所独占,这一位是其他小组所没有的,即 gi 小组独占第 2i - 1
  2. 每两个小组 gi 和 gj 共同占有一位是其他小组没有的,即每两小组 gi 共同占有第 2i - 1 + 2j - 1
  3. 每三个小组 gi、gj 和 gl 共同占有第 2i - 1 + 2j - 1 + 2l - 1 位,是其他小组所没有的
  4. 以此类推

令 b4b3b2b1 = 0101,则
C1 = b4 ⊕ b3 ⊕ b1 = 0
C2 = b4 ⊕ b2 ⊕ b1 = 1
C4 = b3 ⊕ b2 ⊕ b1 = 0
故 0101 的汉明码为 0100101

汉明码的纠错过程

汉明码的纠错过程实际上是对传送后的汉明码形成新的检测位 Pi,根据 Pi 的状态便可直接指出错误的位置
P1 = 1 ⊕ 3 ⊕ 5 ⊕ 7 = C1 ⊕ b4 ⊕ b3 ⊕ b1
P2 = 2 ⊕ 3 ⊕ 6 ⊕ 7 = C2 ⊕ b4 v b2 ⊕ b1
P4 = 4 ⊕ 5 ⊕ 6 v 7 = C4 ⊕ b3 v b2 ⊕ b1

设已知传送的正确汉明码为 0100101,若传送后接收到的汉明码为 0100111,其出错位可以按照以下步骤确定

二进制序号1234567
正确的汉明码0100101
接收到的汉明码0100111

则新的检测位为

P4 = 4 ⊕ 5 ⊕ 6 ⊕ 7 = 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1
P2 = 2 ⊕ 3 ⊕ 6 ⊕ 7 = 1 ⊕ 0 ⊕ 1 ⊕ 1 = 1
P1 = 1 ⊕ 3 ⊕ 5 ⊕ 7 = 0 ⊕ 0 ⊕ 1 ⊕ 1 = 0

P4P2P1 = 110 = 6
所以是第 6 位出错

汉明码常常被用在纠错一位的场合,若欲实现检错两位,实用时还得再增添一位检测位

Welcome to my other publishing channels