海明校验

转自:https://www.cnblogs.com/zsswpb/p/5771636.html

做了调整与补充

【定义】

海明码(Hamming Code)是利用奇偶性来检错和纠错的校验方法。海明码的构成方法是在数据位之间的确定位置插入k个校验位,通过扩大吗距来实现检错和纠错。

对于数据位m的数据,加入k位的校验码,它应满足香农第二定理:n=m+k ≤ 2k-1

说明:这里的m是指我们待编有效信息的位数,例如110101就是m=6,然后代入m,6+k ≤2k-1得到m=6,k≥4(取最小值),这样组成10位海明校验码。

【例子】

设数据为01101001,试采用校验位求其偶校验方式的海明码。

根据上面的公式得到,m=8,k≥4

(1)确定数据位D和校验位P在海明码中的位置:

由海明码编码规则可知: pi在海明码的第2i-1,比如P4=2^(4-1)=8,所以位于第8位

海明码H 1 2 3 4 5 6 7 8 9 10 11 12
校验位 P1 P2   P3       P4        
数据位     D0   D1 D2 D3   D4 D5 D6  D7

(2)确定校验关系

这个难点在于如何确定校验位组。

举一个例子来说:H3=D0,海明码下标为3,我们必须用已知的校验位(P1,P2,P3,P4)来表示3,这里3就可以等于1+2。

   

比如P1 的校验位为表格中红色标记出来所对应的海明码的位数

(3)故:P1校验:P1,D0,D1,D3,D4,D6

P1=D0⊕D1⊕D3⊕D4⊕D6=0⊕1⊕0⊕1⊕0=0

P2=D0⊕D2⊕D3⊕D5⊕D6=0⊕1⊕0⊕0⊕0=1

P3=D1⊕D2⊕D3⊕D7=1⊕1⊕0⊕1=1

P4=D4⊕D5⊕D6⊕D7=1⊕0⊕0⊕1=0

  

⊕符号:代表异或,相同则为0,不同则为1。只要仔细一定可以计算正确。

我们按照表格海明码的位置插入P1~P4到数据中,所以海明校验码:010111001001

(4)设置指错字G4,G3,G2,G1

G4=P4⊕D4⊕D5⊕D6⊕D7

G3=P3⊕D1⊕D2⊕D3⊕D7

G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6

G1=P1⊕D1⊕D3⊕D4⊕D6

G1G2G3G4为0000,则数据传输没有错误。

以上面的数据传输为例子:

G4=0  G3=0  G2=0  G1=0

若数据传输之后变成010111001000

G4=P4⊕D4⊕D5⊕D6⊕D7=0⊕1⊕0⊕0⊕0=1

G3=P3⊕D1⊕D2⊕D3⊕D7=1⊕1⊕1⊕0⊕0=1

G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕1⊕0⊕0⊕0=0

G1=P1⊕D1⊕D3⊕D4⊕D6=0⊕0⊕1⊕0⊕1⊕0=0

G4G3G2G1组成的二进制数为:1100,也就是12,说明第12位出现的错误

(5)海明校验缺点

1)海明校验的每一步还是使用的奇偶校验,因此当G中同时出现两个错误时,G1G2G3G4依然为0000,例如D1,D2出错,010100001001

G4=P4⊕D4⊕D5⊕D6⊕D7=0⊕1⊕0⊕0⊕0⊕1=0

G3=P3⊕D1⊕D2⊕D3⊕D7=1⊕0⊕0⊕0⊕1=0

G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕0⊕0⊕0⊕0=1

G1=P1⊕D1⊕D3⊕D4⊕D6=0⊕0⊕0⊕1⊕0=1

2)同时,G4G5G6G1=0000不一定数据传输过程中就没有错误,只有当只有一位发生错误时,才能检测出来。

G1G2G3G4=0011,也就是第3位出现错误,很明显这是不准确的。

原文地址:https://www.cnblogs.com/Mayfly-nymph/p/11098213.html

时间: 2024-10-29 11:36:20

海明校验的相关文章

海明校验码

原博地址:http://blog.csdn.net/yudandan10/article/details/11878421  计算机组成中的海明校验码,相信学过的都会有了解,那么对其中校验位的确定,我想似乎有些人不是很明白,今天我来详细的把如何确定校验位分享一下 首先看下基本的概念  : 2^r≥k+r+1 其中r为校验位 ,k为信息位  信息位是已知的,那么如何确定校验位呢,用一个例子来说明 例如:二进制码1011  求它的海明编码 步骤如下: 1.首先确定信息位,也就是1011了,那么随之K

计组_海明校验码

