步骤:计算校验码位数→确定校验码位置→确定校验码
①计算校验码位置
假设用N表示添加了校验码位后整个传输信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位数,它们之间的关系应满足:N=K+r≤2r
2
𝑟
-1(是为了确保r位校验码能校验全部的数据位,因为r位校验码所能表示的最大十进制数为2r-1,同时也确保各位码本身不被其他校验码校验)
设有数据为8位,那么 2⁴-1=15>8+4=12,则校验位为4位,即这个海明码长12位
②确定校验码位置
海明码的校验码的位置必须是在2n
2
𝑛
位置(n从0 开始,分别代表从左边数起分别是第1、2、4、8、16……),信息码也就是在非2n
2
𝑛
位置
令信息位为D7,D6,D5,D4,D3,D2,D1,D0,信息位从高往低占据编码位;
令校验位为P3,P2,P1,P0,校验位P0=2⁰=1,P1=2¹=2,P2=2²=4,P3=2³=8;
位数 12 11 10 9 8 7 6 5 4 3 2 1
信息位 D7 D6 D5 D4 D3 D2 D1 D0
校验位 P3 P2 P1 P0
③确定校验码
信息位的位数=校验位组的位数之和
信息位D7的位数为12,12=8+4,所以D7的校验位组为P3(位数:8)和P2(位数:4)
信息位 位数校验计算 校验位组
D7 12=8+4 P3,P2
D6 11=8+2+1 P3,P1,P0
D5 10=8+2 P3,P1
D4 9=8+1 P3,P0
D3 7=4+2+1 P2,P1,P0
D2 6=4+2 P2,P1
D1 5=4+1 P2,P0
D0 3=2+1 P1,P0
由上表可得,P0参与了D0,D1,D3,D4,D6的检验,其他由此类推
P0=D0⊕D1⊕D3⊕D4⊕D6
P1=D0⊕D2⊕D3⊕D5⊕D6
P2=D1⊕D2⊕D3⊕D7
P3=D4⊕D5⊕D6⊕D7
这样子就可以算出整个海明码的值了。
示例:设数据为01101001,求海明码。
数据位为8,则2⁴-1=15>8+4=12,则校验位为4位,即这个海明码长12位;
D7D6D5D4D3D2D1D0=01101001;
P0=2⁰=1,P1=2¹=2,P2=2²=4,P3=2³=8;
P0=D0⊕D1⊕D3⊕D4⊕D6=1⊕0⊕1⊕0⊕1=1
P1=D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕1⊕1⊕1=0
P2=D1⊕D2⊕D3⊕D7=0⊕0⊕1⊕0=1
P3=D4⊕D5⊕D6⊕D7=0⊕1⊕1⊕0=0
则海明码为011001001101