是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
应满足以下条件:
a、生成多项式的最高位和最低位必须为1。
b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。
c、不同位发生错误时,应该使余数不同。
d、对余数继续做模2除,应使余数循环。
将这些要求反映为数学关系是比较复杂的。但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:
N | K | 码距d | G(x)多项式 | G(x) |
7 | 4 | 3 | x3+x+1 | 1011 |
7 | 4 | 3 | x3+x2+1 | 1101 |
7 | 3 | 4 | x4+x3+x2+1 | 11101 |
7 | 3 | 4 | x4+x2+x+1 | 10111 |
15 | 11 | 3 | x4+x+1 | 10011 |
15 | 7 | 5 | x8+x7+x6+x4+1 | 111010001 |
31 | 26 | 3 | x5+x2+1 | 100101 |
31 | 21 | 5 | x10+x9+x8+x6+x5+x3+1 | 11101101001 |
63 | 57 | 3 | x6+x+1 | 1000011 |
63 | 51 | 5 | x12+x10+x5+x4+x2+1 | 1010000110101 |
1041 | 1024 |
| x16+x15+x2+1 | 11000000000000101 |
图9 常用的生成多项式
例如第一项可以写成:x3+x2+x+1
一道计算题:
已知信息位为1100,生成多项式G(x) = x3+x+1,求CRC码。
M(x) = 1100 M(x)*x3 = 1100000 G(x) = 1011
M(x)*x3 / G(x) = 1110 + 010 /1011 R(x) = 010
CRC码为: M(x)*x 3+R(x)=1100000+010 =1100010
其原理是:CRC码一般在k位信息位之后拼接r位校验位生成。编码步骤如下:
(1)将待编码的k位信息表示成多项式 M(x)。
(2)将 M(x)左移 r 位,得到 M(x)*xr 。
(3)用r+1位的生成多项式G(x)去除M(x)*xr 得到余数R(x)。
(4)将M(x)*xr 与R(x)作模2加,得到CRC码。
原文地址:http://blog.sina.com.cn/s/blog_64c236b10100of4a.html