1.计算机硬件基础-校验码(5)
来源:互联网 发布:卡片电脑知乎 编辑:程序博客网 时间:2024/06/05 17:45
校验码基础知识
校验码是为了发现传递信息串的错误和自动纠正错误而采用的技术。比方说从A点到B点发送一串信息,B点接收到了信息时,A点并不知道B点收到的是否为原始数据,在传递的过程当中是否发生错误,B点也存在这类的问题,B点不知道收到的信息是否正确,为了解决这类问题就设计出了校验码;校验码就是通过增加一些冗余位的信息(判断规则),接收端收到的信息后判断是否原始信息,当中如果发现有错误,就是非法的二进制串。
码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据校验码的码距。码距越大,检错能力越强。
例如,用4位二进制表示16种状态也就是有16个不同的码字,此时码距为1,如0000与0001。码距为1时,不具备检错能力。因为4位二进制传输取出之后,无论如何变化,所收到的还是一个4位,而4位最多表示16种状态同时也是合法的,所以说无论发生什么样的错误,对方收到的都是一个合法的二进制编码,当然同时它并不是发出的原始数据。要具备检错能力,码距要大于等于2。比方说,用4位二进制表示8种状态,这个时候就可以达到码距大于等于2,如果其中1位发生错误的话,可能就会变为另一种码字,接收端收到信息进行读取根据规则判定不是合法的,因为只有8种状态是合法的,另外8种是非法的。
奇偶校验
奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。
奇校验:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
偶校验:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
奇偶校验不能判断具体是哪一位发生了错误和纠正错误,纠正错误首先建立在能够知道具体是哪一位发生错误的前提。
例如,二进制串有效信息位是10001100,若是采用奇校验,校验位应该加个0为100011000,因为1的个数要保持奇数个(补充:如果是偶校验它的校验位应该加1为100011001,才能保持1的个数为偶数个。)。对于这一串校验信息,如果从A点传递到B点,在B点接收到的情况下,可能是100011000,此时再将校验位去掉得到有效信息位。如果约定的是奇校验,接收端会检查1的个数是否为奇数。若为奇数,就认定这个校验码在传输的过程当中没有发生错误。若为偶数,比方说100011100,采用奇校验判定有错误。但是两位发生了错误,他就检测不出来。对于奇校验它不能检测偶数位发生的错误。偶校验同理。
循环校验码CRC
CRC编码:具有非常强的连续多位检错纠错能力的校验码,CRC校验码被广泛应用于计算机当中。在k位信息码之后拼接r位校验码。应用CRC码的关键是如何从k位信息位简便地得到r位校验位(编码),以及如何从k+r位信息码判断是否出错。
循环冗余校验码编码规律如下:
- 把待编码的N位有效信息表示多项式M(X);
- 把M(X)左移K位,得到M(X)*Xk的,这样空出了K位,以便拼装K位余数(即为校验位):
- 选取一个K+1位的产生多项式G(X),对M(X)*Xk的做模2除:
- 把左移K位以后的有效信息与余数R(X)做模2加减,拼接为CRC码,此时的CRC码共有N+K位。
模2除法是指在做除法运算的过程中不计其进位的除法。例如,10111对110进行模2除法为:
例:原始报文(信息码)为“11001010101”,G(X)=X4+X3+X+1,对其进行CRC编码后的结果为?
分析:CRC编码的过程,原始报文加上校验位与多项式进行模2除法得出CRC。已知校验码为4位,在11001010101补上4个0得到110010101010000,G(X)=X4+X3+X+1=24+23+2+1,G(X)-1=K,110010101010000与11011做模2运算。结果为:0011。
海明码校验码
海明校验码(多重奇偶校验)的原理是:有效信息位中加入几个校验位形成海明码,使用码距比均匀地拉大,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错误,还能指出错误的位置,为自动纠错提供了依据,但海明码不能多位出错,多位出错将无效。r表示校验位的位数,m表示有效信息位的位数。海明码位数不等式:
2r≧m+r+1
借助例子了解海明码。例:求信息1011的海明码。
(1)2r≧4+r+1,确定校验码至少为3位23≧4+3+1。校验码是3位,信息码是4位,整个校验码就为7位。其中1、2、4是校验码信息,3、5、6、7是信息位的信息。校验码的填充位置为1、2、4、8、16以此类推的位置。
(2)列出校验位公式。
7=22+21+20,6=22+21,5=22+20,3=21+20;
(3)根据公式得r2=0,r1=0,r0=1。
(4)将数据加入表格,如表所示。
得到海明码为1010101。
0 0
- 1.计算机硬件基础-校验码(5)
- 1.计算机硬件基础-计算机结构(2)
- 计算机硬件基础(上)
- 1.计算机硬件基础-指令(3)
- 1.计算机硬件基础-存储系统(4)
- 计算机硬件知识(基础篇)
- 1.计算机硬件基础-数据的表示(1)
- 计算机硬件基础
- 计算机硬件基础
- 【计算机基础】计算机硬件系统(一)
- 【计算机基础】计算机硬件系统(二)
- 计算机基础(一)计算机硬件知识
- 并行计算机硬件基础
- 计算机硬件基础考点集锦
- 0.计算机硬件基础
- 【计算机硬件基础知识】海明校检码基础
- 【计算机硬件基础知识】指令系统基础
- 【软考】--计算机硬件基础
- 关于如何使navigationbar 从透明到完全实现展现的动画效果实现
- 冒泡排序
- 【leetcode】119. Pascal's Triangle II【java】
- zoj1195
- 初识java的几种io流
- 1.计算机硬件基础-校验码(5)
- c++开源日志库log4cplus
- 各个ip地址库对比与java实现
- Spring AOP切面编程 AspectJ
- Hibernate查询数据
- C/C++ OpenCV高斯滤波
- 小博老师解析Java核心技术 ——动态解析Jar的运用
- mac机上支持rar和unrar安装和使用
- Struts2校验