奇偶校检只能检出奇数个误差数学证明

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,即可检测出发生错误

原文地址:https://www.cnblogs.com/organic/p/6284045.html