汉明码检测及2 bit error实现方式

编码

p1 ~ p4是汉明校验码,d1 ~ d8为要传输的数据

根据图表 p1对应(0001)b,p2对应(0010)b,p3对应(0100)b,p4对应(1000)b

将d1 ~ d8根据p1 ~ p4,分成4组

p1组有:(位置号)1 3 5 7 9 11(bit0 都是1)

p2组有:2 3 6 7 10 11(bit1 都是1)

p3组有: 4 5 6 7 12

p4组有:8 9 10 11 12

「以偶校验为例」,p1 p2 p3 p4要保证每组中1的个数为偶数个

假设数据为0000_1111

根据分组,可以得出:p1 = 0, p2 = 0, p3 = 1, p4 = 0

则编码后的数据为:0001_0000_1111

校验

例1

如果收到的数据为「0001_0000_1111」



按照与编码相同的分组方式对c1 ~ c4分组,并将接收到的数据根据分组进行奇偶校验

对c1组的1 3 5 7 9 11位置奇偶校验,结果为0

对c2组的2 3 6 7 10 11位置奇偶校验,结果为0

对c3组的4 5 6 7 12位置奇偶校验,结果为0

对c4组的8 9 10 11 12位置奇偶校验,结果为0

四个校验位结果都为0,说明数据传输没有发生错误

例2

如果收到的数据为「0001_0000_1101」(将第11位翻转)



c1组奇偶校验结果为1

c2组奇偶校验结果为1

c3组奇偶校验结果为0

c4组奇偶校验结果为1

{c4, c3, c2, c1} = 1011,对应第11位,在传输的过程中,第11位发生错误

例3

如果收到的数据为「0001_0000_1001」(将第10、11位翻转)



c1组奇偶校验结果为1

c2组奇偶校验结果为0

c3组奇偶校验结果为0

c4组奇偶校验结果为0

{c4, c3, c2, c1} = 0001,汉明码显示的位置与实际位置不符合,无法定位到具体位置

那如果想检测到2 bit error应该如何处理

2 bit error检测

为编码后的数据额外增加一个奇偶校验位

还是上面的例子为例,增加一奇偶校验位



加上奇偶校验位后的编码为 0_0010_0001_1111

例4

如果收到的数据是「0_0010_0001_0011」(将第10、11位翻转)



c1组奇偶校验结果为1

c2组奇偶校验结果为0

c3组奇偶校验结果为0

c4组奇偶校验结果为0

整体校验结果为0

整体校验通过,但汉明校验为通过,有2 bit error

例5

如果收到的数据是「0_0010_0001_0011」(将第11位翻转)



1组奇偶校验结果为1

c2组奇偶校验结果为1

c3组奇偶校验结果为0

c4组奇偶校验结果为1

整体校验结果为1

整体未通过,汉明检验也未通过,有 1 bit error

例6

如果收到的数据是「0_0010_0001_1111」



c1组奇偶校验结果为0

c2组奇偶校验结果为0

c3组奇偶校验结果为0

c4组奇偶校验结果为0

整体校验结果为0

整体通过,汉明检验也通过, 没有error

总结
整体奇偶校验未通过,汉明校验未通过,有1 bit error并可纠正
整体奇偶校验通过,汉明校验未通过,有2 bit error且不可纠正
整体奇偶校验通过,汉明校验通过,没有error

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容