奇偶效验码
奇偶校验码是奇校验码和偶校验码的统称。它们都是通过在要校验的编码上加一位校验位组成。
奇校验码:加上校验位后,编码中 1 的个数为奇数个。
偶校验码:加上校验位后,编码中 1 的个数为偶数个。
水平奇偶效验码
例:
原编码 | 奇校验 | 偶校验 |
0000 | 0000 1 | 0000 0 |
0010 | 0010 0 | 0010 1 |
1100 | 1100 1 | 1100 0 |
1010 | 1010 1 | 1010 0 |
垂直奇偶效验码
例:
有32位数据 10100101 00110110 11001100 10101011
垂直奇校验 | 垂直偶校验 | |
原编码 | 10100101 | 10100101 |
00110110 | 00110110 | |
11001100 | 11001100 | |
10101011 | 10101011 | |
校验码 | 00001011 | 11110100 |
缺点:
只能检测出奇数位出错,且无法检测出哪位出错。
设原编码为0000,传输的过程中变成了1001。若使用奇校验,原编码是00001,传输过后会变成10011,1仍然是奇数个,无法校验;如果使用偶校验,原编码是00000,传输过后会变成10010,1仍然是偶数个,同样无法校验。
海明码
海明码也是利用奇偶性来校验数据的,它是一种多重奇偶校验检错系统。通过在数据位之间插入k个校验位,来扩大码距,从而实现检错和纠错。
注:码距指两个码组对应位上数字的不同位的个数。
假设数据位数为m,向其(2的幂次方,如1,2,4,8……)各位插入k位校验码,且满足m+k+1<2k
例:101101100,求海明码。
101101100,9+k+1<2k
解得,k=4,即校验码位数为4位
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
原始信息位 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | ||||
用到的校验码 | 校验位1 | 校验位2 | 1+2=3 | 校验位3 | 1+4=5 | 2+4=6 | 1+2+4=7 | 校验位4 | 1+8=9 | 2+8=10 | 1+2+8=11 | 4+8=12 | 1+4+8=13 |
即得每个校验位校验了哪些位置:
bit1=3,5,7,9,11,13
bit2=3,6,7,10,11
bit4=5,6,7,12,13
bit8=9,10,11,12,13
通过原始信息位,对各位进行模2运算(异或:相同为0,不同为1)得:
bit1=1,0,1,0,1,0=1
bit2=1,1,1,1,1=1
bit4=0,1,1,0,0=0
bit8=0,1,1,0,0=0
得校验码分别为:1,1,0,0