浅谈奇偶校验、CRC循环冗余校验、海明校验计算方法

您所在的位置:网站首页 奇偶校验码怎么算1的个数和次数 浅谈奇偶校验、CRC循环冗余校验、海明校验计算方法

浅谈奇偶校验、CRC循环冗余校验、海明校验计算方法

2024-07-17 04:33| 来源: 网络整理| 查看: 265

上课老师讲了这三种校验方法,为了温习,写了这篇文章以作总结

由于才疏学浅本文不谈三种校验方法的原理,只介绍三种校验方法的使用方法

一、奇偶校验: 校验码求法: 奇校验:添加校验位使得1的个数为奇数个 偶校验:添加校验位使得1的个数为偶数个  求校验码: (1)假设原传输信息为ABCD,偶校验位为Z 则 Z=A⊕B⊕C⊕D (⊕为异或,相同时为0,不同时为1) (2)那如果是奇校验电路呢??? 那就要酱紫来:Z=A⊕B⊕C⊕D⊕1 (⊕为异或) 如何进行数据校验看是否传输正确呢? 对收到的数据求一下校验码,对比是否和发送的校验码一样,若不一样,则说明传输错误

二、CRC循环冗余校验: 原理:本质上是模2除法求余,将发送信息M(x)当作被除数,发送方和接收方共同约定一个除数G(x),然后求余R(x),该余数R(x)即为CRC值   校验步骤: (1)预先确定一个发送端和接收端都用来作为除数的二进制比特串,可以随机选择也可以使用国际标准(但最高位和最低为必须为1) (2)如果除数为n位二进制比特串,那么先在要发送的数据后面加上(n-1)个0,然后以模2除法(和异或一样)除以上面的除数,得到的余数位数应该为(n-1)位,即为CRC校验码(如果前面位是0也不能省略,一定要是(n-1)位)。 (3)将计算出来的CRC校验码附加在原数据的后面,并发送 (4)接收端收到数据后,用收到的数据以模2除法除以最开始确定好的除数,若余数不为0,则传输中出现错误。(这里计算余数时,被除数一定是和发送端计算CRC校验码时的被除数是不一样的,因为发送端计算CRC校验码时的被除数是原数据+(n-1)个0,而收到的数据是原数据(可能受干扰)+(n-1)位CRC校验码)

三、海明校验: 设数据为1101,海明校验中分为奇偶校验,默认都是偶校验 (1)设欲检测的二进制代码为r位,为使其具有纠错能力,需要添加k位检测位,组成k+r=n位的代码。为了能准确对错误定位以及指出代码没错,新添加的检测位数k应满足:2^k ≥ r+k+1 由此可求出需要的校验位的个数 (2)校验位分别放在2的i次方上,i从0...n; 例如r=4,则求得k=3,一共7位海明码,则校验位分别为H1,H2,H4; (3)下面求校验位 则:H3 = H1+H2 (这里是等式右边下标相加等于等式左边下标的意思,下面一样) H5 = H1+H4 H6 = H2 + H4 H7 = H1 + H2 + H4 H1你就看哪个信息位用到了1, H3=1+2;H5=1+4;H7=1+2+4;所以

P1(H1)=H3 ⊕ H5 ⊕ H7 P2(H2) = H3 ⊕ H6 ⊕ H7 P3(H4) = H5 ⊕ H6 ⊕ H7 (4)大功告成,校验位求完,则有了海明码,那么我们怎么检查错误和纠正错误呢? 因为校验码有三位,我们这里再申明三位码分别用S1、S2、S3表示,满足下列关系: S1 = P1 ⊕ H3 ⊕ H5 ⊕ H7 ; S2 = P2 ⊕ H3 ⊕ H6 ⊕ H7; S3 = P3 ⊕ H5 ⊕ H6 ⊕ H7; 如果没有错误的话,S1 S2 S3应该都为0,若有不为0,S3S2S1(记住这里是降序排列因因为二进制高位在左)的值转换为十进制就是数据出错的地方,将这位数据取反就可以起到纠错的功能了。

好了,原理讲完,我们实例一下:

P1(H1)=H3 ⊕ H5 ⊕ H7=1 P2(H2) = H3 ⊕ H6 ⊕ H7=0 P3(H4) = H5 ⊕ H6 ⊕ H7=0 所以传输的海明码应该为1010101,我们假设在传输过程中第三位数据出了问题,由1变成了0,即1000101那下面开始进行检查和纠错,同理因为有3个校验位,所以我们设置3位码来进行检查与纠错 S1验证组:经过奇偶校验发现S1组中有奇数个1,使用异或运算S1=1(简单办法是直接数1的个数奇数为1偶数为0)

S1 = P1 ⊕ H3 ⊕ H5 ⊕ H7 =1 同理S2 = P2 ⊕ H3 ⊕ H6 ⊕ H7=1; S3 = P3 ⊕ H5 ⊕ H6 ⊕ H7=0; S3S2S1=011  可知出错位数为第三位,所以将第三位的0改为1,即纠错成功,与发送端保持了一致。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3