计算机组成原理之校验码


前言

受众:新手?零基础突击期末?(也许吧,定位不准,也许谁都不适合,写个乐子)

校验码(Check code)是一种附加在数据末尾的冗余信息,用于检测或纠正数据传输或存储过程中产生的错误。本文介绍奇偶校验,交叉奇偶校验,海明码(重点介绍),循环冗余校验(重点介绍)


正文开始

奇偶校验

  • 奇校验:一个校验位。如果数据部分的1有奇数个,那校验位为0;如果1有偶数个,那校验位为1。总之,保证数据部分+校验位的1是奇数个。
  • 偶校验:一个校验位。如果数据部分的1有奇数个,那校验位为1;如果1有偶数个,那校验位为0。总之,保证数据部分+校验位的1是偶数个。

检错不纠错,且对于偶数个位的错误则无法检测

交叉奇偶校验

步骤:

将数据构建出成一个二维矩阵形式,一般是8位一行,即一个字节
横向校验:对每一行(即每个字节)的数据位进行奇偶校验,生成一个横向校验位
纵向校验:对每一列(即所有字节的同一位置)的数据位进行奇偶校验,生成一个纵向校验位。
  • 可以纠错,当某位发生错误时,其所在行,所在列的奇偶校验结果都是错误,从而锁定错误位置
  • 可以检测出两位同时出错的情况,但没法纠正

海明码

多重奇偶校验码,本次介绍他的偶校验方式

生成校验码

第一步: 确定校验位位数。满足:2k - 1 ≥ \geq n + k,n 为有效信息的位数,k 为校验位的位数

第二步:确定校验码各位所在位置。2i,i取0,1,2,,,k - 1

第三步:分组,计算校验位的值。

分组标准:
包括校验码在内的n + k个位置,将各个位置的位置号写成二进制形式,比如n + k = 12,那校验位位置的23 = 8的位置写成1000,数据位位置10写成1010
如果数据位位置序号 与上 校验位 不为0,比如1010 & 1000 = 1000,那么第10个位置就被分到第三组(23 = 8,所以8对应第三组)
对各组进行偶校验计算,如 第三组是将第9,10,11,12对应位置的数据来做偶校验,将校验码填入8对应位置

校验码纠错

只能纠错一位
分组如上,将各组加入校验码进行异或xor运算(若是使用奇校验,同或运算),若结果全为0,则未出错;假若结果
第0组:0
第1组:1
第2组:0
第3组:1
则对应位置0101 = 5,5号位发生错误,取反改正

题目

内容不明白?一题解万愁。

题目:
海明码(用偶校验):写出8位二进制数01111010B (最高位在左侧) 的海明校验码。如果接收到一个8位进制数和它的海明码分别为:M’=01111010,P’=0011,请问该数据在传输过程中是否出错,如果出错,原数据应该是多少?

whh love 计组

循环冗余校验CRC

可能用在计算机网络多点,不管了,在哪讲都是讲

生成校验码

第一步:构造被除数,在数据部分后面添加生成多项式最高次数个0

第二步:由生成多项式确定除数。如生成多项式是G(x) = x3+x2+1,则除数是1101

第三步:模2除:用异或(XOR)运算代替常规的减法运算,并且不涉及进位或借位,相应的二进制位进行比较:如果两个位相同,则结果为0;如果两个位不同,则结果为1。

第四步:余数即为所求的检验码。余数位数当与生成多项式最高次数相同,不足则 后补0

检错

构造被除数改为,在数据部分后面添加所得校验码(若直接给出被除数则忽略),再作模2除(除数不变),若余数为0,则未发生错误;余数不为0,则误码。

题目

实践出真知

题目1:
待发送信息为101001,生成多项式是G(x) = x3+x2+1,求其加上CRC校验码所发送的信息。

回答:

所以发送101001 001

题目1:
接受到的信息为101101001,生成多项式是G(x) = x3+x2+1,判断是负误码?

回答:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值