校验码(奇偶校验码、海明码、CRC码)
文章目录
1.什么是校验码
- 校验码:指能够
发现
或能够自动纠正错误
的数据编码,也称检错纠错编码 - 实现原理:通过加一
冗余码
,来检验或纠错编码 - 码距:简单来说就是两个二进制数比较,在同一数位的地方,数位值不同的个数有多少个,即码距,也称海明距离
- 两种方法计算码距。比如0100和1111
直接观察法
:可以看出,有3个数位值不同,所以码距为3.异或计算法
:0100⊕1111=1011 ,结果为1011,里面有几个1就代表有多少个数位值不同,即码距是多少,这里码距是3
2.为什么要有校验码
其实从什么是校验码,就可以看出为什么要有校验码,在计算机的运算过程中,所有数据都是以二进制保存的,数据在计算机中进行运算处理传递的时候,我们要对数据进行加工,为什么要加工呢?是为了防止在传输过程中由于硬件等方面的因素导致数据发生变化,当我们加工数据增加冗余位后,原始数据码就变成了校验码,我们可以通过相对应的校验码的一些方法来检测和纠正错误,保证数据的准确性
3.奇偶校验码(PC)
实现原理
: 在原编码中加一个校验位,则原编码就变成了校验码
,它的码距为2,可以检查出奇数位错误,但不能检查出偶数位错误,增加的冗余位为奇偶校验位,一般校验位设置在原编码的最左边或最右边奇校验码
:整个校验码(信息位+校验位)中1的个数位奇数偶校验码
:整个校验码(信息位+校验位)中1的个数位偶数
3.1 怎么通过奇偶校验码判断数据是否正确还是错误
首先在计算机中,我们就要约定好,数据是采用奇校验还是偶校验,下面分奇校验和偶校验来说明一下奇偶校验如何检查在计算机传输数据的过程中数据是否正确
3.2 为什么无法检查出偶数个错误
- 通过上述奇偶校验两种方式校验数据,可以比较得出奇偶校验可以检测出奇数个错误而无法检查出偶数个错误,也无法纠正错误,无法定位错误位置
4.海明校验码(HC)
4.1 什么是海明校验码
- 一种多重奇偶校验码
- 实现原理:在有效信息位中加入几个校验位形成海明码,并把海明码的每一个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化
- 特点:可以发现错误,定位错误位置,自动纠正错误。
可以检测双比特错误,但只能纠正单比特错误
纠错理论:L-1=D+C且D≥C
编码最小码距L越大,其检测错误的位数D越大,纠正错误的位数C也越大,且纠错能力恒小于检错能力
4.2 一题搞懂海明校验码
5.循环冗余校验码(CRC)
5.1 什么是CRC码
- 基本思想:校验码中的一种。在K位信息位后拼接R位检验位,组成CRC码,这种编码也称(N,R)码
- 特点:可以发现错误,定位错误位置,自动纠正错误。
可检测出所有奇数位错,所有双比特的错和所有小于、等于校验位长度的突发错
- 结构:
5.2 原码如何编码生成CRC码
- 首先,发送端和接受端会有一个生成多项式G(x)约定,生成多项式G(x)的最高次幂为R。任意一个二进制数码都可用一个系数为0或1的多项式与之对应。比如:二进制数码 1101 对应的G(x)=1X3+1X2+0X1+1X0= X3+X2+1
- 在发送端,将要传送的K位二进制信息码左移R位,将它与生成多项式G(x)所对应的的二进制数码进行模2除法,产生余数,生成一个R位检验码,并附在信息码后,构成一个新的二进制码(CRC)码,共K+R位
模2运算:分为模2加、模2减、模2乘、模2除,不考虑进位
和借位
5.3 一题搞懂CRC码生成与校验
例题: 设生成多项式G(x)=X3+X2+1 ,信息码为 101001 ,求对应的CRC码
- 分析:校验位长度:R=3 , 信息码长度:K=6 , CRC码长度:N=R+K= 9
- 生成多项式对应二进制码:1101