计算机组成原理_海明码详解
- 格式:pdf
- 大小:767.37 KB
- 文档页数:6
纠错编码-海明码⼀.海明码海明码只能发现双⽐特错误,纠正单⽐特错误⼆.⼯作原理“动⼀发⽽牵全⾝”,因为海明码是⼀个多重校验码,也就是码字中的信息码位同时被多个校验码进⾏校验三.⼯作流程1.确定校验码位数海明不等式2^r>=k+r+1,r为冗余信息位,k为信息位eg:要发送的数据为D=101101则数据的位数k=6满⾜的不等式最⼩r为4也就是D=101101的海明码应该有6+4=10位,其中原始数据6位,校验码4位2.确定校验码和数据的位置还是上⾯的那个例⼦D=101101,假设这4位校验码分别为P1,P2,P3,P4,数据从左往右为D1,D2...D6校验码必须是在2n次⽅位置,如第1、2、4、8、16、32,...位(对应2^0 2^1 2^2 2^3 2^4 2^5……,是从最左边的位数起的),这样⼀来就知道了信息码的分布位置,也就是⾮2n次⽅位置,如第3、5、6、7、9、10、11、12、13,...位(是从最左边的位数起的)即数据位12345678910代码P1P2D1P3D2D3D4P4D5D6实际值1011013.求出校验码的值D=101101⼆进制0001001000110100010101100111100010011010数据位12345678910代码P1P2D1P3D2D3D4P4D5D6实际值0010011101可以看出P1对应的⼆进制第⼀位为1(看⼆进制是⼏位的话就看最后⼀个数据位是⼏位⼆进制格式)可以发现D1,D2,D4,D5对应的⼆进制第⼀位也是1,则P1代码校验的数据为D1,D2,D4,D5令所有要校验的位异或=0(即同0异1)1 0 1 0p1(第1个校验位,也是整个码字的第1位)的校验规则是:从当前位数起,校验1位,然后跳过1位,再校验1位,再跳过1位,....。
这样就可得出p1校验码位可以校验的码字位包括:第1位(p2(第2个校验位,也是整个码字的第2位)的校验规则是:从当前位数起,连续校验2位,然后跳过2位,再连续校验2位,再跳过2位,……。
8位海明码设计(计算机组成原理)课程名称:计算机组成原理课程设计题目:8位海明码生成电路设计专业班级:姓名:学号:授课教师:成绩:2020 年 5 月 26 日课程设计任务书设计目的:将已学过的计算机组成原理中运算器知识综合运用于电子系统的设计中,掌握运用EduCoder在线实验平台设计电子系统的流程和方法,采用Logisim等工具独立应该完成1个设计题目的设计、仿真与测试。
加强和培养学生应用仿真软件进行实际数字系统设计与验证工作的能力,培养学生理论联系实际的设计思想,训练学生综合运用计算机组成原理课程的理论知识的能力。
设计任务:(在规定的时间内完成下列任务)题目一:8位全加器的设计题目二:5位并行进位加法器的设计题目三:8位减法运算器的设计(补码)题目四:4×4位(阵列)乘法器的设计题目五:8位海明码生成电路设计每位同学根据自己学号除以5所得的余数对应题目编号(余数为0对应题目五)。
设计报告书内容要求:(1) 功能描述:说明设计器件的功能,包括真值表(功能表),函数表达式,逻辑电路图(2) 详细设计:按照逻辑电路设计开发流程写出整个开发的详细过程,可以根据设计步骤适当界面截图到课程设计报告对应模块。
(3) 调试分析以及设计体会:①仿真下载调试(附界面截图)。
②设计过程中遇到的问题以及解决问题的方法。
③课程设计过程经验教训、心得体会。
目录1.设计题目 (1)2.总体方案 (1)2.1 设计环境 (1)2.2设计原理 (1)2.3设计思路 (2)2.4海明码生成设计实例 (4)3.详细设计 (5)3.1海明码生成设计过程 (5)3.2海明码生成真值表 (6)3.3海明码校验电路设计 (6)3.4海明码校验真值表 (7)4. 设计心得与体会 (7)5.参考文献 (9)1.设计题目8位海明码电路设计2.总体方案2.1 设计环境运用EduCoder在线实验平台设计电子系统的流程和方法,采用Logisim等工具2.2设计原理海明校验码是由理查得·海明(Richard Hanmming)于1950年提出的它不仅具有检测错误的能力,同时还具有给出错误所在的准确位置的能力,这在通信领域有着很广泛的应用。
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)海明码的生成。
一、海明码校验法1.海明码海明码是采用多位校验码的方式,在信息数据中合理加入校验位,将码距均匀拉大,校验中的每一位都对不同的信息数据位进行奇偶校验。
海明码是利用在信息位为K位,增加r位冗余位,构成一个n=k+r的码字,然后用r个监督关系式产生r 个校正因子来区分区无错和在码字中的n个不同位置的一位错,它必需满足关系式:2r>=n+1或2r>=k+r+12.海明码的生成与接收方法一:1)海明码的生成。
例1.已知:信息码为:"0010"。
海明码的监督关系式为:S2=a2+a4+a5+a6S1=a1+a3+a5+a6S0=a0+a3+a4+a6求:海明码码字。
解:1)由监督关系式知冗余码为a2a1a0。
2)冗余码与信息码合成的海明码是:"0010a2a1a0"。
设S2=S1=S0=0,由监督关系式得:a2=a4+a5+a6=1a1=a3+a5+a6=0a0=a3+a4+a6=1因此,海明码码字为:"0010101"2)海明码的接收。
例2.已知:海明码的监督关系式为:S2=a2+a4+a5+a6S1=a1+a3+a5+a6S0=a0+a3+a4+a6接收码字为:"0011101"(n=7)求:发送端的信息码。
解:1)由海明码的监督关系式计算得S2S1S0=011。
2)由监督关系式可构造出下面错码位置关系表:S2S1S0000001010100011101110111错码位置无错a0a1a2a3a4a5a63)由S2S1S0=011查表得知错码位置是a3。
4)纠错--对码字的a3位取反得正确码字:"0 0 1 0 1 0 1"5)把冗余码a2a1a0删除得发送端的信息码:"0010"例 3.若海明码的监督关系为:S0=a0+a3+a4+a6 ;S1=a1+a3+a5+a6 ;S2=a2+a4+a5+a6 。
海明码详解①海明校验的基本思想将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。
实质上,海明校验是一种多重校验。
②海明校验的特点它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。
一.校验位的位数校验位的位数与有效信息的长度有关设: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)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以也仅用于信道特性比较好的环境中,如以太局域网。
它的检错、纠错基本思想如下:(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 位,……(从最左边的位数起)。
计算机组成原理--海明码的编码和校验⽅法(易懂)海明码(也叫汉明码)具有⼀位纠错能⼒。
本⽂以1010110这个⼆进制数为例解释海明码的编码和校验⽅法。
编码 确定校验码的位数x 设数据有n位,校验码有x位。
则校验码⼀共有2x种取值⽅式。
其中需要⼀种取值⽅式表⽰数据正确,剩下2x-1种取值⽅式表⽰有⼀位数据出错。
因为编码后的⼆进制串有n+x位,因此x应该满⾜2x-1 ≥ n+x 使不等式成⽴的x的最⼩值就是校验码的位数。
在本例中,n=7,解得x=4。
确定校验码的位置 校验码在⼆进制串中的位置为2的整数幂。
剩下的位置为数据。
如图所⽰。
位置1234567891011内容x1x21x3010x4110 求出校验位的值 以求x2的值为例。
为了直观,将表格中的位置⽤⼆进制表⽰。
位置00010010001101000101011001111000100110101011内容x1x21x3010x4110 为了求出x2,要使所有位置的第⼆位是1的数据(即形如**1*的位置的数据)的异或值为0。
即x2^1^1^0^1^0 = 0。
因此x2 = 1。
同理可得x1 = 0, x3 = 1, x4 = 0。
位置00010010001101000101011001111000100110101011内容01110100110 因此1010110的海明码为01110100110。
校验 假设位置为1011的数据由0变成了1,校验过程为: 将所有位置形如***1, **1*, *1**, 1***的数据分别异或。
***1: 0^1^0^0^1^1 = 1 **1*: 1^1^1^0^1^1 = 1 *1**: 1^0^1^0 = 0 1***: 0^1^1^1 = 1 以上四组中,如果⼀组异或值为1,说明该组中有数据出错了。
***1 **1* 1***的异或都为1,说明出错数据的位置为1011。
海明码简单分析确定校验位个数海明码的码组长度需要符合:2^r – 1 (r代表校验位个数)为什么是这个公式呢?因为:只有这样才能保证校验位⾜够覆盖整个需要校验的码组。
校验码(海明码)
海明码⼀般指汉明码,与其他的错误校验码类似,汉明码也利⽤了的概念,通过在后⾯增加⼀些⽐特,可以验证数据的有效性。
利⽤⼀个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。
确定校验码的位数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次⽅。
一、CRC编码1、已知多项式和原报文,求CRC编码,如:使用多项式G(x)=x^5 + x^4 + x +1,对报文10100110进行CRC编码,则编码后的报文是什么?方法与步骤:步骤1:对报文10100110,在末尾添加所给多项式的最高次阶个0,如本题为x^5,则添加5个0,变为:1010011000000。
步骤2:由多项式G(x)=x^5 + x^4 + x +1,得其阶数为1的二进制编码为:110011。
步骤3:步骤1中求得的1010011000000对步骤2中求得的110011进行模二除法,所得到的余数即为校验码,把校验码添加在原报文尾部即为所求的编码报文1010011011000,具体如下:2.已知道接收到的CRC编码,求原编码或判断是否出错,如:已知G(x)=x^5 + x^4 + x +1,接收的为1010011011001,问是否出错?步骤一:由多项式G(x)=x^5 + x^4 + x +1,得其阶数为1的二进制编码为:110011。
步骤二:用接收的报文1010011011001对步骤一的110011进行模二除法,看余数是否为0,如为0则正确,如不为0,则出错,计算余数为1,则出错。
如下图:二、海明码1.求海明码,如:求1011海明码。
步骤一:求校验码位数r,公式为:2^r ≥r+k+1的最小r。
题目中为2^3≥3+4+1,所以取r=3,即校验码为3位。
步骤二:画图,并把原码的位编号写成2的指数求和的方式,其中位编号长度为原码和校验码个数之和,从1开始。
校验码插在2的阶码次方的位编号下,且阶小于r。
如下:原码的位编号写成2的指数求和:7=2^2+2^1+2^0;6=2^2+2^1;5=2^2+2^0;3=2^1+2^0;步骤三:求校验位,即每个校验位的值为步骤二中“原码的位编号写成2的指数求和”式子中相应2的阶出现的位编号下原码的值异或。
即:r0=I4异或I2异或I1=1; (2^0次出现在7,5,3位,其对应的值为I4,I2,I1)r1=I4异或I3异或I1=0; (2^1次出现在7,6,3位,其对应的值为I4,I3,I1)r2=I4异或I3异或I2=0; (2^0次出现在7,6,5位,其对应的值为I4,I3,I2)把r0,r1,r2带入海明码,得所求的海明码为:10101012.已知海明码,求原码或判断是否出错并改正错位,如:信息位8位的海明码,接收110010100000时,判断是否出错,并求出发送端信息位。