第一章 计算机硬件基础知识(校验码--奇偶校验、海明码、CRC)

本文主要是介绍第一章 计算机硬件基础知识(校验码--奇偶校验、海明码、CRC),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据校验的基本原理

数据校验的基本原理是在正常编码中加入一些冗余位,即在正常编码组中加入一些非法编码,当合法数据编码出现某些错误时,就成为非法编码,因此就可以通过检测编码是否合法来达到自动发现、定位乃至改正错误的目的。

码距:两个码字之间不同的二进制位数。假设我们有两个四位二进制,1111与1110,它们的码距便是1。因为只有最低位不同。

计算码距

计算0100和11111

①直接观察法:可以看出,有3个数位值,所以码距为3

②异或计算法:0100⊕1111=1011,这里面有几个1就代表有多少个数位值不同,这里码距是3

若码距=2,有检错能力;若码距≥3,可能还会有纠错能力

码距与检错/纠错的关系

码距越大,反映了码集中每两个码字之间的差别程度越大。那么从一个编码传输错误变成另一个编码的可能性越小。则其检错、纠错能力也就越强。

①码距≥e+1   (可检测e个错误)

②码距≥2t+1  (可纠正t个错误)

③码距≥e+t+1(可纠正t个错误,同时检测e个错误)

奇偶校验

奇偶检验是一种差错检测技术,主要用于检测数据传输中是否发生错误。

奇校验:数据位+校验位       总共有奇数个1

偶检验:数据位+校验位       总共有偶数个1

奇校验码
奇校验码在数据发送前,检查1的个数,奇数个1就在头部填充0,偶数个1就在头部填充1,使数据整体保持奇数个1;

接收数据时,重新检查1的个数:

奇数则判定数据正常,去掉头部的填充符;
​偶数个则判定数据出错,重新发送数据帧。

示例:假设数据单位为8位,并且使用奇校验。

数据 10110011 中有5个1,因此符合奇数要求,校验位为0。

偶校验码
偶校验码在数据发送前,也会检查1的个数,偶数个1就在头部填充0,奇数个1就在头部填充1,使数据整体保持偶数个1;

接收数据时,重新检查1的个数:

偶数个1则判定数据正常,去掉头部的填充符; ​
奇数个1则判定数据异常,重新发送数据帧。

示例:假设数据单位为8位,并且使用偶校验。

数据 11001010 中有4个1,不符合奇数要求,校验位为1。

海明码

海明码具有一位纠错能力。

海明码检错/纠错基本思想。

 海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码。

它的检错/纠错思想:
①将有效信息按某种规律分成若干组,每组安排一个校验位通过异或运算进行校验,得出具体的校验码

②在接收端同样通过异或运算看各组校验结果是否正确,并观察出错的校验组,或者多个出错的校验组的共同校验位,得出具体的出错比特位

③对错误位取反来将其纠正

海明码计算

步骤:计算校验码位数→确定校验码位置→确定校验码

①计算校验码位置

假设用N表示添加了校验码位后整个传输信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位数,它们之间的关系应满足:N=K+r≤2^{r}-1(是为了确保r位校验码能校验全部的数据位,因为r位校验码所能表示的最大十进制数为2r-1,同时也确保各位码本身不被其他校验码校验)

设有数据为8位,那么 2⁴-1=15>8+4=12,则校验位为4位,即这个海明码长12位

②确定校验码位置

海明码的校验码的位置必须是在2^{n}位置(n从0 开始,分别代表从左边数起分别是第1、2、4、8、16……),信息码也就是在非2^{n}位置

令信息位为D7,D6,D5,D4,D3,D2,D1,D0,信息位从高往低占据编码位;
令校验位为P3,P2,P1,P0,校验位P0=2⁰=1,P1=2¹=2,P2=2²=4,P3=2³=8;

位数121110987654321
信息位D7D6D5D4D3D2D1D0
校验位P3P2P1P0

③确定校验码

信息位的位数=校验位组的位数之和

信息位D7的位数为12,12=8+4,所以D7的校验位组为P3(位数:8)和P2(位数:4)

信息位位数校验计算校验位组
D712=8+4P3,P2
D611=8+2+1P3,P1,P0
D510=8+2P3,P1
D49=8+1P3,P0
D37=4+2+1P2,P1,P0
D26=4+2P2,P1
D15=4+1P2,P0
D03=2+1P1,P0

由上表可得,P0参与了D0,D1,D3,D4,D6的检验,其他由此类推
P0=D0⊕D1⊕D3⊕D4⊕D6
P1=D0⊕D2⊕D3⊕D5⊕D6
P2=D1⊕D2⊕D3⊕D7
P3=D4⊕D5⊕D6⊕D7

这样子就可以算出整个海明码的值了。

示例:设数据为01101001,求海明码。

