各类校验码校验算法分析.docx

上传人:b****3 文档编号:27526144 上传时间:2023-07-02 格式:DOCX 页数:18 大小:27.04KB
下载 相关 举报
各类校验码校验算法分析.docx_第1页
第1页 / 共18页
各类校验码校验算法分析.docx_第2页
第2页 / 共18页
各类校验码校验算法分析.docx_第3页
第3页 / 共18页
各类校验码校验算法分析.docx_第4页
第4页 / 共18页
各类校验码校验算法分析.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

各类校验码校验算法分析.docx

《各类校验码校验算法分析.docx》由会员分享,可在线阅读,更多相关《各类校验码校验算法分析.docx(18页珍藏版)》请在冰豆网上搜索。

各类校验码校验算法分析.docx

各类校验码校验算法分析

各类校验码校验算法分析

二进制数据通过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发觉及纠正误码的问题。

所有解决此类问题的方式确实是在原始数据(数码位)基础上增加几位校验(冗余)位。

一、码距

一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离确实是该编码系统的码距。

如图1所示的一个编码系统,用三个bit来表示八个不同信息中。

在那个系统中,两个码字之间不同的bit数从1到3不等,但最小值为1,故那个系统的码距为1。

若是任何码字中一名或多位被倒置了,结果那个码字就不能与其它有效信息区分开。

例如,若是传送信息001,而被误收为011,因011仍是表中的合法码字,接收机仍将以为011是正确的信息。

但是,若是用四个二进数字来编8个码字,那么在码字间的最小距离能够增加到2,如图2的表中所示。

信息序号

二进码字

a2

a1

a0

0

0

0

0

1

0

0

1

2

0

1

0

3

0

1

1

4

1

0

0

5

1

0

1

6

1

1

0

7

1

1

1

图1

信息序号

二进码字

a3

a2

a1

a0

0

0

0

0

0

1

1

0

0

1

2

1

0

1

0

3

0

0

1

1

4

1

1

0

0

5

0

1

0

1

6

0

1

1

0

7

1

1

1

1

图2

注意,图8-2的8个码字相互间最少有两bit的差异。

因此,如果任何信息的一个数位被颠倒,就成为一个不用的码字,接收机能检查出来。

例如信息是1001,误收为1011,接收机知道发生了一个差错,因为1011不是一个码字(表中没有)。

然而,差错不能被纠正。

假定只有一个数位是错的,正确码字可以是1001,1111,0011或1010。

接收者不能确定原来到底是这4个码字中的那一个。

也可看到,在这个系统中,偶数个(2或4)差错也无法发现。

为了使一个系统能检查和纠正一个差错,码间最小距离必须至少是“3”。

最小距离为3时,或能纠正一个错,或能检二个错,但不能同时纠一个错和检二个错。

编码信息纠错和检错能力的进一步提高需要进一步增加码字间的最小距离。

图8-3的表概括了最小距离为1至7的码的纠错和检错能力。

码距

码能力

检错 纠错

1

2

3

4

5

6

7

0   0

1   0

2或1

2加1

2加2

3加2

3加3

图3

码距越大,纠错能力越强,但数据冗余也越大,即编码效率低了。

因此,选择码距要取决于特定系统的参数。

数字系统的设计者必需考虑信息发生过失的概率和该系统能允许的最小过失率等因素。

要有专门的研究来解决这些问题。

二、奇偶校验

奇偶校验码是一种增加二进制传输系统最小距离的简单和普遍采纳的方式。

例如,单个的奇偶校验将使码的最小距离由一增加到二。

一个二进制码字,若是它的码元有奇数个1,就称为具有奇性。

例如,码字“”有五个1,因此,那个码字具有奇性。

一样,偶性码字具有偶数个1。

注意奇性检测等效于所有码元的模二加,并能够由所有码元的异或运算来确信。

关于一个n位字,奇性由下式给出:

奇性=a0⊕a1⊕a2⊕…⊕an 

奇偶校验可描述为:

给每一个码字加一个校验位,用它来组成奇性或偶性校验。

例如,在图8-2中,确实是如此做的。

能够看出,附加码元d2,是简单地用来使每一个字成为偶性的。

因此,假设有一个码元是错的,就能够够分辨得出,因为奇偶校验将成为奇性。

奇偶校验编码通过增加一名校验位来使编码中1个个数为奇数(奇校验)或为偶数(偶校验),从而使码距变成2。

因为其利用的是编码中1的个数的奇偶性作为依据,因此不能发觉偶数位错误。

再以数字0的七位ASCII码(0110000)为例,若是传送后右边第一名犯错,0变成1。

接收端还以为是一个合法的代码0110001(数字1的ASCII码)。

假设在最左侧加一名奇校验位,编码变成,若是传送后右边第一名犯错,那么变成,1的个数变成偶数,就不是合法的奇校验码了。

但假设有两位(假设是第一、2位)犯错就变成,1的个数为5,仍是奇数。

接收端还以为是一个合法的代码(数字3的ASCII码)。

因此奇偶校验不能发觉。

奇偶校验位可由硬件电路(异或门)或软件产生:

偶校验位an =a0⊕a1⊕a2⊕…⊕an-1, 奇校验位an =NOT(a0⊕a1⊕a2⊕…⊕an-1)。

在一个典型系统里,在传输以前,由奇偶发生器把奇偶校验位加到每一个字中。

原有信息中的数字在接收机中被检测,若是没有显现正确的奇、偶性,那个信息标定为错误的,那个系统将把错误的字抛掉或请求重发。

在实际工作中还常常采纳纵横都加校验奇偶校验位的编码系统--分组奇偶校验码。

此刻考虑一个系统,它传输假设干个长度为m位的信息。

若是把这些信息都编成每组n个信息的分组,那么在这些不同的信息间,也如对单个信息一样,能够作奇偶校验。

图4中n个信息的一个分组排列成矩形式样,并以横向奇偶(HP)及纵向奇偶(VP)的形式编出奇偶校验位。

m位数字

横向奇偶位

n

a1

a2

am-1

am

HP1

b1

b2

bm-1

bm

HP2

c1

c2

cm-1

cm

HP3

n1

n2

nm-1

nm

HPn

VP1

VP2

VPm-1

VPm

HPn+1

纵向奇偶位

图4用综横奇偶校验的分组奇偶校验码

研究图4可知:

分组奇偶校验码不仅能检测许多形式的错误。

而且在给定的行或列中产生孤立的错误时,还可对该错误进行纠正。

在低级程序员试题中(初期也出此刻程序员试题中),常常有综横奇偶校验的题目。

一样解法应该是如此:

先找一行或一列已知数据完整的,确信出该行(或列)是奇校验仍是偶校验。

并假设行与列都采纳同一种校验(那个假设是不是正确,在全数做完后能够取得验证)。

然后找只有一个未知数的行或列,依照校验性质确信该未知数,如此不断做下去,就能够求出所有未知数。

【例】2001年低级程序员试题

由6个字符的7位ASCII编码排列,再加上水平垂直奇偶校验位组成以下矩阵(最后一列为水平奇偶校验位,最后一行为垂直奇偶校验位):

字符

7位ASCII码

HP

3

0

X1

X2

0

0

1

1

0

Y1

1

0

0

1

0

0

X3

1

+

X4

1

0

1

0

1

1

0

Y2

0

1

X5

X6

1

1

1

1

D

1

0

0

X7

1

0

X8

0

=

0

X9

1

1

1

X10

1

1

VP

0

0

1

1

1

X11

1

X12

那么X1X2X3X4处的比特别离为__(36)__;

  X5X6X7X8处的比特别离为____;

  X9X10XI1X12处的比特别离为__(38)__;Y1和Y2处的字符别离为__(39)__和__(40)__。

[解]

从ASCII码左起第5列可知垂直为偶校验。

那么:

从第1列可知X4=0;从第3行可知水平也是偶校验。

从第2行可知X3=1;从第7列可知X8=0;从第8列可知X12=1;

从第7行可知X11=1;从第6列可知X10=0;从第6行可知X9=1;从第2列可知X1=1;

从第1行可知X2=1;从第3列可知X5=1;从第4行可知X6=0;

从第4列(或第5行)可知X7=0;整理一下:

(36)X1X2X3X4=1110

(37)X5X6X7X8=1000

(38)X9X10X11X12=1011

(39)由字符Y1的ASCII码1001001=49H明白,Y1即是“I”(由“D”的ASCII码是1000100=44H推得)

(40)由字符Y2的ASCII码0110111=37H明白,Y2即是“7”(由“3”的ASCII码是0110011=33H推得)

假设你能记住“0”的ASCII码是0110000=30H;“A”的ASCII码是1000001=41H,那么解起来就更方便了。

三、海明校验

咱们在前面指出过要能纠正信息字中的单个错误,所需的最小距离为3。

实现这种纠正的方式之一是海明码。

海明码是一种多重(复式)奇偶检错系统。

