zoukankan      html  css  js  c++  java
  • 循环冗余校验(CRC)

    冗余码

    CRC和海明校验类似,也是有效信息(k位)+校验信息(r位),需要满足N=k+r≤2r-1

    生成多项式G(X)

    定义:收发双方约定的一个(r+1)位二进制数,发送方利用G(X)对信息多项式做模2除运算,生成校验码。接收方利用G(X)对收到的编码多项式做模2除运算检测差错及错误定位。

    满足条件:

    1. 最高位和最低位必须为1;
    2. 当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0;
    3. 不同位发生错误时,模2除运算后余数不同;
    4. 对不为0余数继续进行模2除运算应使余数循环。

    得到生成多项式

    从最高幂位开始降位,有就为1,没有就是0

    例如:

    G(x)多项式 G(x)
    x3+x+1(x0) 1011
    x3+x2 1100
    x4+x2+1 10101

    在利用G(X)对信息多项式做模2除运算时,运算原则(运算实际上就是异或运算)

    1. 部0分余数首位为1时,商为1,减除数;(余数开头为1,下一位接着除)
    2. 部分余数首位为0时,商为0,减0(余数开头为0,这位的商为0,下面减0)
    3. 当部分余数的位数小于除数的位数时,该余数即为最后余数。(结束运算条件)

    通过一道例题来熟悉过程

    将4位有效信息1001编成循环校验码,选择生成多项式x3+x1+x0,试写出编码过程

    1.根据生成多项式,得到G(x)=1011

    2.有效信息为4位,k=4,代入公式k+r≤2r-1,得到r≥3

    3.首先临时在有效信息1001后面添加r位0的冗余码,即1001000,计算1001000/1011,得到余数110

    4.将余数替换有效信息后面的冗余码,变为1001110

    余数

    出错位

    (A7A6A5A4A3A2A1)

    000
    001 7
    010 6
    100 5
    011 4
    110 3
    111 2
    101 1

    在传输数据时,若对传输过去的数据进行模二运算,得到余数不为0,则数据发生变化,我们通过余数对比表,可以得到哪一位发生的变化。

    例如,如果我们传输数据得到的是1001111,我们除以G(x)

     

     得到余数101,查表格也就是第一位出错。

  • 相关阅读:
    poj 3744 Scout YYF I (矩阵快速幂 优化 概率dp)
    Codeforces Round #272 (Div. 2) D. Dreamoon and Sets (思维 数学 规律)
    Codeforces Round #272 (Div. 2) C. Dreamoon and Sums (数学 思维)
    hdu 5067 Harry And Dig Machine (状态压缩dp)
    hdu 4810 Wall Painting (组合数学+二进制)
    hdu 4856 Tunnels (bfs + 状压dp)
    tc srm 636 div2 500
    poj 2096 Collecting Bugs (概率dp 天数期望)
    ABC182 F Valid payments
    AT2699 [ARC081D] Flip and Rectangles
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/11100021.html
Copyright © 2011-2022 走看看