海明码详解
海明码

海明码海明码是由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。
海明校验码

• 依次类推,便可确定每组所包含的各位。
例如:欲传递信息为b4b3b2b1(n=4),根据 2k≥n+k+1,可求出配置成海明码需增添检测位 k=3,且它们位置的安排如下:
二进制序号 1 2 3 4 5 6 7
名称
C1 C2 b4 C4 b3 b2 b1
如果按照配偶原则来配置海明码,则
C1 应使1,3,5,7位中的“1”的个数为偶数;
• 故0101的海明码应为:C1 C2 b4 C4 b3 b2 b1,即0100101。
三、海明码的纠错过程
• 海明码的纠错过程,实际上是对传送后的海明 码形成新的检测位Pi(i=1,2,4,8……),根据Pi 的状态,便可直接指出错误的位置。Pi的状态是 由原检测位Ci及其所在小组内“1”的个数确定的。 倘若按配偶原则配置的海明码,其传送后形成 新的检测位Pi应为0,否则说明传送有错,并且 还可以直接指出出错的位置。由于Pi和Ci有其对 应关系,故Pi可由下式确定:
• 设n+k位代码自左至右依次编为第1,2, 3,…...,n+k位,而将k位检测位记为Ci(i=1, 2,4,8……),分别安插在n+k位代码编号的 第1,2,4,8,……2k-1位上。这些检测位的位 置设置,是为了保证它们能分别承担n+k位信息 中,不同数位所组成的“小组”的奇偶检查任 务,使检测位和它所负责检测的小组中1的个数 为奇数或为偶数,具体分配如下:
C2 应使2,3,6,7位中的“1”的个数为偶数;
C4 应使4,5,6,7位中的“1”的个数为偶数;
故 C1应为3位⊕5位⊕7位,即C1=b4⊕b3⊕b1;
C2应为3位⊕6位⊕7位,即C2=b4⊕b2⊕b1;
C4应为5位⊕6位⊕7位,即C4=b3⊕b2⊕b1;
海明码纠错原理

海明码纠错原理海明码(Hamming Code)是一种用于检错和纠错的编码方式,由理查德·海明在1950年提出。
它可以发现并纠正单一位错误,也可以检测并纠正双位错误。
海明码的纠错原理是通过增加校验位来实现的,下面我们来详细了解一下海明码的纠错原理。
首先,海明码是一种线性分组码,它的编码方式是将数据位和校验位按照一定规则排列组合而成。
在传输数据时,发送端会对数据进行编码,添加校验位后发送出去;接收端收到数据后,会对接收到的数据进行解码,并根据校验位进行错误的检测和纠正。
其次,海明码的纠错原理是基于奇偶校验的。
在海明码中,校验位的位置是通过2的幂次方来确定的,例如第1、2、4、8、16位是校验位,其余位是数据位。
对于校验位而言,每一个校验位都负责一定范围内的数据位的奇偶校验。
当接收端接收到数据后,会对每个校验位进行奇偶校验,如果发现某个校验位的奇偶校验与接收到的数据不一致,就会根据校验位的位置确定出错的位置,并进行纠正。
最后,海明码的纠错原理可以通过一个简单的例子来说明。
假设发送端要发送一个4位的数据1010,按照海明码的规则,需要添加3个校验位。
经过编码后,发送的数据变为1010101。
在传输过程中,如果某一位发生了错误,例如1010101中的第4位发生了错误,接收端在接收到数据后,会对每个校验位进行奇偶校验,发现第2位和第4位的奇偶校验不一致,根据校验位的位置,可以确定出错的位置是第4位,然后进行纠正,将错误的位从0变为1。
最终,接收端得到的数据是1010,错误被成功纠正。
综上所述,海明码的纠错原理是通过增加校验位来实现的,通过对校验位的奇偶校验来检测错误,并根据校验位的位置进行错误的定位和纠正。
海明码在通信领域有着广泛的应用,能够有效地提高数据传输的可靠性和稳定性,是一种非常实用的纠错编码方式。
海明码详解(精)

