当前位置:文档之家› CRC校验码的原理

CRC校验码的原理

CRC校验码的原理
CRC校验码的原理

CRC 校验码的原理

在通信与数字信号处理等领域中循环冗余校验码(Cyclic Redundancy Check,CRC )是一种很常用的设计。一般来说数据通信中的编码可以分为信源编码和信道编码两大类,其中,为了提高数据通信的可靠性而采取的编码称为信道编码,即抗干扰编码。在通信系统中,要求数据传输过程中的误码率足够低,而为了降低数据传输过程中的误码率,经常采用的一种方法是差错检测控制。

在实际的通信系统中,差错检测控制的主要方法又3种:前向纠错(FEC ),自动重发(ARQ )和反馈检验法。FEC 指接收端不仅能够在收到的信码中发现错码,而且还能够纠正错码。一般来说,这种方法不需要反向信道,实时性很好,不过设备较复杂。ARQ 是指接收端在收到的信码中检测出错码时,即设法通知发送端重新发送信号,直到能够正确接收为止。通常,这种方法只用来检测误码,而且只能在双向信道中使用。反馈检验法是指接收端将收到的信码一字不差地转发回发送端,同时与原发送信码进行比较,如果有错,则发端重发。这种方法的原理和设备都比较简单,但需要双向信道的支持,而且传输效率低下; 通过实践检验,在这三中方法中,如果传输过程中的误码率较低,那么采用前向纠错法比较理想,但如果误码率较高时,这种方法又会出现“乱纠”的现象;在网络通信中,广泛的采用差错检测方法时自动请求重发,这种方法只要检错功能即可;反馈检验法时前向纠错法和自动请求重发的结合。

在实现差错检测控制的众多方法中,循环冗余校验就是一类重要的线性分组码。它时一种高效的差错控制方法,它广泛应用于测控及数据通信领域,同时具有编码和解码方法简单,检错能力强,误判概率很低和具有纠错能力等优点。

循环冗余校验码实现的方法

CRC 的基本原理就是在一个P 位二进制数据序列之后附加一个R 位二进制检验码序列,从而构成一个总长位N=P+R 位的二进制序列。例如,P 位二进制数据序列D=[d 1-p d 2-p …d 1d 0],R 位二进制检验码R = [r 1-r r 2-r …r 1r 0],那么所得到的这个N 位二进制序列就是M=[d 1-p d 2-p …d 1d 0 r 1-r r 2-r …r 1r 0],这里附加在数据序列之后的CRC 码与数据序列的内容之间存在着某种特定的关系。如果在数据传输过程中,由于噪声或传输特性不理想而使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。可见在数据的接收端通过检查这种特定关系,可以很容易地实现对数据传输正确性的检验。

在CRC 中,检验码R 使通过对数据序列D 进行二进制除法取余式运算得到的,他被一个称为生成多项式的(r+1)位二进制序列G=[g r g 1-r …g 1g 0]来除,具体的多项式除法形式如下:

)

()(x G x D x r

=Q(x)+

)

