社区
软件水平考试
帖子详情
2003网设有这么一道题:循环冗余校验CRC的值怎么算?多项式G(X)=X4+X2+X+1怎么理解?
fengtiehong
2004-05-01 11:49:11
2003网设有这么一道题:
如果CRC的生成多项式为G(X)=X4+X+1,信息码字为10110,则计算出的CRC校验码是
A.0100 B.1010 C.0111 D.1111
怎么做?
在线等待!谢谢!
...全文
1604
9
打赏
收藏
2003网设有这么一道题:循环冗余校验CRC的值怎么算?多项式G(X)=X4+X2+X+1怎么理解?
2003网设有这么一道题: 如果CRC的生成多项式为G(X)=X4+X+1,信息码字为10110,则计算出的CRC校验码是 A.0100 B.1010 C.0111 D.1111 怎么做? 在线等待!谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
canghaiyisujsg
2004-05-04
打赏
举报
回复
因为生成多项式是四次的,所以某个多项式除以生成多项式的余式肯定是三次的,所以要加四位0000。
fengtiehong
2004-05-04
打赏
举报
回复
=============================================
beyondsky00(凌云飞)
首先在信息码后面加上与多项式次数相同的0
即101100000
然后拿这个新得的信息码去与多项式产生的码(10011)进行异或
===============================================
楼主我问:
为什么在在后面加上那4个0后,再与1011进行异或?
而不是信息码[10110]直接去和多项式[10011]异或。
恳求再次回复,谢谢!
beyondsky00
2004-05-04
打赏
举报
回复
CRC的详细过程如下:
假设要发送比特串
11 0 1 0 11,生成多项式为G(x) =x4+x3+ 1
第1步:在串尾加0。0的个数与生成多项式的次数一致(本例中为4)。
这样,串就变成了11010110000。
第2步:将B(x)除以G(x)。余式为R(x) =x3+x,或等价的比特串1 0 1 0。
注意,可以将此写成代数形式:B(x) Q(x)
----=-----+Q ( x )
G(x) G(x)
这里,Q ( x )表示商。可以等价地写成:B(x) =G(x)×Q(x) +R(x)
第3步:定义T ( x )=B ( x )-R ( x )。既然减法是对应项的系数之差,
我们就可以用与每个多项
式对应的比特串之差来计算。本例中,有
11 0 1 0 110000 比特串B
-1010 比特串R
------------------------
11 0 1 0 111010 比特串T
注意,串T实际上是串B将加0部分用R代替所得。另外,如果我们将T ( x )
除以G ( x ), 余数为0 。然后,发送方发送串T。
第4步:若串T传输无误,那么将它除以G ( x ),余数为0。若串T在传输中被损坏了。例如,
中间4个比特变为0,到达串为11 0 0 0 0 0 1 0 1 0。
接收方将它模2再除以G ( x ),余数不为0。
既然余数不为0,接收方就认为发生了错误。
(注意:这不等于说将损坏的串除以G ( x ),其余数总是为非零。
这种情况会发生,但是若G ( x )选取得当,发生的几率就会很小
smart2star
2004-05-03
打赏
举报
回复
http://oldchild.nbc.net.cn/spks/jym.htm
老顽童网站的 校验码辅导讲座
在高程和网工重都会考到的
要觉得还师需要的化 ,看上面仁兄的西安交大的那个
angle419
2004-05-03
打赏
举报
回复
相除
lyt317
2004-05-03
打赏
举报
回复
其实《程序员教程》已经介绍的很清楚了。只不过你除的时候要注意的他的加减规则是
0+1=1;0-1=1;1+0=1;1-0=1;0+0=0;0-0=0;1+1=0;1-1=0不考虑进位,借位。
除法规则是
每商1位则部分余数减一位;
余数最高位为1则商1,否则商0;
当余数的位数小余除数时,该余数为最后余数,
klbt
2004-05-02
打赏
举报
回复
学习!
xta
2004-05-02
打赏
举报
回复
CRC校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数作为CRC校验码。其实现步骤如下:
(1) 设待发送的数据块是m位的二进制多项式t(x),生成多项式为r阶的g(x)。在数据块的末尾添加r个0,数据块的长度增加到m+r位,对应的二进制多项式为 。
(2) 用生成多项式g(x)去除 ,求得余数为阶数为r-1的二进制多项式y(x)。此二进制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC校验码。
(3) 用 以模2的方式减去y(x),得到二进制多项式 。 就是包含了CRC校验码的待发送字符串。
从CRC的编码规则可以看出,CRC编码实际上是将代发送的m位二进制多项式t(x)转换成了可以被g(x)除尽的m+r位二进制多项式 ,所以解码时可以用接受到的数据去除g(x),如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。许多CRC的硬件解码电路就是按这种方式进行检错的。同时 可以看做是由t(x)和CRC校验码的组合,所以解码时将接收到的二进制数据去掉尾部的r位数据,得到的就是原始数据。
为了更清楚的了解CRC校验码的编码过程,下面用一个简单的例子来说明CRC校验码的编码过程。由于CRC-32、CRC-16、CCITT和CRC-4的编码过程基本一致,只有位数和生成多项式不一样。为了叙述简单,用一个CRC-4编码的例子来说明CRC的编码过程。
设待发送的数据t(x)为12位的二进制数据100100011100;CRC-4的生成多项式为g(x)= ,阶数r为4,即10011。首先在t(x)的末尾添加4个0构成 ,数据块就成了1001000111000000。然后用g(x)去除 ,不用管商是多少,只需要求得余数y(x)。下表为给出了除法过程。
除数次数 被除数/ g(x)/结果 余数
0 1 001000111000000 100111000000
1 0011
0 000100111000000
1 1 00111000000 1000000
1 0011
0 00001000000
2 1 000000 1100
1 0011
0 001100
从上面表中可以看出,CRC编码实际上是一个循环移位的模2运算。对CRC-4,我们假设有一个5 bits的寄存器,通过反复的移位和进行CRC的除法,那么最终该寄存器中的值去掉最高一位就是我们所要求的余数。所以可以将上述步骤用下面的流程描述:
//reg是一个5 bits的寄存器
把reg中的值置0.
把原始的数据后添加r个0.
While (数据未处理完)
Begin
If (reg首位是1)
reg = reg XOR 0011.
把reg中的值左移一位,读入一个新的数据并置于register的0 bit的位置。
End
reg的后四位就是我们所要求的余数。
这种算法简单,容易实现,对任意长度生成多项式的G(x)都适用。在发送的数据不长的情况下可以使用。但是如果发送的数据块很长的话,这种方法就不太适合了。它一次只能处理一位数据,效率太低。为了提高处理效率,可以一次处理4位、8位、16位、32位。由于处理器的结构基本上都支持8位数据的处理,所以一次处理8位比较合适。
为了对优化后的算法有一种直观的了解,先将上面的算法换个角度理解一下。在上面例子中,可以将编码过程看作如下过程:
由于最后只需要余数,所以我们只看后四位。构造一个四位的寄存器reg,初值为0,数据依次移入reg0(reg的0位),同时reg3的数据移出reg。有上面的算法可以知道,只有当移出的数据为1时,reg才和g(x)进行XOR运算;移出的数据为0时,reg不与g(x)进行XOR运算,相当与和0000进行XOR运算。就是说,reg和什么样的数据进行XOR移出的数据决定。由于只有一个bit,所以有 种选择。上述算法可以描述如下,
//reg是一个4 bits的寄存器
初始化t[]={0011,0000}
把reg中的值置0.
把原始的数据后添加r个0.
While (数据未处理完)
Begin
把reg中的值左移一位,读入一个新的数据并置于register的0 bit的位置。
reg = reg XOR t[移出的位]
End
上面算法是以bit为单位进行处理的,可以将上述算法扩展到8位,即以Byte为单位进行处理,即CRC-32。构造一个四个Byte的寄存器reg,初值为0x00000000,数据依次移入reg0(reg的0字节,以下类似),同时reg3的数据移出reg。用上面的算法类推可知,移出的数据字节决定reg和什么样的数据进行XOR。由于有8个bit,所以有 种选择。上述算法可以描述如下:
//reg是一个4 Byte的寄存器
初始化t[]={…}//共有 =256项
把reg中的值置0.
把原始的数据后添加r/8个0字节.
While (数据未处理完)
Begin
把reg中的值左移一个字节,读入一个新的字节并置于reg的第0个byte的位置。
reg = reg XOR t[移出的字节]
End
算法的依据和多项式除法性质有关。如果一个m位的多项式t(x)除以一个r阶的生成多项式g(x), ,将每一位 (0=<k<m)提出来,在后面不足r个0后,单独去除g(x),得到的余式位 。则将 后得到的就是t(x)由生成多项式g(x)得到的余式。对于CRC-32,可以将每个字节在后面补上32个0后与生成多项式进行运算,得到余式和此字节唯一对应,这个余式就是上面算法种t[]中的值,由于一个字节有8位,所以t[]共有 =256项。多项式运算性质可以参见参考文献[1]。这种算法每次处理一个字节,通过查表法进行运算,大大提高了处理速度,故为大多数应用所采用。
摘自:循环冗余校验 CRC的算法分析和程序实现
西南交通大学计算机与通信工程学院 刘东
beyondsky00
2004-05-02
打赏
举报
回复
应该是D
首先在信息码后面加上与多项式次数相同的0
即101100000
然后拿这个新得的信息码去与多项式产生的码(10011)进行异或
最后结果所得的余数即为校验码
自己去算下试试
循环冗余校验
参考.pdf
CRC
-32 的生成
多项式
g(x)= x32 +
x2
6 +
x2
3 +
x2
2 + x16 + x12 + x11 + x10 + x8 + x7 + x5 +
x4
+
x2
+ x +1。
CRC
-32 出错的概率比
CRC
-16 低10^5倍。由于
CRC
-32 的可靠性,把
CRC
-32 用于重要数据传输十分合适...
循环冗余校验
常用的
CRC
循环冗余校验
标准
多项式
包括:
CRC
(16 位)= X16+X15+
X2
+1、
CRC
(CCITT) = X16+X12 +X5+1、
CRC
(32 位)= X32+
X2
6+
X2
3+X16+X12+X11+X10+X8+X7+X5+
X4
+
X2
+X+1 等。
CRC
循环冗余校验
标准
多项式
P(X) 的检错...
CRC
校验方法详细总结
循环冗余校验
(Cyclic Redundancy Check,简称
CRC
)是一种数据传输检错功能,对数据进行
多项式
除法(模2除法),得到一个余数后加到原数据之后发送。接收端收到数据后,同样对数据进行相同的
多项式
除法,如果得到的结果...
CRC
检验的介绍及C++实现,
CRC
码生成程序
CRC
(Cyclic Redundancy Check,
循环冗余校验
)是一种广泛用于数据传输和存储中的错误检测方法。它通过在数据后面附加一个校验码来确保数据的完整性,这个校验码是根据数据计
算
出来的。
CRC
的核心思想是利用除法原理...
crc
8查表法校验程序和校验检查软件
CRC
8即最终生成的
CRC
校验码为1字节,其生成
多项式
,生成
多项式
为g(x)=x8+x5+
x4
+1,相当于g(x)=1•x8+0•x7+0•x6+1•x5+1•
x4
+0•x3+0•
x2
+0•x1+1•x0,即对应的二进制数为100110001。
CRC
8校验
算
法: 1.
CRC
8...
软件水平考试
2,958
社区成员
22,570
社区内容
发帖
与我相关
我的任务
软件水平考试
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
复制链接
扫一扫
分享
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证
c4java
c4前端
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章