当前位置:文档之家› 基于Logisim的CRC编码电路实现

基于Logisim的CRC编码电路实现

基于Logisim的CRC编码电路实现
基于Logisim的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, 求编码后的报文。 解:

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校验码的待发送字符串。

差错控制编码

第九章差错控制编码 9.1引言 一、信源编码与信道编码 数字通信中,根据不同的目的,编码分为信源编码与信道编码二大类。 信源编码~ 提高数字信号的有效性,如,PCM编码,M 编码,图象数据压缩编码等。 信道编码~ 提高传输的可靠性,又称抗干扰编码,纠错编码。 由于数字通信传输过程中,受到干扰,乘性干扰引起的码间干扰,可用均衡办法解决。 加性干扰解决的办法有:选择调制解码,提高发射功率。 如果上述措施难以满足要求,则要考虑本章讨论的信道编码技术,对误码(可能或已经出现)进行差错控制。 从差错控制角度看:信道分三类:(信道编码技术) ①随机信道:由加性白噪声引起的误码,错码是随机的,错码间统计独立。 ②突发信道:错码成串,由脉冲噪声干扰引起。 ③混合信道:既存在随机错误,又存在突发错码,那一种都不能忽略不计的信道。 信道编码(差错控制编码)是使不带规律性的原始数字信号,带上规律性(或加强规律性,或规律性不强)的数字信号,信道译码器则利用这些规律性来鉴别是否发生错误,或进而纠错。 需要说明的是信道编码是用增加数码,增加冗余来提高抗干扰能力。二:差错控制的工作方式 (1) 检错重发 (2) 前向纠错,不要反向信道 (3) 反馈校验法,双向信道 这三种差错控制的工作方式见下图所示: 检错重发 前向纠错 反馈校验法 检错误 判决信号 纠错码 信息信号 发 发 收 信息信号 152

