目录
1.校验码的基础知识
码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据校验码的码距。举几个例子:
2.奇偶校验码
奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。
奇校验:整个校验码(有效信息位和校验位)中“1”的个数为奇数
偶校验:整个校验码(有效信息位和校验位)中“1”的个数为偶数
举个例子,如下:
3. CRC循环冗余检验码
CRC编码方法是:在k位信息码之后拼接r位校验码(即信息位+检验位)。应用CRC码的关键是如何从k位信息位简便地得到r位校验位(编码),以及如何从k+r位信息码判断是否出错。
把接收到的CRC码用约定的生成多项式G(x)去除(模二除法),如果正确,则余数为0;如果某一位出错,则余数不为0。不同的位数出错其余数不同,余数和出错位序号之间有惟一的对应关系。
注意:CRC检验,可检错,不可纠错
4.CRC编码的具体求法及检错(中级不要求掌握)
4.1 CRC检验码的具体求法
101101对应的多项式为x^5 + x^3 + x^2 + 1(即x^0),反过来也可以由多项式推对应代码。
我们就假设发送的数据为101110,采用的CRC生成多项式是P(x) = x^3 + 1(即1001),我们现在来求数据对多项式的余数(模二除法),过程如下:
注:(1)模二除法就是逐位进行异或运算 (2)在被除数(即数据)后面要先加上(多项式位数-1)个0再进行计算 (3)余数的位数一定等于(多项式位数-1)
求出余数之后便可获得校验码(即信息位+检验位(所得余数))为101110011
4.2 差错检验
我们依旧以上述例子来讲解,如果我们将所得校验码再去除以多项式,我们就会发现余数为0。我们现任意假设一位或多位数据发生改变,看看余数会如何变化,我们就假设101110变成了111110,末尾加上余数,计算过程如下:
5.海明码
5.1 海明码的原理
海明校验码的原理是:在有效信息位中加入几个校验位形成海明码,使码距比较均匀地拉大,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错误,还能指出错误的位置,为自动纠错提供了依据。
注:海明码既可检错,也可纠错。
5.2 海明码校验位位数的求取
公式:2 ^ r >= m + r + 1
注:其中r表示校验位的位数,m表示信息位的位数
6.对本节内容的总结
该图片来自希赛软考:
声明:本文参考自希赛软考