汉明码的原理、生成和检验

原创 2017年01月03日 20:11:47

在计算机运行过程中,由于种种原因导致数据在存储过程中可能出现差错,为了能够及时发现错误并且将错误纠正,通常可以将原数据配成汉明编码。

汉明码具有一位纠错能力。

设将要进行检测的二进制代码为n位,为使其具有纠错能力,需要再加上k位的检测位,组成n+k位的代码。那么,新增加的检测位数k应满足:

2k≥n+k+1或2k-1≥n+k

代码长度和检测位数的关系

N

K(最小)

1

2

2~4

3

5~11

4

12~26

5

27~57

6

58~120

7


当k的位数确定后,便可根据承担的检测任务设定他们在传送代码中的位置和他们的取值。首先,将所要检测的代码分为Pn组,分多少个组,我们通过k的值来确定。下面我用一个例子来说明。

假设将要进行检测的二进制代码为0101,位数n=4,根据公式2k≥n+k+1可以得出k的值是3,所以最终形成的汉明码应为n+k=7位。

所以分组分为P1、P2P4。原因则是第一组是20、第二组则是21 、同理第三组则是22 、依次列推分组应按照2k-1。同时以后根据分组产生的数插入的位置也是按照此规律插入,比如第一组插入20、即第1位,第二组插入21 、即第2位,以此类推。那么组分好了,他们每一组中包含的位则是:

p1包含(1,3,5,7,9,11,...位)

p2包含(2,3,6,7,10,11,14,15,...位)

p3包含(4,5,6,7,12,13,14,15,...位)

每一组中包含的数又是如何确定的呢?我们来看下面这个表格

编号

1

2

3

4

5

6

7

8

9

10

11

二进制

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

将编号转成二进制从右向左,如果第一位是1,例如编号是1,3,5,7....的就分入第一组,如果第二位是1的,例如编号2,3,6,7,10...的就分入第二组,以此类推将所有的编号分入相应的组中。下面我么来看例子0101是如何产生汉明码的(采用配偶原则),

序号

1

2

3

4

5

6

7

名称

C1

C2

B4

C4

B3

B2

B1

传送数

 

 

0

 

1

0

1

其中C1、C2、C4是我们插入的检测位

如果按照配偶原则来配置汉明码,则C1应使1 3 5 7位中“1”的个数为偶数;C2应使2 3 6 7位中“1”的个数为偶数;C4应使4 5 6 7位中“1”的个数为偶数。

按照上面我所说的则:

C1=③位+⑤位+⑦位,即C1=B4+B3+B1=0+1+1=0

C2=③位+⑥位+⑦位,即C2=B4+B2+B1=0+0+1=1

C4=⑤位+⑥位+⑦位,即C4=B3+B2+B1=1+0+1=0

所以0101的汉明码应为C1C2B4C4B3B2B1,即0100101

汉明码还存在配奇原则,下面来讲一讲配奇原则。按照配奇原则配置1100101的汉明码。

根据1100101可知n=7。根据公式我们可以求出需要添加k=4位检测位,详细情况如下表。

二进制序号

1

2

3

4

5

6

7

8

9

10

11

汉明码

C1

C2

1

C4

1

0

0

C8

1

0

1

按配奇原则配置,则

C1=③位+⑤位+⑦位+⑨位+11位+1=1+1+0+1+1+1=1

C2=③位+⑥位+⑦位+10位+11位+1=1

C4=⑤位+⑥位+⑦位+1=0

C8=⑨位+10位+11位+1=1

所以按配奇原则新配置的汉明码为11101001101


汉明码的纠错

根据以上说的汉明码的配偶原则和配奇原则我们来看汉明码的纠错。设接收到的错误汉明码(按配偶原则配置)是0100111,我们可以根据上述规律来确定出错位。

 

二进制序号

1

2

3

4

5

6

7

接收到的汉明码

0

1

0

0

1

1

1

那么新的检测位是

P1=①位+③位+⑤位+⑦位,即P1=0+0+1+1=0

P2=②位+③位+⑥位+⑦位,即P2=1+0+1+1=1

P4=④位+⑤位+⑥位+⑦位,即P4=0+1+1+1=1

根据P4P2P1构成的二进制是110,将110转换成十进制为6,说明是第6位出错,或者根据配偶原则的规律,其“1”的个数必须是偶数也能判断出是第6位,所以第六位应将“1”改为“0”,那么正确的汉明码应为0100101。

那么为什么在汉明码纠错过程中,新的检测位P4P2P1的状态即指出了编码中错误的信息位?

汉明码属于分组奇偶校验,P4P2P1=000,说明接收方生成的校验位和收到的校验位相同,否则不同说明出错。由于分组时校验位只参加一组奇偶校验,有效信息参加至少两组奇偶校验,若果校验位出错,P4P2P1的某一位将为1,刚好对应位号4、2、1;若果有效信息出错,将引起P4P2P1中至少两位为1,如B1出错,将使P4P1均为1,P2=0,P4P2P1=101,


版权声明:本文为博主原创文章,未经博主允许不得转载。

汉明码和汉明距离

汉明码 汉明码是一种线性分组码。线性分组码是指将信息序列划分为长度为k的序列段,在每一段后面附加r位的监督码,且监督码和信息码之间构成线性关系,即它们之间可由线性方程组来联系。这样构成的抗干扰码...

汉明码

计算汉明码是通过扩展奇偶位以标识位错误。创建汉明码方法如下: 标识所有2的次方作为奇偶位(位置1,2,4,8,16,32等等),剩余其他的位用作数据编码。(位置3,5,6,7,9,10,11,12,...
  • chifuqi
  • chifuqi
  • 2014年03月13日 15:13
  • 2118

计算机组成原理——汉明码

汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,以侦测并更正单一比特错误。由于汉明编码简单,它们被广泛应用于...
  • zcy_ztf
  • zcy_ztf
  • 2014年10月26日 15:50
  • 493

汉明码的编码和译码

# include "stdio.h" # include "time.h" # include "stdlib.h" # define A 4000 # define M 4 # define N ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

7,4汉明码及8,4扩展汉明码的实现

一、汉明码     汉明码是 1950 年由美国贝尔实验室提出来的,是第一个设计用来纠正错误的线性分组码 ,汉明码及其变型已广泛应用于数字通信和数据存储系统中作为差错控制码。 ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

史上最通俗的海明码编码计算、检错和纠错原理解析

以下是笔者一节视频课程中的PPT内容,细致而又非常通俗地讲解了海明码的编码计算、检测错和纠错原理,如果因为PPT比较简洁看不明白,可结合我的视频来看,本节课程的视频链接如下(目前可免费观看):http...
  • lycb_gz
  • lycb_gz
  • 2014年06月30日 06:56
  • 39710

海明码编码原理及其解释

纠正一位错的海明码的位数k的选取必须符合下式:                              (m为信息位的位数) 当信息位为8位时,海明码校验码共有4位,而当信息位为20位时,其校验...

关于汉明码的数学原理与计算

数学原理刚刚上计算机组成原理课的时候,或许会觉得汉明码的横空出世太神奇了,它是怎么知道二进制信息在传输过程中哪一位传错的呢?开始只是死记,后来发现太难记住了,于是想一探究竟,究竟是什么支配着这种编码纠...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汉明码的原理、生成和检验
举报原因:
原因补充:

(最多只允许输入30个字)