153 9.2 纠错编码的基本原理 举例说明纠错编码的基本原理。 用三位二进制编码表示8种不同天气。 ???????? ?????雹 雾霜雪雨阴云 晴1 11 011101001 110010100000???→?种 许使用种中只准 48码组许用码组,其它为禁用雨阴云晴 0 11101110000 ??? ? ??? 许用码组中,只要错一位(不管哪位错),就是禁用码组,故这种编码能 发现任何一位出错,但不能发现的二位出错,二位出错后又产生许用码。 上述这种编码只能检测错误,不能纠正错误。 因为晴雨阴错一位,都变成1 0 0。 要想纠错,可以把8种组合(3位编码)中,只取2种为许用码,其它6种为禁用码。 例如: 0 0 0 晴 1 1 1 雨 这时,接收端能检测两个以下的错误,或者能纠正一个错码。 例:收到禁用码组1 0 0时,如认为只有一位错,则可判断此错码发生在第1位,从而纠正为0 0 0(晴),因为1 1 1(雨)发生任何一个错误都不会变成1 0 0。 若上述接收码组种的错码数认为不超过二个,则存在两种可能性: 位错) (位错)(21111000/变成(1 1 1)或(1 0 0), 因为只能检出错误,但不能纠正。 一:分组码,码重,码距 (见樊书P282 表9-1) 将码组分段:分成信息位段和监督位段,称为分组码,记为(n, k ) n ~ 编码组的总位数,简称码长(码组的长度) k ~ 每组二进制信息码元数目,(信息位段) r k n =- ~ 监督码元数目,(监督位段)(见樊书P282,图9-2) 一组码共计8种

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的最高次幂相同,模除就是进行异或】

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寄存器从

设计报告--008---差错控制编码的SIMULINK建模与仿真

差错控制编码的SIMULINK建模与仿真一.线性分组码编码系统建模 Reed-Solomon码编码系统框图: 信源模块的系统框图: 信宿模块的系统框图: 1.循环冗余码编码系统建模与仿真 CRC-16编码系统框图:

信源模块的系统框图: 信宿模块的系统框图: 信号比较模块系统款图: M文件如下: x=[0.00001 0.0001 0.001 0.005 0.01 0.02 0.03 0.04 0.05 0.1 0.2 0.3 0.4 0.5]; y=x; ProtectedData=48; FrameInterval=0.010; BitPeriod=FrameInterval/ProtectedData;

ProtectedDataWithCRC=ProtectedData+16; FrameLength=480; SimulationTime=1000; TotalFrameNumber=SimulationTime/FrameInterval; for i=1:length(x) ChannelErrorRate=x(i); sim('project_2'); y(i)=MissedFrameNumber(length(MissedFrameNumber))/TotalFrameNumber; end loglog(x,y); 仿真结果:没有达到预想的结果,还有待改进。 二.卷积码编码系统建模与仿真: 1)卷积码编码系统在二进制对称信道中的性能 系统框图: M文件如下: x=[0.01 0.02 0.03 0.04 0.05 0.1 0.15 0.2 0.25 0.3 0.4 0.5];%x表示二进制对称信道的误比特率的各个取值 y=x;%y表示卷积编码信号的误码率,它的长度与x的长度相等 for i=1:length(x)%对x中的每个元素依次执行仿真

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 校验码的计算方法 CRC从原理到实现=============== 作者:Spark Huang(hcpp@https://www.doczj.com/doc/1f7453317.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

差错控制编码

2.差错控制编码 2.1. 引言 什么是差错控制编码(纠错编码、信道编码)? 为什么要引入差错控制编码? 差错控制编码的3种方式? 本章主要讲述:前向纠错编码(FEC)、常用的简单编码、线性分组码(汉明码、循环码)、简单介绍RS码*、BCH码*、FIRE码*、交织码,卷积码极其译码、TCM编码*。 一、什么是差错控制编码及为什么引入差错控制编码? 在实际信道上传输数字信号时,由于信道传输特性不理想及加性噪声的影响,接收 端所收到的数字信号不可避免地会发生错误。为了在已知信噪比情况下达到一定的 误比特率指标,首先应该合理设计基带信号,选择调制解调方式,采用时域、频域 均衡,使误比特率尽可能降低。但若误比特率仍不能满足要求,则必须采用信道编 码(即差错控制编码),将误比特率进一步降低,以满足系统指标要求。 随着差错控制编码理论的完善和数字电路技术的发展,信道编码已经成功地应用于 各种通信系统中,并且在计算机、磁记录与存储中也得到日益广泛的应用。 差错控制编码的基本思路:在发送端将被传输的信息附上一些监督码元,这些多余 的码元与信息码元之间以某种确定的规则相互关联(约束)。接收端按照既定的规 则校验信息码元与监督码元之间的关系,一旦传输发生差错,则信息码元与监督码 元的关系就受到破坏,从而接收端可以发现错误乃至纠正错误。 研究各种编码和译码方法是差错控制编码所要解决的问题。 二、差错控制的三种方式 1、检错重发(ARQ) 检错重发:在接收端根据编码规则进行检查,如果发现规则被破坏,则通过反向 信道要求发送端重新发送,直到接收端检查无误为止。 ARQ系统具有各种不同的重发机制:如可以停发等候重发、X.25协议的滑动窗 口选择重发等。 ARQ系统需要反馈信道,效率较低,但是能达到很好的性能。 2、前向纠错 前向纠错(FEC):发送端发送能纠正错误的编码,在接收端根据接收到的码和 编码规则,能自动纠正传输中的错误。 不需要反馈信道,实时性好,但是随着纠错能力的提高,编译码设备复杂。

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

差错控制编码技术的应用

差错控制编码技术的应用 摘要:随着网络技术的发展,网络中数据交换量迅速增加,大量的数据需要通过网络进行交 换。在数据的传输过程中,由于种种原因,数据并不能保证100%的准确传输,数据传输的高准确率与高效率中间存在着比较难调和的矛盾。为了解决这个问题,便出现了通信中的差错控制技术,即通过将传送数据进行编码发送的方法来进行检错和纠正。 引言:无线应用的飞跃发展和广阔的应用前景,使得人们不得不把更多的目光投向无线网 络的通信。由于无线环境与有线环境相比,具有误码率高、时延长、带宽窄、信道不对称以及频繁的移动等特性,使无线网络中的通信质量难于保证。这样,怎样改善无线网络中的通信性能也自然成了目前乃至以后较长时期网络领域的重要研究课题。 一、差错控制编码技术的概念 信道干扰源可分为无源干扰和有源干扰。前者引起的差错是一种随机差错,即某个码元的出错具有独立性,与前后码元无关。而后者是由短暂原因如突然施加干扰源引起的,差错是成群的,其差错持续时间称为突发错的长度在信息传输中,二者均有可能被引入。根据具体情况而选定合适的差错控制编码可以发现并纠正这些错误。 1.1差错控制的基本方式 (1)反馈纠错 反馈纠错是在信源端采用能发现一定程度传输差错的简单编码方法对所传信息进行编码(加入少量监督码元),在信宿端根据编码规则对收到的编码信号进行检查,一旦检测出误码,即向信源端发出信号要求重发。信源端收到信号后,立即重发已发生传输差错的那部分信息,直到正确收到为止。这种方法只能发现接收码元中的一个或一些错误,但无法确定误码的准确位置,较适合于双向数据通信,要求信源端有数据存储装置。 (2)前向纠错 前向纠错是信源端采用在解码时能纠正一定程度传输差错的较复杂的编码方法,使信宿端在收到码元后不仅能发现错码,还能够纠正错码。采用前向纠错方式时,不需要反馈信道,也无需反复重发而延误传输时间,对实时传输有利。但是纠错装置比较复杂。此方法可用于没有反馈通道的单向数字信号的传输。 (3)混合纠错 混合纠错即在接收端自动纠正少量差错,当误码严重超出其自行纠正能力时,就向信源端发出询问信号,要求重发,是反馈纠错和前向纠错的混合形式。 1.2差错控制编码的分类 差错控制编码按照差错控制的不同方式,可分为检错码、纠错码和纠删码等;按照误码产生的原因不同,可分为纠正随机错误码与纠正突发性错误码;按照信息码元与附加的监督码元之间的检验关系,可分为线性码与非线性码;按照信息码元与附加监督码元之间的约束方式不同,可以分为分组码与卷积码;按照信息码元在编码之后是否保持原来的形式不变,可分为系统码与非系统码。在实际运用中往往是多种方式的编码方式混合,如线性分组码就是信息码元与附加的监督码元之间的检验关系为线性,约束方式为分组形式。

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

通信原理—差错控制编码基本理论

差错控制概述 1. 差错的概念 所谓差错,就是在通信接收端收到的数据与发送端实际发出的 数据出现不一致的现象。 2. 差错类型 通信信道的噪声分为热噪声和冲击噪声两种。由这两种噪声分 别产生两种类型的差错,随机差错和突发差错。 热噪声是由传输介质导体的电子热运动产生的,它的特点是: 时刻存在,幅度较小且强度与频率无关,但频谱很宽,是一类随机 噪声。由热噪声引起的差错称随机差错。此类差错的特点是:差错 是孤立的,在计算机网络应用中是极个别的。 与热噪声相比,冲击噪声幅度较大,是引起传输差错的主要原 因。冲击噪声的持续时间要比数据传输中的每比特发送时间要长, 因而冲击噪声会引起相邻多个数据位出错。冲击噪声引起的传输差 错称为突发差错。常见的突发错是由冲击噪声(如电源开关的跳火、 外界强电磁场的变换等)引起,它的特点是:差错呈突发状,影响 一批连续的bit(突发长度)。计算机网络中的差错主要是突发差错。 通信过程中产生的传输差错,是由随机差错和突发差错共同构 成的。 3. 误码率 数据传输过程中可用误码率Pe来衡量信道数据传输的质量,误码率是指二进制码元在数据传输系统中出现差错的概率,可用下式表达: 4. 差错控制 差错控制是指在数据通信过程中能发现或纠正差错,将差错限 制在尽可能小的允许范围内。

差错检测是通过差错控制编码来实现的;而差错纠正是通过差错控制方法来实现的。 差错控制编码 差错控制编码的原理是:发送方对准备传输的数据进行抗干扰编码,即按某种算法附加上一定的冗余位,构成一个码字后再发送。接收方收到数据后进行校验,即检查信息位和附加的冗余位之间的关系,以检查传输过程中是否有差错发生。差错控制编码分检错码和纠错码两种,检错码是能自动发现差错的编码,纠错码是不仅能发现差错而且能自动纠正差错的编码。 衡量编码性能好坏的一个重要参数是编码效率R: 其中,n表示码字的位长,k表示数据信息的位长,r表示冗余位的位长。 计算机网络中常用的差错控制编码是奇偶校验码和循环冗余码。 1. 奇偶校验码 奇偶校验码是一种最简单的检错码。 原理:通过增加冗余位来使得码字中"1"的个数保持为奇数(奇校验)或偶数(偶校验)。例如,偶校验:110101000,011011011在实际使用时,奇偶校验可分为以下三种方式。 (1) 垂直奇偶校验 原理:将要发送的整个数据分为定长p位的q段,每段的后面按"1"的个数为奇数或偶数的规律加上一位奇偶位: 编码效率:R = P/(P+1) 检错能力:能检出每列中的所有奇数个错,但检不出偶数个错。对突发错,漏检率约为50%

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校验码计算详解 以实例说明:2008年下半年上午试题(18)。 采用CRC进行差错检验,生成多项式为G(X)=X4+X+1,信息码字为10110,则计算出的CRC校验码是: A. 0000 B. 0100 C. 0010 D.1111 【分析】 符号表示假定:多项式和多项式的系数排列均用相同的符号表示,如 G(X)= X4+X+1 G(X)=10011 1.已知条件如下: 原码字记做M(X),即:M(X) = 10110 生成多项式记做G(X),即:G(X) = 10011 G(X)的最高阶数记做r,此处r = 4 2.计算步骤 (1)计算XrM(X) 也就是把M(X)的尾部添加r个0 XrM(X) = 10110 0000 (2)计算XrM(X)长除G(X),余数记做Y(X) 这里的“长除”计算方法如下: 10110 0000 10011 001010000 10011 0011100 10011 01111 注意Y(X)的位数为r(此处为4),所以Y(X) = 1111 Y(X)即是CRC校验码。 (3) 计算传输码字T(X) = XrM(X)-Y(X) 计算方法:在M(X)末尾连接上Y(X)即可 即:T(X) = 10110 1111 【答案】 此题只要计算出校验码Y(X)即可。正确答案为:D XrM(X) 10110 0000 -- G(X) 10011 (注意位对应方式,对应位进行异或运算即可) 00101 0000 -- G(X) 100 11 (计算方法同上) 001 1100 -- G(X) 100 11 01111 (此数已经小于G(X),计算到此为止,即Y(X))

差错控制编码仿真

差错控制编码仿真 一、实验目的 掌握差错控制编码的实现技术以及仿真方法 二、实验内容 1、设计一个(7,4)汉明码编译码仿真模型 2、观察经过并串转换后的(7,4)汉明码输出波形图 三、实验原理 1、线性分组码的基本概念: 线性分组码(n,k)中许用码字(组)为2k个。定义线性分组码的加法为模2和,乘法为二进制乘法。即1+1=0、1+0=1、0+1=1、0+0=0; 1×1=1、1×0=0、0×0=0、0×1=0。且码字与码字 的运算在各个相应比特位上符合上述二进制加法运算规则。 线性分组码具有如下性质(n,k)的性质: 1)封闭性。任意两个码组的和还是许用的码组。 2)码的最小距离等于非零码的最小码重。 对于码组长度为n、信息码元为k位、监督码元为r=n-k位的分组码,常记作(n,k)码,如果满足2r-1≥n,则有可能构造出纠正一 位或一位以上错误的线性码。 下面我们通过(7,4)分组码的例子来说明如何具体构造这种线性码。设分组码(n,k)中,k = 4,为能纠正一位误码,要求r≥3。现取 r=3,则n=k+r=7。我们用a0ala2a3a4a5a6表示这7个码元,用S1、 S2、S3表示由三个监督方程式计算得到的校正子,并假设三位S1、S2、 S3校正子码组与误码位置的对应关系如下表12.2所示。 (7,4)码校正子与误码位置

