校验码(奇偶,CRC,海明)

基础知识

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

奇偶校验码

        在编码中增加1位校验位来使编码中 1 的个数为奇数(奇校验) 或者偶数(偶校验),从而使码距变为2。例如:

        奇校验:编码中,含有奇数个1,发送给接收方,接收方收到后,会计算收到的编码有多少个1,如果是奇数个,则无误,是偶数个,则有误。

        偶校验同理,只是编码中有偶数个1,由上述,奇偶校验只能检1位错,并且无法纠错

        当编码错了一位比如原编码是 11001 ,采用偶校验在编码末尾添加 1,得到 110011,传输到数据中得到 10001 ,采用偶校验在编码末尾添加 0 ,当前的编码 100010 与原编码 110011 相差两个,所以奇偶校验码使码距变为了 2 

        当编码错了两位,比如加上校验位的编码是 110011 ,错了两位得到 100001 ,此时依然是偶数个 1 ,便检查不出错误

CRC 校验码(循环冗余校验码)

        CRC 只能检错,不能纠错。使用CRC编码,需要先约定一个生成多项式G(x)。生成多项式的最高位和最低位必须是1。假设原始信息有m位,则对应多项式M(x)。生成校验码思想就是在原始信息位后追加若干校验位,使得追加的信息能被 G(x)整除。接收方接收到带校验位的信息,然后用 G(x) 整除。余数为0,则没有错误;反之则发生错误。

        概念太复杂,通过例子理解更清晰

        例:假设原始信息串为10110, CRC 的生成多项式为 G(x)=x^4+x+1 ,求CRC校验码。

        (1)在原始信息位后面添0,假设生成多项式的阶为 r,则在原始信息位后添加 r 个0,本题中,G(x)阶为4,则在原始信息串后加4个0,得到的新串为101100000,作为被除数。
        (2)由多项式得到除数,多项中x的幂指数存在的位置1,不存在的位置0。本题中,x的幂指数为0,1,4的变量都存在,而幂指数为2,3的不存在,因此得到串10011。
        (3)生成CRC校验码,将前两步得出的被除数和除数进行模2除法运算(即不进位也不借位的除法运算)(简单来说就是异或运算)。除法过程如下图所示。

得到余数 1111
        注意:余数不足 r,则余数左边用若干个0补齐。如求得余数为11,r=4,则补两个 0 得到0011。
        (4)生成最终发送信息串,将余数添加到原始信息后。上例中,原始信息为10110,添加余数1111 后,结果为101101111。发送方将此数据发送给接收方。

        (5)接收方进行校验。接收方的CRC校验过程与生成过程类似,接收方接收了带校验和的帧后,用多项式G(x)来除。余数为0,则表示信息无错;否则要求发送方进行重传。
注意:收发信息双方需使用相同的生成多项式。

        其实理解起来很简单,数据 101100000 除以 10011 得到余数 1111,将 1111 加到数据101100000 中再次除以 10011 理应得到的余数为 0 ,如果不为 0 就说明传输过来的数据出错了

        相比于奇偶校验码只能检测出一位的错误,CRC 校验码可以检测出任意位的错误,但是这两个校验码都无法纠错

海明码

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

        公式太麻烦,可以通过推理得到数据位个数对应的校验位个数,校验位所在的位置都是固定的,所有位都编号,从最低位编号,从1开始递增,校验位处于 2 的n (n=0 1 2…….次方中,即处于第1,2,4,8,16,32,.....位上,其余位才能填充真正的数据位,若信息数据为1011,则可知,第1,2,4位为校验位,第3,5,6,7位为数据位,用来从低位开始存放1011,得出信息位和校验位分布如下:


 

        每个校验位都可以通过信息位来计算

        将所有信息位的编号都拆分成二进制表示,如下图所示:

        上图中,7=4+2+1,表示  7由第4位校验位(r2)和第2位校验位(r1)和第1位校验位(r0)共同校验,同理,第 6 位数据位6=4+2,第5位数据位5=4+1,第3位数据位3=2+1,前面知道,这些2的n次方都是校验位,可知,第4位校验位校验第 7 6 5 三位数据位,因此,第 4 位校验位 r2 等于这三位数据位的值异或,第 2 位和第 1 位校验位计算原理同上.

        计算出三个校验位后,可知最终要发送的海明校验码为1010101.

检错和纠错的原理

        接收方收到海明码之后,会将每一位校验位与其校验的位数分别异或,即做如下三组运算:


 

        如果是偶校验,那么运算得到的结果应该全为0,如果是奇校验,应该全为1,才是正确,假设是偶校验,且接收到的数据为1011101(第四位出错),此时,运算的结果为:


 

        这里不全为0,表明传输过程有误,并且按照r2 r1 r0排列为二进制100,这里指出的就是错误的位数,表示第100,即第4位出错,找到了出错位,纠错方法就是将该位逆转。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林想被监督学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值