深入理解校验码

背景

为什么要校验码

校验码是为了解决二进制数据在计算机系统中传输时,发生信息错误的问题。例如发送端,发送数据“1101”, 而接收端收到的数据是“1100”,则数据发送错误。

校验码

校验码的组成

校验码由信息位和校验位构成。这意味着在原始数据“1101”是信息位,而校验码就是在信息位中加入若干(校验位),即bit数据。 编码后,接收端读取到数据中的校验码,来对信息位进行“检测”或者”纠错”。

那么,校验位如何编入信息位中来生成一个校验码?按照不同编码方式,这里一共分成三种校验码:奇偶校验码,海明校验码,循环校验码。 下面分别进行介绍。

奇偶校验码

奇偶检验码,是通过扩大码距(两个码字之间,最小可变码数的距离),用1位二进制数(0或者1)对信息位进行校验。用于奇数个数据位的检错,但不能就错。 它分成两种方式:

奇校验

校验码中1的个数是奇数/判断发送端1的个数和接受端1的个数是否还是奇数,如果不是则发生错误。
例如:信息位:1010;补1位,作为校验位:1; 最终校验码:10101,校验码中1的个数是奇数。
如果接收到11101,此时1的个数是偶数,而奇数校验码要求1的个数为奇数,所以数据产生了错误。

偶校验

偶校验和奇校验相反,判断校验码中1的个数是偶数与否。它的识别度不高,如:
发送端:信息位:1001 加校验位0, 得到校验码:10010
接受端:信息位:1000 校验位1,得到校验码:10001,
故两端的校验码的1依然是偶数。所以不能检测出错误。

海明校验码

海明校验码既可以检错,又可以纠错。
进行海明校验码的步骤如下:

校验位的个数

设信息码个数位m, 校验码个数为r,他们之间满足等式:

 2^ r >= m + r+ 1

例如:信息码=01101001, 则 m = 8. 可根据上面的公式,计算出校验位个数r = 4.

校验位的下标

校验码与下标Hi满足这样的关系:

r0 = 2^0 = 下标等于H1
r1 = 2^1 = 下标等于H2
r2 = 2^2 = 下标等于H4
r3= 2^3 = 下标等于H8

由上规律,我们可以先把校验位和信息位的关系填入下标,然后计算各个校验位p1-p4:
在这里插入图片描述

信息位的异或

在确认好校验位的下标后。我们开始利用信息码之间的异或,来得出校验位的值。
经过观察,可得出如下规律:
校验码下标:H12 = 2^3 + 2 ^ 2, 也就是说 P4和P3 校验 H12,即信息码D7
校验码下标:H11 = 2^3 + 2 ^ 1+ 2^ 0, 也就是说 P4和P2、P1 校验 H11即信息码D6。
以此类推,我们发现P4 校验位可以用来校验信息码: D8、D7、 D6、 D5
信息码异或则是P4的值,而其他校验位计算如下所示:

P4 =  D8 xor D7 xor D6 xor D5 = 0
P3 =  D8 xor D4 xor D3 xor D2 = 1
P2 =  D7 xor D6 xor D4 xor D3 oxr D2 oxr D1 = 0
P1 =  D7 xor D5 xor D4 xor D2 oxr D1 = 1

所以最终01101001的海明校验码为0110 0 100 1 1 01

错误检测
对使用海明编码对数据进行差错✊:
G1 = 新的P1 xor 原始P1
G2 = 新的P2 xor 原始P2
G3 = 新的P3 xor 原始P3
G4 = 新的P4 xor 原始P4
如果G1G2G3G4都是0,则数据正确,反之数据错误。如果G = 1010,则对应十进制H10(D5)发生错误,对其取反则可纠错。

循环校验码

循环校验码又称CRC校验码。 它只能用于机器码的检查错误,而不能纠错。

循环校验码也是又信息位和校验码组成。其中信息位通过模2取余法,把余数作为校验位拼接到信息位末尾,即可得到循环校验码。

如果接收端得到的码字,进行模2运算,余数不为0,则代表发生数据错误。

总结

本文介绍了数据的校验码的类别和编码方式,详细介绍了较难的海明校验码的编码原理。如有错误,欢迎指正,谢谢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值