校验码
校验码
奇偶校验法、海明校验法、CRC校验法
1.奇偶校验法
如果采用奇校验,在传送每一个数据(一般是1个字节)的时候另外附加一位作为校验位,当实际数据中1的个数为偶数的时候,这个校验位就是1.否则,这个校验位就是0,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中1的个数,如果是奇数,表示传送正确。否则,表示传送错误。
偶校验的过程和奇校验的过程一样,只是检测数据中1的个数为偶数。当实际数据中1的个数为偶数的时候,这个校验位就是0,否则这个校验位就是1.这样,就可以保证传送数据满足偶校验的要求。在接收方收到数据时,将按照偶校验的要求检测数据中1的个数,如果是偶数个1,表示传送正确。否则,表示传送错误。
2.海明校验法
和奇偶校验不同之处在于海明码采用多位校验码的方式,在信息数据位中合理加入校验位,将码距均匀拉大,校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。
校验公式:
海明码是利用在k个数据位设置r个校验位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足关系式:2r≥n+1 或 2r≥k+r+1。(2的校验位次方>=数据位+校验位+1)
海明校验码是在n个数据位之外增设k个校验位,从而形成一个k+n位的新的码字, 使新的码字的码距比较均匀地拉大。n与k的关系是(1)。
(1)A.2k - l≥n + k B.2n - 1≤ n + k C.n = k D.n-1≤k
选(A)
3.CRC校验法
循环冗余检验码简称CRC码,由于其实现的原理十分易于用硬件实现,因此广泛地应用于计算机网络上的差错控制。而且由于它采用的是模二除进行验算,因此十分适合于以串行同步方式传送数据块。
而CRC的考查点主要有3个:
常见的CRC应用标准;
计算CRC校验码;
验算一个加了CRC校验的码是否有错误;
(1)常见的CRC标准及应用归纳如表1-4所示:
(2)计算CRC校验码
在CRC码中,编码是由K位信息码,加上R位的校验码组成。要计算CRC校验码,需根据CRC生成多项式进行。
①使用多项式G(x)=x^5 + x^4 + x +1,对报文10100110进行CRC编码,则编码后的报文是什么?
方法与步骤:
步骤1:对报文10100110,在末尾添加所给多项式的最高次阶个0,如本题为x^5,则添加5个0,变为:1010011000000。
步骤2:由多项式G(x)=x^5 + x^4 + x +1,得其阶数为1的二进制编码为:110011。
步骤3:步骤1中求得的1010011000000对步骤2中求得的110011进行模二除法,所得到的余数即为校验码,把校验码添加在原报文尾部即为所求的编码报文1010011011000,具体如下:
注意:
余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略
②原始报文为11001010101,其生成多项式为X4+X3+X+1.计算编码后的报文。
步骤1:对报文11001010101,在末尾添加所给多项式的最高次阶个0,则添加4个0,添加后的报文为110010101010000
步骤2:由多项式X4+X3+X+1,得其阶数为1的二进制编码为:11011
步骤3:计算
如图,计算一定要比除数小一位,即使补0,将0011添加到原始报文的后面,就是结果110010101010011.
(3)检查信息码是否有CRC错误
要想检查信息码是否出现了CRC错误的计算很简单,只需用待检查的信息码做被除数,除以生成多项式,如果能够整除就说明没有错误,否则就表示出错了。另外要注意的是,当CRC检查出现错误时,它是不会进行纠错的,通常是让信息的发送方重发一遍。
①已知道接收到的CRC编码,求原编码或判断是否出错,如:已知G(x)=x^5 + x^4 + x +1,接收的为1010011011001,问是否出错?
如上的CRC编码是错误的。
例:以下关于海明码的叙述中,正确的是(6)。
A.海明码利用奇偶性进行检错和纠错
B.海明码的码距为1
C.海明码可以检错但不能纠错
D.海明码中数据位的长度与校验位的长度必须相同
海明码既可检错又可纠错
例:己知数据信息为 16 位,最少应附加(5)位校验位,才能实现海明码纠错。
A.3 B.4 C.5 D.6
根据公式 2的k次方 ≥ n+k+1 , n=16 则 K=5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】