数据位为8,则2⁴-1=15>8+4=12,则校验位为4位,即这个海明码长12位;
D7D6D5D4D3D2D1D0=01101001;
P0=2⁰=1,P1=2¹=2,P2=2²=4,P3=2³=8;
P0=D0⊕D1⊕D3⊕D4⊕D6=1⊕0⊕1⊕0⊕1=1
P1=D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕1⊕1⊕1=0
P2=D1⊕D2⊕D3⊕D7=0⊕0⊕1⊕0=1
P3=D4⊕D5⊕D6⊕D7=0⊕1⊕1⊕0=0

则海明码为011001001101

CRC

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。

其根本思想就是先在要发送的帧后面附加校验码,再发送给接收端。校验码要使所生成的码能与发送端和接收端共同选定的某个特定数整除(模2除)。到达收端后,再把接收到的新帧除以这个选定的除数。结果应该是没有余数,如果有余数,则表明该帧在传输过程中出现了差错。

示例:CRC生成的多项式为G(x)=x^{3}+x^{2}+x+1,要求写出二进制序列101100的CRC校验码。

①将G(x)多项式转化成二进制序列,由G(x)=x^{3}+x^{2}+x+1,可以得到序列1111

②多项式的位数为4位,则在二进制序列后面加(4-1)个0,变成101100000

③然后使用模2除法除以除数(模2除法: 被除数第一位为1的话商写1并用按位进行异或运算       被除数第一位为0的话商写0并且进行异或运算

                  1 1 1 0 0 1         // 商
     ------------------------
1111|1 0 1 1 0 0 0 0 0            // 被除数,因为首位为1,所以商第一位写1
      /  1 1 1 1                  // 除数,因为被除数首位为1,所以用除数进行除
      -----------------------
            1 0 0 0                // 被除数,从上面进行模2加减法得到的
            1 1 1 1              // 因为被除数首位为1,所以商第二位写1
      -----------------------
              1 1 1 0              // 被除数,从上面进行模2加减法得到的
              1 1 1 1              // 除数,因为被除数首位为1,所以用除数进行除
      -----------------------
                 0 0 1 0           // 被除数,从上面进行模2加减法得到的
                 0 0 0 0            // 除数,因为被除数首位为0,所以用除数进行除
      -----------------------
                     0 1 0 0            被除数,从上面进行模2加减法得到的

                     0 0 0 0              // 除数,因为被除数首位为0,所以用除数进行除
      -----------------------------
                        1 0 0 0           // 被除数,从上面进行模2加减法得到的
                        1 1 1 1            // 除数,因为被除数首位为1,所以用除数进行除
      -------------------------------
                           1 1 1            // 余数

④将计算出来的CRC检验码添加在原始码的后面,即101100111,把这个数据发送到接收端。

④接收端收到数据帧后,模2除1111,验证余数是否为0,如果为0,则说明数据帧没有出错。

这篇关于第一章 计算机硬件基础知识(校验码--奇偶校验、海明码、CRC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/833887

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

校验码:奇偶校验,CRC循环冗余校验,海明校验码

文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。 奇校验:整个校验码中1的个数为奇数 偶校验:整个校验码中1的个数为偶数 奇偶校验,可检测1位(奇数位)的错误,不可纠错。

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

有关机械硬盘的基础知识

1,机械硬盘的品牌   目前市场中常见的笔记本电脑的机械硬盘品牌主要有希捷、西部数据、三星等。   2,机械硬盘的容量   硬盘容量,即硬盘所能存储的最大数据量。虽然笔记本电脑硬盘的容量会因单位密度的提升而增加,不过和台式电脑的大容量比起来,笔记本电脑硬盘的容量仍然落后许多。笔记本电脑的硬盘除了对磁盘有体积较小和数量较少的要求之外,对功耗、耐用程度、抗震性及成本等的考虑,也让笔记

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

计算机基础知识复习9.6

点对点链路:两个相邻节点通过一个链路相连,没有第三者 应用:PPP协议,常用于广域网 广播式链路:所有主机共享通信介质 应用:早期的总线以太网,无线局域网,常用于局域网 典型拓扑结构:总线型 星型(逻辑总线型) 介质访问控制  静态划分信道 信道划分介质访问控制 频分多路复用FDM 时分多路复用TDM 波分多路复用WDM 码分多路复用CDM 动态分配信道 轮询访问介质访问控

checksum 与 CRC的不同之处

实际应用: CRC:在外发电压时,在报文的最后两个字节做了CRC计算。 checksum : 在按键状态外发,在报文的最后一个字节做了checksum计算。 它们的共同之处:目的都是为了数据的错误检测功能。 只是在算法的复杂度上有较大的区别: 总的来说,CRC算法更复杂,可检测的错误也比较丰富。 CRC与checksum的计算方式都是固定的吗? 在实际应用中,并没有通知对方,所用