校验码
码距与检错纠错:
一个编码系统的码距就是整个编码系统中任意(所有)两个码字的最小距离。例如:若一个编码系统有四种编码分别为:0000,0011,1100,1111,此编码系统中0000与1111的码距为4;0000与0011的码距为2,是此编码系统的最小码距。因此该编码系统的码距为2。
1.在一个码组内为了检测e个误码,要求最小码距应该满足:d>=e+1
2.在一个码组内为了纠正t个误码,要求最小码距应该满足:d>=2t+1
3.同时纠错检错:d>=e+t+1
例如:
假如我们现在要对A,B两个字母进行编码。我们可以选用不同长度的编码,以产生不同码距的编码,分析它们的检错纠错能力。
1.若用1位长度的二进制编码。若A=1,B=0.这样A,B之间的最小码距为1.
合法码:{0,1};非法码:{0,1}
2.若用2位长度的二进制编码,可选用11,00作为合法编码,也可以选用01,10作为合法编码。若以A=11,B=00为例,A、B之间的最小码距为2。合法码:{11,00}。非法码:{01,10}
3.若用3位长度的二进制编码,可以选用111,000作为合法编码。A,B之间的最小码距为3。
合法码:{111,000} 非法码:{001,010,011,110,101,100}
校验码的3种码
1.奇偶校验码
人为的在编码后的最高位或最低位加一些校验码。具体加的是1。
例如:某编码现在有2个1,编码后再加1个1。使1的个数变成奇数3个。这样在传输过程如果出错,则会变成偶数个1。从而知道出错了。
只能检测代码中奇数位出错的编码,但不能发现偶数位出错的情况。
2.海明码
海明码的校验码的位置必须是在2^n位置(n从0开始,分别代表从左边数起分别是第1、2、4、8、16......),信息码也就是在非2n位置、
设数据位是n位,校验位是k位。则n和k必须满足以下关系:
2^k >= n+k+1
练习:海明码是一种纠错码,其方法是为需要校验的数据位增加若干校验位,使得校验位的值决定于某些被校验位的数据,当被校验数据出错时,可根据校验位的值的变化找到出错位,从而纠正错误,对于32位的数据,至少需要加()个校验位才能构成海明码。
A .3 B .4 C.5 D.6
以10位数据为例,其海明码表示为D9D8D7D6D5D4P4D3D2D1P3D0P2P1中,其中Di(0 <= i <=9)表示数据位,Pj(1 <= j <=4)表示校验位,数据位D9由P4、P3和P2进行校验(从右至左D9的位序为14,即等于8 + 4 + 2,因此用第8位的P4、第4位的P3和第2位的P2校验),数据位D5由()进行校验
A .P4P1 B.P4P2 C.P4P3P1 D.P3P2P1
3.循环冗余校验码CRC:
这个校验码会产生一个多次方程,这个多次方程会跟信息码会有一个模%2运算。所得的余数就是CRC所需要加的位数。
练习: