详解计算机组原之校验码(奇偶校验,CRC校验,海明码校验)

详解计算机组原之校验码(奇偶校验,CRC校验,海明码校验)

校验码

码距:就单个编码A:00而言,其码距为1,因为其只需要改变一位就变成了另一个编码。在两个编码中,从A码到B码转换所需要的的位数成为码距,如A:00要转换为B:11,码距为2.一般来说,码距越大,越利于纠错和检错

奇偶校验码:

在编码中增加一位校验位来使编码中1的个数位奇数(奇校验)或者偶数(偶校验),从而使码距变为2。举个例子:01101 位我们当前的编码,采用奇校验就是在最后补一位,因为现在是奇数个1所以要补0,即011010。此时发给接受方,接受方会计算此编码中有多少个1,是奇数个就没问题。否则有问题。偶校验同理,但是奇偶校验只能检1位错,不能纠错,就是说如果有两位错依旧检查不出来,如011010变成了111110变动了两位但还是奇数个1所以说只能检1位错。

循环冗余校验码CRC

CRC也是和奇偶校验一样,只能检错不能纠错,其原理是找出一个能整除的多项式的编码,因此首先要将原始报文除以多项式,将所得的余数作为校验位加在原始报文之后,再去发送给接收方。由此可知,CRC由两部分组成,前部分为信息码(原始数据),后部分为校验码,校验码是由信息码产生的,所以校验位数越长,检验能力越强。求CRC编码时采用模2运算。这么多理论也不如一道例题
例题: 原始报文为“11001010101”,其生成多项式为“x^4+x^3+x+1”.对其进行CRC编码的结果为?

首先要根据多项式先得出除数。从多项式最右边开始,首先x的0次为1,有1所以记为1,然后x的1次为x也有在记个1,但是记住这个1要从用往左加!然后再找x的2次幂,没有记0,x的3次幂有记1,x的四次有记1直到最高位所以得出就是11011。之后在原始多项式加上多项式最高指数个0就是4个0即得到110010101010000,和除数进行模2运算,一直上1 意思就是一直除这个除数。具体操作看图。
在这里插入图片描述
至于为什么是0011而不是00011是因为余数必须是多项式减1位。so。。
然后将得到的校验位0011放到原始报文后,即11001010101 0011 发送出去。接收方收到110010101010011与多项式11011进行模二运算,若余数为0,则正确。

海明校验码:

海明码:本质也是利用奇偶性来检错和纠错。构成方法是在数据位之间的确定位置插入k个校验位,通过扩大码距实现检错和纠错
设数据是n为,校验位是k为,则n,k必须满足:2^k-1>=n+k
例: 求信息1011的海明码

首先所有位都要编号,从最低位开始,从1开始递增,校验位处于2的n(n=0,1,2…)次方中,即处于第1,2,4,8,16,32,。。。位上。其余位才能填充真正的数据位。如上信息为1011,则可知检验位在1,2,4上
在这里插入图片描述
所以最终的海明码为1010101.

海明码的检错和纠错原理

接收方收到海明码码后,会将每一位校验位与其检验的位数分别异或。即 做ro异或H3异或H5异或H7等
假如用的是偶校验,则结果应该全为0,那么现在如果收到1011101(第四位出错,原本正确为1010101),则运算结果为100
这里是引用

采用二进制就是第四位出错,纠错方法就是逆转

猜你喜欢

转载自blog.csdn.net/qq_44772660/article/details/112786630