海明码是一位纠错码,即如果数据在传输过程中有一位出错,则可以知道出错的位数并通过取反将其改正过来。
海明码的基本意思是给传输的数据增加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。
相关推荐
海明码是一种纠错编码技术,它是奇偶校验的扩展,旨在不仅能检测错误,还能定位并纠正单个错误。在海明码中,通过添加额外的校验位,每个校验位都对原始数据的不同子集进行奇偶校验,从而实现错误检测和纠正。 为了...
海明码是一种线性纠错码,它由理查德·卫斯理·海明发明,广泛应用于计算机系统中的错误检测和纠正。海明码能够检测到二位错误并且能够纠正一位错误。它的设计基于将数据位和校验位以特定的方式结合起来,使得即使在...
海明码与码距的概念与例子 海明码是一种常用的纠错码,它可以检测和纠正错误。码距是指一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数。码距越大,纠错能力越强,但数据冗余也越大,即编码...
### 海明码算法实现(C语言) #### 知识点概述 海明码(Hamming Code),又称汉明码,是一种线性错误校验码,由美国科学家Richard W. Hamming于1950年提出。其主要特点是能够检测并纠正单个比特错误,即在接收到的...
海明码是一种特殊的前向错误纠正(Forward Error Correction, FEC)编码方式,它通过在原始数据中添加冗余位来实现错误检测和纠正。在数据传输、存储等过程中,由于各种干扰因素,可能会导致数据位的翻转,即1变成0...
海明码是一种纠错编码技术,尤其在软考网络工程师的考试中是一个重要的知识点。它通过增加额外的校验位,可以在数据传输过程中检测并纠正单个比特错误。海明码的原理基于奇偶校验,但比简单的奇偶校验更强大,因为它...
海明码(Hamming Code)是一种纠错编码技术,由理查德·卫斯里·海明在1950年提出,主要用于检测和纠正数据传输或存储过程中的错误。它是利用冗余位来实现错误检测和纠正的,是通信和计算机科学中一个重要的概念。 ...
海明码(Hamming Code)是由理查德·海明在1950年提出的一种前向纠错编码技术,主要用于检测并纠正数据传输或存储过程中的单个比特错误。它是利用增加额外的冗余比特来实现这个功能的,这些额外的比特被称为校验位。...
### 海明码校验线路课程设计 #### 一、引言 1.1 **背景** 随着信息技术的发展,数据在存储和传输过程中发生的错误成为不可避免的问题。这些错误可能由多种因素造成,包括但不限于: - 电路中电子热运动引起的...
海明码是一种线性纠错码,由贝尔实验室的理查德·卫斯理·海明发明,它能够在一定程度上检测和纠正数据传输中的错误。在信息传输或存储过程中,由于噪声干扰或其他原因,数据可能出现错误。海明码能检测到单比特错误...
海明码(Hamming Code)是一种著名的错误检测和纠正编码技术,主要应用于数据通信和存储系统中,确保数据传输或存储的准确性。在C程序中实现海明码的模拟程序,可以帮助我们理解其工作原理,并能对不超过80位的信息...
海明码(Hamming Code)是一种纠错编码方法,由理查德·海明在1950年提出,主要用于检测并纠正数据传输或存储过程中的单个错误。它通过在原始数据中添加冗余位来实现这个目的。在C++编程环境中实现海明码的检验,...
海明码(Hamming Code)是一种纠错编码技术,由理查德·卫斯里·海明在1950年提出。它主要用于检测并纠正数据传输或存储过程中的错误,确保信息的准确传递。海明码的核心思想是在原始数据中添加冗余位,通过巧妙的...
海明码(Hamming Code)是一种著名的前向错误校验(Forward Error Correction)编码技术,由理查德·卫斯里·海明在1950年提出。它通过在原始数据中添加冗余位来检测和纠正单个比特错误。在IT行业中,海明码被广泛...
计算机网络原理与应用课程设计报告——海明码的实现 一、课程设计目的 海明码(Hamming Code)是一种著名的错误检测与纠正编码,由Richard W. Hamming在1950年提出,主要用于提高数据传输的可靠性。1.1 海明码的...
### 海明码编码与译码程序解析 #### 海明码简介 海明码(Hamming Code)是一种能够纠正单比特错误的线性错误校正码,由美国数学家Richard Hamming在1950年提出。它通过在原始数据位之间插入额外的校验位来实现错误...
两种不同的做法,用java实现海明码,先输入一个数据,得到海明码,在输入海明码,如果错误,则提示哪位出错且纠正为正确的海明码
"海明码是一种可以纠正一位差错的编码" 海明码是一种多重奇偶检错系统,旨在解决数据传输过程中的误码问题。海明码的出现是为了解决传输过程中的误码问题,如数据从 1 变为 0 或从 0 变为 1。为了检测和纠正这些...
海明码是一种纠错编码技术,主要用于检测和纠正数据传输或存储过程中的单比特错误。它扩展了奇偶校验的概念,通过添加多个校验位,使得每个校验位都能覆盖不同的信息位,从而增强了检错和纠错能力。下面将详细解释...