海明码是一位纠错码,即如果数据在传输过程中有一位出错,则可以知道出错的位数并通过取反将其改正过来。
海明码的基本意思是给传输的数据增加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年提出。其主要特点是能够检测并纠正单个比特错误,即在接收到的...
本次课程设计的目标是设计并实现海明码生成与校验电路,具体包括海明码的生成、海明码出错模拟以及海明码的校验。 #### 设计原理与规则 海明码的生成基于以下原则: 1. **数据位与校验位关系**:为使数据具有纠错...
海明码是一种特殊的前向错误纠正(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)是一种纠错编码方法,它的核心思想是通过添加额外的校验位,使得在传输过程中出现单个错误时,接收端能够检测并纠正这个错误。海明码是奇偶校验的扩展,每个校验位不仅对原始数据的某一位进行...
### 海明码编码与译码程序解析 #### 海明码简介 海明码(Hamming Code)是一种能够纠正单比特错误的线性错误校正码,由美国数学家Richard Hamming在1950年提出。它通过在原始数据位之间插入额外的校验位来实现错误...
两种不同的做法,用java实现海明码,先输入一个数据,得到海明码,在输入海明码,如果错误,则提示哪位出错且纠正为正确的海明码
### 海明码生成与校验电路的设计 #### 1. 引言 ##### 1.1 题目介绍 本题目旨在设计一个能够实现海明码生成与校验功能的电路。海明码是一种广泛应用在计算机通信领域中的错误检测与纠正编码技术。它不仅可以检测出...