S1=0。因此有S1=a6⊕a5⊕a4⊕a2,同理有S2=a6⊕a5⊕a3⊕a1和S3=a6⊕a4⊕a3⊕a0。在编码时a6、a5、a4、a3为信息码元,a2、a1、a0为监督码元。则监督码元可由以下监督方程唯一确定 即 由上面方程可得到表12.3所示的16个许用码组。在接收端收到每个码组后,计算出S1、S2、S3,如果不全为0,则表示存在错误,可以由表12.2确定错误位置并予以纠正。例如收到码组为0000011,可算出S1S2S3=011,由表12.2可知在a3上有一误码。通过观察可以看出,上述(7,4)码的最小码距为dmin=3,它能纠正一个误码或检测两个误码。如果超出纠错能力则反而会因“乱纠”出现新的误码。 (7,4)许用码组 有以下一些特点:码长n=2m-1,最小码距为d=3,信息码长k=2n -m-1,纠错能力t=1,监督码长r=n-k=m。这里m为≥2的正整数。给定m后,就可构造出汉明码(n,k)。 1、(7,4)汉明码的编译码仿真:

差错控制编码

差错控制编码的设计与仿真 学生:陈琪,长江大学文理学院 指导教师:黄金平,长江大学电信学院 一、题目来源 来源于通信过程中所遇到的实际的问题 二、研究目的和意义 通信系统必须具备发现(即检测)差错的能力,并采取措施纠正之,使差错控制在所能允许的尽可能小的范围内,这就是差错控制过程,也是数据链路层的主要功能之一。 接收方通过对差错编码(奇偶校验码或CRC码)的检查,可以判定一帧在传输过程中是否发生了差错。一旦发现差错,一般可以采用反馈重发的方法来纠正。这就要求接受方收完一帧后,向发送方反柜一个接收是否正确的信息,使发送方据此做出是否需要重新发送的决定。发送方仅当收到接收方以正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需要重发直至正确为止。 物理信道的突发噪声可能完全“淹没”一帧,即使得整个数据帧或反馈信息帧丢失,这将导致发送方永远收不到接受方发来的信息,从而使传输过程停滞。为了避免出现这种情况,通常引入计时器(Timer)来限定接收方发回方反柜消息的时间间隔,当发送方发送一帧的同时也启动计时器,若在限定时间间隔内未能收到接收方的反柜信息,即计时器超时(Timeout),则可认为传出的帧以出错或丢失,就要重新发送。由于同一帧数据可能被重复发送多次,就可能引起接收方多次收到同一帧并将其递交给网络层的危险。为了防止防止发生这种危险,可以采用对发送的帧编号的方法,即赋予每帧一个序号,从而使接收方能从该序号来区分是新发送来的帧还是已经接受但又重发来的帧,以此来确定要不要将接收到的帧递交给网络层。数据链路层通过使用计数器和序号来保证每帧最终都能被正确地递交给目标网络层一次。

