Communication 版 (精华区)

发信人: skale (空水澄鲜), 信区: Communication
标  题: [Ch.5]错误检测与修正 
发信站: BBS 哈工大紫丁香站 (Tue Oct 11 18:34:27 2005)

发信人: Able (泡泡龙·诚实进攻), 信区: EE 
标 题: [Ch.5]错误检测与修正 
发信站: 北大未名站 (2003年03月24日12:49:06 星期一), 转信 

错误检测与修正(Error Check & Correct) 

  在数字数据通信中,由发送器发送的数据信号祯(Frame)在经由网络传到接收器 
后,由于多种原因可能导致错误位(bit errors)的出现,因此必须由接收器采取一定 
的措施探测出所有的错误位,并进而采取一定的措施予以修正。 

  一、错误检测的基本原理(Principle of Error Check) 

  发送器向所发送的数据信号祯添加错误检验码(Check Bits),并取该错误检测码 
作为该被传输数据信号的函数;接收器根据该函数的定义进行同样的计算,然后将两 
个结果进行比较:如果结果相同,则认为无错误位;否则认为该数据祯存在有错误位 
。 
  一般说来,错误检测可能出现三种结果: 
在所传输的数据祯中未探测到,也不存在错误位; 
所传输的数据祯中有一个或多个被探测到的错误位,但不存在未探测到的错误位; 

被传输的数据祯中有一个或多个没有被探测到的错误位。 
  显然我们希望尽可能好地选择该检测函数,使检测结果可靠,即:所有的错误最 
好都能被检测出来;如检测出现无错结果,则应不再存在任何未被检测出来的错误。 

  实际采用的错误检测方法主要有两类:奇偶校验(Parity)和CRC循环冗余校验(C 
yclic Redundancy Check)。 

  二、奇偶校验(Parity) 

  1.单向奇偶校验 
  单向奇偶校验(Row Parity)由于一次只采用单个校验位,因此又称为单个位奇偶 
校验(Single Bit Parity)。发送器在数据祯每个字符的信号位后添一个奇偶校验位 
,接收器对该奇偶校验位进行检查。典型的例子是面向ASCII码的数据信号祯的传输 
,由于ASCII码是七位码,因此用第八个位码作为奇偶校验位。 
  单向奇偶校验又分为奇校验(Odd Parity)和偶校验(Even Parity),发送器通过 
校验位对所传输信号值的校验方法如下:奇校验保证所传输每个字符的8个位中1的总 
数为奇数;偶校验则保证每个字符的8个位中1的总数为偶数。 
  显然,如果被传输字符的7个信号位中同时有奇数个(例如1、3、5、7)位出现错 
误,均可以被检测出来;但如果同时有偶数个(例如2、4、6)位出现错误,单向奇偶 
校验是检查不出来的。 
  一般在同步传输方式中常采用奇校验,而在异步传输方式中常采用偶校验。 

  2.双向奇偶校验 
  为了提高奇偶校验的检错能力,可采用双向奇偶校验(Row and Column Parity) 
,也又称为双向冗余校验(Vertical and Longitudinal Redundancy Checks)。 
  图1.4给出了由5个ASCII码字符数据信号及其双向偶校验位组成的典型传输矩阵 
(其中:前五行各字符的偶校验位组成的校验位列(最右边一列),最下面一行由各列 
信号位的偶校验位组成),该矩阵右下角的校验位则可按行或按列取校验位。 
  传输方向              校验位列 
     ←       1 0 1 1 0 1 1 1 
     ←      1 1 0 1 0 1 1 1 
     ←      0 0 1 1 1 0 1 0 
     ←      1 0 0 0 1 0 1 1 
     ←       0 1 0 1 1 1 1 1 
     ←      1 0 0 0 1 1 1 0 ← 校验位行 
图1.4 典型双向偶校验传输矩阵 
  显然,如果被传输的字符信号矩阵中同时在偶数个行中的偶数个相同的列中出现 
错误,双向奇偶校验也是检查不出来的。 

  三、CRC循环冗余校验(Cyclic Redundancy Check) 

  1.CRC循环冗余校验的基本原理 
  发送器和接收器约定选择同一个由n+1个位组成的二进制位列P作为校验列,发送 
器在数据祯的K个位信号后添加n个位(nce),以保证新组成的全部信号列值可以被预定的校
验二进制位列P的值对二取模整除 
;接收器检验所接收到数据信号列值(含有数据信号祯和FCS祯检验列)是否能被校验 
列P对二取模整除,如果不能,则存在传输错误位。P被称为CRC循环冗余校验列,正 
确选择P可以提高CRC冗余校验的能力。 
  (注:对二取模的四则运算指参与运算的两个二进制数各位之间凡涉及加减运算 
时均进行XOR异或运算,即:1 XOR 1=0,0 XOR 0=0,1 XOR 0=1) 
  可以证明,只要数据祯信号列M和校验列P是确定的,则可以唯一确定FCS祯检验 
列(也称为CRC冗余检验值)的各个位。 
  FCS帧检验列可由下列方法求得:在M后添加n个零后对二取模整除以P所得的余数 
。 
  例如:如要传输的M=7位列为1011101,选定的P校验二进制位列为10101(共有n+ 
1=5位),对应的FCS帧校验列即为用1011101 0000(共有M+n=7+4=11位)对二取模整除 
以10101后的余数0111(共有n=4位)。因此,发送方应发送的全部数据列为101110101 
11。接收方将收到的11位数据对二取模整除以P校验二进制位列10101,如余数非0, 
则认为有传输错误位。 

  2.CRC循环冗余校验标准多项式P(X) 
  为了表示方便,实用时发送器和接收器共同约定选择的校验二进制位列P常被表 
示为具有二进制系数(1或0)的CRC标准校验多项式P(X)。 
  (1)CRC循环冗余校验常用的标准多项式P(X) 
  常用的CRC循环冗余校验标准多项式如下: 
  CRC(16位) = X16+X15+X2+1 
  CRC(CCITT) = X16+X12 +X5+1 
  CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1 
  以CRC(16位)多项式为例,其对应校验二进制位列为1 1000 0000 0000 0101。 
  注意:这儿列出的标准校验多项式P(X)都含有(X+1)的多项式因子;各多项式的 
系数均为二进制数,所涉及的四则运算仍遵循对二取模的运算规则。 
  (2)CRC循环冗余校验标准多项式P(X)的检错能力 
  CRC循环冗余校验具有比奇偶校验强得多的检错能力。可以证明:它可以检测出 
所有的单个位错、几乎所有的双个位错、低于P(X)对应二进制校验列位数的所有连续 
位错、大于或等于P(X)对应二进制校验列位数的绝大多数连续位错。 
  但是,当传输中发生的错误多项式E(X)能被校验多项式P(X)对二取模整除时,它 
就不可能被P(X)探测出来,例如当E(X)=P(X)时。 

  四、错误修正(Error Correction) 

 对数据信号祯传输过程中的位错进行修正的方法主要有两种: 
由发送器提供错误修正码,然后由接收器自己修正错误; 
在接收器发现接收到的错误祯中有位错误时,通知发送器重新发送数据信号祯。 
  前一种方法中的错误修正码需要发送器由被传送数据信号祯计算得到,然后添加 
到数据祯的后面,其长度几乎等于数据位数,导致效率降低50%,实际采用不多;一 
般采用后一种较为有效的重发送方法。 




※ 来源:·哈工大紫丁香 http://bbs.hit.edu.cn·[FROM: 202.118.230.57]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.167毫秒