校验码


在这里插入图片描述

码距

两个码组对应位上数字的不同位的个数称为码组的距离,简称码距,又称海明(Hamming)距离。
计算码距的一种方法,就是对两个位串进行异或(xor)运算,并计算出异或运算结果中1的个数。
例如110和011这两个位串,对它们进行异或运算,其结果是:
110⊕011=101;
异或结果中含有两个1,因此110和011之间的码距就等于2。
简单来说,就是,两对应相同位数的不同即码距+1,从首位开始对应;
例如00110和00100码距为1,12345和13344码距为2,Caus和Daun码距为2,1011001和10110110码距d=2
————————————————
版权声明:本文为CSDN博主「ghc_kailei」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:link

1 奇偶校验码

在这里插入图片描述
在这里插入图片描述

2 海明码

在这里插入图片描述在这里插入图片描述
例如:
用偶校验方式的海明码校验数据01101001
1. 第一步:确定校验码的位数k

  • 首先
    题目中的原数据01101001的位数n=8,这8位数分别用Di表示。(注意顺序是反着的,也就是依次为D7,D6,D5,D4,D3,D2,D1,D0
  • 校验码位数 k 与原数据 n 的关系为:2k - 1 ≥ n + k
  • 可以将k=1,2,3,4,5等代入很快就求得k=4是最小的满足者,第一步完成。

2. 第二步:确定校验码以及原数据的位置

  • 综上所述
    海明码共8+4=12位,分别用Hi表示;
    校验码4位分别有Pi表示;
    原数据8位有D(0-7)表示。

  • 小知识
    校验码总是放在海明码下标为2i的位置,如:1,2,4,8…

先安排校验码的位置

H12H11H10H9H8H7H6H5H4H3H2H1
----P4---P3-P2P1

剩下的是题目中给出的原数据的位置哦

H12H11H10H9H8H7H6H5H4H3H2H1
D7D6D5D4P4D3D2D1P3D0P2P1
0110P4100P31P2P1

3. 第三步:求校验码
我们要知道需要校验的是题目中给出的原数据,也就是D(0-7)
在海明码中,结合上面的表格,看看我的思路(以下例子看几个就好,后面有结论表格),下面的加法纯属看下标,没有实际的值
D0—对应H3—H3=H2+H1—H2,H1对应P2,P1—所以D0由P1,P2验证。
D1—对应H5—H5=H4+H1—H4,H1对应P3,P1—所以D1由P1,P3验证。
D2—对应H6—H6=H4+H2—H4,H2对应P3,P2—所以D2由P2,P3验证。
D3—对应H7—H7=H4+H2+H1—H4,H2,H1对应P3,P2,P1—所以D1由P1,P2,P3验证。
D4—对应H9—H9=H8+H1—H8,H1对应P4,P1—所以D4由P1,P4验证。
D5—对应H10—H10=H8+H2—H8,H2对应P4,P2—所以D5由P2,P4验证。
D6—对应H11—H11=H8+H2+H1—H8,H2,H1对应P4,P2,P1—所以D6由P1,P2,P4验证。
D7—对应H12—H12=H8+H4—H8,H4对应P4,P3—所以D7由P3,P4验证。

由以上得出

需验证的数据D7D6D5D4D3D2D1D0
由哪个校验码验证P3 ,P4P1 ,P2 ,P4P2 ,P4P1 ,P4P1 ,P2 ,P3P2 ,P3P1 ,P3P1 ,P2
  • 知识点来了,求校验码的值
  • 验证码 = 需要它验证的所有原数据(题目中给出的)相异或,也就是说

P1=D0异或D1异或D3异或D4异或D6(10101)
P2=D0异或D2异或D3异或D5异或D6(10111)
P3=D1异或D2异或D3异或D7(0010)
P4=D4异或D5异或D6异或D7(0110)

  • 知识点来了
  • 若采用奇校验,则将各校验位的偶校验值取反即可

4. 最后一步:校验
四个校验位由Gi表示
Gi=Pi和所有由它校验的原数据相异或,即,
G1=P1异或D0异或D1异或D3异或D4异或D6(P1,10101)
G2=P2异或D0异或D2异或D3异或D5异或D6(P2,10111)
G3=P3异或D1异或D2异或D3异或D7(P3,0010)
G4=P4异或D4异或D5异或D6异或D7(P4,0110)

结论

  • 若采用的是偶校验,四个校验位Gi全为0,表示收到的数据正确
  • 若采用的是奇校验,四个校验位Gi全为1,表示收到的数据正确

3 循环冗余校验码

在这里插入图片描述
模2除法

向上借位,只要除数和被除数的位数相同就可进行计算,不比较它们的大小;不进位不退位

②模2运算中用到了模2减法,与逻辑异或相似
1-1=0, 1-0=1, 0-1=1 , 0-0=0,

③例子:
在这里插入图片描述
CRC校验的步骤

(1)选择一个生成多项式,作为对接收的帧进行除法运算时的除数,生成多项式可以写为二进制形式;

  • 生成多项式的要求:
    最高位和最低位必须为1
    ②当CRC码的任何一位发生错误时,新帧除生成多项式后余数不为0;
    ③不同位发生错误时,余数应该是不同的;

  • 生成多项式转化为二进制形式:
    如x5+x3+x2+1,(1 * x5 + 0 * x4 + 1 * x3 + 1 * x2 + 0 * x1 +1)写为二进制:101101

(2)计算CRC校验码位数k=生成多项式位数-1,在要发送的数据帧后加k个0,除第一步用生成多项式转化的二进制数(使用模2除法),得到的余数即为CRC校验码;

模2除时,余数的位数必须只比除数少一位,不能省略0
(3)把得到的校验码CRC加到原数据帧后,构成一个新数据帧发送到接收端,接收端将新帧除以之前选择的除数(模2除法),如果没有余数,则表明该数据帧在传输过程中没有出错,否则出错;

CRC校验例子:
假设CRC生成多项式G(X)=X5+X4+X+1,要发送的二进制数据帧为100101110,求CRC校验码:

①把生成多项式转换为二进制数:110011;(二进制数的 位数 = 多项式的最高次幂 + 1)

②由生成多项式的位数为6可知,CRC校验码的位数为5,所以在数据帧后加5个0,变为10010111000000,将这个数使用模2除法除以生成多项式110011,得到余数即CRC校验码11010;

在这里插入图片描述
③用得到的CRC校验码替换掉数据帧中的5个0,形成新的帧10010111011010,将这个新帧发送给接收端;

④接收端收到新帧后,用新帧除以上面的多项式110011(模2除法),如果余数为0,该数据帧在传输过程中没有出错,否则出错;(经验证余数为0)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值