()(x G x R

其中,)(x D x r

表示将数据序列D 左移r 位,即在D 的末尾再增加r 个0位;Q (x )代表这一除法所得的商,R (x )就是所需的余式。此外,这一运算关系还可以表示为

??

?

???=)()(Re )(x G x D x x R r

??

?

?

??=)()(Re )(x G x M x R

通过上面CRC 基本原理的介绍,可以发现生成多项式使一个非常重要的概念,它决定了CRC 的具体算法。目前,生成多项式具有一下一些通用标准,其中CRC -12,CRC -16,

CRC -ITU 和CRC -32是国际标准。

CRC -4 14++x x

CRC -12 131112++++x x x x CRC -16 121216+++x x x CRC -ITU 151216+++x x x

CRC -32 +++232632x x x …12+++x x CRC -32c +++272832x x x …168+++x x

CRC -ITU 的硬件实现方法

该图反映了CRC -ITU 用硬件实现的原理,从左至右分别代表16个移位寄存器,左边代表高位右边代表低位,可以分析得知,在生成多项式的非零项指数对应的寄存器前有一个异或门,这种电路能够实现相应的模二除法。

但是这种电路实现的却是串行输入,在高速场合下,这种方案势必会造成编码效率低下,误码率高的弊端,为了解决这个问题,提高编码效率和正确率,要求能够实现并行算法,在一个时钟周期内得到一个多位数据的CRC 码。

CRC 的并行算法原理与实现

在上面已经给出了CRC 的硬件原理,我们可以依此得到并行算法的原理。

因为CRC 硬件的实现方法是利用反馈移位寄存器外加异或门进行运算得来(开始计算时,所有的寄存器要清零),假如说我们输入一个数据串,每输入一个比特的数据时,上一状态的所有寄存器的值,都会进行移位或进行异或运算后移位。当前状态与前一状态有着紧密的联系,而这种关系就通过硬件电路的形式表示出来,同理,以此类推,那么若干个状态后的状态与初始状态也有很紧密的联系,不难看出,初始状态为全零,8个比特串行输入后又为一个状态,8个比特串行再输入后,此时的状态与上一个8比特后的状态又有着固定的联系。可见,只要我们找到他们之中的这种联系,那么我们就可以得到每次运算8位数据的CRC 并行算法。

我们假设寄存器D15----D0的初始状态为A,B,C,D,E,F,G ,H,I,J,K,L,M,N,O,P ,输入的数据为C7,C6,C5,C4,C3,C2,C1,C0,当所有数据都输入完时,根据硬件电路图可以得到由初始状态

D(15)=D(7)+D(11)+D(15)+C(7)+C(3)

D(14)=D(6)+D(10)+D(14)+C(6)+C(2)

D(13)=D(5)+D(9)+D(13)+C(5)+C(1)

D(12)=D(4)+D(15)+C(7)+D(8)+D(12)+C(4)+C(0)

D(11)=D(3)+D(14)+C(6)

D(10)=D(2)+D(13)+C(5)

D(9)=D(1)+D(12)+C(4)

D(8)=D(0)+D(11)+D(15)+C(7)+C(3)

D(7)=D(15)+C(7)+D(10)+D(14)+C(6)+C(2)

D(6)=D(14)+C(6)+D(9)+D(13)+C(5)+C(1)

D(5)=D(13)+C(5)+D(8)+D(12)+C(4)+C(0)

D(4)=D(12)+C(4)

D(3)=D(11)+D(15)+C(7)+C(3)

D(2)=D(10)+D(14)+C(6)+C(2)

D(1)=D(9)+D(13)+C(5)+C(1)

D(0)=D(8)+D(12)+C(4)+C(0)

CRC的VHDL语言实现

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CRC IS

PORT(CLK,CLR:IN STD_LOGIC;

DA TA_IN :IN STD_LOGIC_VECTOR(7 DOWNTO 0);

DA TA_OUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END CRC;

ARCHITECTURE A OF CRC IS

SIGNAL Q:STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL D:STD_LOGIC_VECTOR(15 DOWNTO 0);

BEGIN

PROCESS(CLR,CLK)

BEGIN

IF CLR='1'THEN

D<=(OTHERS=>'0');

ELSIF CLK'EVENT AND CLK='1'THEN

Q<=DA TA_IN;

D(0)<=D(8) XOR D(12) XOR Q(4) XOR Q(0);

D(1)<=D(9) XOR D(13) XOR Q(5) XOR Q(1);

D(2)<=D(10) XOR D(14) XOR Q(6) XOR Q(2);

D(3)<=D(11) XOR D(15) XOR Q(7) XOR Q(3);

D(4)<=D(12) XOR Q(4);

D(5)<=D(13) XOR Q(5) XOR D(8) XOR D(12) XOR Q(4) XOR Q(0);

D(6)<=D(14) XOR Q(6) XOR D(9) XOR D(13) XOR Q(5) XOR Q(1);

D(7)<=D(15) XOR Q(7) XOR D(10) XOR D(14) XOR Q(6) XOR Q(2);

D(8)<=D(0) XOR D(11) XOR D(15) XOR Q(7) XOR Q(3);

D(9)<=D(1) XOR D(12) XOR Q(4);

D(10)<=D(2) XOR D(13) XOR Q(5);

D(11)<=D(3) XOR D(14) XOR Q(6);

D(12)<=D(4) XOR D(15) XOR Q(7) XOR D(8) XOR D(12) XOR Q(4) XOR Q(0);

D(13)<=D(5) XOR D(9) XOR D(13) XOR Q(5) XOR Q(1);

D(14)<=D(6) XOR D(10) XOR D(14) XOR Q(6) XOR Q(2);

D(15)<=D(7) XOR D(11) XOR D(15) XOR Q(7) XOR Q(3);

END IF;

DA TA_OUT<=D;

END PROCESS;

END;

通过仿真,假设我们输入0x0102,那么相应的CRC码应为0x1373,当把0x01021373作为数据输入时,结果应为0x0000;仿真结果表明,设计正确。

下图为CRC模块的元件符号

CRC校验码原理

CRC校验码 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 目录 详细介绍 代数学的一般性运算 详细介绍 循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2的R次方,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2的R次方除以生成多项式G(x)得到的余数就是校验码。 几个基本概念 1、多项式与二进制数码 多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。 多项式包括生成多项式G(x)和信息多项式C(x)。 如生成多项式为G(x)=x4+x3+x+1,可转换为二进制数码11011。 而发送信息位1111,可转换为数据多项式为C(x)=x3+x2+x+1。 2、生成多项式 是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。 在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。 应满足以下条件: a、生成多项式的最高位和最低位必须为1。 b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。 c、不同位发生错误时,应该使余数不同。 d、对余数继续做除,应使余数循环。

crc校验码详细介绍看懂了就会了

循环冗余校验码( CRC)的基本原理是:在K 位信息码后再拼接R位的校验码,整个编码长度为N 位,因此,这种编码又叫( N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x) 。根据G(x) 可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x) 左移R位,则可表示成C(x)*2 的R次方,这样C(x) 的右边就会空出R位,这就是校验码的位置。通过C(x)*2 的R次方除以生成多项式G(x) 得到的余数就是校验码。编辑本段几个基本概念 1、多项式与二进制数码 多项式和二进制数有直接对应关系:x 的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:x 的最高幂次为R,转换成对应的二进制数有R+1位。 多项式包括生成多项式G(x)和信息多项式C(x) 。如生成多项式为 G(x)=x^4+x^3+x+1 ,可转换为二进制数码11011。而发送信息位1111 ,可转换为数据多项式为C(x)=x^3+x^2+x+1 。 2、生成多项式是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。 在发送方,利用生成多项式对信息多项式做模2 除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2 除检测和确定错误位置。 应满足以下条件: a、生成多项式的最高位和最低位必须为1。 b、当被传送信息( CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。 c、不同位发生错误时,应该使余数不同。 d、对余数继续做除,应使余数循环。 3 CRC码的生成步骤 1、将x 的最高次幂为R的生成多项式G(x) 转换成对应的R+1位二进制数。 2、将信息码左移R位,相当与对应的信息多项式C(x)*2 的R次方。 3、用生成多项式(二进制数)对信息码做除,得到R 位的余数。 4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。 例】假设使用的生成多项式是G(x)=x^3+x+1 。4 位的原始报文为1010, 求编码后的报文。 解:

CRC校验实验报告

实验三CRC校验 一、CRC校验码的基本原理 编码过程: 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 将y(x)的尾部加上校验码,得到二进制多项式。就是包含 了CRC校验码的待发送字符串。 解码过程: 从CRC的编码规则可以看出,CRC编码实际上是将代发送的m位 二进制多项式t(x)转换成了可以被g(x)除尽的m+r位二进制多项式 所以解码时可以用接收到的数据去除g(x),如果余数位零,则

表示传输过程没有错误;如果余数不为零,则在传输过程中肯定 存在错误。许多CRC的硬件解码电路就是按这种方式进行检错的。 同时,可以看做是由t(x)和CRC校验码的组合,所以解码时将接 收到的二进制数据去掉尾部的r位数据,得到的就是原始数据。 解码过程示例:

运行结果: 附录(实现代码):using System; using ; namespace CRC

{ public abstract class Change { oString("x2").ToUpper(); } } return returnStr; } um; } (databuff);eight < max1) && (data[j].Parent == -1)) { max2 = max1; tmp2 = tmp1; tmp1 = j; max1 =

CRC校验原理及步骤

C R C校验原理及步骤 This model paper was revised by the Standardization Office on December 10, 2020

CRC校验原理及步骤 什么是CRC校验 CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 CRC校验原理: 其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 模2除法: 模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。在循环冗余校验码(CRC)的计算中有应用到模2除法。 例: CRC校验步骤:

CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准,但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,计算出CRC码。 具体步骤: 1. 选择合适的除数 2. 看选定除数的二进制位数,然后再要发送的数据帧上面加上这个位数-1位的0,然后用新生成的帧以模2除法的方式除上面的除数,得到的余数就是该帧的CRC校验码。注意,余数的位数一定只比除数位数少一位,也就是CRC校验码位数比除数位数少一位,如果前面位是0也不能省略。 3. 将计算出来的CRC校验码附加在原数据帧后面,构建成一个新的数据帧进行发送;最后接收端在以模2除法方式除以前面选择的除数,如果没有余数,则说明数据帧在传输的过程中没有出错。 CRC校验码计算示例: 现假设选择的CRC生成多项式为G(X)= X4+ X3+ 1,要求出二进制序列的CRC校验码。下面是具体的计算过程: ①将多项式转化为二进制序列,由G(X)= X4+ X3+ 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001 ②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为,然后使用模2除法除以除数11001,得到余数。【补几位0与x的最高次幂相同,模除就是进行异或】

CRC32 冗余校验码的计算

题目: 校验码的计算 姓名: 周小多 学号:2013302513 班号:10011302 时间:2015.11.1

计算机学院 时间: 目录 摘要 1 目的 (1) 2 要求 (1) 3 相关知识 (1) 4 实现原理及流程图.......................... 错误!未定义书签。 5 程序代码 (7) 6 运行结果与分析 (7) 7 参考文献 (8)

题目:

的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R除以生成多项式G(x)得到的余数就是校验码。 任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。 4、实现原理及流程图 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)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2的R次方,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2的R次方除以生成多项式G(x)得到的余数就是校验码。 编辑本段 几个基本概念 1、多项式与二进制数码 多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。 多项式包括生成多项式G(x)和信息多项式C(x)。 如生成多项式为G(x)=x^4+x^3+x+1,可转换为二进制数码11011。 而发送信息位1111,可转换为数据多项式为C(x)=x^3+x^2+x+1。 2、生成多项式 是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。 在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。 应满足以下条件: a、生成多项式的最高位和最低位必须为1。 b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。 c、不同位发生错误时,应该使余数不同。 d、对余数继续做除,应使余数循环。 3 CRC码的生成步骤 1、将x的最高次幂为R的生成多项式G(x)转换成对应的R+1位二进制数。 2、将信息码左移R位,相当与对应的信息多项式C(x)*2的R次方。 3、用生成多项式(二进制数)对信息码做除,得到R位的余数。 4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。 【例】假设使用的生成多项式是G(x)=x^3+x+1。4位的原始报文为1010,求编码后的报文。 解: 1、将生成多项式G(x)=x^3+x+1转换成对应的二进制除数1011。 2、此题生成多项式有4位(R+1),要把原始报文C(x)左移3(R)位变成1010000 3、用生成多项式对应的二进制数对左移3位后的原始报文进行模2除,相当于按位异或: 1010000

