海明码
- 格式:ppt
- 大小:57.00 KB
- 文档页数:15
海明码海明码是由R.HmIMI1ing在1950年首次提出的,它是一种可以纠正一位差错的编码。
可以借用简单奇偶校验码的生成原理来说明海明码的构造方法。
若k(=n-1)位信息位an-1an-2…a1加上一位偶校验位a0,构成一个n位的码字an-1an-2...a1a0,则在接收端校验时,可按关系式S=an-1+an-2+…+a1+a0来计算。
若求得S=0,则表示元错;若S=1,则有错。
上式可称为监督关系式,S称为校.正因子。
.在奇偶校验情况下,只有一个监督关系式和一个校正因子,其取值只有0或1两种情.况,分别代表元错和有错两种结果,还不能指出差错所在的位置。
不难设想,若增加冗余位,也即相应地增加了监督关系式和校正因子,就能区分更多的情况。
如果有两个校正因子.S1和S0,则S1S0取值就有00、01、10或11四种可能的组合,也即能区分四种不同的情况。
若其中一种取值用于表示无错(如00),则另外三种(01、10及11)便可以用来指出.不同情况的差错,从而可以进一步区分出是哪一位错。
设信息位为k位,增加r位冗余位,构成一个n=k+r位的码字。
若希望用r个监督关系式产生的r个校正因子来区分元错和在码字中的n个不同位置的一位错,则要求满足以下关系式:2r>=n+1 或 2r>=k+r+1以k=4为例来说明,则要满足上述不等式,必须r>=3。
假设取r=3,则n=k+r=7,即在4位信息位a6a5a4a3后面加上3位冗余位a2a1a0,构成7位码字a6a5a4a3a2a1a0,其中a2、a1和a0分别由4位信息位中某几位半加得到,在校验时,a2、a1和a0就分别和这些位半.加构成三个不同的监督关系式。
在无错时,这三个关系式的值S2、S1和S0全为"0"。
若a2错,则S2=1,而S1=S0=0;若a1错,则S1=1,而S2=S0=0;若a0错,则s0=1,而S2=S1=0。
海明码计算过程嘿,朋友们!今天咱就来讲讲海明码计算过程。
这海明码啊,就像是一个神秘的魔法盒子,等你打开它,就会发现里面藏着好多奇妙的东西呢!咱先来说说啥是海明码。
简单来说,它就是一种能帮我们检测和纠正数据传输过程中错误的好帮手。
你想想看,数据就像一群小士兵,在传输的道路上可能会遇到各种“妖魔鬼怪”,比如干扰啦、出错啦。
这时候海明码就像一位英勇的将军,站出来保护这些小士兵,让它们能准确无误地到达目的地。
那怎么计算海明码呢?别急,听我慢慢道来。
首先,我们得确定要保护的数据有多少位,这就好比要知道有多少小士兵需要保护。
然后呢,根据这个数量来确定需要多少位的海明码。
这就像给小士兵们配备合适数量的将军。
接下来,就开始计算啦!这过程就好像是给小士兵们排兵布阵。
我们要把数据位和海明码位按照一定的规则放好,就像是让小士兵们站在各自的位置上。
然后,根据一些巧妙的算法,给每个海明码位赋予特定的任务。
比如说,某个海明码位要负责检查某些数据位的奇偶性。
这就好像它是个小侦探,专门盯着那几个小士兵,看它们有没有出问题。
如果数据传输过程中真的出了错,这个小侦探就能迅速发现,然后发出警报!再比如说,另一个海明码位要同时关注好几个数据位,就像是个更厉害的大侦探,能从更宏观的角度发现问题。
计算海明码的过程可不简单哦,就像解一道复杂的谜题。
但你可别被它吓住,只要一步一步来,就一定能搞明白。
你想想,要是没有海明码,那我们的数据在传输过程中出错了可咋办?那不就乱套了嘛!所以说,学会计算海明码可是很重要的呢。
而且啊,这海明码的应用可广泛了呢。
不管是在网络通信中,还是在各种电子设备里,都能看到它的身影。
它就像一个默默无闻的守护者,一直在背后为我们的数据安全保驾护航。
哎呀,说了这么多,你是不是对海明码计算过程有点感觉了呢?别犹豫,赶紧自己去试试吧!相信你一定能掌握这个神奇的技能,让数据传输变得更加可靠。
加油哦!。
计算机基础:海明码是什么?海明码:奇偶校验码的⼀种扩充。
只能检验和恢复⼀位。
例如:求1011 的海明码?答案:1010101其中:红⾊所在位数 1,2,4,8,... 为计算出的验证码,⿊⾊的信息为原信息码:1011。
计算⽅法:1.先计算需要⼏位海明码?1011 是四位 ,它有四种只错⼀位的情况,(0011,1111,1001,1010)再加上x位海明码的错⼀位情况。
再加上⼀种全部位都正确的情况。
所以海明码需要 x+4+1 中可能。
所以需要海明码x位可以表⽰出 x+4+1 中可能。
即: x+4+1 <=2**x (2**x 表⽰2的x⽅),计算得到3,海明码最少是3,当然4,5,6位都可以,就像⽤101 校验和0101 00101 000101 00000000101 都能校验⼀样,只是⽐较浪费。
所以计算出了海明码的位数为3。
(其实也就是往原编码内填充1,2,4,8,16,这些地⽅,填完为⽌。
)2. 开始计算。
1011 中间插⼊三位验证码位数7654321信息101x1x x在第7位:7=2**2+2**1+2**0=4+2+16 对应位置为0,不算在内。
5=2**2 +2**0 = 4 +13=2**1+2**0 =2+1这样得到(2**0) 出现三次,所以在最低位为1 ,(出现偶数次就是0,奇数次就是1,)(原计算⽅法是⽤异或计算 1 xor 1 =0 , 1xor 0 =1 , 0 xor 0=0 ,这⾥结果都⼀样)(2**1)出现两次,所以第⼆位是0,(2**2)出现两次,所以第三位是0,所以就得到位数7654321信息10101013.验证和举例我们传输这个得到的海明码,和⼀个错误的海明码:正确的验证 1010101 :1.得到海明码(1,2,4 位,如果更长的话就是8,16,32。
位)001。
2.信息码为剩下的 1011,同步骤⼆:计算得到001,3.和上⾯的到的海明码001 异或(001 xor 001 ) =000,正确错误的验证 1110101 :1.得到海明码 001。
1.海明码的概念海明码是一种可以纠正一位差错的编码。
它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。
它必需满足以下关系式:2^r>=n+1 或2^r>=k+r+1海明码的编码效率为:R=k/(k+r)式中k为信息位位数r为增加冗余位位数[font class="Apple-style-span" style="font-weight: bold;"id="bks_cu2htj1g"]2.[/font][font class="Apple-style-span" style="font-family: ����; font-size: 12px; line-height: normal; " id="bks_4dxtg15k"][font]海明码的原理[/font]在数据中间加入几个校验码,将玛距均匀拉大,将数据的每个二进制位分配在几个奇偶校验组里,当某一位出错,会引起几个校验位的值发生变化。
海明不等式:校验码个数为K,2的K次幂个信息,1个信息用来指出“没有错误”,其余2K-1个指出错误发生在那一位,但也可能是校验位错误,故有N<=2的K次-1-K能被校验。
海明码的编码规则:1.每个校验位Ri被分配在海明码的第2的i次的位置上,2.海明玛的每一位(Hi)是由多个/1个校验值进行校验的,被校验玛的位置玛是所有校验这位的校验位位置玛之和。
一个例题:4个数据位d0,d1,d2,d3, 3个校验位r0,r1,r2,对应的位置为:d3 d2 d1 r2 d0 r1 r0 ======b7 b6 b5 b4 b3 b2 b1校验位的取值,就是他所能校验的数据位的异或b1为b3,b5,b7的异或,b2为b3,b6,b7 b4为b5,b6,b7 [/font][font class="Apple-style-span" style="font-family: ����; font-size: 12px; line-height: normal; " id="bks_4dxtg15k"]海明玛传送到接受方后,将上三式的右边(b1,b2,b4)的逻辑表达式分别异或上左边的值就得到了校验方程,如果上题采用偶校验G1=b1 b3 b5 b7的异或G2=b2 b3 b6 b7的异或G3=b4 b5 b6 b7的异或若G1G2G3为001是第四位错若为011是第六位错[/font][font class="Apple-style-span" style="font-family: ����; font-size: 12px; line-height: normal;"] [/font]3.海明码的生成与接收特注:以下的+均代表异或方法一:1)海明码的生成。
海明码详解①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
实质上,海明校验是一种多重校验。
②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。
一.校验位的位数校验位的位数与有效信息的长度有关设:N--为校验码的位数 K--是有效信息位 r--校验位(分成r组作奇偶校验,能产生r位检错信息)海明码应满足 N=K+r≤2r-1 若r=3 则N=K+r≤7 所以K≤4二.分组原则`在海明码中,位号数(1、2、3、……、n)为2的权值的那些位,即:1(20)、2(21)、 4(22)、8(23)、…2r-1位,作为奇偶校验位并记作: P1、P2、P3 、P4、…Pr,余下各位则为有效信息位。
例如: N=11 K=7 r=4 相应海明码可示意为位号 1 2 3 4 5 6 7 8 9 10 11P占位P1 P2 × P3 × × × P4 × × ×其中×均为有效信息,海明码中的每一位分别被P1P2P3P4… Pr 中的一至若干位所校验,其规律是:第i位由校验位位号之和等于i的那些校验位所校验如:海明码的位号为3,它被P1P2(位号分别为1,2)所校验海明码的位号为5,它被P1P3(位号分别为 1,4)所校验归并起来: 形成了4个小组,每个小组一个校验位,校验位的取值,仍采用奇偶校验方式确定。
如表2·6 、表2·7所示:三.编码、查错、纠错原理以4位有效信息(b1、b2、b3、b4)和3位校验位(P1、P2、P3)为例: K=4 r=3 海明序号 1 2 3 4 5 6 7海明码 P1 P2 b1 P3 b2 b3 b4根据表2-8可以看到(1)每个小组只有一位校验位,第一组是P1、第二组是P2、第三组是P3。
海明码海明码(Hamming Code)是在电信领域的一种线性检测码,以发明者理查德·卫斯里·海明的名字命名。
海明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。
由于海明编码简单,它们被广泛应用于内存(RAM)电路。
1940年,海明于贝尔实验室(Bell Labs)工作,运用贝尔V型(Bell Model V)电脑,一个周期时间为几秒钟的机电继电器计算机。
输入终端是依靠打孔卡(Punched Card),这不免会产生读取错误。
在平日,特殊代码将发现错误并闪灯(flash lights),使得操作者能够纠正这个错误。
在周末和下班期间,在没有操作者的情况下,机器只会简单地转移到下一个工作。
海明在周末工作,他对于不可靠的读卡机发生错误后,总是必须重新开始项目变得愈来愈沮丧。
在接下来的几年中,他为了解决错误检测的问题,着手开发功能强大的检测算法。
直到1950年,他发表了著名的海明码。
与其他的错误校验码类似,海明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。
利用一个以上的校验位,海明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。
在接受端通过纠错译码自动纠正传输中的差错来实现码纠错功能,称为前向纠错FEC。
在数据链路中存在大量噪音时,FEC可以增加数据吞吐量。
通过在传输码列中加入冗余位(也称纠错位)可以实现前向纠错,但这种方法比简单重传协议的成本要高。
海明码利用奇偶块机制降低了前向纠错的成本。
如果一条信息中包含更多用于纠错的位,且通过妥善安排这些纠错位使得不同的出错位产生不同的错误结果,那么我们就可以找出出错位了。
在一个7位的信息中,单个位出错有7种可能,因此3个错误控制位就足以确定是否出错及哪一位出错了。
海明码SECDED(single error correction, double error detection)版本另外加入一个检测比特,可以侦测两个或以下同时发生的比特错误,并能够更正单一比特的错误。
海明码例题详细步骤海明码是一种常用于纠错的编码方式,它可以在传输或存储数据过程中检测并纠正错误。
海明码的原理基于奇偶校验,通过在数据中插入冗余位来实现错误的检测和纠正。
在本文中,我们将详细介绍海明码的步骤和算法。
海明码的设计目标是在传输或存储数据时,可以检测出错误的位,并且能够纠正这些错误。
它通过在数据中插入校验位来实现这一目标。
每个校验位都对应着一个数据位的位置,通过奇偶校验来检测错误。
如果在传输过程中出现了错误,校验位将会自动纠正数据位的错误。
具体步骤如下:1. 确定数据位的数量:首先确定要发送的数据位的数量。
假设有k个数据位。
2. 计算校验位的数量:校验位的数量由以下公式确定:2^r >= k + r + 1,其中r为校验位的数量。
解这个公式得到校验位的数量r。
3. 分配校验位的位置:将校验位分配到数据位的位置上。
校验位的位置一般为2的幂次方,例如第1、2、4、8...位。
4. 计算校验位的值:对每个校验位,计算其奇偶校验值。
校验位的奇偶校验值是指其控制的数据位中1的数量。
例如,对于校验位C1来说,它控制数据位D1、D3、D5等位置,如果这些数据位中有奇数个1,则C1的奇偶校验值为1,否则为0。
5. 插入校验位:将校验位插入到数据位中,校验位的位置处填入校验位的奇偶校验值。
6. 发送或存储数据:发送或存储包含数据位和校验位的数据。
7. 接收数据:接收到数据后,进行校验。
8. 计算校验位的奇偶校验值:对接收到的每个校验位,对应的数据位进行奇偶校验,将计算得到的奇偶校验值与接收到的校验位的值进行比较。
9. 纠正错误:如果发现错误,使用校验位来纠正错误的数据位。
根据校验位的值,确定出错的位置,将其取反即可纠正错误。
通过以上的步骤,我们可以使用海明码来实现数据的纠错功能。
海明码通过插入校验位和奇偶校验来检测并纠正错误,能够防止数据在传输或存储过程中产生的错误。
需要注意的是,海明码能够检测和纠正的错误数量有一定的限制。
一、海明码检错/纠错基本思想海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以也仅用于信道特性比较好的环境中,如以太局域网。
它的检错、纠错基本思想如下:(1)将有效信息按某种规律分成若干组,每组安排一个校验位通过异或运算进行校验,得出具体的校验码(2)在接收端同样通过异或运算看各组校验结果是否正确,并观察出错的校校组,或者多个出错的校验组的共同校验位,得出具体的出错比特位(3)对错误位取反来将其纠正二、海明码计算海明码计算要按以下步骤来进行:计算校验码位数→确定校验码位置→确定校验码1. 计算校验码位数假设用N表示添加了校验码位后整个传输信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位数,它们之间的关系应满足:N=K+r≤2r-1(是为了确保r位校验码能校验全部的数据位,因为r位校验码所能表示的最大十进制数为2r-1,同时也确保各位码本身不被其他校验码校验)信息码位数12~45~1112~2627~5758~120121~247校验码位数2 3 4 5 6 7 82. 确定校验码位置海明码的校验码的位置必须是在2n次方位置(n从0 开始,分别代表从左边数起分别是第1、2、4、8、16……),信息码也就是在非2n次方位置3. 确定校验码校验位置选择原则:第i位校验码从当前校验码位开始,每次连续校验i位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。
确定每个校验码所校验的比特位:P1校验码位校验的码字位为:第1位(也就是P1本身)、第3位、第5位、第7位、第9位、第11位、第13位、第15位,……。
P2校验码位校验的码字位为:第2位(也就是P2本身)、第3位,第6位、第7位,第10位、第11位,第14位、第15位,……。
P3校验码位校验的码字位为:第4位(也就是P4本身)、第5位、第6位、第7位,第12位、第13位、第14位、第15位,第20位、第21位、第22位、第23位,……。
海明码校验公式海明码校验公式,这可真是个让人又爱又恨的家伙!咱们先来说说海明码到底是啥。
想象一下,你给朋友寄了封信,可又担心路上这信会不会被弄破了、弄乱了。
海明码就像是给这封信加的一个特殊标记,能让接收的人一下子就知道这信有没有出问题。
那海明码校验公式呢,就是算出这个特殊标记的办法。
比如说,咱们要传一个数据,像“10110”这样的。
这时候,就得用海明码校验公式来搞点“小动作”啦。
咱们先得确定需要多少个校验位。
这就好比你要给一个箱子打包,得先知道要多少绳子才够。
假设数据位有 m 位,校验位有 r 位,那满足 2^r >= m + r + 1 这个式子,就能算出 r 的值。
比如说,数据位是 5 位,那 2^r >= 5 + r + 1 ,算一算,r 至少得 3 。
然后呢,把这些校验位放在特定的位置上。
这就像把宝贝放在特定的抽屉里,可不能乱放。
比如第 1 个校验位在 1 号位,第 2 个在 2 号位,第 3 个在 4 号位,依次类推。
再接下来,就是根据公式计算校验位的值。
这一步就有点像做数学题啦,得认真仔细。
我记得有一次给学生们讲这个的时候,有个小家伙一脸懵地看着我,说:“老师,这也太难懂啦!”我笑着跟他说:“别着急,咱们一步步来。
”我带着他们一步一步地计算,看着他们从一开始的迷茫,到后来渐渐明白,那种成就感真是没得说。
海明码校验公式虽然有点复杂,但只要咱们耐心点儿,多练几遍,就能掌握它。
就像学骑自行车,一开始可能摇摇晃晃,但多练几次,就能稳稳当当地上路啦。
总之,海明码校验公式虽然看着有点吓人,但只要咱们用心去学,它也能被咱们拿下!希望大家都能跟这个家伙成为好朋友,让数据传输更可靠,更准确!。
海明码的概念
海明码是一种用于检测和纠正数据传输错误的编码方法。
它由理查德·海明在1948年提出,广泛应用于数字通信和数据存储领域。
海明码通过在原始数据中添加一定数量的冗余位来实现错误检测和纠正。
冗余位的数量取决于数据的长度和容忍的错误数量。
冗余位的添加和校验过程可以使用布尔代数和模2算术来实现。
在传输过程中,发送方会对数据进行编码,然后将编码后的数据发送给接收方。
接收方会对接收到的数据进行解码,并根据冗余位进行错误检测和纠正。
如果接收到的数据与发送方发送的数据不完全一致,接收方可以根据冗余位的校验结果来确定错误的位置并进行纠正。
海明码具有较强的错误检测和纠正能力,可以检测和纠正多个位的错误。
它被广泛应用于存储介质、数字通信、计算机内存等领域,可以有效提高数据传输和存储的可靠性。
海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码功能的纠错码,所以它也仅用于信道特性比较好的环境中,如以太局域网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。
海明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反(也是原来是1 就变成0,原来是0 就变成1)来将其纠正。
要采用海明码纠错,需要按以下步骤来进行:计算校验位数→确定校验码位置→确定校验码→实现校验和纠错。
下面来具体介绍这几个步骤。
1. 计算校验位数要使用海明码纠错,首先就要确定发送的数据所需要的校验码(也就是“海明码”)位数(也称校验码长度)。
它是这样的规定的:假设用N 表示添加了校验码位后整个信息的二进制位数,用K 表示其中有效信息位数,r 表示添加的校验码位,它们之间的关系应满足:N=K + r ≤ 2r-1。
如K=5,则要求2r-r ≥ 5+1=6,根据计算可以得知r 的最小值为4,也就是要校验5位信息码,则要插入4 位校验码。
如果有效信息位数是8,则要求2r-r ≥ 8+1=9,根据计算可以得知r 的最小值也为4。
根据经验总结,得出信息码和校验码位数之间的关系如表5-1所示。
表5-1 信息码位数与校验码位数之间的关系2. 确定校验码位置上一步我们确定了对应信息中要插入的校验码位数,但这还不够,因为这些校验码不是直接附加在信息码的前面、后面或中间的,而是分开插入到不同的位置的。
但不用担心,校验码的位置很容易确定的,那就是校验码必须是在2n 次方位置,如第1 位,2 位,4 位,8 位,16 位,32 位……(对应20,21,22,23,24,25,……,从最左边的位数起),这样一来就知道了信息码的分布位置,也就是非2n 次方的位置,如第3 位,5 位,6 位,7 位,9 位,10 位,11 位,12 位,13 位,……(从最左边的位数起)。
海明码由R Hamming 在1950年提出的,它是一种可以纠正一位差错的编码。
用到的基础内容:1、二进制异或运算⊕2、奇偶校验3、码字4、海明距离码字:一个帧包括d个数据位,R个校验位,N=d+R,则此N比特单元称为N位码字海明距离(Hamming distance):两个码字之间不同的比特的位数目。
也叫码距。
在奇偶校验情况下,只有一个监督关系式,一个校正因子,其取值只有两种(0或1),分别代表了无错和有错两种情况,而不能指出差错所在的位置。
所以人们想要增加冗余位,就相应地增加监督关系式和校正因子,就能区分更复杂的情况。
例如:若有两个(2位)校正因子,则其取值就有4钟可能:00、01、10或11,就能区分4种不同情况。
若其中一种表示无错,另外三种不但可以用来指出有错,还可用来区分错误的情况,如指出具体的码字是哪一位错等。
一般而言,数据位为D位,增加R位冗余位,构成N=D+R 位码字。
若希望用R个监督关系式产生的R个校正因子来区分无错和在码字中的N个不同位置的一位错,则要求:2R≧N+1或者2R≧D+R+1下面取信息位为6位时4位的纠错情况。
1、确定R的位数由2R≧D+R+1得R=4构成10位码字。
a9 a8 a7 a6 a5 a4 a3 a2 a1 a0其中:a9 a8 a7 a6 a5 a4位数据位a3 a2 a1 a0位冗余位,用于指出码字出错的错误位置。
a3 a2 a1 a0分别由4位数据位中的某几位异或计算而得到其值规定该码字纠错位编码规则为下表:码字传送后接收方接收码字为:D1 D2 D3 D4 D5 D6 D7 D8 D9 D10如此。
那么要生成海明码的具体算法怎么做呢?假设要计算D=101101这组二进制的海明码,按下面的步骤:1、自然是先确定校验码的位数R。
这里R=4,由前面的介绍可知。
2、确定检验码的位置。
这里设4位校验为P1、P2、P3、P4,信息位由左到右为:D1 D2 D3 D4 D5 D6编码后共6+4=10位,计为M1、M2、M4、…、M10校验码Pi取(i取0、1、2、3)在编码中的位置为2i对应如下表:3、确定数据的位置,对应填入就可以了4、求出冗余校验位的值数据位的位值可以由校验位的位值相加(+)计算得出:D1(3=2+1)= P2 + P1D2(5=4+1)= P3 + P1D3(6=4+2)= P3 + P2D4(7=4+2+1)= P3 + P2 + P1D5(9=8+1)= P4 + P1D6(10=9+1)= P4 + P2然后用异或⊕计算相关的校验位的值P1与D1、D2、D4、D5相关P1=D1⊕D2⊕D4⊕D5=1⊕0⊕1⊕0,P1=0P2与D1、D3、D4、D6 相关P2= D1⊕D3⊕D4⊕D6=1⊕1⊕1⊕1,P2=0P3与D2、D3、D4相关P3= D2⊕D3⊕D4=0⊕1⊕1,P3=0P4与D5、D6相关P4= D5⊕D6 =0⊕1,P4=1于是结果为:用海明编码的D1、D2、…、D6的码字M1、M2、M4、…、M10为:001 001 110 1小结:编写海明码的过程:1、确定校验位R的位数2、确定校验R各个位在码字中的位置3、确定数据位的位置4、计算校验R的各个位的值如果接收的数据出错要如何纠错呢?请接着往下看。
海明码一、海明码的定义海明码是一种可以纠正一位差错的编码。
它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。
它必需满足以下关系式:2r-1>=r+m 即:2r>=r+m+1海明码的编码效率为:R=k/(k+r) 式中k为信息位位数,r为增加冗余位位数码字:一个帧包括m位数据,r个校验位,n=m+r,则此n比特单元称为n位码字。
海明距离:两个码字之间不同的比特数目。
例:00000000000000011111 的海明距离为5.(1)如果两个码字的海明距离为d,则需要d个单比特错就可以把一个码字转换成另一个码字。
(2)为了检查出d个错(单比特错),则需要使用海明距离为d+1的编码。
(3)为了纠正d个错,需要使用海明距离为2d+1的编码。
二、编码规则(2)位号为2的幂的位是校验位,其余是信息位(3)每个校验位强迫自己包括自己在内的一些位的奇偶值为偶数(或奇数)。
三、海明码的校验位排列规则海明码的校验位排列在2i-1(i=1,2,3.……)的位置上。
海明码的计算海明码(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. 则接收方可以计算出哪一位出错并对其进行更正。