校验码
例如:编码A是00,因为其只需要改变一位就变成另一个编码,所以码距为1
例如:编码A是101010,编码B是111000,在相同位置上有2个元素值不同,所以码距为2
较大的码距意味着两个序列之间的差异较大,即在更多的位置上存在不同的元素。在错误检测和纠错编码中,通过使用码距较大的编码方案,可以提供更强大的纠错能力。
冗余位的添加是基于码距的概念,通过增加冗余位,从而增加码距,使得在一定范围内的错误能够被检测和纠正。
在编码中增加1位校验位来使编码中1的个数为奇数 (奇校验)或者偶数(偶校验),从而使码距变为2
假设计算机规定好的是奇校验,发送方发送的编码是01101 0,而接收方收到的是11111 0,但是奇数个1,符合奇校验,但有两个0变成了1,所以奇偶校验只能检测出1位错误,且没法纠错。
只能检错,不能纠错
原理:发送方和接收方事先约定一个生成多项式G(x),将原始报文除以多项式生成的除数,将所得的余数作为校验位加在原始报文之后,作为发送数据发给接收方
即循环冗余校验码CRC由两部分组成,K位信息码(原始数据)+ R位校验码
校验码是由信息码产生的,校验码位数越长,校验能力越强
例如:原始报文为11001010101,其生成多项式为:x4+x3+x+1,对其进行CRC编码后的结果为?
多项式的最高幂为几,就在原始报文的末尾加几个0
由高次幂到低次幂,有幂指数的则为1,无幂则为0
按位运算,不发生借位和进位,而是异或运算;商一直上1,不需要管是0还是1;余数的位数应与多项式的最高次数相同,如果位数不够则在余数前面补0
---------------------
11011 | 110010101010000
11011
---------------
10010 (异或运算,同0非1,最高位得到1则停止,后面从被除数补足与除数相同的位数)
11011
---------------
10011
11011
---------------
10000
11011
---------------
10111
11011
---------------
11000
11011
---------------
11000
11011
---------------
0011
从网上拉了个图(from imByte),更加清楚
例如:待发送的信息为101001,生成多项式为G(x)= x 3+ x2+ 1,计算余数
例如:接收到的信息为101101001,生成多项式为 G(x)= x3+ x2+ 1,判断传输是否误码?
【解析】接收到的信息作为被除数,多项式不变构造除数,做除法运算,如果得到的余数为0,表示数据传输正确。
【例题】循环冗余校验码 (cyclic Redundancy check ,CRC)是数据通信领域中最常用的一种差错校验码,该校验方法中,使用多项式除法(模2 除法) 运算后的余数为校验字段。若数据信息为n位,则将其左移k位后,被长度为k+1位的生成多项式相除,所得的k位余数即构成k个校验位,构成n+k位编码。若数据信息为1100,生成多项式为 x3+x+1 (即1011), 则CRC编码是 ( )
A.1100010
B.1011010
C.1100011
D.1011110
【答案】A
【解析】(1)在原始信息位后加k个000,即1100000 (2)将1100000与生成多项式1011做模2除法,得到余数为010 (3)将原始信息位与余数连接起来得到: 1100010
ps:将数据信息左移k位是指在数据信息位后面添加k个0
本质也是利用奇偶性来检错和纠错的检验方法,构成方法是在数据位之间的确定位置上插入k个校验位
,通过扩大码距实现检错和纠错。
设数据位是n位,校验位是k位,则n和k必须满足以下关系: 2k>= n + k + 1(已知信息位有多少,求校验位位数)
例如:求信息位1011的校验位数
【解析】数据位有4位,2 k ≥ 5 + k,k = 3,所以校验位有3位
例如:求信息1011的海明码
(1)确定校验位的位数和具体位置
从最低位编号,从1开始递增
校验位处于2的n次幂
( n = 0 1 2…)的位置上 ,即处于第1、2、4、8、16、32…位上其余位填充真正的数据位(信息位)
该题中,信息数据为1011,先确定第1、2、4位为校验位,后填充第3、5、6、7位为数据位(信息位只有4位),用来从数据位低位开始存放1011
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
---|---|---|---|---|---|---|---|
I4 | I3 | I2 | I1 | 信息位 | |||
r2 | r1 | r0 | 校验位 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
---|---|---|---|---|---|---|---|
1 |
0 |
1 |
1 |
信息位 | |||
r 2 | r 1 | r 0 | 校验位 |
(2)计算校验位
信息位所在的编号
拆分成校验位所在的编号
,目的是看第几位数是由哪些校验位校验的 有出现的地方,进行异或运算
第4位校验位校验第7、6、5三位数据位,因此,第4位校验位r2 = 这三位数据位的值异或
第4位校验位r2 = 1 ⊕ 0 ⊕ 1 = 1 ⊕ 1 = 0
第2位校验位校验第7、6、3两位数据位,因此,第2位校验位r1 = 这三位数据位的值异或
第2位校验位r1 = 1 ⊕ 0 ⊕ 1 = 1 ⊕ 1 = 0
第1位校验位校验第7、5、3两位数据位,因此,第1位校验位r0 = 这三位数据位的值异或
第1位校验位r0 = 1 ⊕ 1 ⊕ 1 = 1
计算出三个校验位后,数据位之间的确定位置上插入k个校验位后,可知最终要发送的海明校验码为1010101
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
---|---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 信息位 | |||
0 |
0 |
1 |
校验位 |
(3)检错和纠错原理
接收方收到海明码之后,会将每一位校验位
与其校验的位数
分别异或
,如果是偶校验,那么运算得到的结果应该全为0
,如果是奇校验,应该全为1
,才是正确。
假设是偶校验,且接收到的数据为1011101 (第四位出错,上文计算的海明校验码是1010101) ,说明接收方收到的校验位是101,而不是正确的001。
原始表格
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
---|---|---|---|---|---|---|---|
I4 | I3 | I2 | I1 | 信息位 | |||
r2 | r1 | r0 | 校验位 |
后续表格(含错误的校验位)
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
---|---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 信息位 | |||
1 |
0 |
1 |
校验位 |
此时,运算的结果为:
r2 ⊕ I4 ⊕ I3 ⊕ I2 = 1 ⊕ 1 ⊕ 0 ⊕ 1 = 1
r1 ⊕ I4 ⊕ I3 ⊕ I1 = 0 ⊕ 1 ⊕ 0 ⊕ 1 = 0
r0 ⊕ I4 ⊕ I2 ⊕ I1 = 1 ⊕ 1 ⊕ 1 ⊕ 1 = 0
这里不全为0,表明传输过程有误,并且按照r2 r1 r0排列为二进制100,这里指出的就是错误的位数,表示第100,转化为十进制是4,即第4位出错,找到了出错位,纠错方法就是将该位逆转,所以第4位校验码变为0即可。ps:进制之间的转换
奇偶校验码就是在原始信息位后面加1个校验位
循环冗余码CRC就是在原始信息位后面加R个校验位
海明校验码就是在原始信息位之间插入K个校验位