CRC16算法原理

CRC算法及C实现 学习体会2008-09-20 15:21:13 阅读161 评论0 字号:大中小订 阅 一、CRC算法原理 CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。 16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(既乘以)后,再除以一个多项式,最后所得到的余数既是 CRC码。 假设数据传输过程中需要发送15位的二进制信息 g=101001110100001,这串二进制码可表示为代数多项式g(x) = x^14 + x^12 + x^9 + x^8 + x^7 + x^5 + 1,其中g中第k位的值,对应g(x)中x^k的系数。将g(x)乘以x^m,既将g后加m个0,然后除以m阶多项式h(x),得到的(m-1)阶余项 r(x)对应的二进制码r就是 CRC编码。 h(x)可以自由选择或者使用国际通行标准,一般按照h(x)的阶数m,将CRC算法称为CRC-m,比如CRC-32、CRC-64等。国际通行标准可

以参看 https://www.doczj.com/doc/369949003.html,/wiki/Cyclic_redundancy_check g(x)和h(x)的除运算,可以通过g和h做xor(异或)运算。比如将 11001与10101做xor运算: 明白了xor运算法则后,举一个例子使用CRC-8算法求101001110100001的效验码。CRC-8标准的h(x) = x^8 + x^7 + x^6 + x^4 + x^2 + 1,既h是9位的二进制串111010101。

