`
wezly
  • 浏览: 472239 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

海明码的初识

阅读更多

海明码是一位纠错码,即如果数据在传输过程中有一位出错,则可以知道出错的位数并通过取反将其改正过来。
海明码的基本意思是给传输的数据增加r个校验位,从而增加两个合法消息(合法码字)的不同位的个数(海明距离)。

海明码(Hamming Code )编码的关键是使用多余的奇偶校验位来识别一位错误。

码字(Code Word) 按如下方法构建:

1、把所有2的幂次方的数据位标记为奇偶校验位(编号为1, 2, 4, 8, 16, 32, 64等的位置)

2、其他数据位用于待编码数据. (编号为3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17等的位置)

3、每个奇偶校验位的值代表了代码字中部分数据位的奇偶性,其所在位置决定了要校验和跳过的比特位顺序。

位置1:校验1位,跳过1位,校验1位,跳过1位(1,3,5,7,9,11,13,15,…)

位置2:校验2位,跳过2位,校验2位,跳过2位 (2,3,6,7,10,11,14,15,…)

位置4:校验4位,跳过4位,校验4位,跳过4位 (4,5,6,7,12,13,14,15,20,21,22,23,…)

位置8:校验8位,跳过8位,校验8位,跳过8位(8-15,24-31,40-47,…)

如果全部校验的位置中有奇数个1,把该奇偶校验位置为1;如果全部校验的位置中有偶数个1,把该奇偶校验位置为0.


举例说明:

一个字节的数据:10011010

构造数据字(Data Word),对应的校验位留空_ _ 1 _ 0 0 1 _ 1 0 1 0

计算每个校验位的奇偶性 ( ?代表要设置的比特位):

位置1检查1,3,5,7,9,11:

? _ 1 _ 0 0 1 _ 1 0 1 0. 偶数个1,因此位置1设为0,即: 0 _ 1 _ 0 0 1 _ 1 0 1 0

位置2检查2,3,6,7,10,11:

0 ? 1 _ 0 0 1 _ 1 0 1 0. 奇数个1,因此位置2设为1,即: 0 1 1 _ 0 0 1 _ 1 0 1 0

位置4检查4,5,6,7,12:

0 1 1 ? 0 0 1 _ 1 0 1 0. 奇数个1,因此位置4设为1,即: 0 1 1 1 0 0 1 _ 1 0 1 0

位置8检查8,9,10,11,12:

0 1 1 1 0 0 1 ? 1 0 1 0. 偶数个1,因此位置8设为0,即: 0 1 1 1 0 0 1 0 1 0 1 0


因此码字为: 011100101010.

查找并纠错一位错误

上例中构建了一个码字 011100101010,假定实际接收到的数据是011100101110. 则接收方可以计算出哪一位出错并对其进行更正。方法就是验证每一个校验位。记下所有出错的校验位,可以发现校验位2和8的数据不正确. 错误校验位 2 + 8 = 10, 则位置10的数据出错。一般说来,对所有校验位进行检查, 将所有出错的校验位置相加, 得到的就是错误信息所在的位置.

 

    看一道微软的面试题。

    面试题:

    把1K个苹果分到10个篮子里(当然苹果分到

    篮子里后就不能再动了,只能分一次)。
    要求:
    用这10个篮子能够组成1-1000任意一个数字 。

    这是个考察二进制思想的题目,让每个篮子里的苹果数等于二进制位的权重就可以了,即分别放1,2,4,8,……各苹果。

    换到海明码里也是这样,为了让r个校验码(r个篮子)表示n个信息位(n个苹果),且无论哪一位错误都能表示出来(能够组成任意一个数字),先将码字的位从左到右标号,分别为1,2,3,……。显然要将校验位安排在第1,2,4,8,……编号上,数据放在其他的编号上。为了能够将n位信息全部表示出来还应该有2r-1>=n。每个数据位影响几个校验位,譬如编号11

对应的数据影响编号1、2、8对应的校验位,因为11=1+2+8。为了更清楚理解上面的意思,让我们来看一个例子:将1001000编码成海明码。

    因为编号1、2、4、8处是校验位,所以3、5、6、7、9、10、11处是数据位,将要传输的数据与编号对应如下:

3    5    6    7    9    10    11

1    0    0    1    0     0    0

    数据位影响的校验位如下:

    编号3处的数据位影响编号1、2处的校验位,

    编号7处的数据位影响编号1、2、4处的校验位,

    经偶校验的校验位1、2的值为0,校验位4的值

    为1,其他校验位均为0。所以对应的海明码

    为:00110010000。

分享到:
评论

相关推荐

    java实现的海明码

    两种不同的做法,用java实现海明码,先输入一个数据,得到海明码,在输入海明码,如果错误,则提示哪位出错且纠正为正确的海明码

    海明码与码距的概念与例子

    海明码与码距的概念,有详细的例子以及程序员的例子。。

    海明码算法实现(c语言)

    海明码算法实现包括数据结构设计,算法效率比较高!功能实现:可以查出出错位,并且可以改正!

    海明码习题两种详解.pdf

    海明码习题 详解步骤 两种解题方法 免积分分享纯手写 字体潦草 莫嫌弃 若有错误请告知 谢谢over

    组成原理课程设计生成海明码

    包含计算机组成原理生成海明码的报告和电路连接图。

    自己写的海明码的例子

    自己看书写的一个海明码例子自己看书写的一个海明码例子

    海明码和CRC校验的C语言实现

    海明码和CRC校验的C语言实现 1.海明码 //code by zxf 2010.4.10 #include #include #include //N代表待编码数据的上限位数 #define N 100 int HmLength(int k);//计算海明码校验位位数 void InCode(char *data,...

    海明码详解之软考难点剖析

    海明码详解之软考难点剖析 海明码详解之软考难点剖析 海明码详解之软考难点剖析 海明码详解之软考难点剖析

    海明码的计算 ppt

    海明码的计算 海明码是一种可以纠正单个差错的编码。每个码字包含m个数据位和r个冗余位(校验位)。对于给定m的情况下,用于纠正单个差错所需要的校验位的最少数目r必须满足:

    关于海明码的一些知识

    海明码的一些知识。海明码是什么?这个怎么解释?

    海明码校验线路课程设计

    属于计算机组成原理的课程设计,内容如题:海明码校验线路的设计;海明码是既可查错有可纠错的一种数据校验方法

    海明码生成与校验电路的设计.rar

    海明校验码是由理查得•海明(Richard Hanmming)于1950年提出的,它不仅具有检测错误的能力,同时还具有给出错误所在的准确位置的能力,这在通信领域有着很广泛的应用。 海明码是奇偶校验的一种扩充。它采用多位...

    海明码的检验 C++

    用C++,海明码的检验,比较简单的一个程序,大学计算机组织与结构老师可能要要求做

    海明码详细解释

    海明码的详细解释,计算机网络课程的校验的知识,海明码检错

    C程序海明码的模拟程序

    该程序模拟海明码的校验,但对海明码作了限制,在该程序中,它的信息为不超过80.

    海明码校验 计算机网络

    计算机网络中的haiming码,c++实现 例如: 输入字符:2 海明码是: 0 1 0 0 0 1 1 1 0 0 1 0 输入二进制序列: 0 1 0 0 0 0 1 1 0 0 1 0 第6位错误 请按任意键继续. . .

    海明码及码距说明.doc

    海明码及码距说明,希望可以帮助到您!

    海明码原理

    海明码的原理 海明码的生成与接收 海明码的计算 海明码校验程序设计原理分析参考

    海明校验 python源代码 海明码

    今天上了一节组原,讲了Hamming Code,对它的代码实现比较感兴趣,于是给自己出了个题目去玩。可以海明编码,也可海明校验。

    海明码的简单介绍

    海明码的简单介绍,关于其校验,检错,与一些简例。

Global site tag (gtag.js) - Google Analytics