CRC的译码与纠错
CRC的译码与纠错
CRC 的译码与纠错将收到的循环校验码用约定的生成多项式G(x)去除,如果码字无误则余数应为0,如有某一位出错,则余数不为0,且不同数位出错余数会
不同。
我们通过上例求出其出错模式,如表2-4 所示。
更换不同的待测码字可
以证明:余数与出错位的对应关系是不变的,只与码制和生成多项式有关。
因
此表2.4 给出的关系可作为系统线性(7,4)分组码的出错判别依据。
对于其他码
制或选用其他生成多项式,出错模式将发生变化。
表2.4 (7,4)循环码的出错模
式( 生成多项式G(x)=1011 )
A1A2A3A4A5A6A7 余数出错位正确错误1100 000110011011010 1 01 11001010000100100 0100 1 01 0 00 1 11 1 01 1 11 0 1654321如果循环码有一位出错,用G(x)作模2 除将得到一个不为0 的余数。
如果对余数补0 继续除下去,我们将发
现一个有趣的结果:各次余数将按表2.4 中的内容顺序循环。
例如第七位出错,余数将为001,补0 后再除,第二次余数为010,以后依次为100,011,…,反
复循环。
这是一个有价值的特点。
如果我们在求出余数不为0 之后,一边对余数
补0 继续做模2 除,同时让被检测的校验码字循环左移。
表2.4 说明,当出现余
数(101)时,出错位也移到A1 位置。
可通过异或门将它纠正后在下一次移位时送
回A7。
继续移满一个循环(对7,4 码共移七次),就得到一个纠正后的码字。
这
样我们就不必像海明校验那样用译码电路对每一位提供纠正条件。
当数据位数
增多时,循环码校验能有效地降低硬件代价,这是它得以广泛应用的主要原因。
关于生成多项式,并不是任何一个r 次的多项式都可以作为生成多项式。
从检错及纠错的要求出发,生成多项式应能满足下列要求:(1) 任何一位发生。
CRC检错码
最近在实习期间需要用到数据的校验,所选为CRC16,那么就在此总结一番吧。
现在此说明下什么是CRC:循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting)的。
实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误那么其实CRC有比较多种,比如CRC16、CRC32 ,为什么叫16、32呢。
在这里并非与位有和关系。
而是由所确定的多项式最高次幂确定的。
如下所示。
理论上讲幂次越高校验效果越好。
CRC(12位) =X12+X11+X3+X2+X+1CRC(16位) = X16+X15+X2+1CRC(CCITT) = X16+X12 +X5+1CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1循环冗余校验码(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)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。
通过C(x)*2R除以生成多项式G(x)得到的余数就是校验码。
几个基本概念1、多项式与二进制数码多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。
可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。
多项式包括生成多项式G(x)和信息多项式C(x)。
CRC差错编码译码课程设计
CRC差错编码译码课程设计一、课程目标知识目标:1. 让学生理解CRC(循环冗余校验)差错编码的基本原理和作用;2. 掌握CRC编码、译码的计算方法和步骤;3. 了解CRC差错编码在不同领域的应用。
技能目标:1. 培养学生运用CRC差错编码进行数据传输错误检测的能力;2. 培养学生运用所学知识解决实际问题的能力;3. 提高学生的计算机操作能力和团队协作能力。
情感态度价值观目标:1. 培养学生对信息安全的重视,树立正确的信息观念;2. 激发学生学习通信原理的兴趣,培养勇于探索的精神;3. 培养学生严谨、细致的学习态度,提高自我要求。
课程性质:本课程为信息技术学科,旨在让学生掌握通信原理中的差错编码技术,提高数据传输的可靠性。
学生特点:学生为高中生,具备一定的计算机基础和数学知识,对通信原理有一定了解。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,以实例引导学生掌握CRC差错编码译码技术,提高学生的实际操作能力和解决问题的能力。
通过课程学习,使学生能够将所学知识应用于实际生活和工作中,为培养高素质的信息技术人才打下基础。
二、教学内容1. 引言:介绍差错编码在通信领域的重要性,引出CRC差错编码的概念。
- 差错编码的意义与作用- CRC差错编码的背景及发展2. CRC差错编码原理:- 循环冗余校验的基本原理- 多项式运算在CRC编码中的应用- CRC编码的数学基础3. CRC编码与译码过程:- 编码过程:生成多项式、数据位串、计算校验位- 译码过程:接收数据、校验、错误检测与纠正4. 常见CRC编码标准:- CRC-8、CRC-16、CRC-32等常见标准介绍- 各标准适用场景及优缺点分析5. CRC差错编码的应用:- 在数据通信、存储、网络等方面的应用案例- 差错编码在提高数据传输可靠性的作用6. 实践操作:- 利用计算机软件进行CRC编码与译码操作- 分析实际应用中CRC差错编码的效果及影响因素7. 教学安排与进度:- 引言与原理:2课时- 编码与译码过程:2课时- 常见CRC编码标准与应用:2课时- 实践操作:2课时教材章节:本教学内容与教材中“差错编码与校验”章节相关,涉及教材第3章第2节的内容。
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编码的检错程序的实现
软件学院实验报告课程:计算机网络原理实验任课教师:姓名:学号:专业:成绩:实验九、链路层实验——基于CRC编码的检错程序的实现实验报告一、实验目的1、通过实验,掌握CRC编码和解码的原理。
2、掌握基于CRC编码的差错检测技术。
二、实验指导现在计算机网络广泛采用的差错检测技术是基于CRC(cyclic redundancy check)循环冗余检测编码,CRC也称为多项式编码(polynomial code),CRC算法非常容易用硬件实现。
CRC编码操作如下:对给定的数据D,发送者选择r个附加位,追加到D的末尾,形成d+r位的新位型,该位型正好能被G模2除尽。
其中,G称为生成器。
CRC编码算法实现:1、选择生成多项式G,其最高次方为r,即r+1位的二进制位串2、计算D·2r, 即在数据D后面补r个0,构成d+r位的位串3、按模2除法求(D·2r/G)的余数R,即:4、从D·2r中模2减去R,得到新的数据T,即加了CRC的帧三、实验要求1、设置一个d位的数据D,r+1位的多项式G,生成CRC码,并把此CRC码作为数据帧进行传送。
2、编写两个子程序,分别实现CRC编码和CRC解码,在主函数中对子程序进行调用。
解码子程序应能根据解码情况判断出接收到的数据帧是否出错,并给出提示。
3、要求分别以正确和错误的数据来检验此检错程序。
4、将编写程序的源代码加必要注释和程序运行结果一起填入实验报告中。
提示:1、编写程序时数据直接用二进制数,可能用到位操作符^(异或)和<<(左移)。
2、在设置错误的编码时,错误位数最好不要超过r+1位。
源代码:#include<stdio.h>void crc(int A[],int G[], int x,int n)//编码程序{int i,j,k;printf("\n\t\t");for (k=0;k<=x-1;k++)printf(" %d",A[k]); //输出补后的数for (i=0;i<=x-n+1;i++){if (A[i]==1) //当首位为时进行异或{for (j=0;j<=n-1;j++){if (A[i+j]==G[j])A[i+j]=0; //异或运算,相同为,不同为else A[i+j]=1;}printf("\n\t\t"); //输出每次异或后的结果for (k=0;k<=x-1;k++)printf(" %d",A[k]); //输出余数}}}#include<stdio.h>void cr(int M[],int A[],int m,int n)//检验解码程序{int k=0,i;for(i=0;i<=m-1;i++){if(M[i]!=A[i]){printf("第%d位出现错误\n",i+1);k++;}}if(k==0){printf("数据完全正确\n");}}int main (){int m,n;int A[20],M[20],G[20],i,j;printf("请输入M[x]的长度m=");scanf("%d",&m);printf("请输入G[x]的长度n=");scanf("%d",&n);printf("\n请输入M[x]=\n");for (i=0;i<=m-1;i++)scanf("%d",&M[i]);printf("\n请输入G[n]=\n");for (j=0;j<=n-1;j++)scanf("%d",&G[j]);for (i=0;i<=m-1;i++)A[i]=M[i];for (i=m;i<=m+n-2;i++)A[i]=0; //对被除数进行补crc(A,G,m+n-1,n); //调用异或函数for (i=0;i<=m-1;i++)A[i]=A[i]+M[i];printf ("\n\n结果为:");for (i=0;i<=m+n-2;i++)printf ("%d",A[i]);printf ("\n");printf("\n请输入你想要进行解码的数据:\n");for (i=0;i<=m-1;i++)scanf("%d",&M[i]);cr(M,A,m,n);}编码:解码:数据出错:。
关于CRC码的基本知识
一、CRC码工作原理1. CRC校验原理CRC的英文全称为Cyclic Redundancy Check(Code),中文名称为循环冗余校验(码)。
它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。
CRC计算与普通的除法计算有所不同。
普通的除法计算是借位相减的,而CRC计算则是异或运算。
任何一个除法运算都需要选取一个除数,在CRC运算中我们称之为poly,而宽度W就是poly最高位的位置。
比如poly 1001的W是3,而不是4。
注意最高位总是1,当你选定一个宽度,那么你只需要选择低W各位的值。
假如我们想计算一个位串的CRC码,并要保证每一位都要被处理,因此我们需要在目标位串后面加上W个0。
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”。
CRC校验原理及步骤
CRC校验原理及步骤标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]CRC校验原理及步骤什么是CRC校验CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。
循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
CRC校验原理:其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。
当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。
到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。
因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。
如果有余数,则表明该帧在传输过程中出现了差错。
模2除法:模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。
在循环冗余校验码(CRC)的计算中有应用到模2除法。
例:CRC校验步骤:CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准,但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,计算出CRC码。
具体步骤:1. 选择合适的除数2. 看选定除数的二进制位数,然后再要发送的数据帧上面加上这个位数-1位的0,然后用新生成的帧以模2除法的方式除上面的除数,得到的余数就是该帧的CRC校验码。
注意,余数的位数一定只比除数位数少一位,也就是CRC校验码位数比除数位数少一位,如果前面位是0也不能省略。
CRC原理 及算法总结
引言CRC 的全称为Cyclic Redundancy Check ,中文名称为循环冗余校验。
它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。
实际上,除数据通信外,CRC 在其它很多领域也是大有用武之地的。
例如我们读软盘上的文件,以及解压一个ZIP 文件时,偶尔会碰到“Bad CRC ”错误,由此它在数据存储方面的应用可略见一斑。
CRC 的算法与实现,对原理只能捎带说明一下。
若需要进一步了解线性码、分组码、循环码、纠错编码等方面的原理,可以阅读有关资料。
利用CRC 进行检错的过程可简单描述为:k 位二进制码序列,以一定的规则产生一个校验用的r 位监督码(CRC 码),附在原始信息后边,构成一个新的二进制码序列数共k+r 位,然后发送出去。
CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。
这个规则,在差错控制理论中称为“生成多项式”。
1 代数学的一般性算法在代数编码理论中,将一个码组表示为一个多项式,码组中各码元当作多项式的系数。
例如 1100101 表示为1·x^6+1·x^5+0·x^4+0·x^3+1·x^2+0·x+1,即 x^6+x^5+x^2+1。
设:编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k ;生成多项式为G(x),G(x)的最高幂次等于r ;CRC 多项式为R(x);编码后的带CRC 的信息多项式为T(x)。
发送方编码方法:将P(x)乘以x^r(即对应的二进制码序列左移r 位),再除以G(x),所得余式即为R(x)。
用公式表示为()()()r T x x P x R x =+接收方解码方法:将T(x)除以G(x),如果余数为0,则说明传输中无错误发生,否则说明传输有误。
举例来说,设信息码为1100,生成多项式为1011,即P(x)=x3+x2,G(x)=x3+x+1,计算CRC 的过程为()()()()3326532333 111r x x x x P x x x x x x x G x x x x x x x ++==+++++++++= 即 R(x)=x 。
crc校验详解
CRC校验专题以CRC-16为例,说明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值。
翻译:1.意思是首先寄存器中的值是11111111111111112.数据第一个字节一个字节=8位用二进制表示就是【00000000-11111111】之间用这个数值跟寄存器中的16个1中的后8位进行异或(异或不知道什么意思的自己查简单理解就是同为0 异为1)然后把这个数值保存到寄存器中3.判断最后一位是否为0 如果为0寄存器中的值向右移动一位前面补零如果为1 拿寄存器中的值与多项式进行异或。
4.检查当前寄存器中的最后一位如果是0 重复第三步;如果是寄存器中的值与多项式进行异或5.重复3与4直到8此移位完成。
6.重复第2到第五步知道正规数组的数据验证完成7.最终计算出的就是CRC的值实例:实例byte[] bufs=new byte[]{0x2f,0x12,0x31} crc16 多项式码假设是0x8408 二进制形式就是10000100000010001crc=0xffff; 用二进制表示就是11111111111111112拿出bufs中第一个字节0x2f 二进制表示00101111 跟寄存器中的后8位进行异或得到11111111110100003判断CRC寄存器中最后一位当前为0 寄存器右移一位得到0111111111101000 (如果为1就与多项式进行异或)4判断当前寄存器中的值当前最后一位为0 所以重复第三步继续右移得到0011111111110100 最后还是0 在重复第三步0001111111111010 最后还是0 继续第三步0000111111111101 这时最后一位为1了这时与多项式进行异或得到10111011111110015重复判断知道判断完8次6然后再重复第2到第5步直到上面数组中的bufs中三个字节验证完7最终寄存器中的值就是crc值下面进行实战C# code 分析const uint PRESET_VALUE = 0xFFFF; 初始化寄存器的值const uint POLYNOMIAL = 0x8408; 多项式码三个参数 1char数组 byte一样 2.数组长度uint uiCrc16Cal(char[] pucY, int ucX){uint ucI, ucJ;uint uiCrcValue = PRESET_VALUE; 赋除值for(ucI = 0; ucI < ucX; ucI++){uiCrcValue = uiCrcValue ^ pucY[ucI]; 进行异或for(ucJ = 0; ucJ < 8; ucJ++) 由于一个字节 8位所以判段8次{if((uiCrcValue & 0x0001) != 0) (*1下面解释){uiCrcValue = (uiCrcValue >> 1) ^ POLYNOMIAL;} (*2下面解释)else{uiCrcValue = (uiCrcValue >> 1);} (*3下面解释)}}return uiCrcValue;}*1 “&”这个符号在C 、C#等语言上是按位与即按二进制比对1与1 得1 0与1得0 0与0得0 例如:比如:10010001(二进制)&11110000等于10010000(二进制)。
冗余校验(CRC)原理与编码方法
冗余校验(CRC)原理与编码方法关键词:通讯冗余校验编码摘要:通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数字通信系统中可靠与快速往往是一对矛盾。
为了解决可靠性,通信系统都采用了差错控制。
本文着重介绍了循环冗余校验CRC(Cyclic Redundancy Check)的差错控制原理及其编码方法。
1、概述在数字通信系统中实现检错功能的差错控制方法很多,传统的有:奇偶校验、重复码校验、恒比码校验、行列冗余码校验等,这些方法都是增加数据的冗余量,将校验码和数据一起发送到接受端。
接受端对接受到的数据进行相同校验,再将得到的校验码和接受到的校验码比较,如果二者一致则认为传输正确。
但这些方法都有各自的缺点,误判的概率比较高。
循环冗余校验CRC(Cyclic Redundancy Check)是由分组线性码的分支而来,其主要应用是二元码组。
编码简单且误判概率很低,在通信系统中得到了广泛的应用。
下面重点介绍了CRC校验的原理及其算法。
2、冗余校验标准分类循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。
它是利用多项式除法及余数的原理来作错误侦测(Error Detecting)的。
它将要发送的数据比特序列当作一个多项式f(x)的系数,发送时用双方预先约定的生成多项式G(x)去除,求得一个余数多项式,将余数多项式加到数据多项式之后发送到接收端,接收端同样用G(x)去除接收到的数据,进行计算,然后把计算结果和实际接收到的余数多项式数据进行比较,相同的话表示传输正确。
CRC校验检错能力强,容易实现,是目前应用最广的检错码编码方式之一。
在国际标准中,根据生成多项式G(x)的不同,CRC又可分为以下几种标准:①CRC-4码:G(X)=X4+X+1②CRC-12码:G(X)=X12+X11+X3+X2+X+1③CRC-16码:G(X)=X16+X15+X2+1④CRC-CCITT码:G(X)=X16+X12+X5+1⑤CRC-32码:G(x)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1CRC-12码通常用来传送6-bit字符串。
CRC的译码与纠错
CRC的译码与纠错CRC的译码与纠错CRC 的译码与纠错将收到的循环校验码用约定的生成多项式G(x)去除,如果码字无误则余数应为0,如有某一位出错,则余数不为0,且不同数位出错余数会不同。
我们通过上例求出其出错模式,如表2-4 所示。
更换不同的待测码字可以证明:余数与出错位的对应关系是不变的,只与码制和生成多项式有关。
因此表2.4 给出的关系可作为系统线性(7,4)分组码的出错判别依据。
对于其他码制或选用其他生成多项式,出错模式将发生变化。
表2.4 (7,4)循环码的出错模式( 生成多项式G(x)=1011 )A1A2A3A4A5A6A7 余数出错位正确错误1100 000110011011010 1 01 11001010000100100 0100 1 01 0 00 1 11 1 01 1 11 0 1654321如果循环码有一位出错,用G(x)作模2 除将得到一个不为0 的余数。
如果对余数补0 继续除下去,我们将发现一个有趣的结果:各次余数将按表2.4 中的内容顺序循环。
例如第七位出错,余数将为001,补0 后再除,第二次余数为010,以后依次为100,011,…,反复循环。
这是一个有价值的特点。
如果我们在求出余数不为0 之后,一边对余数补0 继续做模2 除,同时让被检测的校验码字循环左移。
表2.4 说明,当出现余数(101)时,出错位也移到A1 位置。
可通过异或门将它纠正后在下一次移位时送回A7。
继续移满一个循环(对7,4 码共移七次),就得到一个纠正后的码字。
这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件。
当数据位数增多时,循环码校验能有效地降低硬件代价,这是它得以广泛应用的主要原因。
关于生成多项式,并不是任何一个r 次的多项式都可以作为生成多项式。
从检错及纠错的要求出发,生成多项式应能满足下列要求:(1) 任何一位发生。