crc校验码计算例题

crc校验码计算例题 1、若信息码字为11100011,生成多项式G(X)=X5+X4+X+1,则计算出的CRC 校验码为?x的最高次幂5则信息码(被除数)补五个0为:1110001100000 除数为110011 ------------10110110 --------------------- 110011/1110001100000 -------110011 ------------------ ---------101111 ---------110011 ------------------ ----------111000 ----------110011 ------------------ ------------101100 ------------110011 ------------------------ -------------111110 -------------110011 ------------------------- ---------------11010 2、信息码为101110101,生成多项式X4+X2+1,求冗余位??? 算法同上被除数补四个0 为:1011101010000 除数为:10101 答案:1100 7E 00 05 60 31 32 33 计算CRC16结果应该是:5B3E 方法如下: CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0),之后对CRC寄存器从

CRC校验码的原理

CRC 校验码的原理 在通信与数字信号处理等领域中循环冗余校验码(Cyclic Redundancy Check,CRC )是一种很常用的设计。一般来说数据通信中的编码可以分为信源编码和信道编码两大类,其中,为了提高数据通信的可靠性而采取的编码称为信道编码,即抗干扰编码。在通信系统中,要求数据传输过程中的误码率足够低,而为了降低数据传输过程中的误码率,经常采用的一种方法是差错检测控制。 在实际的通信系统中,差错检测控制的主要方法又3种:前向纠错(FEC ),自动重发(ARQ )和反馈检验法。FEC 指接收端不仅能够在收到的信码中发现错码,而且还能够纠正错码。一般来说,这种方法不需要反向信道,实时性很好,不过设备较复杂。ARQ 是指接收端在收到的信码中检测出错码时,即设法通知发送端重新发送信号,直到能够正确接收为止。通常,这种方法只用来检测误码,而且只能在双向信道中使用。反馈检验法是指接收端将收到的信码一字不差地转发回发送端,同时与原发送信码进行比较,如果有错,则发端重发。这种方法的原理和设备都比较简单,但需要双向信道的支持,而且传输效率低下; 通过实践检验,在这三中方法中,如果传输过程中的误码率较低,那么采用前向纠错法比较理想,但如果误码率较高时,这种方法又会出现“乱纠”的现象;在网络通信中,广泛的采用差错检测方法时自动请求重发,这种方法只要检错功能即可;反馈检验法时前向纠错法和自动请求重发的结合。 在实现差错检测控制的众多方法中,循环冗余校验就是一类重要的线性分组码。它时一种高效的差错控制方法,它广泛应用于测控及数据通信领域,同时具有编码和解码方法简单,检错能力强,误判概率很低和具有纠错能力等优点。 循环冗余校验码实现的方法 CRC 的基本原理就是在一个P 位二进制数据序列之后附加一个R 位二进制检验码序列,从而构成一个总长位N=P+R 位的二进制序列。例如,P 位二进制数据序列D=[d 1-p d 2-p …d 1d 0],R 位二进制检验码R = [r 1-r r 2-r …r 1r 0],那么所得到的这个N 位二进制序列就是M=[d 1-p d 2-p …d 1d 0 r 1-r r 2-r …r 1r 0],这里附加在数据序列之后的CRC 码与数据序列的内容之间存在着某种特定的关系。如果在数据传输过程中,由于噪声或传输特性不理想而使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。可见在数据的接收端通过检查这种特定关系,可以很容易地实现对数据传输正确性的检验。 在CRC 中,检验码R 使通过对数据序列D 进行二进制除法取余式运算得到的,他被一个称为生成多项式的(r+1)位二进制序列G=[g r g 1-r …g 1g 0]来除,具体的多项式除法形式如下: ) ()(x G x D x r =Q(x)+ ) ()(x G x R 其中,)(x D x r 表示将数据序列D 左移r 位,即在D 的末尾再增加r 个0位;Q (x )代表这一除法所得的商,R (x )就是所需的余式。此外,这一运算关系还可以表示为 ?? ? ???=)()(Re )(x G x D x x R r ?? ? ? ??=)()(Re )(x G x M x R 通过上面CRC 基本原理的介绍,可以发现生成多项式使一个非常重要的概念,它决定了CRC 的具体算法。目前,生成多项式具有一下一些通用标准,其中CRC -12,CRC -16,

循环冗余校验码原理

1、循环冗余校验码原理 CRC 校验采用多项式编码方法,如一个8 位二进制数(B7B6B5B4B3B2B1B0)可以用7 阶二进制码多项式B7X7+B6X6+B5X5+B4X4+B3X3+B2X2+B1X1+B0X0表示。 例如11000001 可表示为 1X7+1X6+0X5+0X4+0X3+0X2+0X1+0X0 一般说,n 位二进制数可用(n-1)阶多项式表示。它把要发送的数据位串看成是系数只能为“1”或“0”的多项式。一个n 位的数据块可以看成是从Xn-1到X0的n 项多项式的系数 序列,位于数据块左边的最高位是X n-1项的系数,次高位是X n-2项的系数,依此类推,位 于数据块右边的最低位是X0项的系数,这个多项式的阶数为n-1。 多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2 为模,加减时不进、错位,如同逻辑异或运算。 采用CRC 校验时,发送方和接收方事先约定一个生成多项式G(X),并且G(X)的最高项和最低项的系数必须为1。设m 位数据块的多项式为M(X),生成多项式G(X)的阶数必需 比M(X)的阶数低。CRC 校验码的检错原理是:发送方先为数据块生成CRC 校验码,使这 个CRC 校验码的多项式能被G(X)除尽,实际发送此CRC 校验码;接收方用收到的CRC 校 验码除以G(X),如果能除尽,表明传输正确,否则,表示有传输错误,请求重发。 生成数据块的CRC 校验码的方法是: (1) 设G(X)为r 阶,在数据块末尾添加r 个0,使数据块为m+r 位,则相应的多项式 为XrM(X); (2) 以2 为模,用对应于G(X)的位串去除对应于XrM(X)的位串,求得余数位串; (3) 以2 为模,从对应于XrM(X)的位串中减去余数位串,结果就是为数据块生成的带足够校验信息的CRC 校验码位串。 例如,设要发送的数据为1101011011,G(X)=X4+X+1,则首先在发送数据块的末尾加4 个0,得到11010110110000,然后用G(X)的位串10011 去除,再用11010110110000 减去余 数位串1110,得到的即为CRC 位串11010110111110,将对应多项式称为T(X),显然,T(X) 能被G(X)除尽。这样,一旦接收到的CRC 位串不能被同样的G(X)的位串除尽,那么一定 有传输错误。 当使用CRC校验码进行差错控制时,除了为G(X)的整数倍的差错多项式不能被检测外,其它差错均能被查出。CRC 校验码的差错控制效果取决于G(X)的阶数,阶数越高,效果越 好。目前,常用的有两种生成多项式G(X)的方法,分别是: CRC-16 X16+X15+X2+1 CCITT X16+X12+X5+1

crc校验原理

校验原理 1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。 3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R 位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得 V(x)=A(x)g(x)=x R m(x)+r(x); 其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式, g(x)称为生成多项式: g(x)=g0+g1x+g2x2+...+g(R-1)x(R-1)+g R x R 发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC 码字。 4、CRC校验码软件生成方法: 借助于多项式除法,其余数为校验字段。 例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001 x4m(x)=x10+x8+x7+x4对应的代码记为:10110010000; 采用多项式除法: 得余数为: 1010 (即校验字段为:1010) 发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10

信息字段校验字段 接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)如果能够除尽,则正确,

