校验码测试范例

码距: 就是单个编码A:00而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A:00 要转换为B:11,码距为2。一般来说,码距越大,越利于纠错和检错。

奇偶校验码: 在编码中增加1位校验码位来使编码中的1的个数位奇数(奇校验)或者偶数(偶校验),从而使码距变位2.

奇校验:编码中,含由奇数个1,发送给接收方,接收方收到后,会计算收到的编码中有多少个1,如果使奇数个,则无误,是偶数个,则有误。

偶校验同理,只是编码中有偶数个1,由上述,奇偶校验只能检1位错,并且无法纠错。

循环冗余校验码CRC

CRC只能检错,不能纠错,其原理是找出一个能整除多项式的编码,因此首先要将原始报文除以多项式,将所得的余数作为校验位加在原始报文之后,作为发送数据发给接收方,其编码格式为:

1至 r位为校验位, r+1至n 位为 数据位

由次可知,CRC由两部分组成,左边为信息码(原始数据),右边为校验码。校验码是由信息码产生的,校验码位数越长,校验码位数越长,校验能力越强。求CRC编码是,采用的是模2运算(按位运算,不发生借位和进位)

例如:原始报文为” 1100 1010 101“, 其生产多项式为: X^4+ X^3+X+1, 对齐进行CRC编码后的结果为?

分析解答:首先根据多项式得出除数 11011,在原始多项式后面加上多项式最高指数个数个0, 即 4个0,(x^4),和除数进行模2除法,一直商1,最终得出4位余数0011

最终编码: 1100 1010 101 0011

接收方将收到的数据与多项式模2运算,若余数为0,说明校验码正确,数据传输正确。

海明校验码

海明码:本质也是利用奇偶校验性来检错和纠错的检验方法,构成的方法是在数据之间的确定位置插入K个校验位,通过过扩展码距实现检错和纠错。

设数据位是 n位, 校验位是 k ,则 n和k 必须满足如下关系: 2^K>= n+k

例如: 求信息 1011 的海明码

分析步骤:

校验位的位数和具体的数据位的位数之间的关系,所有位都编号,从最低位编号,从1开始递增,校验位处于2的n(n=0,1,2,3…)次方中,即处于第1,2,4,8,16…位上,其余位才能填充真正的数据位,若信息数据为 1011,则可知,第1,2,4 位为校验位,第3,5,6,7 位为数据位

2^k>= n+k +1

n=4 为数据位

k=1 不成立

k=2 不成立

k=3 成立 8= 4+ 3+1

每一位校验码的计算公式:

需要确定每一位校验码到底校验码哪些信息位,将信息位(即编号)拆分称二进制表示,如7=4+2+1 ,由第4位校验位r2和第2位校验位r1和第1位校验位r0 共同校验。同理第6位数据6=4+2 ,第5位数据位 5=4+1,第3位数据位3=2+1 ,前面知道,这些2的n次方都是校验位,可知,第4位校验位校验第7,6,5,三位数据,,第4位校验位r2等于这三位数据的值异或,第2位和第1位校验位计算原理相同。

r2 = I4 ^ I3 ^ I2 = 1 ^0 ^1= 0 — 信息位异或计算得来的

r1 =I4 ^ I3 ^ I1 = 1^ 0 ^1 =0

r0 = I4 ^ I2 ^ I1= 1^ 1 ^1 =1

1 0 1 1 0 1 0 1

检错和纠错原理

接收方收到海明码之后,会将每一位校验位与其校验的位数分别异或,即做如下三组运算:

r2^ I4 ^ I3 ^ I2

r1^ I4 ^ I3 ^ I1

r0^ I4 ^ I2 ^ I1

如果是偶检验,那么运算得到的结果应该全为0,如果是奇校验,应该全位1,才是正确的。纠错就是找出错误位,将该位逆转。

猜你喜欢

转载自blog.csdn.net/flysh05/article/details/124032715
今日推荐