计算机组成原理-检验码(附实例)

检验码名词及原理介绍

(一)奇偶校验码

编码原则:在 n 位数据码之外增加 1 位校验位,使 n+1 位码字中取值为 1 的位数总保持为 偶数(偶校验)或 奇数(奇校验)
特征
奇校验:整个校验位中1的个数为奇数。
偶校验:整个校验码中1的个数为偶数。
实例:
原始数据为1011
奇校验码为 01011
偶校验码为 11011
个人理解:在所有的检验码中,奇偶检验比较简单,只需要在原始数据上面根据题目给出的需要判定的方法,给出具体的答案就行。

(二) 海明检验码

定义:海明校验码是一种能够纠正一位出错,检测两位错,并能自动恢复出错位的校验码。
编码原则:假设数据位的位数为k,校验位为r, 在编制海明码的时候,需要满足海明不等式:2^r ≥k+r+1
数据位和校验位的对应关系表

K值最小的r值
1-34
4-105
11-256
25-567
57-1198

假设海明码的最高位的位号为m,最低位号为1, 海明码为Hm Hm-1 …H2 H1 。
海明码的编码规则如下:

(1) 校验位与数据位之和为m,每个校验位 在海明码中被分在位号为 的位置上,其余各位为数据位,并按照从低到高逐位依次排列的关系分配各数据位。
(2) 海明码的每一位码 (包括数据位和校验位本身)由多个校验位校验,其关系是被校验的每一位位号要等于校验它的各校验位的位号之和
(3)在增大合法码的码距时,使所有码的码距尽量均匀的增大,以保证对所有码的验错能力平衡提高。

实操一下
为一个8位二进制数编制海明码

  1. 计算校验位的数位
    由对应的表可知,r最小为5。所以海明码为
    {H13 H12 H11 H10 H9 H8 H7 H6 H5 H4 H3H2 H1}
  2. 由编码原则二我们设置校验码的位置
    一共有5位检验码,我们设置检验码为pi,以示区分校验位以及数据位。
    补充一个简单的规则: 校验位与数据位之和为m,每个校验位Pi 在海明码中被分在位号为2^(i-1)的位置上,其余各位为数据位Di,并按照从低到高逐位依次排列的关系分配各数据位。
    校验位 Pi 应放在1, 2, 4, 8, 16的位置上
    但是因为没有第16位,所以第5个校验码放在第13位
    H13 H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
    P5 D8 D7 D6 D5 P4 D4 D3 D2 P3 D1 P2 P1
    推导过程:由规则二得每一位位号要等于校验它的各校验位的位号之和
海明码位号数据位/校验位参与校验的校验位位号位号=校验位位号之和
H1P111=1
H2P222=2
H3D11,23=1+2
H4P344=4
H5D21,45=4+1
H6D32,46=4+2
H7D44,2,17=1+4+2
H8P488=8
H9D58,19=8+1
H10D68,210=8+2
H11D78,2,111=8+2+1
H12D88,412=8+4
H13p51313=13