CRC16校验码如何计算

CRC16校验码如何计算 比如我有一个16进制只字符串 7E 00 05 60 31 32 33 要在末尾添加两个CRC16校验码校验这7个16进制字符请写出算法和答案 7E 00 05 60 31 32 33 计算CRC16结果应该是:5B3E 方法如下: CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算相同为0,不同为1; 0^0=0;0^1=1;1^0=1;1^1=0),之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。 1.设置CRC寄存器,并给其赋值FFFF(hex)。 2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。 3.CRC寄存器向右

移一位,MSB补零,移出并检查LSB。 4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。 5.重复第3与第4步直到8次移位全部完成。此时一个8-bit 数据处理完毕。 6.重复第2至第5步直到所有数据全部处理完成。 7.最终CRC寄存器的内容即为CRC值。 CRC(16位)多项式为 X16+X15+X2+1,其对应校验二进制位列为1 1000 0000 0000 0101。

CRC校验原理分析

CRC校验 校验原理: 1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。 3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R 位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得 V(x)=A(x)g(x)=x R m(x)+r(x); 其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式, g(x)称为生成多项式: g(x)=g 0+g 1 x+g 2 x2+...+g (R-1) x(R-1)+g R x R 发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC 码字。 4、CRC校验码软件生成方法: 借助于多项式除法,其余数为校验字段。 例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001 x4m(x)=x10+x8+x7+x4对应的代码记为:10110010000; 采用多项式除法: 得余数为: 1010 (即校验字段为:1010)

