现在的位置: 首页 > 综合 > 正文

CRC校验生成

2018年06月10日 ⁄ 综合 ⁄ 共 3238字 ⁄ 字号 评论关闭

CRC码的生成步骤

1、将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数。

2、将信息码左移R位,相当与对应的信息多项式C(x)*2R

3、用生成多项式(二进制数)对信息码做模2除,得到R位的余数。

4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。

【例】假设使用的生成多项式是G(x)=x3+x+1。4位的原始报文为1010,求编码后的报文。

解:

1、将生成多项式G(x)=x3+x+1转换成对应的二进制除数1011。

2、此题生成多项式有4位(R+1),要把原始报文C(x)左移3(R)位变成1010000

3、用生成多项式对应的二进制数对左移4位后的原始报文进行模2除:

1001-------商

------------------------

1010000

1011----------除数

------------

1000

1011

------------

011-------余数(校验位)

5、编码后的报文(CRC码):

1010000

+       011

------------------

1010011

CRC的和纠错

在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若如果有一位出错,则余数不为0,而且不同位出错,其余数也不同。可以证明,余数与出错位的对应关系只与码制及生成多项式有关,而与待测碼字(信息位)无关。图10给出了G(x)=1011,C(x)=1010的出错模式,改变C(x)(码字),只会改变表中码字内容,不改变余数与出错位的对应关系。

 

收到的CRC码字

余数

出错位

码位

A7

A6

A5

A4

A3

A2

A1

正确

1

0

1

0

0

1

1

000

1

0

1

0

0

1

0

1

0

1

0

0

0

1

1

0

1

0

1

1

1

1

0

1

1

0

1

1

1

0

0

0

0

1

1

1

1

1

0

0

1

1

0

0

1

0

0

1

1

001

010

100

011

110

111

101

1

2

3

4

5

6

7

10 (7,4)CRC码的出错模式(G(x)=1011)

如果循环码有一位出错,用G(x)作模2除将得到一个不为0的余数。如果对余数补0继续除下去,我们将发现一个有趣的结果;各次余数将按图10顺序循环。例如第一位出错,余数将为001,补0后再除,第二次余数为010,以后依次为100,0ll…,反复循环,这就是“循环码”名称的由来。这是一个有价值的特点。如果我们在求出余数不为0后,一边对余数补0继续做模2除,同时让被检测的校验码字循环左移。图10说明,当出现余数(101)时,出错位也移到A7位置。可通过异或门将它纠正后在下一次移位时送回A1。这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件。当位数增多时,循环码校验能有效地降低硬件代价,这是它得以广泛应用的主要原因。

通信与网络中常用的CRC

在数据通信与网络中,通常k相当大,由一千甚至数千数据位构成一帧,而后采用CRC码产生r位的校验位。它只能检测出错误,而不能纠正错误。一般取r=16,标准的16位生成多项式有CRC-16=x16+x15+x2+1 和 CRC-CCITT=x16+x15+x2+1。

一般情况下,r位生成多项式产生的CRC码可检测出所有的双错、奇数位错和突发长度小于等于r的突发错以及(1-2-(r-1))的突发长度为r+1的突发错和(1-2-r)的突发长度大于r+1的突发错。例如,对上述r=16的情况,就能检测出所有突发长度小于等于16的突发错以及99.997%的突发长度为17的突发错和99.998%的突发长度大于17的突发错。所以CRC码的检错能力还是很强的。这里,突发错误是指几乎是连续发生的一串错,突发长度就是指从出错的第一位到出错的最后一位的长度(但是,中间并不一定每一位都错)。

【例1】某循环冗余码(CRC)的生成多项式 G(x)=x3+x2+1,用此生成多项式产生的冗余位,加在信息位后形成 CRC 码。若发送信息位 1111 和 1100 则它的 CRC 码分别为_A_和_B_。由于某种原因,使接收端收到了按某种规律可判断为出错的 CRC 码,例如码字_C_、_D_、和_E_。(1998年试题11)
供选择的答案

A:① lllll00

② 1111101

③ 1111110

④ 1111111

B:① 1100100

② 1100101

③ 1100110

④ 1100111

C~E:① 0000000

② 0001100

③ 0010111

 

      ⑤ 1000110

⑥ 1001111

⑦ 1010001

⑧ 1011000

解:

A:G(x)=1101,C(x)=1111 C(x)*23÷G(x)=1111000÷1101=1011余111

得到的CRC码为1111111

B:G(x)=1101,C(x)=1100 C(x)*23÷G(x)=1100000÷1101=1001余101

得到的CRC码为1100101

C~E:

分别用G(x)=1101对①~⑧ 作模2除: ① 0000000÷1101 余000  ② 1111101÷1101 余001

③ 0010111÷1101 余000  ④ 0011010÷1101 余000  ⑤ 1000110÷1101 余000

⑥ 1001111÷1101 余100  ⑦ 1010001÷1101 余000  ⑧ 1011000÷1101 余100

所以_C_、_D_和_E_的答案是②、⑥、⑧

【例2】计算机中常用的一种检错码是CRC,即 _A_ 码。在进行编码过程中要使用 _B_ 运算。假设使用的生成多项式是 G(X)=X4+X3+X+1, 原始报文为11001010101,则编码后的报文为 _C_ 。CRC码 _D_ 的说法是正确的。

在无线电通信中常采用它规定码字长为7位.并且其中总有且仅有3个“1”。这种码的编码效率为_E_。

供选择的答案:

A:① 水平垂直奇偶校验                        ② 循环求和                        ③ 循环冗余                        ④正比率

B:① 模2除法                        ②定点二进制除法                        ③二-十进制除法                        ④循环移位法

C:① 1100101010111                        ② 110010101010011                 

③ 110010101011100                        ④ 110010101010101

D:① 可纠正一位差错                                                ②可检测所有偶数位错

③ 可检测所有小于校验位长度的突发错                  ④可检测所有小于、等于校验位长度的突发错

E:① 3/7       ② 4/7       ③ log23/log27     ④ (log235)/7

解:从前面有关CRC的论述中可得出:  A:③ 循环冗余  B:① 模2除法 

 C:G(x)=11011,C(x)=11001010101,C(x)*24÷G(x)=110010101010000÷11011 余0011

 得到的CRC码为② 110010101010011

D:从前面有关通信与网络中常用的CRC的论述中可得出:④ 可检测所有小于、等于校验位长度的突发错

E:定比码又叫定重码,是奇偶校验的推广。在定比码中,奇数或偶数的性质保持不变,然而附加一种限制每个字中1的总数是固定的。随用途之不同,定比码要求的附加校验位可能多于一个,但较之单一的奇偶校验将增加更多的检错能力。

所谓7中取3定比码,就是整个码字长度为7位,其中1的位数固定为3。所有128个7位代码(0000000~1111111)中只有1的位数固定为3的才是其合法码字。可以用求组合的公式求出其合法码字数为:C73=7!/(3!*(7-3)!)=7*6*5/(1*2*3)=35

编码效率=合法码字所需位数/码字总位数=(log235)/7

【上篇】
【下篇】

抱歉!评论已关闭.