它将信息用逻辑形式编码,以便能够检错和纠错。

用在海明码中的全数传输码字是由原先的信息和附加的奇偶校验位组成的。

每一个这种奇偶位被编在传输码字的特定位置上。

实现得适合时,那个系统关于错误的数位不管是原有信息位中的,仍是附加校验位中的都能把它分离出来。

推导并利用长度为m位的码字的海明码,所需步骤如下:

一、确信最小的校验位数k,将它们记成D一、D二、…、Dk,每一个校验位符合不同的奇偶测试规定。

二、原有信息和k个校验位一路编成长为m+k位的新码字。

选择k校验位(0或1)以知足必要的奇偶条件。

3、对所接收的信息作所需的k个奇偶检查。

4、若是所有的奇偶检查结果均为正确的,那么以为信息无错误。

若是发觉有一个或多个错了,那么错误的位由这些检查的结果来唯一地确信。

校验位数的位数

推求海明码时的一项大体考虑是确信所需最少的校验位数k。

考虑长度为m位的信息,假设附加了k个校验位,那么所发送的总长度为m+k。

在接收器中要进行k个奇偶检查,每一个检查结果或是真或是伪。

那个奇偶检查的结果能够表示成一个k位的二进字,它能够确信最多2k种不同状态。

这些状态中必有一个其所有奇偶测试试都是真的,它即是判定信息正确的条件。

于是剩下的(2k-1)种状态,能够用来判定误码的位置。

于是导出下一关系:

2k-1≥m+k

码字格式

从理论上讲,校验位可放在任何位置,但适应上校验位被安排在一、二、4、八、…的位置上。

图5列出了m=4,k=3时,信息位和校验位的散布情形。

码字位置

B1

B2

B3

B4

B5

B6

B7

校验位

x

x

 

x

 

 

 

信息位

 

 

x

 

x

x

x

复合码字

P1

P2

D1

P3

D2

D3

D4

图5海明码中校验位和信息位的定位

校验位的确信

k个校验位是通过对m+k位复合码字进行奇偶校验而确信的。

其中:

P1位负责校验海明码的第一、3、五、7、…(P1、D1、D2、D4、…)位,(包括P1自己)

P2负责校验海明码的第二、3、六、7、…(P2、D1、D3、D4、…)位,(包括P2自己)

P3负责校验海明码的第4、五、六、7、…(P3、D2、D3、D4、…)位,(包括P3自己)

对m=4,k=3,偶校验的例子,只要进行式次偶性测试。

这些测试(以A、B、C表示)在图6所示列位的位置上进行。

奇偶条件

码字位置

1

2

3

4

5

6

7

A

B

C

x

 

 

 

x

 

x

x

 

 

 

x

x

  

x

  

x

x

x

x

x

图6奇偶校验位置

因此可取得三个校验方程及确信校验位的三个公式:

A=B1⊕B3⊕B5⊕B7=0得P1=D1⊕D2⊕D4

B=B2⊕B3⊕B6⊕B7=0得P2=D1⊕D3⊕D4

C=B4⊕B5⊕B6⊕B7=0得P3=D2⊕D3⊕D4

假设四位信息码为1001,利用这三个公式可求得三个校验位P1、P2、P3值。

和海明码,如图7那么表示了信息码为1001时的海明码编码的全数情形。

而图8中那么列出了全数16种信息(D1D2D3D4=0000~1111)的海明码。

码字位置

B1

B2

B3

B4

B5

B6

B7

码位类型

P1

P2

D1

P3

D2

D3

D4

信息码

-

-

1

-

0

0

1

校验位

0

0

-

1

-

-

-

编码后的海明码

0

0

1

1

0

0

1

图7四位信息码的海明编码

P1

P2

D1

P3

D2

D3

D4

0

0

0

0

0

0

0

1

1

0

1

0

0

1

0

1

0

1

0

1

0

1

0

0

0

0

1

1

1

0

0

1

1

0

0

0

1

0

0

1

0

1

1

1

0

0

1

1

0

0

0

0

1

1

1

1

1

1

1

0

0

0

0

0

0

1

1

0

0

1

1

0

1

1

0

1

0

0

1

1

0

0

1

1

0

1

1

1

1

0

0

1

0

1

0

1

0

1

0

0

1

0

1

1

0

1

1

1

1

1

1

1

图8未编码信息的海明码

上面是发送方的处置

在接收方,也可依照这三个校验方程对接收到的信息进行一样的奇偶测试:

A=B1⊕B3⊕B5⊕B7=0;

