【考研·计算机组成原理】校验码 小结

本篇目录

前言

一、校验码

1.校验码

2.码距

3.检错与纠错

二、奇偶校验码

三、海明码

1.海明校验码的原理

2.校验位的计算方法

四、CRC码(循环冗余校验)

总结


前言

跟着王道的考研复习指导,学习了三种校验码,做一个小结。


一、校验码

1.校验码

信息传输过程可能出现一些错误,于是发送端与接收端就会约定一种规则,发送端根据这种规则以及要发送的有效信息,来计算得出几位校验码。发送端在发送时,通过在有效信息位外再附加这些校验码,使接收端能够通过这些校验码得知接收的数据是否有误,甚至能判断错误的数据位置。这就是校验码的作用。

2.码距

一种信息编码,它的编码方式决定了任意两个码字之间的最小距离,即码距。如果一种编码,它的合法码字之间的距离是1,这意味着假如有一个合法码字在传输过程中有一位出错了,它会变成另外一个合法码字。由于变化的结果仍然是合法的码字,接收端就无法判断接收的码字是否是正确的。比如发送端与接收端约定使用三位来表示数字0-7,这样的编码的码距就是1,即便传输过程中有一位出错,接收端也无法得知传输有错,因为接收到的仍然是合法的码字。但是假如发送端与接收端约定,使用001、010、100来表示数字1 、2、4,(这种编码的码距为3)那么接收端如果收到了011这样的结果,就知道这是一个不合法的码字,接收端就能知道其中一定出错了。

要计算两个合法码字之间的码距,就将这两个合法码字进行异或运算,看得到的结果中有几个1,码距就是几。或者也可以理解为比较这两个合法码字,看有几位翻转了,码距就是几。

3.检错与纠错

如果一种编码的码距为1,那么就无法进行校验。因此想要有校验能力,一种编码的码距至少要是2。码距越大,检错、纠错(指出出错的位置)能力越强。L-1=D+C,且D≥C,L即最小码距,D即检错能力,C即纠错能力。


二、奇偶校验码

奇偶校验码是在有效信息位前边加上一位校验码,码距为2,可以检测一位错误(或奇数位错误),不能确定出错的位置。

奇校验码:整个校验码(校验位和有效信息位)中“1”的个数为奇数;

偶校验码:整个校验码(校验位和有效信息位)中“1”的个数为偶数;

收发端约定采用的是奇校验还是偶校验,然后接收端对接收的数据进行校验。比如,1011是奇校验码,0011是偶校验码。


三、海明码

海明码的实质还是奇偶校验码,只不过它利用多重奇偶校验,就不仅可以检错,还能指出一位错误的位置。因为海明码能纠错1位,那么至少就能检错1位,因此码距至少为3 。

1.海明校验码的原理

如果给整个校验码设置角标,从1开始,从最后侧开始,那么海明码的校验位设置在角标为2^n (n从0开始,到哪儿结束这取决于有效信息的长度)的位置上,其它位置就是有效信息位。也就是说,校验位是穿插在有效信息位中的。每个有效信息位的角标,总是可以表示成某些校验位的角标之和,比如角标6就可以表示成(2+4),角标7可以表示成(1+2+4),这是使用海明校验码的基础。由此可以知道,有效信息位数n 与校验位的位数k 存在这样的关系:整个校验码的长度(n+k) ≤ 2^k-1 即k个校验位能表示的最大角标。

2.校验位的计算方法

1.根据上述公式,依据有效信息的长度,确定校验位的个数。比如4位有效信息需要3位校验位。

2.用符号表示出整个校验码。

 角标 7  6  5  4  3  2  1 
  值 D4 D3 D2 P3 D1 P2 P1
校验位         -     -  -

3.列表法表示出每个有效信息位的角标由哪几位校验位的角标组成

P1(角标1) P2(角标2) P3(角标4)
H1 角标3 1 2
H2 角标5 1 4
H3 角标6 2 4
H4 角标7 1 2 4

4.计算每一个校验位的值,计算方法就是将表中对应的有效信息位的值进行异或。比如上表中P1校验位的值 = H1⊕H2⊕H4。 这样校验码就完成了。例如,1010对应的海明码为1010010 。

5.接收端根据收到的有效信息位,以同样的方法计算出每一个校验位,如果与收到的校验位一致,那么收到的信息正确。若不一致,则可以根据不一致的校验位来确定是哪一位出错了。


四、CRC码(循环冗余校验)

CRC码利用的是除法。

任何一个二进制编码可以用一个系数仅为1或0的多项式来表示,多项式的最高次用R表示,那么这个二进制编码就有R+1位。收发端约定一个多项式作为规则。如果让这个二进制编码作为除数,然后用有效信息作为被除数,去做除法,那么余数一定可以用R位二进制表示(最多有R位)。由此,就让有效信息位先左移R位,即在有效信息位的右边先填补R个零(作为校验位) 。然后以左移之后的有效信息作为被除数,与多项式对应的二进制编码作为除数,进行除法运算,最终能够得到一个R位的余数。这个余数就是校验位。这样,整个校验码就应该能够被除数所整除了。发出端就将这个校验码发出。

接收端只要检查一下,校验码是否能够被约定的多项式所对应的二进制编码(也就是除数)所整除,就可以了。如果能,那接收的信息正确。如果不能,那么可以根据余数来判断发生错误的位置。

做除法运算时,从被除数的最左边的R位开始,每一次异或运算后,就向后取一位,每次都是R位参与运算。运算时,若被除数最高位为1,则商为1;若被除数最高位为0,则商为0 。直到被除数的位数用完,算出R位余数。


总结

本文总结了三种常见的校验码(奇偶校验码、海明码、循环冗余校验(CRC)码)。

猜你喜欢

转载自blog.csdn.net/Dr_Cheeze/article/details/128248577