海明码详解
海明码
海明码海明码是由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
海明码详解
海明码详解①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
实质上,海明校验是一种多重校验。
②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。
一.校验位的位数校验位的位数与有效信息的长度有关设: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。
对海明码的理解
对海明码的理解海明码是一种多重(复式)奇偶检错系统。
它将信息用逻辑形式编码,以便能够检错和纠错。
用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。
每一个这种奇偶位被编在传输码字的特定位置上。
实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。
一个n位二进制数位串在传输过程中哪一位都有出错的可能,也就是说有n个发生错误的可能性。
针对此情况,如果发送方只抽出其中一位制置奇偶校验位值,以便对其它位进行偶校验或奇校验,虽然也能检错,但无法确定错码的位置,不能纠错。
如果发送方抽出其中r位(放在1,2,4,8,16……位上),给每个位制置奇偶校验位值,以便对从其它位中选择的有差异的r个位组进行偶校验或奇校验,这样,就能用含r个校验位值的逻辑组合(其所在位置可以不连续,但是,其在逻辑上是连续的)所衍生出的2r种状态对可能发生的错误进行相应范围的检测。
进一步思考:如果让2r种可能发生的状态中除去一种状态反映整个位串传输正确外,剩下的2r-1种状态一一对应地反映位串中可能发生的n种错误,那么,对r会有多大的数量要求呢?显然,r应满足下列关系式:2r-1>=n (1)这样,r个校验位所衍生出的2r种状态才能覆盖可能产生的n种错误。
每种错误发生时才不至于漏检。
从n中扣出r个校验位n-r=k,这k个位是信息位。
n=k+r,代入(1)式得:2r-1>=k+r (2)移项得:2r-r>=k+1 (3)按(3)式进行试算(试算不包括”>”——取最小值)表1根据经验表2此即r以其所衍生出的状态能覆盖的信息位数量。
反过来,从k的数量,可以倒推需要多少校验位对其进行检测。
知道了信息位数量与校验位数量的关系后,怎样编海明码呢?用一道例题加以说明。
例题现有8位二进制数信息位串10011101等待传输,问怎样将海明校验位编入以资校验?根据前述,8个信息位要有4个校验位来检测,于是整个位串长就是8+4=12位。
海明码——精选推荐
海明码海明码(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)版本另外加入一个检测比特,可以侦测两个或以下同时发生的比特错误,并能够更正单一比特的错误。
海明码编码计算、检错和纠错原理解析
一、海明码检错/纠错基本思想海明码(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位,……。
海明码
海明码(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,信息位为m,则它们之间的关系应满足m+k+1≤2的k次方。
下面以原始信息101101为例,讲解海明码的推导与校验过程。
(1)确定海明码校验位长m是信息位长,则m=6 。
根据上述关系式m+k+1≤2的k次方,得到7+k≤2的k次方。
解得最小k为4,即校验位为4。
信息位加校验位总长度为10位。
(2)推导海明码1.填写原始信息。
从理论上讲,海明码校验位可以放在任何位置,但习惯上校验位被从左到右安排在1、2、4、8、...的位置上。
原始信息则从左至右填入剩下的位置。
如图1所示,校验位处于B1、B2、B4、B8位,剩下位为信息位,信息位依从左至右的顺序先行填写完毕。
图1 填入原始信息位2.计算校验位。
依据公式得到校验位:P1=B3⊕B5⊕B7⊕B9=1⊕0⊕1⊕0=0P2=B3⊕B6⊕B7⊕B10=1⊕1⊕1⊕1=0 P3=B5⊕B6⊕B7=0⊕1⊕1=0 P4=B9⊕B10=1⊕1=0注:⊕表示异或运算。
这个公式常用,但是死记硬背很困难,要换个方式去理解记忆。
把除去1、2、4、8(校验位位置值编号)之外的3、5、6、7、9、10这些值转换为二进制位,如表1所示。
将所有信息编号的二进制的第1位为1的Bi进行“异或”操作,结果填入P1。
即上述的结果P1=B3⊕B5⊕B7⊕B9=1⊕0⊕1⊕0=0;同理,将所有信息编号的二进制的第2位为1的Bi进行“异或”操作,结果填入P2。
即上述结果P2=B3⊕B6⊕B7⊕B10=1⊕1⊕1⊕1=0;以此类推,将所有信息编号的二进制的第3位为1的Bi进行“异或”操作,结果填入P3;将所有信息编号的二进制的第4位为1的Bi 进行“异或”操作,结果填入P4。
校验码(海明码)
校验码(海明码)
海明码⼀般指汉明码,与其他的错误校验码类似,汉明码也利⽤了的概念,通过在后⾯增加⼀些⽐特,可以验证数据的有效性。
利⽤⼀个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。
确定校验码的位数x
设数据有n位,校验码有x位。
则校验码⼀共有2x种取值⽅式。
其中需要⼀种取值⽅式表⽰数据正确,剩下2x-1种取值⽅式表⽰有⼀位数据出错。
因为编码后的⼆进制串有n+x位,因此x应该满⾜
2x-1 ≥ n+x
使不等式成⽴的x的最⼩值就是校验码的位数。
在本例中,n=7,解得x=4。
就是说,当n=校验位的值的时候,X等于多少?
题⽬⼀般会说给出⼀定位数的数据。
⾸先根据下⾯这个表格,⼆进制次⽅表。
看看这个位数对应多少次⽅,只能⼤不能⼩
⽐如说32位的校验码。
根据上⾯的公式,2x ≥ 32+1+X ,将位数代⼊到N⾥。
将1移到右边。
简化公式就是:2x ≥ 33+X 根据这个简化公式,其实就可以理解为,2的多少次⽅可以⼤于等于33
根据2次⽅表就可以知道,6个次⽅!!
最后代⼊公式,26 ≥ 33+6 即26 ≥ 39 ,即X=6 就是说需要加⼊6位校验码
遇到此种题⽬,⾸先看给出的信息位是多少,⽐如16,那么2的多少个次⽅可以⽐16⼤?。
2的4次⽅刚好是16,2的5次⽅⽐16⼤。
那么就代⼊公式看看,答案是5次⽅。
海明码
1.海明码概念:海明码是一种多重(复式)奇偶检错系统。
它将信息用逻辑形式编码,以便能够检错和纠错。
用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。
每一个这种奇偶位被编在传输码字的特定位置上。
实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。
它必须满足以下瓜葛式:2^r=n+1或2^r=k+r+1。
海明码的编码效率为:R=k/(k+r)(式中k为信息位位数,r为增长冗余位位数)1.>表名称的词诠释:码字:表示一个帧包孕的k个数据位,r个校验位,n=k+r,则此n比特单元称为n位码字。
码距:两个码字之间差别的比特位数量。
例如,000与010的码距为1;000与110的码距为2;000与111的码距为3。
2.海明码的步骤:1.>0确定最小的校验位数k,将它们记成D1、D2、…、Dk,每个校验位符合不同的奇偶测试规定。
2.>原有信息和k个校验位一起编成长为m+k位的新码字。
选择k校验位(0或1)以满足必要的奇偶条件。
3.>对所接收的信息作所需的k个奇偶检查。
4.>如果所有的奇偶检查结果均为正确的,则认为信息无错误。
如果发现有一个或多个错了,则错误的位由这些检查的结果来唯一地确定。
3海明码的编码规则1.>每一个校验位Ri被分配在海明码的第2的i次的位置上,2.>海明玛的每中央电视台位(Hi)是由多个/一个校验值进行校验的,被校验码的位置码是所有校验这位的校验位位置码之和。
4海明码的特点1.>如果两个码字之间的码距为d,则需要d个比特就可以把一个码字转换成另外一个码字2.>为了检查出d个纰缪(单比特错),需要使用的码距为d+一个编码3.>为了纠正d个纰缪,需要使用码间隔为2d+1的编码5编码步调(1)按照信息位数,确定校验位数,2的k次方≥k+r+1,其中,k为信息位数,r 为校验位数。
海明码详解(原创)
海明码详解(原创)湖南人文科技学院数学系杨炼一、问题的提出海明码是奇偶校验的一种扩充。
它采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。
海明码是一种可以纠正一位差错的编码。
海明码校验是为了保证数据传输正确而提出的,本来就是一串要传送的数据,如:d8,d7,d6,d5,d4,d3,d2,d1,这里举的是八位数据,可以是n位数据。
就这样传送数据,不知道接收到后是不是正确的。
所以,要加入校验位数据才能检查是否出错。
二、校验位的位数满足下列条件:2的k次方大于等于n+k+1,其中k为校验位位数,n为信息数据位位数。
验证一下,2的4次方等于16,n+k+1等于8+4+1等于13。
三、原理透析8位信息数据与4位校验位总共有12位数据,怎么排列呢?我们先把校验位按p4,p3,p2,p1排列,用通式p i表示校验位序列,i为校验位在校验序列中的位置。
传送的数据流经解析后用M12,M11,M10,M9,M8,M7,M6,M5,M4,M3,M2,M1表示,接下来的问题是如何用d8,d7,d6,d5,d4,d3,d2,d1与p4,p3,p2,p1来表示M12,M11,M10,M9,M8,M7,M6,M5,M4,M3,M2,M1了。
校验位在传送的数据流中位置为2的(i-1)次方,则p1在M1位,p2在M2位,p3在M4位,p4在M8位。
其余的用信息数据从高到低插入。
于是,传送的数据流可解析为(表一)M12M11M10M9M8M7M6M5M4M3M2M1d8d7d6d5p4d4d3d2p3d1p2p1接下来,我们要弄明白如何找出错误位的问题。
引进4位校验和序列S4,S3,S2,S1。
S4,S3,S2,S1等于0,0,0,0表示传送的数据流正确;如S4,S3,S2,S1等于0,0,1,0则表示传送的数据流解析码中第2位(M2)出错;如S4,S3,S2,S1等于0,0,1,1则表示传送的数据流解析码中第3位(M3)出错;依次类推。
海明码
海明码一、海明码的定义海明码是一种可以纠正一位差错的编码。
它是利用在信息位为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. 则接收方可以计算出哪一位出错并对其进行更正。
- 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。