B=B2⊕B3⊕B6⊕B7=0;

C=B4⊕B5⊕B5⊕B7=0。

假设三个校验方程都成立,即方程式右边都等于0,那么说明没有错。

假设不成当即方程式右边不等于0,说明有错。

从三个方程式右边的值,能够判定那一名犯错。

例如,若是第3位数字反了,那么C=0(此方程没有B3),A=B=1(这两个方程有B3)。

可组成二进数CBA,以A为最低有效位,那么错误位置就可简单地用二进数CBA=011指出。

一样,假设三个方程式右边的值为001,说明第1位犯错。

假设三个方程式右边的值为100,说明第4位犯错。

海明码的码距应该是3,因此能纠正1位犯错。

而奇偶校验码的码距才是2,只能发觉1位犯错,但不能纠正(不明白那一名错)。

无校验的码距是1,它出任何一名犯错后仍是合法代码,因此也就无法发觉犯错。

这是关于海明码的经典说法,即码距为3,能够发觉2位,或纠正1位错。

应知足2k-1≥m+k。

但在清华的王爱英主编的《运算机组成与结构》(该书已成为国内的权威)中还提出了一种码距为4的海明码,能够发觉2位,而且纠正1位错。

应知足2(k-1)≥m+k。

由于王爱英书上对这两种概念没有很认真说明(专门对码距为3的海明码),过渡很突然。

有些书简单剽窃时没有认真消化,因此显现一些概念错。

关于一样码距为3的海明码,应该是“能够发觉2位,或纠正1位错”,而不是“能够发觉2位,而且纠正1位错”。

在试题中显现过类似的错误。

四、循环冗余校验码

在串行传送(磁盘、通信)中,普遍采纳循环冗余校验码(CRC)。

CRC也是给信息码加上几位校验码,以增加整个编码系统的码距和查错纠错能力。

CRC的理论很复杂,一样书上只介绍已有生成多项式后计算校验码的方式。

检错能力与生成多项式有关,只能依照书上的结论死记。

循环冗余校验码(CRC)的大体原理是:

在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。

关于一个给定的(N,K)码,能够证明存在一个最高次幂为N-K=R的多项式G(x)。

依照G(x)能够生成K位信息的校验码,而G(x)叫做那个CRC码的生成多项式。

校验码的具体生成进程为:

假设发送信息用信息多项式C(X)表示,将C(x)左移R位,那么可表示成C(x)*2R,如此C(x)的右边就会空出R位,这确实是校验码的位置。

通过C(x)*2R除以生成多项式G(x)取得的余数确实是校验码。

几个大体概念

一、多项式与二进制数码

多项式和二进制数有直接对应关系:

x的最高幂次对应二进制数的最高位,以以下位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。

能够看出:

x的最高幂次为R,转换成对应的二进制数有R+1位。

多项式包括生成多项式G(x)和信息多项式C(x)。

如生成多项式为G(x)=x4+x3+x+1,可转换为二进制数码11011。

而发送信息位1111,可转换为数据多项式为C(x)=x3+x2+x+1。

二、生成多项式

是同意方和发送方的一个约定,也确实是一个二进制数,在整个传输进程中,那个数始终维持不变。

在发送方,利用生成多项式对信息多项式做模2除生成校验码。

在同意方利用生成多项式对收到的编码多项式做模2除检测和确信错误位置。

应知足以下条件:

a、生成多项式的最高位和最低位必需为1。

b、当被传送信息(CRC码)任何一名发生错误时,被生成多项式做模2除后应该使余数不为0。

c、不同位发生错误时,应该使余数不同。

d、对余数继续做模2除,应使余数循环。

将这些要求反映为数学关系是比较复杂的。

但能够从有关资料查到经常使用的对应于不同码制的生成多项式如图9所示:

N

K

码距d

G(x)多项式

G(x)

7

4

3

x3+x+1

1011

7

4

3

x3+x2+1

1101

7

3

4

x4+x3+x2+1

11101

7

3

4

x4+x2+x+1

10111

15

11

3

x4+x+1

10011

15

7

5

x8+x7+x6+x4+1

1

31

26

3

x5+x2+1

100101

31

21

5

x10+x9+x8+x6+x5+x3+1

63

57

3

x6+x+1

1000011

63

51

5

x12+x10+x5+x4+x2+1

1041

1024

 

x16+x15+x2+1

0101

图9经常使用的生成多项式

3、模2除(按位除)

模2除做法与算术除法类似,但每一名除(减)的结果不阻碍其它位,即不向上一名借位。