原理: 在数据中加入几个校验码,并把数据的每一个二进制位分配在几个奇偶校验组中. 设:校验位的个数为r,能表示2^r个信息,1个表示“没错误”, 2^r -1个指出错误发生在哪一位. k= 2^r –1-r个信息可用于纠正数据位. 2^r≥k+r+1 若要检测并纠正一位错,同时发现两位错,r,k应满足下列关系: 2^r-1≥k+r      (见表3.8) 校验位和数据位是如何排列的 校验位排列在  2^(i–1) (i =0,1,2,…)的位置上 例:有一个编码 为D4D3D2D1,由此生成一

(转)海明校验码--确定校验位

转自 :http://blog.csdn.net/yudandan10/article/details/11878421 计算机组成中的海明校验码,相信学过的都会有了解,那么对其中校验位的确定,我想似乎有些人不是很明白,今天我来详细的把如何确定校验位分享一下 首先看下基本的概念  : 2^r≥k+r+1 其中r为校验位 ,k为信息位  信息位是已知的,那么如何确定校验位呢,用一个例子来说明 例如:二进制码1011  求它的海明编码 步骤如下: 1.首先确定信息位,也就是1011了,那么随之K的长

常用校验码(奇偶校验,海明校验,CRC)学习总结

常用校验码(奇偶校验,海明校验,CRC)学习总结 一.为什么要有校验码? 因为在数据存取和传送的过程中,由于元器件或者噪音的干扰等原因会出现错误,这个时候我们就需要采取相应的措施,发现并纠正错误,对于错误的检测和校正,大多采取"冗余校验"的思想,即除原数据外,额外增加若干位编码,这些新增的代码称为校验位. 二.数据是如何校验的? 输入的数据m经过f得到p校验位. 数据m和校验位一起通过存储器或传输线路,分别得到m'和p',这两者可能和m,f相同,也可能由于传输储存发生问题而不同. 由数

海明校验码(靠谱的解释)

https://www.cnblogs.com/zsswpb/p/5771636.html [定义] 海明码(Hamming Code)是利用奇偶性来检错和纠错的校验方法.海明码的构成方法是在数据位之间的确定位置插入k个校验位,通过扩大吗距来实现检错和纠错.对于数据位m的数据,加入k位的校验码,它应满足: 2^k>m+k+1 [例子] 设数据为01101001,试采用校验位求其偶校验方式的海明码. (1)确定数据位D和校验位P在海明码中的位置: 由海明码编码规则可知: pi在海明码的第2i-1

计算机组成原理的【海明校验码】(软考)

具体的原理可以直接百度不多说,直接写怎么解决 一.前提: 数据位中仅有一位出错,这是海明码产生的依据 二.异或运算 相同为0,不同为1,异或的符号为"xor"或者"⊕",例如:1 xor 1 = 0,1 xor 0 = 1 三.基本公式 2^r≥k+r+1 其中r为校验位 ,k为信息位  信息位是已知的 四.具体例子 1. 求(1101)2的海明码 (1) 首先求出校验的位数和位置 位数:根据公式计算,校验位数最小为3 位置:2^n(位置一般为2的n次方,1.2.4

校验码

校验码在内存和通信的检错容错中应用广泛. 常用的校验码有奇偶校验码(Parity).海明校验码和循环冗余校验码(CRC) 奇数偶数用异或操作即可计数实现. 奇偶校验码是对每个byte (8 bits) 加一位校验码,此时根据所采用的的是奇校验还是偶校验来确定校验码的值,使之这个序列中的1的个数为奇数/偶数. 优点:高效,快: 缺点:能反映错误但是无法定位错误,只能说错了就重传 海明码则是多重奇偶校验,它的做法是假设N位的数据,我们采用多位校验码,假设K位,加入了这K位校验码之后,我们能够用校验码

【计算机组成原理】校验码

奇偶校验码 组成奇偶校验码的基本方法:在n位有效信息位上增加一个二进制校验位,构成一个n+1位奇偶校验码 奇校验:使n+1位的奇偶校验码中1的个数为奇数 偶校验:使n+1位的奇偶校验码中1的个数为偶数 只能发现无法修改 海明校验码: 多重校验  分成多组 每一组做奇偶校验 可以发现并纠错 原文地址:https://www.cnblogs.com/dream-to-pku/p/11615995.html

CRC

一.CRC的作用 CRC的英文全称为Cyclic Redundancy Check(Code),中文名称为循环冗余校验(码).它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制.  二.CRC的原理 (一)CRC的校验过程描述 1. 被校验的原数据转换成二进制序列,假设共K位 2. 以一定规则产生一个新的二进制序列,假设共R位的. 3. 把新的二进制序列附加在原数据二进制序列后面,共K+R位,发送出去. 4. 接收端接收数据后,把原数据的K位二进制序