CRC校验算法-程序例子

变量定义 rtrig1:R_TRIG; execute: BOOL; command:ARRAY[0..255] OF BYTE; number: BYTE; command_temp: ARRAY [0..255] OF WORD; CRCHi: WORD; CRCLo: WORD; CRC_temp: WORD:=16#FFFF; i:INT; j:INT; k:INT; result: ARRAY [0..255] OF BYTE; CRC: WORD; 程序(绿色字体为CRC校验代码)rtrig1(CLK:=execute); IF rtrig1.Q THEN CASE command[1] OF 01,02,03,04,05,06: number:=6; 15,16: number:=7+command[6]; END_CASE; FOR i:=0 TO number BY 1 DO command_temp[i]:=BYTE_TO_WORD(command[i]); END_FOR; FOR j:=0 TO number BY 1 DO CRCHi:=CRC_temp AND 16#FF00; CRCLo:=CRC_temp AND 16#00FF; CRC_temp:=CRCHi OR (CRCLo XOR command_temp[j]); FOR k:= 0 TO 7 BY 1 DO IF CRC_temp.0 = 1 THEN CRC_temp:=SHR(CRC_temp,1); CRC_temp:=CRC_temp XOR 16#A001; ELSE CRC_temp:=SHR(CRC_temp,1); END_IF; END_FOR; END_FOR; CRC:=(CRCLo*16#0100) OR (CRCHi/16#0100); ELSE

CRC16查表计算

CRC16查表计算 参数1:要进行CRC计算的数组地址 参数2:要进行CRC计算的数组长度 /************************************************************************************* ************/ uint16 crc16(uint8 *puchMsg, uint16 usDataLen) { uint8 uchCRCHi = 0xFF ; /* 高CRC字节初始化*/ uint8 uchCRCLo = 0xFF ; /* 低CRC 字节初始化*/ uint32 uIndex ; /* CRC循环中的索引*/ while (usDataLen--) /* 传输消息缓冲区*/ { uIndex = uchCRCLo ^ *puchMsg++ ; /* 计算CRC */ uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex] ; uchCRCHi = auchCRCLo[uIndex] ; } return (uchCRCHi << 8 | uchCRCLo) ; } const uint8 code auchCRCHi[] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

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