基础概念
海明码的构成方法是在数据位
之间的特定位置
(2^n (n为正整数)
)上插入k个检验位,通过扩大码距来实现检错和纠错。
海明码(也叫汉明码)具有一位纠错能力。
海明码默认进行偶校验(除非特殊说明使用奇校验)。
海明码本质: 对数据位分组奇偶校验
。
1.1 求海明码中校验位位数
已知海明码 n+k 位, 其中数据位是 n 位,校验位是 k 位,则 n 和 k 必须满足以下关系:
2k -1 ≥ n+k
即n+k 位海明码,对 n 位数据位分为 k 组
进行奇偶校验的结果。
例如: 编码前有效信息为10011101,求校验位位数?
数据位 n = 8;k 可依次用正整数(1,2,3,4…)带入公式可的最小的 k=4 ,即对 8 位数据位分为 4 组进行奇偶校验。
1.2. 求海明码中校验位位置
校验位在海明码中的位置为 2n (n为正整数)(即 20=1、21=2、22=4、23=8…)
例如:当校验位为4位时(即k=4)校验位位置分布如下表, P代表校验位。
1.3.求海明码中校验位数值
海明码本质: 对数据位分组奇偶校验。
分组方式:按照海明码中校验位位索引(B)中1的位置(第X位为1)对数据位分组,即数据位位索引(B)中同位置(第X位)为1的数据位为一组。
求P1:
此时第3、5、7、9、11为一组,此组数据位中奇数个1,为保证偶校验,则此时P1应取1,即P1=1。
求P2:
此时第3、6、7、10、11为一组,此组数据位中奇数个1,为保证偶校验,则此时P2应取1,即P2=1。
求P3:
此时第5、6、7、12为一组,此组数据位中偶数个1,为保证偶校验,则此时P3应取1,即P3=0。
求P4:
此时第9、10、11、12为一组,此组数据位中奇数个1,为保证偶校验,则此时P4应取1,即P4=1。
到此整个编码工作结束,完整的海明码则为:
1.4.海明码校验纠正
校验
假设上述中的海明码 1110001111
01 的第10位在传输中出现错误,由1变为0,即为1110001110
01 。
海明码本质: 对数据位分组
奇偶校验,则校验按分组校验。
直接数各组中1的个数,奇数为1偶数为0,或使用异或运算
G1组:1(P1)、3、5、7、9、11 G1=P1⊕D3⊕D5⊕D7⊕D9⊕D11 = 1⊕1⊕0⊕1⊕1⊕0 = 0
G2组:2(P2)、3、6、7、10、11 G2=P2⊕D3⊕D6⊕D7⊕D10⊕D11 = 1⊕1⊕0⊕1⊕0⊕0 = 1
G3组:4(P3)、5、6、7、12 G3=P3⊕D5⊕D6⊕D7⊕D12 = 0⊕0⊕0⊕1⊕1 = 0
G4组:8(P4)、9、10、11、12 G4=P4⊕D9⊕D10⊕D11⊕D12 = 1⊕1⊕0⊕0⊕1 = 1
G2、G4=1,此次使用的是偶校验规则,所有表示数据有错误。
定位错误位
排除法
没有出错的组,表示组内的位都是正确的,则可以通过没有出错组内的位排除定位错误位。
使用G1、G4中的位排除后:
G2组:2(P2) 、10
G4组:8(P4)、10
两组共同存在的位为10号位,则错误位为10号位。
计算法
按校验位降序排列可得G4 G3 G2 G1(二进制高位在左),设出错位为N,则得公式N = G4 G3 G2 G1,即 N=1010 转换成十进制得10,则说明,接收端得到的海明码第10位出现了传输错误(很神奇,没搞清楚原理)。
纠错
二进制位非0即1,当判断出是哪位出错对该位取反即可。则经过纠正的海明码为1110001111
01 ,与发送端保持了一致。