2.7 差错控制技术
2.7.1 差错产生的原因与差错类型
1.差错产生的原因
我们通常将发送的数据与通过通信信道后接收到的数据不一致的现象称为传输差错,简称为差错。
差错的产生是无法避免的。信号在物理信道中传输时,线路本身电器特性造成的随机噪声、信号幅度的衰减、频率和相位的畸变、电器信号在线路上产生反射造成的回音效应、相邻线路间的串扰以及各种外界因素(如大气中的闪电、开关的跳火、外界强电流磁场的变化、电源的波动等)都会造成信号的失真。在数据通信中,将会使接收端收到的二进制数位和发送端实际发送的二进制数位不一致,从而造成由“0”变成“1”或由“1”变成“0”的差错,如图2-40所示。
差错控制的目的和任务就是面对现实承认传输线路中的出错情况,分析差错产生的原因和差错类型,采取有效的措施,即差错控制方法来发现和纠正差错,以提高信息的传输质量。
图2-40 差错产生的过程
2.差错的类型
传输中的差错都是由噪声引起的。噪声有两大类:一类是信道固有的、持续存在的随机热噪声;另一类是由外界特定的短暂原因所造成的冲击噪声。
热噪声由传输介质导体的电子热运动产生,是一种随机噪声,所引起的传输差错为随机差错,这种差错的特点是所引起的某位码元(二进制数字中每一位的通称)的差错是孤立的,与前后码元没有关系。热噪声导致的随机错误通常较少。
冲击噪声是由外界电磁干扰引起的,与热噪声相比,冲击噪声幅度较大,是引起传输差错的主要原因。冲击噪声所引起的传输差错为突发差错,这种差错的特点是前面的码元出现了错误,往往会使后面的码元也出现错误,即错误之间有相关性。
2.7.2 误码率的定义
误码率是指二进制码元在数据传输系统中被传错的概率,在数值上近似等于Pe=Ne/N。其中N为传输的二进制码元总数,Ne为被传错的码元数。
在理解误码率定义时应注意以下3个问题。
(1)误码率是衡量数据传输系统正常工作状态下传输可靠性的参数。
(2)对于一个实际的数据传输系统,不能笼统地说误码率越低越好,要根据实际传输要求提出误码率指标;在数据传输速率确定后,误码率越低,传输系统设备越复杂,造价也越高。
(3)对于实际数据传输系统,如果传输的不是二进制码元,则要换算成二进制码元来计算。
在实际的数据传输系统中,人们需要一种通信信道进行大量、重复测试,才能求出该信道的平均误码率,或者给出某些特殊情况下的平均误码率。根据测试,目前电话线路在300bit/s~2400bit/s传输速率时,平均误码率在10-4~10-6。而计算机通信的平均误码率要求低于10-9。因此,普通通信信道如不采取差错控制技术是不能满足计算机通信要求的。
2.7.3 差错的控制
提高数据传输质量的方法有两种。第一种方法是:改善通信线路的性能,使错码出现的概率降低到满足系统要求的程度。但这种方法受经济上和技术上的限制,达不到理想的效果。第二种方法是:虽然传输中不可避免地会出现某些错码,但可以将其检测出来,并用某种方法纠正检出的错码,以达到提高实际传输质量的目的。第二种方法最为常用的是采用抗干扰编码和纠错编码。
目前广泛采用的有奇偶校验码、方块码和循环冗余码等。
1.奇偶校验
奇偶校验称为字符校验、垂直奇偶校验(Vertical Redundancy Check,VRC)。奇偶校验是以字符为单位的校验方法,是最简单的一种校验方法。在每个字符编码的后面另外增加一个二进制位,该位称为校验位。其主要目的是使整个编码中1的个数成为奇数或偶数。如果使编码中1的个数成为奇数则称为奇校验;反之,则称为偶校验。
例如,字符R的ASCII编码为1010010,后面增加一位进行奇校验10100100(使1的个数为奇数),传送时其中一位出错,如传成了10110100,奇校验就能检查出错误。若传送有两位出错时,如10111100,奇校验就不能检查出错误了。实际传输过程中,偶然一位出错的机会最多,故这种简单的校验方法还是很有用处的。但这种方法只能检测错误,不能纠正错误,不能检测出错在哪一位,故一般只能用于通信要求较低的环境。
2.方块校验
方块校验又称为报文校验、水平垂直奇偶校验(Level Redundancy Check,LRC)。这种方法是在奇偶校验方法的基础上,在一批字符传送之后,另外增加一个检验字符,该检验字符的编码方法是使每一位纵向代码中1的个数也成为奇数(或偶数)。例如:
采用这种方法之后,不仅可以检验出1位、2位或3位的错误,还可以自动纠正1位出错,使误码率降至原误码率的百分之一到万分之一,纠错效果十分显著,因此方块校验适用于中、低速传输系统和反馈重传系统中。
3.循环冗余码校验
循环冗余码(Cyclic Redundancy Code,CRC)是使用最广泛并且检错能力很强的一种检验码。CRC的工作方法是在发送端产生一个循环冗余码,附加在信息位后面一起发送到接收端,接收端收到的信息按发送端形成循环冗余码同样的算法进行校验,若有错,需重发。该方法不产生奇偶校验码,而是把整个数据块当成一串连续的二进制数据。从代数结构来说,把各位看成是一个多项式的系数,则该数据块就和一个n次的多项式相对应。
例如,信息码110001有6位(从第0位到第5位),表示成多项式M(X)=X5+X4+X0,6个多项式的系数分别是1、1、0、0、0、1。
(1)生成多项式。在CRC校验时,发送和接收应使用相同的除数多项式G(X),称为生成多项式。CRC生成多项式由协议规定,目前已有多种生成多项式列入国际标准中,例如:
CRC—12 G(X)=X12+X11+X3+X2+X+1
CRC—16 G(X)=X16+X15+X2+1
CRC—CCITT G(X)=X16+X12+X5+1
CRC—32 G(X)=X32+X26+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1
生成的多项式G(X)的结构及验错效果都是经过严格的数学分析与试验之后才确定的。要计算信息码多项式的校验码,生成多项式必须比该多项式短。
(2)CRC校验的基本思想和运算规则。循环冗余校验的基本思想是:把要传送的信息码看成是一个多项式M(X)的系数,在发送前,将多项式用生成多项式G(X)来除,将相除结果的余数作为校验码跟在原信息码之后一同发送出去。在接收端,把接收到的含校验码的信息码再用同一个生成多项式来除,如果在传送过程中无差错,则应该除尽,即余数应为0;若除不尽,则说明传输过程中有差错,应要求对方重新发送一次。
CRC校验中求余数的除法运算规则是:多项式以2为模运算,加法不进位,减法不借位。加法和减法两者都与异或运算相同。长除法同二进制运算是一样的,只是做减法时按模2进行,如果减出的值最高位为0,则商为0;如果减出的值最高位为1,则商为1。
(3)CRC检验和信息编码的求取方法。设r为生成多项式G(X)的阶。
①在数据多项式M(X)的后面附加r个“0”,得到一个新的多项式M'(X)。
②用模2除法求得M'(X)/G(X)的余数。
③将该余数直接附加在原数据多项式M(X)的系数序列的后面,结果即为最后要发送的检验和信息编码多项式T(X)。
下面是一个求数据编码多项式T(X)的例子。
假设准备发送的数据信息码是1101,即M(X)=X3+X2+1,生成多项式G(X)=X4+X+1,计算信息编码多项式T(X)。
这里 M(X)=1101
G(X)=10011
r=4
故信息码附加4个0后形成新的多项式。
M′(X)=11010000
用模2除法求得M′(X)/G(X)的余数的过程为
将余数0100直接附加在M(X)的后面求得要传输的信息编码多项式T(X)=11010100。
采用CRC校验后,其误码率比方块码可再降低1~3个数量级,故在数据通信系统中应用较多。CRC校验用软件实现比较麻烦,而且速度也很慢,但用硬件的移位寄存器和异或门实现CRC编码、译码和检错则简单且快速。