1. 奇偶校检原理
有n位二进制串S = x1x2…xn
在末尾添加一个奇偶校检位xn+1
1> 当有奇数个xi为1时,xn+1 = 1
2> 当有偶数个xi为1时,xn+1 = 0
则最后得到的S2 = x1x2…xnxn+1 ,且S2总是有偶数个xi为1
校检时,取 X ≡ x1 + x2 + … + xn + xn+1 (mod 2)
≡ 0
注意:奇偶校检时,并不是取最后一个校检位,然后根据其值为0或为1,再判断前面的数据位S = x1x2…xn 中1的数量为奇数或为偶数,因为在网络数据传输过程,作为奇偶校检位也是可能在传输过程中发生错误的,这样的检测就没有意义了。
2. 问题
奇偶校检只能检出奇数个误差,而不能检检出偶数个误差
3. 思路
网上和书中的证明方法很简略:
An error changes a 0 into a 1 or a one into a 0, so one error must change the sum of the digits (includ-ing the parity check bit) from even to odd. A second error will change the sum back to even, and so on.
我们这里用数学方法严格证明,在第1部分奇偶校检中,已经把校检的数学表示方法表达出来了,主要问题是,如何表达奇数个误差和偶数个误差
4. 证明
1> 误差个数的表达
设有 i 个 “0 → 1”的误差
有 j 个 “1 → 0”的误差
则总误差数 k = i + j
2> 设发送的二进制序列(包含校检位)为:S1 = x1x2…xnxn+1 ,接收到的可能带误差的二进制序列为:S2 = y1y2…ynyn+1 ,
设S1的奇偶校检表达式为: X ≡ x1 + x2 + … + xn + xn+1 ≡ 0(mod 2)
S2的奇偶校检表达式为: Y ≡ y1 + y2 + … + yn + yn+1 (mod 2)
由4.1知,Y中有i个yn由“0 → 1”,有j个yn由“1 → 0”,
∴ Y ≡ X –i + j (mod 2)
根据同余算法,两边加 2i 得:
Y + 2i ≡ X + i + j (mod 2)
Y + 2i ≡ Y
X + i + j ≡ X + k ≡ k (mod 2)
∴ Y ≡ k (mod 2)
当k为偶数时,k ≡ 2a ≡ 0(mod 2),所以Y恒为0,无法检测是否发生错误
当k为奇数时,k ≡ 2a + 1 ≡ 1(mod 2),此时Y ≠ 0,即可检测出发生错误