2.1.5-3 循环冗余校验(CRC)码

想必是雪乞春华

(҂◔∀◐҂)☆万圣节快乐♬☆◥(ฅº₩ºฅ)◤ 不给糖就捣蛋 ☆(●⁰౪⁰●)没钱(*^3^)/~☆

中午我们要学习最后一种校验码叫做循环冗余校验码英文缩写叫CrC码,这给出了他的英文全称,那这个小节中我们首先会介绍CrC码的一个基本思想,然后介绍如何构造,还有如何使用,也就是如何检错和纠错,那首先来看一下这种校验码的一个基本思想,我们从大家熟悉的实进制啊出发,假设现在你要给另一个人传送882这样的一个10进制数据,那为了防止传送数据的过程中啊,某一个数据位发生错误,你可以和你的另一个小伙伴约定一个除数,比如说是7那882÷7刚好是除的进的,最后我们算得的余数应该是等于0那么当数剧的接收方姐收到数据的时候就可以用他接收到了这个数据。好,那么当数据的接收方接收到数据的时候,就可以用它接收到的这个数据和你们约定的这个除数进行一个除法操作检查一下余数是否为零,如果余数不等于0,那么是不是就可以确定数据传输的过程中肯定是发生了错误,比如说啊,对方收到的其实是883,也就是最后一个数发生了错误,那883÷7,最后可以算的余数等于1不等于0,那么这就说明肯定是发生了错误,需要重新传送,再比如说第2个数据位发生了错误,由8变成了5,那么除以7得到的余数是等于5,同样这种情况也可以确定,我们的数据传输肯定出现了问题,那这是大家熟悉的时间之除法,我们通过约定一个除数,然后在接收到数据之后进行消除的操作。然后在接收到数据之后,与这个除数进行相除的操作检查余数是否发生了改变,用这样的方式就可以检测出数据传送的错误,那这个小节中我们要学习的循环冗余校验码,和我们刚才说到的的实际是除法的例子,其实是类似的思想,就是数据的发送方和接收方会先约定一个除数,当然了我们处理的是计算机里边的数据,所以这个除数肯定是一个二进制的除数,然后我们会想办法在K个原始的信息位后面加上R个校验位,我们需要确保拼接上这R个校验位之后,这一整串的数据和我们刚才约定的除数进行相除的操作,余数要等于0积聚的接收方接收到的数据之后需要用二进制除法来检查余数是否定。假数据的接收方接收到这K加RV的数据之后,需要用二进制除法来检查余数是否等于0,如果余数不等于0,那么就说明有一些二进制位出现了错误,那这种情况下我们就可以进行重传,或者某些时候也可以进行单笔特位的纠错,这个我们一会再展开好,总之这就是循环冗余校验码的一个思想和大家熟悉的十进制处罚,其实是有某些联系的,那刚才我们说过构建循环冗余校验码需要有这样的两个关键的要素,一个是撤硕,一个是被除数,一般来说题目里会用这种生成多项式的方式给出除术,所以观察这个生成多项式,我们可以把它写成1×X的三次方加上一。二次方加上0×X的一次方,再加上1×X的0次方,那由于这个生成多项式里边所有的这些项,它的系数要么为1,要么为0,因此我们可以把这个生成多项式转换成对应的二进制数,那像这个GX我们可以转换成1101就是和这些系数都是分别对应的,所以这儿给出的生成多项式,其实就是指明了我们的除数是多少好,接下来给出了K位的这个信息嘛,这些信息我们会把它放到高位的部分好,接下来我们需要确定校验位的位数R应该等于多少,那么确定的方法是这样的,R应该是等于它给出的生成多项式的最高次幂像这个式子当中最高的三次方所以我们最终会平街上三味的校验位。等于它给出的生成多项式的最高次幂,像这个式子当中最高次幂是X的三次方,所以我们最终会拼接上三位的校验位,现在大家先不要纠结为什么校验位的位数啊等于3,我们先往后看会更容易理解,那由于信息嘛有6位,然后刚才我们推出校验位有三位,所以最终我们生成的CrC校验码总共应该是6+3=9倍,另外之前我们说过这个生成多项式,它对应了一串二进制码,总共是4个比特好,还记不记得之前说的思路,我们会在这6位的信息位后面加上三个校验位,并且我们需要保证我们添加了这三位校验位之后我们的校验码这个to余数等于零因此结下我们需要确定的。而除数要等于0,因此接下来我们需要确定的是,我们添加的这三位校验位应该是多少,才能保证余数为0,那做法是这样的,我们会把信息嘛左移二位也就是左移三位,这是计算机硬件的处理方式,但我们手动做题的话,其实很简单,就是在这6个信息为后面补上二个也就是补上三个0,接下来我们会用这个数和除数进行相除的操作,那这个除法运算会让我们得到三位,也就是RV的余数,不过这个地方我们需要进行的是摩尔除的运算,和我们普通的除法是有一些区别的,好来看一下这种特殊的除法摩尔除是怎么进行的,首先由于除数有4位,所以我们会取被除数度的高4位与他先商一次磨刀霍霍。除法摩尔除是怎么进行的,首先由于除数有4位,所以我们会取被除数部的高4位与他先伤一次,摩尔橱里边取商的方式比较特别,我们只看当前我们划出来的最高位,如果它是1,那么我们就商1那1×10 0 1=1001,我们把它填到下面,接下来我们会对后三位进行摩二减的运算,其实摩尔减的效果和摩尔加是相同的,还记得吗?摩尔加其实就是异或运算,所以事实上我们就是对后边的三位进行了抑或运算,接下来看0和11或等于11和01或=10和1亿或同样等于1,因此后边三位进行无二阶或者说分别进行抑或得到的结果是111有点类似于十进制的处罚。分别进行抑或得到的结果是111好,那接下来有点类似于10进制的除法,我们把被除数的后面一位啊补到刚才得到的这个余数的低位,也就是这个样子,好,接下来我们要确定下一位的首章,那和之前一样,我们只看最高位,如果最高位为1的话,那我们就商一同样的1×1101得到1101,接下来我们需要对后面的三位进行一次模2减的运算,那一盒一进行模二件就相当于他们俩进行了一次异或等于01和01或=10和11或=1所以这是一位现在由于高位为零所以接下来我们应该上林那么应该是等于四个零所以我们在。2减或者说异或的运算得到三个1,现在由于高位是1,所以下一个商我们应该商一得到1101后三位进行,摩2减得到011再补一个0,现在由于高位是0,所以我们需要伤伶,因此接下来需要减0000啊,好飒未进行模2减得到110,好最后还剩一位,我们再把它补上去,由于此时高位为1,所以我们要商议,那么和1101的后三位进行摩二键得到的结果是001,那玲玲依旧是我们刚才的这一串代码和1101进行模2除得到的一个余数除了规则最终得到的余数卫戍应该只比这个少一位那我们用这些操作得到就是我们的。我们的校验位,所以最终我们得到的CrC校验码就应该是前6个信息位在拼上最后的校验位001这就是叫验肺的一个确定方式,用这种方法是确定的校验码和1101进行模2,除得到的余数一定是000,好,现在我们已经有了校验码,那么我们就可以把这一整串的信息进行传输发送。串的信息进行传输发送那接收方接收到数据之后,就需要进行检错和纠错,注意发送方和接收方提前已经约定好了这个啊,生成多项式或者说约定好了除数,那么当接收方接收到数据之后,就可以用接收到的这一串信息和刚才约定好的这个除数进行模二除的运算,如果最终得到的余数是000,那么就代表没有出错来试一下进行摩尔图娜,由于高位是1,所以商1的1101,然后后三位进行模2减应该是111啊,这儿补一个0,接下来商议1101后三位进行,摩尔姐应该是0151啊,接下来再补一个1,由于最高位是0,所以商0四个零后三位进行模二减幺幺幺接下来。1101最终得到的余数就应该是000,如果要类比10进制的除法,就相当于刚好除了进没有余数,那这种情况下就表示没有出错,再看另一种情况,如果说倒数第2位出现了错误,那么和1101进行模,2除余数应该是等于010,好为了让大家熟悉摩尔储运,算我们还是啊动手来算一遍。二位也就是C2这一位如果发生了错误的话,那么我们最终得到的余数应该是010这里大家会发现一个巧合,我们得到的这个余数,如果把它翻译成10进制的话,刚好就是二对吧,而出错的位置刚好也是C2这个位置,但是其实这个余数和出错位置之间并没有这样必然的联系,所以这个地方我把划了一条横线啊,这句话既对也不对,为什么这么说呢?这地方我把原始的这一串数据,各个位置啊进行了一个改变,如果出错为在第1位的话,那么和这个生成多项式进行模2,除得到的余数是001,如果出错的位置是第2位,就是刚才那个例子那得到榆树市零一零如果出错的位置是第三位得道于树是幺零零一看如果把幺零零三亿成十进制的话应该是。等于4对吧?所以这个余数的值和出错位置之间,其实并不是二进制到十进制呃,一转换这么简单,但是这余数和出错位置确实又有对应关系,那细心的同学会发现我们这儿的余数只有三个比特的信息,而三个比特的信息总共只能表示2的三次方,也就是8种状态,如果余数等于三个0,那么表示这个数据的传输是正确的,接下来出错位为1234567,这几种状况分别会对应不同的余数,那这7种余数再加上000,是不是已经把三个比特能够表示的信息都表示了,所以我们再看如果第8位出错的话,余数又会等于零零一如果是第九位出色的话语术you等于零一零也就相当于这个语速又重头来了一。又会等于001,然后如果是第9位出错的话,余数又等于010也就相当于这个余数又从头来了一遍,第1个是001,第2个是010,所以上一页PPT中余数等于010,就可以确定是第2位出错了吗?这个结论显然是站不住脚的,因为如果第9位出错也有可能会导致余数变为010,因此刚才那句话我们画了一条横线表示它并不严谨,并不正确,那既然如此,是不是意味着循环冗余校验码它只有减错的能力而没有纠错的能力,也就是无法确定出错的位置在哪呢这种理解也不全对像刚才这个弟子当中由于我们总共有九个we只有三位的信息三位的信息最多只能表示无法完全的标注出这样这种理解也不全对像刚才这个弟子当中由于我们总共有九个we只有三位的信息三位的信息最多只能表示无法完全的标注出这九。错误,所以并不是循环冗余校验码没有纠错的能力,而是这个例子当中信息为太长了,所以我们再看另一个例子,如果信息为只有4类,然后生成多项式和之前是一样的啊,1101,那首先我们在信息位后边补三个0,然后用这一整串对1101进行模二除运算得到余数011,所以最终得到CrC嘛,就应该是这4个信息位在拼接上011这三个校验位好,接下来如果这串数据传输过程中没有任何一位发生错误,那显然余数应该是等于0,而如果第1位发生错误,那余数是001,如果是第2位发生错误,余数是010,第3位是100,然后第4位第5位大家自己看,细心的同学会发现余数和出处位置之间的关系与上一个例子并没有。余数和出错位置之间的这个对应关系与上一个例子当中并没有发生任何改变,上个例子当中,余数为001同样出错位是1010,同样出错位是2,然后100同样出错位是3,后续的也是一样的,所以这也就意味着,只要我们确定了一个生成多项式,那么无论我们的信息位如何变化,最终这个余数的值和出错位置之间肯定都是一种固定不变的对应关系,而如果数据的位数并没有超过余数所能表示的这个范围,那么余数和出错位之间就是一一对应的关系,在这个例子当中,如果余数不等于010,那我们就可以确定出错位,一定是第2位,于是我们只需要纠正第2位就可以了所以循环冗余校验码其实是有错功能的只不过信息为的卫戍部队所以循环冗余校验码其实是有错功能的只不过信息为的卫戍不能。太多那到底要多少个信息费才不算多呢,这给出的这个不等式其实和上个小节当中还明码的不等式是很类似的,我们有R个就因为就意味着最终我们会得到RV的余数,而这么多未得于数可以表示2的二次方,这么多种状态,其中有一种状态也就是余数为0,00这种状态是对应正确的状态,然后剩下的2a减1这么多种状态需要分别对应上K加R,这么多为每一个未出现错误的那种情况,需要进行一个11的对应,所以如果能够满足2打二次方,大于等于K+2+1,那么CrC就业嘛,就拥有可以纠正一位错误的能力,不过在实际应用当中,CrC嘛,这种方式通常用于计算机网络的数据传输通常会把几千个比特的信息为加上几个。过的数据传输通常会把几千个比特的信息位加上几个交烟位,所以在实际使用当中,这种交样码通常只会用来检错,而不会用于纠错,只不过大家也需要知道,它实际上是有纠错能力的,理论上这种校验码它可以检测出所有的基数各的错误,同时可以检测出所有的双比特错误,另外它可以检测出小于等于校验位长度,也就是小于等于RV的连续的错误,这是这种交易码的一个检测能力,那这一页的知识大家能有一个简要的了解就可以好,那这个小结当中我们学习了循环冗余校验码,又叫CrC码那考试中一般会给大家一个深沉多项式确定的信息为大家需要通过这两个处得到的余数也就是二位的校验码然后和信息未进行接得到最终的一个叫夜盲,那考试中一般会给大家一个生成多项式然,然后给出确定的K个信息位,大家需要通过这两个初始条件得到RV的余数,也就是RV的校验码,然后和K的信息位进行一个拼接,得到最终的一个校验码。二位的校验码,然后和K个信息呗,进行一个拼接,得到最终的一个校验码,当接收方接收到数据之后,需要和这个生成多项式进行一个摩尔除的运算,来检查余数是否为0,如果余数为0,那么说明没有错误,如果余数非零,那么就说明有错误,这姐姐最后我们也探讨了CrC码的一个检错和纠错能力,有不少教材会说CrC码没有纠错能力,但是这种理解是错误的,只要信息位的位数和校验位的位数足够合理,不超过某一种特定的范围界限,那么CrC码就可以纠正单比特的错误,因为我们得到的余数和出错位置之间是有一一对应的关系的,那这种对应关系只要我们确定了生成多项式,其实就很好确定那这个小杰的那个同样是祭祖也是g网查东西所以大家也需要重视的。大家也需要重视,当然最重要的是要自己尝试着动手做一下题,熟悉所谓的摩尔除的运算好的,那以上就是这个小学的全部内容,最后再给大家分享一个有意思的东西来解释一下,为什么这种校验码叫做循环冗余校验码,我们刚才说过,如果出错位,呃是在第1个位置,那么得到的余数是001,好,现在我们尝试着001的后面给他添一个0,然后对这个生成多项式进行摩尔图的运算生成多项式是1101进行模二除,那么应该商0等于4个0号后三位进行模,二件应该是010,有没有发现这就是出错为为第2个位置的时候的榆树好继续再来,没为补一个0然后由于首位是琳琳进行。再在末尾补一个0,然后由于首位是0,因此我们需要双零进行模2-=100和出错位置为3的,这个余数是相同的,继续再添一个0,接下来我们应该伤1=1101或3M2-=101和这是一样的,那用刚才这种方法大家继续往下算的话,会发现我们得到的三位余数永远都是001,然后一路一直变到110110再回到001,如此循环往复,所以为什么这种校验码叫循环冗余校验码就是这个原因,刚才我们说的这些例子当中出错位于8的时候啊,余数又回到了001为第9位的时候,回到了010也就是第2个位置,那如果信息位更多一些,比如说有10位的话那么接下来一个语素肯定是幺零。这些东西很有意思,不过不是我们考试的重点,大家随便一听乐呵乐呵就行。6

猜你喜欢

转载自blog.csdn.net/m0_45359314/article/details/109400236