例题

求信息1011的海明码


第1步 求校验码位数

牢记公式:2^r >= k + r + 1

  • k 值:原始信息码的位数,已知
  • r 值:校验码的位数,根据公式求

① 此题中,信息码为 1011 ,共4位数,所以 k = 4

② 根据公式,将 k 值代入,解得符合表达式的值即为 r 的值,也就是校验码位数

此题中,可以算出 2^3 >= 4 + 3 + 1 ,所以 r = 3,校验码位数为3位


第2步 确认校验码位置

校验码的位置都是基于 2^n 来确定的,比如 2^0 = 1,2^1 = 2,2^3 = 4....

所以校验码的位置一般都是1、2、4、8....

① 海明码的长度 = 原始信息码 + 校验码

此题中,海明码长度 = 4 + 3 = 7位

② 建立一个从高位到低位的表格,表格列数即为海明码的长度

先填校验码,在本题中,校验码为3位,即占了1、2、4位,这里以r0、r1、r2来表示校验码

再填信息码,从高位往低位顺序填上信息码,即从左到右,注意要跳过校验码

7654321位数
101 1 信息位
r2 r1r0校验位

此时化简就是: 1 0 1 r2 1 r1 r0

只要能求出r0~r2的值,就可以写出完整海明码了


第3步 计算校验码

将每个信息位数拆分成n个校验位数之和

在本题中,信息位是:7、6、5、3,校验位是:4、2、1,则

7 = 4 + 2 + 1,表示第7位的信息码由第4、2、1位的校验码所校验,下同

6 = 4 + 2

5 = 4 + 1

3 = 2 + 1

② 分组

将上面等式中,各个校验码所校验的位数进行分组

如r2是第4位,而4校验了上面的7、6、5位,可以写成

r2(7,6,5)

r1(7,6,3)

r0(7,5,3)

③计算

将分组的元素转为该位置对应的信息码再进行异或运算即可

注意,是异或运算,即同0异1的原则

r2 = 1 ⊕ 0 ⊕ 1 = 0

r1 = 1 ⊕ 0 ⊕ 1 = 0

r0 = 1 ⊕ 1 ⊕ 1 = 1

到这里基本就算完了,可以知道r2 = 0,r1 = 0,r0 = 1


第4步 得到海明码

还记得上一张表吗,将校验码的位数的值填进去,就是一个海明码了

7654321位数
1010101信息位
r2 r1r0校验位

所以,海明码就是 1010101

文章目录