由于噪声的影响,信号在物理信道中传输时都存在差错。一般所说的差错控制技术包括两类:一类是差错校验,是在数据通信过程中发现差错;另一类是差错控制,是在数字通信中利用编码方法对传输中产生的差错进行控制,以提高数字消息传输的准确性。
差错校验的方法分为如下几种:
循环冗余校验(CRC)
奇偶校验(也叫垂直冗余校验,VRC)
方块校验(也叫水平冗余校验,LRC)
差错控制的方法分为如下几种:
检错重发(Automatic Repeat Request:ARQ)):在发送时附加监督码元,接收端利用这些码元检测到有错时,通知发送端重发,它的局限是不能判断错码位置以及如何纠正,如奇偶校验。
检错删除:以码元为单位,检测到错误码元就删除,这种方式适用于少数特定系统,那些即使删除部分码元也不影响系统的情况。
前向纠错(Forward Error Correction:FEC),能纠正错误码元,优点是不需重发,没有因反复重发引起的时延。
混合纠错(Hybrid Error Correction:HEC),发送方发送具有一定纠错能力同时又具有检错能力的编码,接收方收到编码后,检测差错情况,如果错误在编码的纠错能力范围内,则自动纠错,否则经过反馈信道通知发送端重发。
反馈校验(Information Repeat Request:IRQ):无需差错码元或监督码元,接收端收到码元后回发给发送端,在发送端进行比较,如一致则认为无错,否则重发。这种技术需要双向通道且传输时间翻倍,且有可能发送过来时无错回发时出错也被判错,降低了传输效率。
下面针对常用的差错校验和差错控制技术进行介绍;
1、CRC校验(Cyclic Redundancy Check)
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)得到的余数就是校验码。
任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。
下表是一些常见的标准CRC生成多项式,每一种都有不同的生成多项式,有不同的应用场景。
名称 | 生成多项式 | 简记式 | 标准引用 | 说明 | 用途 |
CRC-1 | x+1 | 0x1 | 硬件奇偶校验 | ||
CRC-4 | x4+x+1 | 0x3 | ITU G.704 | ||
CRC5-EPC | x5+x3+1 | 0x09 | RFID Gen2 | ||
CRC5-USB | x5+x2+1 | 0x05 | USB令牌包 | ||
CRC5-CCITT | x5+x4+x2+1 | 0x15 | ITU G.704 | ||
CRC6-CDMA2000-A | x6+x5+x2+x+1 | 0x27 | Mobile Networks | ||
CRC6-CDMA2000-B | x6+x2+x+1 | 0x07 | |||
CRC6-CCITT | x6+x+1 | 0x03 | ITU G.704 | ||
CRC6-DARC | x6+x4+x3+1 | 0x19 | Data Radio Channel | ||
CRC-7 | x7+x3+1 | 0x09 | 通信系统G.707, G.832, MMC, SD | ||
CRC8-Dallas/Maxim | x8+x5+x4+1 | 0x31 | Dallas/Maxim | 1-Wire总线 | |
CRC8-ATM | x8+x2+x1+1 | 0x07 | ATM HEC | ||
CRC8-CCITT | x8+x7+x3+x2+1 | 1-Wire总线 | |||
CRC-8 | x8+x7+x6+x4+x2+1 | ||||
CRC-10 | x10+x9+x5+x4+x+1 | ||||
CRC-12 | x12+x11+x3+x2+x+1 | 0x80F | 常用来传送6bit字符串 | 通信系统 | |
CRC16-IBM | x16+x15+x2+1 | 0x8005 | IBM SDLC | 美国标准 | BISYNCH通信标准 |
CRC16-CCITT | x16+x12+x5+1 | 0x1021 | ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS | 欧洲标准 | X25, V.41, Bluetooth, PPP, IrDA |
CRC16-BBS | x16+x15+x10+x3 | XMODEM协议 | |||
CRC16-Fletcher | not a CRC | ||||
CRC17-CAN | 0x1685B | CAN | |||
CRC21-CAN | 0x102899 | CAN | |||
CRC-24 | 0x5D6DCB | FlexRay | |||
CRC24-Radix-64 | 0x864CFB | OpenPGP, RTCM104v3 | |||
CRC-30 | 0x2030B9C7 | CDMA | |||
CRC32-Adler | not a CRC | ||||
CRC32-MPEG2 | |||||
CRC32-IEEE 802.3 | x32+x26+x23+...+x2+x+1 | 0x04C11DB7 | ZIP,RAR,IEEE 802LAN/FDDI,IEEE 1394,PPP-FCS | ||
CRC-32C | x32+x28+x27+...+x8+x6+1 | 0x1EDC6F41 | iSCSI, SCTP, G.hn payload, SSE4.2, Btrfs, ext4, Ceph | ||
CRC-32K | 0x741B8CD7 | ||||
CRC-32K2 | 0x32583499 | ||||
CRC-32Q | 0x814141AB | ||||
CRC40-GSM | 0x0004820009 | GSM control channel | |||
CRC64-ISO | x64+x4+x3+x+1 | 0x000…01B | ISO 3309 | ||
CRC-64-ECMA-182 | x64+x62+x57…+x4+x+1 | 0x42F0E1E BA9EA3693 | ECMA-182 | ||
CRC-128 | IEEE-ITU标准。被MD5&SHA-1取代 | ||||
CRC-160 |
注:生成多项式的最高位固定为1,故在简记式中忽略最高位1了,如0x1021实际是0x11021。
CRC的详细计算方法包括直接计算法、查表法、半查表法,本篇不做相关介绍了。
2、奇偶校验
奇偶校验是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。
如果是采用奇校验,在传送每一个字节的时候另外附加一位作为校验位,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则这个校验位就是“0”,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果是奇数,表示传送正确,否则表示传送错误。
如果是采用偶校验,当实际数据中“1”的个数为偶数的时候,这个校验位就是“0”,否则这个校验位就是“1”,这样就可以保证传送数据满足偶校验的要求。在接收方收到数据时,将按照偶校验的要求检测数据中“1”的个数,如果是偶数个“1”,表示传送正确,否则表示传送错误。
eg:要发送的字节是0x1A,二进制表示为0001 1010。
采用奇校验,则在数据后补上个0,数据变为0001 1010 0,数据中1的个数为奇数个(3个);
采用偶校验,则在数据后补上个1,数据变为0001 1010 1,数据中1的个数为偶数个(4个)。
3、ARQ
检错重发方式,又称为自动重发请求(ARQ)。发送端发送能够发现错误的码,由接收端判断接收中有无错误发生。如果发现错误,则通过反向信道把这一判决结果反馈给发送端,然后发送端再把错误的信息重发一次。双向信道工作。

4、FEC
发送端发送能够纠正错误的码,接收端收到后自动纠正传输中的错误,特点是单向传输。单向信道工作。

5、HEC
发送端发送既能自动纠错,又能检错。接收端收到码流后,检查差错情况,如果错误在纠错能力范围以内,则自动纠错,如果超过了纠错能力,但能检测出来,则经过反馈信道请求发送端重发。双向信道工作。HEC实际上是FEC和ARQ方式的结合。