海明码详解这两天也在研究海明码的问题,把我的理解说给你吧,按照我说的可以顺利得到海明码步骤:一、确定校验码的位数k二、确定校验码的位置三、数据的位置四、求出校验位的值首先,海明码的作用是:在编码中如果有错误,可以表达出第几位出了错,二进制的数据只有0和1,修改起来很容易,求反即可,这需要加入几个校验位。
重要的知识点:海明码的组成,不是简单的在后面加上校验位,海明码≠数据位+检验位那检验位该怎么加呢?它是根据总的位置来加的,加在【2的几次幂】的位置上,这个位置不是我们通常的从右向左数位置,刚好相反,是从左右如下图:P是校验位, D是数据位:原始的数据是:101101 校验位是插到了 1 2 4 8这几个位置上的。
位置M1M2M3M4M5M6M7M8M9M10甲P1 P2 D1P3 D2D3D4P4 D5D6乙10 110 1步骤一、确定校验码的位数k公式:m+k+1≤2^k (m是数据位的位数,K是要加的校验位的位数数据长是4位,校验码就是3位4+k+1≤2^kK最小只能是3数据长是5,6,7,8,9,校验码就是4位5+k+1≤2^kK最小就只能取4101101 数据位是6位,那校验位应该是4位,那总位数是:6+4=10位步骤二、确定校验码的位置位置M1M2M3M4M5M6M7M8M9M10甲P1 P2 D1P3 D2D3D4P4 D5D6乙10 110 1(图1)注意:【位置是从左----------右编码】(网上好多都反了,都是从右往左的,这应该是错的)校验位就插在2的幂次方的位置上。
4个检验位就是插到,2的0次方=1,2的1次方=2,2的2次方=4,2的3次方=8的位置上。
始上(图1)步骤三、数据的位置数据位置就按顺序写入进去就OK了,不要写到校验位就是的了。
步骤四、求出校验位的值也就是求图1中:p1 p2 p3 p4 的值。
那这几个数该如何求值呢?这里就要引进一个线性码的概念了,就是这4位校验码和图1中的那些位置上的数有关系呢?这里有一个进制转换的问题要先解决:因为是4位校验码,所以我们可以s4 s3 s2 s1 这个数来表示这个4位校验码,也就是p4 p3 p2 p1M1号位是十进制的1 转成四位二进制数就是:0001 即M1 和s1有关系同样的道理M2 变成四位二进制数: 0010 0010----s4 s3 s2 s1 s2的位置上是1 ,所以M2和S2有关系。
海明码

r 1 = I 0 + I 2 + I 3 + I 5 + I6 = 1 + 0 + 1 + 0 + 0 = 0
r2 = I1 + I2 + I3 = 0 +0 +1 = 1 r3 = I4 + I5 + I6 = 0 + 0 + 0 = 0
• 海明码为0011001000: r0 r1 I0 r2 I1 I2 I3 r3 I4 I5 I6
2.1 海明码
• 海明码是一种可以纠正一比特错误的编码。
• 基本设计思想:
–编码:在k比特信息上附加r比特的校验位,构成n=k+r 比特的码字,其中每个校验比特和某几个特定的信息比 特构成偶校验的关系。 –检验:接收端检验r个偶校验关系,即将每个校验比特 和与它关联的信息比特相加(异或),相加结果称为校 正因子。若r个校正因子全为0,认为没有错误;否则, 校正因子指出发生错误的比特位。
如何检测与纠正错误?
• 码字(codeword):由m比特的数据(消息)加上r比特的 冗余(校验位)构成。 • 有效编码集:由2m个(符合编码规则的)有效码字组成。 • 检错:当收到的码字为无效码字时,称检测出错误。 • 海明距离(Hamming Distance):两个码字的对应位上取 值不同的位数。 • 纠错:将收到的无效码字纠正到距其最近的有效码字。 • 检错码与纠错码的能力都是有限的。
校验比特的位数
• 为利用 r 个校正因子区分无差错和码字中n 个不同位置的一比特错(共n+1种情况), 校验比特的位数 r 应满足: 2r ≥ n + 1 = k + r + 1 • 比如:7-4海明码,11-7海明码。
计算机基础:海明码是什么?

计算机基础:海明码是什么?海明码:奇偶校验码的⼀种扩充。
只能检验和恢复⼀位。
例如:求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)海明码的生成。
海明码最通俗易懂的讲解

