一、校验码的构成
校验码是具有发现错误和纠正错误能力的数据编码。其主要原理是在被校验数据(原始数据)中引入冗余信息(校验数据),使得校验数据符合某种既定的规则;当传输过程中校验码发生错误破坏了这种规则时,可以检测和发现错误。
二、码距和校验
1、码距
码距,又称海明距离,即在信息编码中,两个编码对应的二进制位不同的个数。如10110和01111中有三位的二进制数不同,则码距为3。
2、编码集的码距
在一个有效编码集中,任意两个码字的最小码距称为该编码集的码距,也常称该编码集的最小码距。如:用4个3位二进制数001、010、011、100为一个编码集,其码距则为1.
3、码距和检错、纠错能力
码距 | 检错、纠错能力 | |
1 | d≥e+1 | 可检测e个随机错误 |
2 | d≥2t+1 | 可纠正t个随机错误 |
3 | d≥e+t+1&&e>t | 可检测e个随机错误并纠正t个错误 |
码距越大,抗干扰能力、纠错能力越强,数据冗余越大,编码效率越低。下面举例说明码距和检错、纠错能力的关系。
对于天气晴和雨两种状态:
(1)用一位二进制数来表示,1表示天晴,0表示天雨,码距为1。若输出为1,无法得知在传输过程中是否发生错误,即不具备检错和纠错能力
(2)用两位二进制数来表示,11表示天晴,00表示天雨,码距为2。则该编码最多可以识别1位错误,如00变为01,但是无法识别2位错误,如00变为11。
(3)用三位二进制数来表示,111表示天晴,000表示天雨,码距为3。则该编码最多可以识别2位错误,如000变为010或011,但是无法识别3位错误,如000变为111。同时也具备纠正1位错误的能力,如000变为010,则能推出原数据大概率位000。
……
三、奇偶校验
1、简单奇偶校验
奇偶校验的编码规则就是添加1位校验位P,使得最终校验码中数字1的个数为奇数(奇校验)或者偶数(偶校验)。该编码规则最小码距为2,即能检测出1位错误/准确来说是检测奇数位错。
原始数据(7位) | 奇校验码(8位) | 偶校验码(8位) |
000 0000 | 0000 0001 | 0000 0000 |
111 1111 | 1111 1110 | 1111 1111 |
101 1001 | 1011 0011 | 1011 0010 |
发送方发送
发送方,偶校验位
奇校验位
接收方收到后生成检错位G
接收方,偶校验检错位
奇校验检错位
G=1时,传输有错;G=0时,无奇数位错误
2、多重奇偶校验
以交叉奇偶检验(二维奇偶检验)为例。
简单奇偶校验只有一个校验组,一个校验位,只能提供一位检错信息进行错误检查。若将原始数据信息按照某种规律分成若干校验组,使得每个数据位同时位于多个检验组中,当校验码中某一位发生错误时,可以被多个校验位指出,这样使得偶数位也可以被指出(也有例外),并能指出最大可能是哪一位出错并纠正。
1位出错,可以检出行列并纠错:
2位(1行2列)出错,可以检出列:
矩形顶角位出错,无法检错:
三、海明校验
海明校验其实就是把一组k位原始数据分为r个奇偶校验组,就可以产生r个检错码(校正因子)。要求每个数据位至少参加两个校验组,这样当1个数据位出错,就可以导致多个检错码为1。
1、校验位r位数
r位校验位,生成r个检错码,可以产生种组合。规定检错码全为0时表示数据传输无误,所以还剩下中组合来表示数据出错的位置。
故校验位的位数满足:
例,数据位为4位,则,求得
2、编码效率
编码效率=数据位/校验码的总位数
3、举例说明
以(7,4)组码为例,4个数据位,3个校验位:
校验码 | D4 | D3 | D2 | D1 | P3 | P2 | P1 |
海明码 | H7 | H6 | H5 | H4 | H3 | H2 | H1 |
由于是3位的校验位,会产生3个校验组(即3组奇偶校验组)会生成3位的检错码G3 G2 G1,现在来人为规定不同检错码所指定的出错位:
海明码 | G3 | G2 | G1 | 出错位 | |
0 | 0 | 0 | 无错 | ||
H1 | 0 | 0 | 1 | P1 | G中只有1位为1,所以对应的情况为1校验位出错,对应的顺序任意 |
H2 | 0 | 1 | 0 | P2 | |
H4 | 1 | 0 | 0 | P3 | |
H3 | 0 | 1 | 1 | D1 | G中至少2位为1,所以对应的情况为1数据位出错 |
H5 | 1 | 0 | 1 | D2 | |
H6 | 1 | 1 | 0 | D3 | |
H7 | 1 | 1 | 1 | D4 |
这样三组奇偶校验组的的数据就分别确定了(偶校验时):
第一组,(D1 D2 D4 P1, G1),,
第二组,(D1 D3 D4 P2, G2),,
第三组,(D2 D3 D4 P3, G3),,
……未完待续