第一章 计算机硬件基础知识(校验码--奇偶校验、海明码、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

相关文章

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

数据结构:二叉树详解 c++信息学奥赛基础知识讲解

目录 一、二叉树的定义 二、二叉树的形态 三、二叉树的性质 四、二叉树的存储 五、二叉树的创建与遍历(递归) 六、二叉树实现 创建二叉树 展示二叉树 1、计算数的高度 2、计算数的叶子数量 3、计算数的宽度 4、层次遍历 5、前序遍历 递归写法 非递归写法 6、中序遍历 递归写法 非递归写法 7、后序遍历 递归写法 非递归写法 8、输出根节点到所有叶

C/C++语言基础知识 之 引用和指针

关于引用 引入是C++引入的新语言特性。 1 int &rn = a;-----------------------------------------------2 int* p = &a;3 int* &pa = p;4 (*pa)++;5 pa = &b;6 (*pa)++; L1:声明rn为变量a的一个引用,不需要为rn另外开辟内存单元。rn和a占

C语言常见面试题3 之 基础知识

(1)i++和++i哪个效率更高? 对于内建数据类型,二者效率差别不大(去除编译器优化的影响) 对于自定义数据类型(主要是类),因为前缀式(++i)可以返回对象的引用;而后缀式(i++)必须返回对象的值,所以导致在大对象时产生了较大的复制开销,引起效率降低。 (2)不使用任何中间变量如何交换a b的值? void swap(int& a, int& b)//采用引用传参的方式{a^=

C++基础知识——引用

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。                                               博主主页:Yan. yan.                                               C语言专

音视频开发基础知识(1)——图像基本概念

像素 **像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。**在下面这张图中,你可以看到一个个方块,这些方块就是像素。 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺寸。比如说一张1920x1080的图像,前者1920指的是该图像的宽度方向上有1920个像素点,而后者1080指的是图像的高 度方向上有1080个像素点。

小柴带你学AutoSar系列一、基础知识篇(6)车规级MCU入门RH850

flechazohttps://www.zhihu.com/people/jiu_sheng 小柴带你学AutoSar总目录https://blog.csdn.net/qiansh

数据结构(C语言版)-第一章绪论

1.1 什么是数据结构 数据结构是计算机科学中一个核心概念,它涉及到如何在计算机中有效地存储、组织和管理数据。数据结构的选择和设计直接影响到算法的效率和程序的性能。其基本要素包括数据元素(也称为节点或记录)、数据元素之间的关系,以及在此基础上定义的各种操作。 具体来说,数据结构可以分为以下几个关键方面: 逻辑结构:这是对数据元素之间逻辑关系的抽象描述,不依赖于数据在计算机中的实际存储方式。逻辑

面试题之基础知识

参考答案   b d  b   b d

spring的基础知识----Spring的Bean有两种基本行为

Bean是spring窗口的最基本单元 Bean有两种基本行为: Singleton:单态 non-Singleton 或ProtoType原型 如果如non-Singleton行为时Spring只负责使用new关键字创建一个Bean实例,一旦创建后,容器不再负责Bean的实例状态和跟踪实例; 在Web应用的控制器Bean配置成non-Singleton行为,因为每次Ht