M1 M 2 M 3 M 4 M 5 M 6 M 7 M 8 M 9 M10
甲 P1
P2
P3
P4
③ 确定数据的位置 这个很简单,除了校验码的位置其余的就是数据的位置,填充进去就可以了,于是可以
把数据信息先填进去,见“乙”行,下面就是最关键的部分,求出校验位的值啦!!!
M1 甲 P1
乙
M2 M3
P2
D1
1
M4 M5 M6 M7
P3
D2
D3
D4
0
1
1
M 8 M 9 M10
P4
D5
D6
0
1
④ 求出校位的值 这个公式不是难,99%左右的考生都能看懂海明码的求解过程,但是真正能够过目不忘
的相信就是极少数了,很多考生在论坛抱怨躺在床上眼睛一闭,一睁,就忘记了一半。眼睛
再一闭,一睁,基本上就等于没有看了。与其这样,倒不如考前几天突击一下。其实完全没
e1 M1 M 3 M 5 M 7 M 9 = 0 1 1 1 0 = 1 e2 M2 M 3 M 6 M 7 M10 =0 1 1 1 1 = 0 e3 M4 M 5 M 6 M 7 =0 1 1 1 = 1 e4 M8 M 9 M10 = 1 0 1 = 0 按照 e4、e3、e2、e1的排序方式得到的二进制序列为:0101,恰好对应十进制 5,是不
M1 M 2 M 3 M 4 M 5 M 6 M 7 M 8 M 9 M10
甲 P1
P2
D1
P3
D2
D3
D4
P4
D5
D6
乙0
0
1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
海明码是由R·hamming 在1950所提出的,它可以纠正一位差错的编码,但它的编码效率要比正反码高,现以奇偶校验码为例,
a0=a1⊕a2⊕a3⊕…⊕a n-1
其中a0是校验码,接收时可按关系式
S= a0⊕a1⊕a2⊕a3⊕…⊕a n-1
进行计算时,若S=0则无差错,若S=1则表明出错,则上面的S式子称为监督关系式,S 称为校正因子。
在奇偶校验的情况下,只有一个监督关系式和一个校正因子,其取值只有两种可能(0或1),分别表示正确和出错两种情况,而不能指出出错的位置。
若有两个校正因子,则有四种可能,一种表示无错,另三种表示出错,并可以指出出错的位置。
一般来说,若信息位为k位,冗余位为r位,则数据位n=k+r,用r的监督关系式来产生r个校正因子,区分无错和在n个不同的位置的一位错,则要求满足公式
2 r≥ n+1 或 2 r≥ k+r+1
此式子称为海明公式,r叫海明距离,若k=4时则r>=3,当取r=3时,n=k+r=4+3=7
1.编码步骤
(1)根据信息位数,确定校验位数,2r≥k+r+1,其中,k为信息位数,r为校验位数。
求出满足不等式的最小r,即为校验位数。
表1-2有效信息位数k与校验位位数r的对应关系
(2)计算机校验位公式。
表1-3其实可以当成一个公式来套用,如有已经编码的数据1100 1001 0111。
我们只需把这些数据填充到校验公式,即可得到信息位与校验位。
表1-3 校验位公式表
填充的方法是这样的,首先看数据的最低位(即右边第1位),最低位为1,把1填充在公式表的r0位置,接着取出数据的次低位数据(即右边第2位),把它填充到r1位置,把右边第3位数填充到I1位置。
依此类推,我们可以得到表1-4。
表1-4 校验位公式实例表
表中第2行数据为1100 001 1,这就是数据1100 1001 0111的编码信息,而表格第3行是1 011,这便是校验位。
注意:
·校验位
r n 所在位数为
2n
·信息位下标从1开始,而校验位下标从0开始。
例如:I 8 对应的第十二位12=23+22,I 76位10=23+21,I 5 对应的第九位9=23+20,一直写到I 1对应的第三位。
校验位r n 由前面位数写成2的幂之和中包含2n 的位数对应的信息位之和构成
r 38765
注意:其中“⊕ ”是异或运算,在异或运算中:
0⊕ 1=1; 1⊕ 0=1; 0⊕ 0=0; 1 ⊕1=0;
(3)求校验位。
根据上面我们所说的计算公式可以求出校验位。
(4)求海明码。
根据上面的表格填充后,写出海明码。
2.纠错步骤
(1)根据海明码的信息位和校验位的分布规则,找出接收到的数据的信息位以及校验位。
表1-5校验位公式表
如有已经编码的数据1100 1001 0111,则可以根据上表得到编码的信息为:1100 001 1;校验位为:1 011,详细过程在“编码步骤”已详细说明。
2)接收端对校验位进行验证
S n= r n ( 校验)⊕r n (接收)
(3)判断校正因子是否有错,并改正。
S n S n-1S n-2……S0二进制转成十进制对应的是哪位就是哪位出错,将其改正完成纠错。
如1001为第九位,将第九位1变0 (或0变1) 即可。
例题1求信息1011的海明码。
解答:
我们可以按照上面所说的编码步骤进行解题:
(1)2r≥4+r+1,确定校验们为3位23≥4+3+1。
(2)列出公式表格。
7=22+21+20,6=22+21,5=22+20,3=21+20
r2=I4⊕I3⊕I2
r1= I4⊕I3⊕I1
r0= I4⊕I2⊕I1
(3)根据公式得r 2 =0,r1 =0,r0=1。
过程如下:
r2=I4⊕I3⊕I2=1⊕0⊕1=0
r1= I4⊕I3⊕I1=1⊕0⊕1=0
r0= I4⊕I2⊕I1=1⊕1⊕1=1
(4)加入表格。
表1-7 对表1-6填充数据后的表格
则海明码为1010101
例题2
信息位8位的海明码,在接收到报文110010100000,判断传输是否出错,并求出发送端发送的信息位。
解答:
2r≥8+r+1,确定校验位为4位24≥4+4+1。
表1-8校验位公式表
按照上面的海明码信息位和校验位的分布情况表,对接收数据进行分解:
表1-9 对表1-8填充数据后的表格
从而得到信息位为11000100,校验位为1000。
因为12=23+22 ;11=23+21; 9=23+20;7=22+21+20; 6=22+21 ;5 =22+20;3=21+20 ;
可得发送端校验位:
r3= I8⊕I7⊕I6⊕I5;
r2= I8⊕I4⊕I3⊕I2;
r1= I7⊕I6⊕I4⊕I3⊕I1;
r0= I7⊕I5⊕I4⊕I2⊕I1。
接收端可根据以下关系验证是否出错
S3= r3⊕I8⊕I7⊕I6⊕I5;
S2= r2⊕I8⊕I4⊕I3⊕I2;
S1= r1⊕I7⊕I6⊕I4⊕I3⊕I1;
S 0= r 0⊕ I 7⊕ I 5 ⊕ I 4 ⊕ I 2⊕I 1;
注意:其中的r n 为接收端校验位。
由上面的算式得S 3 S 2 S 1 S 0=1001,将1001转成十进制是9,从而得知是原信息位第九
例题3 S
0=a 0 S 1=a 1⊕a 4⊕a 5⊕a 6
S 2=a 2⊕a 3⊕a 5⊕a 6
接收端收到的码字为:a 6a 5a 4a 3a 2a 1a 0=1010100
那最多一位错的情况下发送端的发送信息位是什么?
解答:将a 6 a 5 a 4 a 3 a 2 a 1 a 0对应的数字代入上述监督关系式得:
S 0=0⊕0⊕1⊕0=1
S 1=0⊕1⊕0 S 2=1⊕0⊕0 得出S 2S 1S 00信息应为1010101。