目录
3.1检错编码
3.1.1奇偶校验码
3.1.2循环冗余码(CRC)
3.2纠错编码
3.2.1海明码
传输差错可分为两种:
- 位错:帧中某些位出现了差错,也称比特差错、误码。
- 帧错:帧的丢失、重复或失序等错误。
通常利用编码技术进行差错控制,主要有两类:
- 自动重传请求(Automatic Retransmission reQuest, ARQ)
- 前向纠错(Forward Error Correction, FEC)
在ARQ方式中,接收端检测出差错时,就设法通知发送端重发,直到接收到正确的码字为止。
在FEC方式中,接收端不但能发现差错,而且能确定比特串的错误位置,从而加以纠正。
因此,差错控制又可分为检错编码(Error-Detecting Code)和纠错编码(Error-Crrecting Code)
总结:
检错编码(如奇偶校验码、循环冗余码)都只能发现位错,然后用自动重传请求方式(ARQ)来纠正位错及帧错。
纠错编码(如海明码)不仅可以发现位错,还能指出出错的比特位从而进行前向纠错(FEC)。
本小节讨论的是这三种编码方法是如何发现位错的。
3.1检错编码
检错编码都采用冗余编码技术,其核心思想是在有效数据(信息位)被发送前,先按某种关系附加一定的冗余位,构成一个符合某一规则的码字后再发送。
3.1.1奇偶校验码
奇偶校验码是奇校验码和偶校验码的统称。
- 奇校验是在待发送的数据后面添加1个校验位,使得添加校验位后整个数据中比特1的个数为奇数。
- 偶校验是在待发送的数据后面添加1个校验位,使得添加校验位后整个数据中比特1的个数为偶数。
- 无论是约定奇校验还是偶校验,如果有奇数个比特位发生误码可以检测出,如果有偶数个比特位发生误码会漏检。
3.1.2循环冗余码(CRC)
Cyclic Redundancy Code,又称多项式码。
循环冗余校验CRC的基本思想:
- 收发双方约定好一个生成多项式G(X)。
- 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据后面作为帧检测序列(FCS)一起传输。
- 接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码。
下面两张图片为发送方和操作方的所有操作细节。
下面两张图片为用实例来解释操作步骤。
补充:CRC校验可以用硬件完成。
CRC其实是具有纠错功能,但在数据链路层仅使用了它的检错功能,检测到帧出错后就直接丢弃,是为了方便协议的实现。
有一些特殊的多项式,因为其有很好的特性,而成了国际标准。
3.2纠错编码
在数据通信的过程中,解决差错问题的一种方法是在每个要发送的数据块上附加足够的冗余信息,使接收方能够推导出发送方实际送出的应该是什么样的比特串。
3.2.1海明码
海明距离(码距):码距是一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。比如1000与1111,有三位不一样,码距为3。1000、1111、1001这个编码集的码距为1(即取最小值)
- 海明码纠错d位(即共有d位发生了差错并能纠正),需要码距为2d+1的编码方案。
- 检测d位(d=2时,比如1000变为1011,能检测出2位错误,码距最少为3),需要码距为d+1的编码方案。
笔者对码距的理解并不是很深入,只知道海明距离(码距)并不是海明码独有的。
海明码的码距通常为3(可以纠正一位错,或者检测二位错)
海明码的码距还可以为4(可以纠正一位错,同时检测二位错)
可见海明码只能纠正单比特错。
利用海明码纠错的步骤:
- 利用海明不等式算出冗余信息位数。
- 确定冗余信息位的分布。
- 求出冗余信息位的值。
- 检错并纠错。
补充:
一般来说,数据的传输差错是由噪声引起的。通信信道的噪声可分为两类:
热噪声:一般是信道固有的,引起的差错是随机差错,可以通过提高信噪比来降低它对数据传输的影响。
冲击噪声:一般是外界电磁干扰引起的,引起的差错是突发差错,它是引起传输差错的主要原因,无法通过提高信噪比来避免。