5个校验位只与本身有关, 数据位则与多个校验位有关。 D1由P1和P2校验, D3由P2和P4校验等。
P1校验D1、 D2、 D4、 D5、 D7
(表格第三列有1的
P2校验D1、 D3、 D4、 D6 、 D7 (类推
P3校验D2、 D3、 D4、 D8
P4校验D5、 D6、 D7、 D8
(原数据位校验不均衡,数据位出现的次数不同,所以应让数据位出现次数相同)
P5校验D1、 D2、 D3、 D5、 D6、 D8。
(每个数据位出现3次
校验方程:
P1= D1⊕ D2⊕ D4⊕ D5⊕ D7
P2= D1⊕ D3⊕ D4⊕ D6⊕ D7
P3= D2⊕ D3⊕ D4⊕ D8
P4= D5⊕ D6⊕ D7⊕ D8
P5 = D1⊕ D2 ⊕ D3⊕ D5⊕ D6⊕ D8

假设:

发送端发送的数据为D8-D1, 海明校验位的取值就是
P1 , P2 ,P3 ,P4 ,P5
在数据的接收端, 接收到海明校验位为
P1’ ,P2’ ,P3’ ,P4’ ,P5’
S1= P1’ ⊕ P1
S2= P2’ ⊕ P2
S3= P3’ ⊕ P3
S4= P4’ ⊕ P4
S5= P5’ ⊕ P5

检错和纠错

当S1-S5全为零时,表明无错。
当S1-S5中仅有一位不为0时,说明有一个校验位出错。
当有两位不为0时,表明两位海明码出错。
当三位不为0时,表明一个数据位出错。出错的海明码位号
由S4-S1四位得编码值给出。

举例:
如果要传送的数据为10110110,请编写海明码。
根据校验方程,求得:
P1=0, P2=0, P3=1, P4=1, P5=1
所以,海明码为1101110111000
(最左边为第13位,最右边为第一位)
假设在传送过程中发生了错误
接收方接收到的数据为10111110, D4位由0变为1, 发生了错误
以下过程反推D4出错
根据校验方程,求得:
P1‘=1, P2 ‘= 1, P3 ‘= 0, P4 ‘= 1, P5 ‘= 1
S1=1, S2=1, S3=1, S4=0, S5=0
由于S1-S5中有3个不为零, 因此可以判断有一个数据位出错。
(为什么3个可以判断一个数据位呢?因为一个数据位通常被3个校验位校验)
因为S4-S1的编码为0111, 说明第7位海明码出错
为什么是第七位的海明码出错呢
(编码后用十进制表示编码即可–0111用十进制表示为7)
也就是D4出错。

循环冗余校验码

定义:用于多位串行数据传送中的检错纠错处理,在 k 位数据位串行移位输出的过程中,用带有异或门控制的移位寄存器形成 r 个校验位的值,跟随在数据位之后传送走。在接收端再对 k+r 位的码字进行合法与出错检查,若可能则自动改错。

CRC原理

CRC 算法的基本思想是将传输的数据[M(X)] 当做一个位数很长的数。将这个数除以另一个数[G(X)] ,得到的余数[R(X)] 作为校验数据附加到原数据后面,组成循环校验码。
CRC 算法的基本思想是将传输的数据[M(X)] 当做一个位数很长的数。将这个数除以另一个数[G(X)] ,得到的余数[R(X)] 作为校验数据附加到原数据后面,组成循环校验码。

M(X)代表待编码的有效信息
G(X)代表约定好的多项式
R(X)代表代表检验位

CRC的结构 = 信息位(N位) + 校验位(K位)
CRC编码 = M(X) + R(X)

CRC编码原则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实例

对四位有效信息( 1100) 做循环校验编码,
选择的生成多项式G( x) =1011。

  1. 把编码的有效信息表示为多项式M(X)
    M (X ) = X ^3 + X ^2 =1100
  2. 将M( x) 左移r位得M( x)乘x^r, 其目的是空出r位,以便拼装r位余数( 校验位) :
    M (X )*X^ 3 = X^ 6 * X^ 5 =1100000(左移往右加0)
  3. 用r+1位的生成多项式G( x) 对M( x)x^r做模2除
    G(X)=X^3+X+1=1011
    M(X)*X^3/G(X)=1100000/1011
    =1110+010/1011
  4. 将左移r位后的待编有效信息与余数R(x)做模2加,即形成循环校验码。
    M (X )= X^ 3 * R(X ) =1100000 + 010 =1100010
    模2除法和加法都可相当于异或计算
    异或计算:00=0,11=0,其他为1

纠错
接受部件将收到的循环校验码用约定的生成多项式G( x) 去除, 如果码字无误则余数为0, 如果某一位出错则余数不为0, 不同位数出错余数则不相同。

在这里插入图片描述

关于生成多项式:
并不是任何一个r+1位多项式都可以作为生成多项式的。从检错和纠错的要求出发,生成多项式应能满足下列要求。
( 1)任何一位发生错误都应使余数不为0.
( 2)不同位发生错误应当使余数不同。
( 3)对余数继续作模2除,应使余数循环。
对一个( n,k)码来说, 可将 Xn-1 分解为若干质因子(注意是模2运算),根据编码所要的码距选取其中的因式或若干因式的乘积作为生成多项式。

学生党总结的笔记,如有错误,请多多指教!

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值