发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10 信息字段校验字段 接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)如果能够除尽,则正确,

CRC_校验码的计算方法

CRC 校验码的计算方法 CRC从原理到实现=============== 作者:Spark Huang(hcpp@https://www.doczj.com/doc/369949003.html,) 日期:2004/12/8 摘要:CRC(Cyclic Redundancy Check)被广泛用于数据通信过程中的差错检测,具有很强的检错能力。本文详细介绍了CRC的基本原理,并且按照解释通行的查表算法的由来的思路介绍了各种具体的实现方法。 1.差错检测 数据通信中,接收端需要检测在传输过程中是否发生差错,常用的技术有奇偶校验(Parity Check),校验和(Checksum)和CRC(Cyclic Redundancy Check)。它们都是发送端对消息按照某种算法计算出校验码,然后将校验码和消息一起发送到接收端。接收端对接收到的消息按照相同算法得出校验码,再与接收到的校验码比较,以判断接收到消息是否正确。 奇偶校验只需要1位校验码,其计算方法也很简单。以奇检验为例,发送端只需要对所有消息位进行异或运算,得出的值如果是0,则校验码为1,否则为0。接收端可以对消息进行相同计算,然后比较校验码。也可以对消息连同校验码一起计算,若值是0则有差错,否则校验通过。 通常说奇偶校验可以检测出1位差错,实际上它可以检测出任何奇数位差错。 校验和的思想也很简单,将传输的消息当成8位(或16/32位)整数的序列,将这些整数加起来而得出校验码,该校验码也叫校验和。校验和被用在IP协议中,按照16位整数运算,而且其MSB(Most Significant Bit)的进位被加到结果中。 显然,奇偶校验和校验和都有明显的不足。奇偶校验不能检测出偶数位差错。对于校验和,如果整数序列中有两个整数出错,一个增加了一定的值,另一个减小了相同的值,这种差错就检测不出来。 2.CRC算法的基本原理------------------- CRC算法的是以GF(2)(2元素伽罗瓦域)多项式算术为数学基础的,听起来很恐怖,但实际上它 的主要特点和运算规则是很好理解的。 GF(2)多项式中只有一个变量x,其系数也只有0和1,如: 1*x^7 + 0*x^6 + 1*x^5 + 0*x^4 + 0*x^3 + 1*x^2 +1*x^1 + 1*x^0

CCITT CRC-16计算原理与实现

CCITT CRC-16计算原理与实现 CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。实际上,除数据通信外,CRC在其它很多领域也是大有用武之地的。例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑。 差错控制理论是在代数理论基础上建立起来的。这里我们着眼于介绍CRC的算法与实现,对原理只能捎带说明一下。若需要进一步了解线性码、分组码、循环码、纠错编码等方面的原理,可以阅读有关资料。 利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。 1 代数学的一般性算法 在代数编码理论中,将一个码组表示为一个多项式,码组中各码元当作多项式的系数。例如 1100101 表示为 1·x6+1·x5+0·x4+0·x3+1·x2+0·x+1,即 x6+x5+x2+1。 设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k;生成多项式为G(x),G(x)的最高幂次等于r;CRC多项式为R(x);编码后的带CRC的信息多项式为T(x)。 发送方编码方法:将P(x)乘以xr(即对应的二进制码序列左移r位),再除以 G(x),所得余式即为R(x)。用公式表示为 T(x)=xrP(x)+R(x) 接收方解码方法:将T(x)除以G(x),如果余数为0,则说明传输中无错误发生,否则说明传输有误。 举例来说,设信息码为1100,生成多项式为1011,即P(x)=x3+x2,G(x)=x3+x+1,计算CRC的过程为 xrP(x) x3(x3+x2) x6+x5 x -------

16位CRC校验码计算程序

/*************************************************************** 16位CRC计算方法 1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;2.把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器; 3.把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;4.如果移出位为0:重复第3步(再次右移一位); 如果移出位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;5.重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理; 6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理; 7.将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC; *****************************************************************/ /**************************************************************************** 名称: UART_CRC16_Work() 说明: CRC16校验程序 参数: *CRC_Buf:数据地址 CRC_Leni:数据长度 返回: CRC_Sumx:校验值 *****************************************************************************/ unsigned int UART_CRC16_Work(unsigned char *CRC_Buf,unsigned char CRC_Leni) { unsigned char i,j; unsigned int CRC_Sumx; CRC_Sumx=0xFFFF; for(i=0;i>=1; CRC_Sumx^=0xA001; } else

CAN总线中循环冗余校验码的原理

CAN总线中循环冗余校验码的原理 在CAN系统中为保证报文传输的正确性,需要对通信过程进行差错控制。目前常用的方法是反馈重发,即一旦收到接收端发出的出错信息,发送端便自动重发,此时的差错控制只需要检错功能。常用的检错码有两类:奇偶校验码和循环冗余校验码。奇偶校验码是一种最常见的检错码,其实现方法简单,但检错能力较差;循环冗余校验码的编码也很简单且误判率低,所以在通信系统中获得了广泛的应用。下面介绍CAN网络中循环冗余校验码(即CRC码)的原理和实现方法。 1CRC码检错的工作原理 CRC码检错是将被处理报文的比特序列当作一个二进制多项式A(x)的系数,该系数除以发送方和接收方预先约定好的生成多项式g(x)后,将求得的余数p(x)作为CRC校验码附加到原始的报文上,并一起发给接收方。接收方用同样的g(x)去除收到的报文B(x),如果余数等于p(x),则传输无误(此时A(x)和B(x)相同);否则传输过程中出错,由发送端重发,重新开始CRC校验,直到无误为止。 上述校验过程中有几点需注意:①在进行CRC计算时,采用二进制(模2)运算法,即加法不进位,减法不借位,其本质就是两个操作数进行逻辑异或运算;②在进行CRC计算前先将发送报文所表示的多项式A(x)乘以xn,其中n为生成多项式g(x)的最高幂值。对二进制乘法来讲,A(x)·xn 就是将A(x)左移n位,用来存放余数(x),所以实际发送的报文就变为A(x)·xn+p(x);③生成多项式g(x)的首位和最后一位的系数必须为1。 图1为CRC校验的工作过程。 目前已经有多种生成多项式被列入国际标准中,如:CRC-4、CRC-12、CRC-16、CCITT-16、CRC-32等。CAN总线中采

最详细易懂的CRC-16校验原理(附源程序)

最详细易懂的CRC-16校验原理(附源程序) 1、循环校验码(CRC码): 是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 2、生成CRC码的基本原理: 任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。 标准CRC生成多项式如下表: 名称生成多项式简记式* 标准引用 CRC-4 x4+x+1 3 ITU G.704 CRC-8 x8+x5+x4+1 0x31 CRC-8 x8+x2+x1+1 0x07 CRC-8 x8+x6+x4+x3+x2+x1 0x5E CRC-12 x12+x11+x3+x+1 80F CRC-16 x16+x15+x2+1 8005 IBM SDLC CRC16-CCITT x16+x12+x5+1 1021 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS CRC-32 x32+x26+x23+...+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS CRC-32c x32+x28+x27+...+x8+x6+1 1EDC6F41 SCTP 3、CRC-16校验码的使用: 现选择最常用的CRC-16校验,说明它的使用方法。 根据Modbus协议,常规485通讯的信息发送形式如下: 地址功能码数据信息校验码 1byte 1byte nbyte 2byte CRC校验是前面几段数据内容的校验值,为一个16位数据,发送时,低8位在前,高8为最后。 例如:信息字段代码为: 1011001,校验字段为:1010。

CRC计算方法

1. CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接 收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之 前就已通过附加一个数,做了“去余”处理(也就已经 能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 【说明】“模2除法”与“算术除法”类似,但 它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不 同则结果为“1”。如100101除以1110,结果得到 商为11,余数为1,如图5-9左图所示。如 11×11=101,如图5-9右图所示。

图5-9 “模2除法”和“模2乘法”示例 具体来说,CRC校验原理就是以下几个步骤: (1)先选择(可以随机选择,也可按标准选择, 具体在后面介绍)一个用于在接收端进行校验时,对接收的帧进行除法运算的除数(是二进制比较特串,通常是以多项方式表示,所以CRC又称多项式编码 方法,这个多项式也称之为“生成多项式”)。 (2)看所选定的除数二进制位数(假设为k位),然后在要发送的数据帧(假设为m位)后面加上k-1 位“0”,然后以这个加了k-1个“0“的新帧(一共是 m+k-1位)以“模2除法”方式除以上面这个除数,所 得到的余数(也是二进制的比特串)就是该帧的 CRC校验码,也称之为FCS(帧校验序列)。但要 注意的是,余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略。 (3)再把这个校验码附加在原数据帧(就是m位 的帧,注意不是在后面形成的m+k-1位的帧)后面,构建一个新帧发送到接收端,最后在接收端再把这个新帧以“模2除法”方式除以前面选择的除数,如果没

CRC循环冗余校验原理

CRC校验原理 转载:CRC校验原理 1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。 3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R 位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得 V(x)=A(x)g(x)=x R m(x)+r(x); 其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式, g(x)称为生成多项式: g(x)=g 0+g 1 x+ g 2 x2+...+g (R-1) x(R-1)+g R x R 发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC 码字。 4、CRC校验码软件生成方法: 借助于多项式除法,其余数为校验字段。 例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001 x4m(x)=x10+x8+x7+x4对应的代码记为:10110010000; 采用多项式除法: 得余数为: 1010 (即校验字段为:1010) 发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10 信息字段校验字段 接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)如果能够除尽,则正确, CRC(Cyclic Redundancy Check)循环冗余校验码 是常用的校验码,在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带

相关主题
文本预览
相关文档 最新文档