原文来源:https://baijiahao.baidu.com/s?id=1594263251060755624&wfr=spider&for=pc
一.为什么要有校验码?
因为在数据存取和传送的过程中,由于元器件或者噪音的干扰等原因会出现错误,这个时候我们就需要采取相应的措施,发现并纠正错误,对于错误的检测和校正,大多采取“冗余校验”的思想,即除原数据外,额外增加若干位编码,这些新增的代码称为校验位。
二.数据是如何校验的?
- 输入的数据m经过f得到p校验位。
- 数据m和校验位一起通过存储器或传输线路,分别得到m'和p',这两者可能和m,f相同,也可能由于传输储存发生问题而不同。
-
由数据m'再次经过f得到校验位p'',比较p''和p',从而得出是否出错,输出对应的信息,如何比较,会在下面的对应校验码中给出。
三、码距
若干位代码组成的一个字称为码字,而两个码字具有不同代码的位数为这两个码字的距离,而码制里各种码字间最小的距离称为码距。
例如:8421码,1001和0000,有两位不同,所以距离是2,而0010和0011的距离为1,是最小的距离,故8421码码距为1。
码距有什么用呢?答案是码距和这种类型的码的检错,纠错能力有关。
例如:8421码,由于码距是1,无检错,纠错能力,比如数据0000,如果其中一位变化,变成0001,那么,这个数据仍然是合法的。
四、奇偶校验码
- 无论数据位多少位,校验位只有一位
- 数据位和校验位一共所含的1个数为奇数,称为奇校验
- 数据位和校验位一共所含的1个数为偶数,称为偶校验
例如:发送一组8位二进制数,假定第一位为奇偶校验位,后七位为数据位,采用奇校验,则:
1>当发送数据是b'0000111时,发送数据中的1有3个,为奇数,此时校验位则为0,实际发出去的数据就b'000000111;
2>当发送数据是b'0000110时,发送数据中的1有2个,为偶数,此时校验位则为1,实际发出去的数据就b'100000110;
接收端收到这组二进制数据后,则校验“1”的个数是否为奇数,从而确定传输代码的正确性。
五、海明校验码
1.引入
在了解了奇偶校验码之后,我们可以稍稍做下思考,既然奇偶校验码具有一定的局限性,也就是只能检测奇数的错误,并且不能改正错误,这也就意味着数据一旦传输错误,我们必须要重新上传,那么,我们有办法确定错误发生的位置么?只要确定了错误发生的位置,改正其实就是取反。
2.原理
在m个数据位之外加上k个校验位,从而形成一个m+k位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。
须知:
- 海明校验码是放在2的幂次位上的,即“1,2,4,8,16,32······”;
- 信息位为m的原始数据,需要加入k位的校验码,它满足m+k+1<2^k;
3.例子:
要计算原始信息位为101101100的海明校验码。
第一步:先用m+k+1<2^k计算出校验位:9+k+1 <2^k→k=4,即校验位为4位。
第二步:海明校验码是放在2的幂次位上,所以插在位置1,2,4,8中。
第三步:计算校验的值
用到的校验码是看当前位置由哪几个 校验码所在的位置的和。
例如,校验码的位置是1,2,4,8。位置3= 1 + 2,所以位置3用到的校验码是1和2;位置7 = 1 + 2 + 4组成的,所以位置7用到的校验码是1,2和4。
将校验码校验的位置记录下来:
校验码P1(H1):3,5,7,9,11,13
校验码P2(H2):3,6,7,10,11
校验码P3(H4):5,6,7,12,13
校验码P4(H8):9,10,11,12,13
做异或运算(相同时为0,不同时为1):
校验码P1(H1):1 xor 0 xor 1 xor 0 xor 1 xor 0 = 1
校验码P2(H2):1 xor 1 xor 1 xor 1 xor 1 = 1
校验码P3(H4):0 xor 1 xor 1 xor 0 xor 0 = 0
校验码P4(H8):0 xor 1 xor 1 xor 0 xor 0 = 0
第四步:最终的信息
位置 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
最终信息位 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
4.海明校验码判断修复错误
因为校验码有4位,我们这里再申明三位码分别用S1、S2、S3、S4表示。
S1= P1⊕H3⊕H5⊕H7⊕H9⊕H11⊕H13
S2= P3⊕H3⊕H6⊕H7⊕H10⊕H11
S3= P3⊕H5⊕H6⊕H7⊕H12⊕H13
S4= P4⊕H9⊕H10⊕H11⊕H12⊕H13
假设 信息传输前1110 0110 0110 0 –>传输后1100 0110 0110 0
S1=1⊕0⊕0⊕1⊕0⊕1⊕0=1
S2=1⊕0⊕1⊕1⊕1⊕1=1
S3=0⊕0⊕1⊕1⊕0⊕0=0
S4=0⊕0⊕1⊕1⊕0⊕0=0
S4S3S2S1=0011 说明第三位出错。