zoukankan      html  css  js  c++  java
  • 奇偶校检只能检出奇数个误差数学证明

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

  • 相关阅读:
    Northwind测试学习用数据库
    DataTables在回调方法中使用api
    DataTables获取表单输入框数据
    DataTables选择行并删除(删除单行)
    DataTables选择多行
    DataTables给每一列添加下拉框搜索
    AngularJS 父子控制器
    更改AngularJS的语法解析符号
    AngularJS中的控制器示例_3
    AngularJS中的控制器示例_2
  • 原文地址:https://www.cnblogs.com/organic/p/6284045.html
Copyright © 2011-2022 走看看