海明码Hamming Code是什么意思?二进制怎么转换成汉明码?

2022-11-18 11:33:21
来源:置顶网

简介

海明码又称为汉明码,英文名Hamming Code。是差错控制中的纠错码。

编码

概述

海明码是在原数据中的一些固定位置,插入一个0(或1),以进行奇(或偶)校验位,虽然使原数据变长,但可使其拥有纠错能力。

能侦测并更正一个比特的错误;若有两个比特出错,则只能侦测,不能更正;若有三个或更多的比特出错,则不能侦测,更不能更正。

示例

以二进制串10110为例,以偶校验将其编码为海明码。

第1步:校验位的位置

生成的海明码中,位置为2的幂位均为校验位,用表格表示如下:

海明码中的位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
位置为2的幂 2^0 2^1   2^2       2^3               2^4  

第2步:数据位的位置

除去校验位,全部都是数据位。

在第1步的表格中,我们标出数据位:

海明码中的位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
是否为2的幂 2^0 2^1 数据 2^2 数据 数据 数据 2^3 数据 数据 数据 数据 数据 数据 数据 2^4 数据

第3步:填入数据位

将例子中的数据(二进制串10110)填入海明码。同时,为了方便识别,我们将校验位标为R,数据位标为D,即R1、R2、R4、R8、R16……,为校验位;D3、D5、D6、D7、D9……,为数据位。

继续完善表格:

海明码中的位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
是否为2的幂 2^0 2^1 数据 2^2 数据 数据 数据 2^3 数据 数据 数据 数据 数据 数据 数据 2^4 数据
所在位的标识 R1 R2 D3 R4 D5 D6 D7 R8 D9 D10 D11 D12 D13 D14 D15 R16 D17
海明码的值     1   0 1 1   0                

第4步:如何计算出校验位的值

通过偶校验算出海明码中校验位的值,下表显示了各校验位的值如何计算:

海明码中的位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
所在位的标识 R1 R2 D3 R4 D5 D6 D7 R8 D9 D10 D11 D12 D13 D14 D15 R16 D17
参与R1校验 X   X   X   X   X   X   X   X   X
参与R2校验   X X     X X     X X     X X    
参与R4校验       X X X X         X X X X    
参与R8校验               X X X X X X X X    
参与R16校验                               X X

所在位置的规律如下:

位置为Rx的检验位,是从第x位开始(即从Rx开始),检验x位,跳过x位,再检验x位,再跳过x位,以此类推。

例如上表中,位置为R4的检验位:

是从第4位开始(即从R4开始);

检验4位(检验4、5、6、7共4位);

跳过4位(跳过8、9、10、11共4位);

检验4位(检验12、13、14、15共4位),以此类推。

第5步:计算出校验位的值

最后,根据第4步计算出校验位的值并填入,就能得到海明码了,计算过程如下:

海明码中的位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
是否为2的幂 2^0 2^1 数据 2^2 数据 数据 数据 2^3 数据 数据 数据 数据 数据 数据 数据 2^4 数据
所在位的标识 R1 R2 D3 R4 D5 D6 D7 R8 D9 D10 D11 D12 D13 D14 D15 R16 D17
海明码的值 R1 R2 1 R4 0 1 1 R8 0             R16  

偶校验(R1, 1, 0, 1, 0) → R1 = 0

偶校验(R2, 1, 1, 1) → R2 = 1

偶校验(R4, 0, 1, 1) → R4 = 0

偶校验(R8, 0) → R8 = 0

R16 = 数据太短,当用到D17位置时,才需要R16

将计算结果填入表中:

海明码中的位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
是否为2的幂 2^0 2^1 数据 2^2 数据 数据 数据 2^3 数据 数据 数据 数据 数据 数据 数据 2^4 数据
所在位的标识 R1 R2 D3 R4 D5 D6 D7 R8 D9 D10 D11 D12 D13 D14 D15 R16 D17
所在位的值 0 1 1 0 0 1 1 0 0                

得到的海明码为“0110 0110 0”。

侦测和更正

概述

首先,按照编码的方式(奇或偶校验),依次检测校验位R1、R2、R4、R8……,然后,将出错的校验位的位置相加,比如发现R1、R8出现错误,则将1和8相加,得到9,即为位置D9的比特出错,最后,将该错误的比特取反就能更正错误。

示例

假设编码示例中生成的海明码“0110 0110 0”,在传输中出错,导致最后一位(标识D9)出错,所以我们现在接收到的海明码为“0110 0110 1”。

海明码中的位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
所在位的标识 R1 R2 D3 R4 D5 D6 D7 R8 D9 D10 D11 D12 D13 D14 D15 R16 D17
正确的海明码 0 1 1 0 0 1 1 0 0                
接收的海明码 0 1 1 0 0 1 1 0 1                

第1步:检测校验位

该海明码使用的校验方式是偶校验,所以我们检查校验位时,也要使用偶校验。

根据接收到的海明码,计算校验位的值:

偶校验(R1, 1, 0, 1, 1) → R1 = 1,出错

偶校验(R2, 1, 1, 1) → R2 = 1,正确

偶校验(R4, 0, 1, 1) → R4 = 0,正确

偶校验(R8, 1) → R8 = 1,出错

第2步:确定出错比特的位置

将出错的校验位的位置相加:

出错比特的位置 = R1的位置 + R8的位置 = 1 + 8 = 9

第3步:更正错误

将第9位取反,就能更正错误。

错误的海明码为“0110 0110 1”,更正第9位后为“0110 0110 0”。

关键词: 海明码是什么意思 二进制怎么转换成汉明码 差错控制

[责任编辑:]

为您推荐

时评

内容举报联系邮箱:58 55 97 3 @qq.com

沪ICP备2022005074号-27 营业执照公示信息

Copyright © 2010-2020  看点时报 版权所有,未经许可不得转载使用,违者必究。