奇偶校验
奇偶校验(Parity Codes)是通过在编码中增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验)。但该编码只能检错,但不能纠错。
奇偶校验:
- 码距为2。码距越大越容易纠错和检错
- 仅检测出代码中奇数位数(奇数个0或1发生错误),不能发现偶数位数出错。
奇数 + 偶数 = 奇数
奇数 + 奇数 = 偶数
偶数 + 偶数 = 偶数
偶数 + 奇数 = 奇数
即奇数可以改变奇偶性,偶数不能,所以当代码中偶数位出错时,奇偶性不变,无法发现错误。
- 常用的奇偶校验码有3种:水平奇偶校验码、垂直奇偶校验码和水平垂直校验码。
例如:编码中包含奇数个1 发送给接收方,会计算到编码中有几个1,如果是奇数则无误 ,反之错误,偶校验则相反
奇偶校验的特点:
-
- 只能检查出1为错误不能多位检错也不能纠错
CRC循环冗余校验码
循环冗余校验码(Cyclic Redundancy Check,CRC)广泛应用于数据通信领域和磁介质存储系统中。它利用生成多项式为k个数据位产生个校验位来进行编码,其编码长度为k+r。
若CRC码的字长为n,又可称其为(n,k)码,则:
- 左边为信息码(数据),占k位;
- 右边为校验码,占n-k位。校验码是由信息码产生的,校验码位数越多,该代码的校验能力就越强。
在求CRC编码时,采用的是模2运算。模2加减运算的规则是按位运算,不发生借位和进位。
CRC码距为2,可以检错不能纠错。
CRC 只能检错不能纠错
使用CRC 时需要先约定一个生成多项式G(X),生成多项式的最高位和最低位必须是1.
CRC 检验编码一般是CRC32
假设:信息位是M位 则对应的多项式是M(x)
生成校验码的思想就是在原始信息位后加上若喊干个校验位,使得可以被多项式整除,整除得0 则无误
信息位。1100
多项式: 3+x+1,
求CRC编码后的结果
1.加0,多项寸是大的数是了所以加3个0
得:1100 000
求多项式信息
其实是求的为的幂指数(存在为1 不存在为0)
3+x+1+0=1011
生成CRC
同0非1
1100 000
1011
--------------
0111 0
101 1
--------------
010 10
10 11
--------------
00 010
--------------
计算结束:因为补位后凑不够四位则结束
余数为10.但多项式做高位是3,则左动加一个0.避使成3位
余数等于010
答案:11 00 010
信息位 余数
检验:110011可以被多项式1011整除,整除得0 就是正确
海明码
海明码(Hamming Code)是一种利用奇偶性来检错和纠错的校验方法。海明码是在数据位之间的特定位置上插入k个校验位,通过扩大码距来实现检错和纠错。设数据位是n位,校验位是k位,则n和k必须满足以下关系:
2^k −1≥n+k
该公式的字面意思为,k个校验位的最大值(k个校验位都为1),要比海明码的位数(n+k)要大。 海明码的码距为3。
所有的位都应该要有编号,从最低位开始编号,从1开始递增,校验位处于2的n次方(n=0 1 2 3 4......)2n次方处于1 2 4 8 16 32 ...位,2的0次方就是第一位 ,2的1次方就是第二位 ,2的4次方就在第16位上
海明码计算
数据:1101
校验码:001
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
1=I4 | 0=I3 | 1=I2 | 1=I1 | 信息位 | |||
0=R2=2的2次方 | 0=R1=2的1次方 | 1=R0=2的0次方 | 校验位 |
信息位对应的校验位:7=2^2+2^1+2^0=4+2+1 ;表示由第4位,第2位,第1位,共同校验第7位的信息位
其他的依次类推
数据位和校验位都是两者相互进行校验的通过2的幂子数
由此可以得知第四位校验位R2由 5.6.7三位数据位的值异或
求数据位由那些校验位进行校验:
I4=R2+R1+R0=4+2+1=7
I3=R2+R1=4+2=6
I2=R2+R0=4+1=5
I1=R1+R0=2+1=3
求校验位的数据和校验位由那些数据位校验:
R2=I4+I3+I2=1异或0异或1=0(同0非1)
R1=I4+I3+I1=依次类推 ....
R0=I4+I2+I1
解释:
数据位“i”表示 比如i4在第七位 则看已有的校验位有那些的2的几次方相加等于7,由此得到I4=R2+R1+R0=4+2+1=7 表示第七位的数据有R2+R1+R0校验位进行校验
校验位:按照数据位的公式把所有的数据校验信息列出来,就会看到同一个校验位,可能会校验不同的数据位,所以有相同校验位的数据位就是检验校验为的数据位
则:R2有I4+I3+I2 三个数据位引用,就是被这三个数据位校验
然后将这个三个数据位进行异或(同0非1),得到的数据就是校验位的数据001(偶校验码),如果是奇校验码就是取反 110
Ps:所以的数据都是从右最低位开始 不要搞反
海明码纠错
只要前面的懂了 后面就很简单
接收方收到海明码的时候会将每一个海明码与数据位的位数进行异或,比如还是按照上面的表 :
数据:1101
校验码:001
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
1=I4 | 0=I3 | 1=I2 | 1=I1 | 信息位 | |||
0=R2=2的2次方 | 0=R1=2的1次方 | 1=R0=2的0次方 | 校验位 | ||||
1 | 0 | 1 | 0 | 1 | 0 | 1 | 编码 |
以上的正确的数据则是1010101
但是我们传入1011101 进行检验:
则表会变成
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
1=I4 | 0=I3 | 1=I2 | 1=I1 | 信息位 | |||
1=R2=2的2次方 | 0=R1=2的1次方 | 1=R0=2的0次方 | 校验位 | ||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 编码 |
R2=R2异或I4异或I3异或I2=1-1-0-1=1 异或结果是1 则是错的,
所有的检码检错方法都是这样 ,
以上是偶校验 全部为0 则正确
反之为1 是奇校验
纠错方法就是取反
数据位纠错
就是与海明码纠错方法一样 就是
标签:校验位,R2,软考,day2,校验,校验码,数据位,次方,检错 From: https://blog.csdn.net/m0_64361728/article/details/136876292