因此事实上确实是异或。

然后再移位移位做下一名的模2减。

步骤如下:

a、用除数对被除数最高几位做模2减,没有借位。

b、除数右移一名,假设余数最高位为1,商为1,并对余数做模2减。

假设余数最高位为0,商为0,除数继续右移一名。

c、一直做到余数的位数小于除数时,该余数确实是最终余数。

【例】1111000除以1101:

1011———商

————

被除数

1101———— 除数

————

010000

1101

————

01010

1101

————

111————余数

CRC码的生成步骤

一、将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数。

二、将信息码左移R位,相当与对应的信息多项式C(x)*2R

3、用生成多项式(二进制数)对信息码做模2除,取得R位的余数。

4、将余数拼到信息码左移后空出的位置,取得完整的CRC码。

【例】假设利用的生成多项式是G(x)=x3+x+1。

4位的原始报文为1010,求编码后的报文。

解:

一、将生成多项式G(x)=x3+x+1转换成对应的二进制除数1011。

二、此题生成多项式有4位(R+1),要把原始报文C(x)左移3(R)位变成1010000

3、用生成多项式对应的二进制数对左移4位后的原始报文进行模2除:

------------------------

1010000

-除数

------------

1000

1011

------------

011-------余数(校验位)

五、编码后的报文(CRC码):

1010000

+      011

------------------

1010011

CRC的和纠错

在接收端收到了CRC码后用生成多项式为G(x)去做模2除,假设取得余数为0,那么码字无误。

假设若是有一名犯错,那么余数不为0,而且不同位犯错,其余数也不同。

能够证明,余数与犯错位的对应关系只与码制及生成多项式有关,而与待测碼字(信息位)无关。

图10给出了G(x)=1011,C(x)=1010的犯错模式,改变C(x)(码字),只会改变表中码字内容,不改变余数与犯错位的对应关系。

 

收到的CRC码字

余数

出错位

码位

A7

A6

A5

A4

A3

A2

A1

正确

1

0

1

0

0

1

1

000

1

0

1

0

0

1

0

1

0

1

0

0

0

1

1

0

1

0

1

1

1

1

0

1

1

0

1

1

1

0

0

0

0

1

1

1

1

1

0

0

1

1

0

0

1

0

0

1

1

001

010

100

011

110

111

101

1

2

3

4

5

6

7

图10(7,4)CRC码的犯错模式(G(x)=1011)

若是循环码有一名犯错,用G(x)作模2除将取得一个不为0的余数。

若是对余数补0继续除下去,咱们将发觉一个有趣的结果;各次余数将按图10顺序循环。

例如第一名犯错,余数将为001,补0后再除(补0后假设最高位为1,那么用除数做模2减取余;假设最高位为0,那么其最低3位确实是余数),取得第二次余数为010。

以后继续补0作模2除,依次取得余数为100,0ll…,反复循环,这确实是“循环码”名称的由来。

这是一个有价值的特点。

若是咱们在求出余数不为0后,一边对余数补0继续做模2除,同时让被检测的校验码字循环左移。

图10说明,当显现余数(101)时,犯错位也移到A7位置。

可通过异或门将它纠正后在下一次移位时送回A1。

如此咱们就没必要像海明校验那样用译码电路对每一名提供纠正条件。

当位数增多时,循环码校验能有效地降低硬件代价,这是它得以普遍应用的要紧缘故。

【例】对图10的CRC码(G(x)=1011,C(x)=1010),假设接收端收到的码字为1010111,用G(x)=1011做模2除取得一个不为0的余数100,说明传输有错。

将此余数继续补0用G(x)=1011作模2除,同时让码字循环左移1010111。

做了4次后,取得余数为101,这时码字也循环左移4位,变成1111010。

说明犯错位已移到最高位A7,将最高位1取反后变成0111010。

再将它循环左移3位,补足7次,犯错位回到A3位,就成为一个正确的码字1010011。

通信与网络中经常使用的CRC

在数据通信与网络中,通常k相当大,由一千乃至数千数据位组成一帧,而后采纳CRC码产生r位的校验位。

它只能检测犯错误,而不能纠正错误。

一样取r=16,标准的16位生成多项式有CRC-16=x16+x15+x2+1和CRC-CCITT=x16+x15+x2+1。

一样情形下,r位生成多项式产生的CRC码可检测出所有的双错、奇数位错和突发长度小于等于r的突发错和(1-2-(r-1))的突发长度为r+1的突发错和(1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1