Skip to content

Latest commit

 

History

History
174 lines (87 loc) · 11.4 KB

File metadata and controls

174 lines (87 loc) · 11.4 KB

3.2 错误检测与纠正

这一小节的内容主要围绕着针对错误处理的两种基本策略来展开。每种策略都有不同的方法,不同策略的不同方法应用于不同的错误场景,它们的共同点是都要用到 _______。两种策略分别是 _______(error-correcting)和 _______(error-detecting)。

很显然,对于错误的发生,我们要么是改一改,要么是重来一遍。当然,对于无确认无连接服务直接忽视了错误。或许还会有其他的策略,期待读者天马行空的思考。

正是因为两种策略都无法处理所有可能的传输错误,所以在不同的应用情境中我们要使用不同的策略,尽可能做到最优。两种策略分别对应了两种编码技术,这些编码针对于不同的错误类型。

书中提到了三种错误类型(情形):_______ 、 _______、擦除信道。讲述每一种策略的不同方法时,都将围绕着这些错误类型来展开。接下来,作者在书中,先详细地介绍了一个简单的编码,然后再简要描述了先进的编码,从简单编码理解如何权衡,并且通过先进编码讨论实际使用的编码。

 

3.2.1 纠错码

四种不同的纠错码:

1. __________

2. __________

3. __________

4. __________

同时纠错码也可以进行分类,例如 块编码系统码线性码

Question: 请读者回忆一下这三种码的定义。

海明码

令帧(数据块)的总长度为n,n=m+r,则一个包含了数据位和校验位的n位单元称为n位 _______(codeword),而其中不包含冗余部分所占比例(m/n)被称作 _______。

给定两个被发送或接受的码字,例如10001001和10011111,我们发现有_______ 位不同。而两个码字的不同的位的个数被称为 _______。

对于二进制码字来说,长度为n,数据位长度为m,校验位长度为r,总共的可能性为 _______种,其中 _______ 种可能的数据消息都是合法的。但是并非所有的2^m种可能的码字都会用到。

为了可靠地检测d个错误,需要海明距离为 _______的编码;为了纠正d个错误,需要海明距离为 _______ 的编码。

海明码的例子
序号 码字
1 000000
2 000111
3 111000
4 111111

上面四个有效码字的编码,其海明距离为3。这意味着,这个编码只能检测至多2个错误,比如,如果出现了000011,那么可以检测它出现了错误。同时,这个编码 只能纠正 至多1个错误,例如,如果出现了000001,那么我们可以知道这个编码一定来源于000000,因为至多只能纠正1个错误。假设我们期望这种编码方式具有纠正两个错误的能力,那么我们就不确定000001是来自于000000还是000111了,因为000111可以发生两个错误将倒数第二位、倒数第三位变为0,于是成为了000001。

读者理解这个含义时,要注意不要被特例混淆,例如可能会有读者举例,如果出现了001100,那么根据最小距离的例子,完全可以判断出其来源于000000,因为距离它是最近的(001100与000000、000111、111000、111111的距离分别是:2、3、3、4),因此可能会有读者认为,如果出现了001100,那么这个编码也具备了纠错的能力。的确,如果从这个角度理解,001100的原始码字更有可能是000000,但是这不意味着上面的四个有效码字的编码具备了纠正两个错误的能力。因为对于其他的情况,不一定是合适的,例如000011,如果我们说上述的编码具有纠正两个错误的能力,那么它面对000011,便会不知道它是来自000111还是000000,毕竟它认为自己具有纠正两个错误的能力。这个问题属于特例与一般情况之间的矛盾。

对于纠正单个错误的情况

2^m条合法消息,任何一条消息都对应 _______ 个距离为1的非法码字。因此,每条合法消息,需要 _______ 个位模式来标识它们。

偶校验位海明码

下面举例来说明这个方法是如何纠正单个错误:

我们期望每一位都是正确的,因此接收方使用校验位进行校验时(与某些位进行异或运算),其结果应该是0(这是偶校验的定义)假设有一个8位数据,由于2的幂数位为校验位,所以显然8位数据有4个校验位,分别为第一位、第二位、第四位、第八位,记作X1,X2,X4,X8。

那么如何求校验位的值呢?

我们将4个校验位的位号用二进制写出:0001,0010,0100,1000。举个例子,如果要求校验位$X_{1}$的值(在发送前),我们看到$X_{1}$的二进制为0001,所以我们需要将数据位位号为xxx1形式的数,依次与$X_{1}$进行异或运算,结果为0(偶校验)。可以看到位号分别为3,5,7,9,11,即$X_{1}$⊕$P_{3}$⊕$P_{5}$⊕$P_{7}$⊕$P_{9}$⊕$P_{11}$= 0。

位号 二进制 类型
1 0001 校验位
2 0010 校验位
3 0011 数据位
4 0100 校验位
5 0101 数据位
6 0110 数据位
7 0111 数据位
8 1000 校验位
9 1001 数据位
10 1010 数据位
11 1011 数据位

那么,假设接收方收到数据开始校验,先使用$X_{1}$与$P_{3}$、$P_{5}$、$P_{7}$、$P_{9}$、$P_{11}$进行异或运算,如果结果是0,则证明$P_{3}$、$P_{5}$、$P_{7}$、$P_{9}$、$P_{11}$全部正确;如果结果非0,$P_{3}$、$P_{5}$、$P_{7}$、$P_{9}$、$P_{11}$其中有一位是错误的。另一方面,每个数据位几乎都会和多个校验位进行校验,比如,$P_{3}$(3 = 0011)即参与$X_{1}$的校验运算,也参与$X_{2}$的校验运算,所以我们很容易可以看到,校验结果非0的校验码组合与数据位出错是一一对应的。

理解了上述部分,P165和P166左上角的内容就好理解啦。

 

Question1: 给定m的情况下(总位数为n,冗余位为r),求出纠正单个错误所需的校验位数的下限满足的关系。

Question2: 假设发送方使用偶校验位海明码来进行编码,编码前数据长度为8位,当接收方收到发送来的数据时,接收方校验的流程是怎样的?

Question3: 如何理解偶校验位海明码中“校验结果非0的组合与数据位出错是一一对应的”?  

 

3.2.2 检错码

纠错码被广泛应用于无线链路,而检错码被广泛应用于光纤或高质量铜线。

作者在本小节介绍了三种检错码:

1. _______

2. _______

3. _______

奇偶校验位

奇偶检验位的选择原则是 (增加一位校验位后)使得码字中的比特1的数目为奇数或偶数个(也可以说校验位与码字逐一异或后结果为1或0)。例如,我们要对1011010通过奇检验的方式(奇检验or偶检验是提前声明好的)进行传输,那么我们需要给这个数据增添一位 _______ (填0或1)。

很显然,如果某一位发生了错误,码字的奇偶校验位就会发生错误。所以意味着奇偶检验码可以检测出一位错误。

书上还提到,这个方案的困难在于单个校验位只能可靠的检验出数据块的一位错误。但如果发生长的突发错误造成严重乱码,则这种错误被检验出来的概率是 _______。之后作者提到了一种方式,将数据块看作一个n位宽和k位高的矩阵(有一种升维打击的感觉),这样每一行(共k行)都增加一个奇偶检验位,因此每一行(我们期望)都能至多检验出1个错误的发生,所以这种方式能可靠地检测出最多 _______ 位错误。

校验和

作者在这一部分提到了internet校验和。该校验和是把消息的位分成了 _______ 位字的求和结果。注意上面这句话的宾语,求和结果。一定要记住校验和的本质就是一个求和结果。在internet校验和中,是针对字操作(比如两个16位字相加),而不是对位进行操作。

1000 0000 0000 0000 1010 0000 1010 0000,比如这两个字,请读者用奇校验写出它的校验位,结果是 _______。我们将上面32位比特串看成是两个16位字的拼接。如果每个字的最低位同时从0翻转到1,则奇偶校验是不会发生改变的,即跨越这两个字的奇偶检验无法检测到这个错误。但如果采用校验和的方式,1000 0000 0000 0000+1010 0000 1010 0000,根据校验和的规则,那么两个1增加到16位校验和中将产生不同的结果,于是这个错误就会被检测出来了。

internet校验和在某些情况下提供的保护较弱,因为它只是一个简单的求和,检测不出0数据的增加或删除,也检测不出消息中被交换的那部分等等。一个更好的选择是 _______ ,它包括了一个位置,将数据和位置的乘积添加到检验和中,这样对数据位置的变化提供更强的检测作用。

CRC循环冗余校验码

CRC循环冗余校验码也被称为 _______ 编码。比如100001,可以看作下面的6项多项式 _______。该多项式的加法减法等同于 _______ 运算。

使用多项式编码,发送方和接收方必须预先商定一个 _______,记为G(x),其最高位和最低位必须是1。CRC的基本思想是,在帧的尾部附加一个 _______,使得附加校验和之后的帧代表的多项式能够被G(x)除尽,当接收方收到了带校验和的帧后,接收方会 _______,然后根据 _______ 判断是否存在传输错误。

因此该方法的核心就是构建一个校验位,只不过现在是通过不断做除法来求校验位。手头上有一个帧,还有一个生成多项式,将帧尾附加上几个零(生成多项式CRC位数-1),然后不断做除法,最后求得的余数,就是校验和啦。然后将校验和加到帧的尾部,构成的新帧就是可以被生成多项式整除的帧(发送方发送的帧)。

当接收方收到该帧,将这个帧对应的多项式与 ________ 进行除法运算,如果 _______ ,就说明没有传输错误啦。

CRC的性能

1. CRC能检测出全部一位错误

2. CRC能检测出全部离散的两位错。

3. CRC能检测出奇数个位错。

4. 全部长度小于或等于 K 的突发错( K 为生成多项式的最高幂次)

5. 以 _____ 的概率检出长度为 K + 1 位的突发错 。

 

Question1: 为什么纠错码被广泛应用于无线链路,而检错码被广泛应用于光纤或高质量铜线?

Question2: 对于使用奇偶检验编码的数据,但如果发生长的突发错误造成严重乱码,则这种错误被检验出来的概率为什么是0.5?  

Question3: 为了对突发错误有一个更好的保护,可以采用一个交错检验的方法,即(在上述n位宽和k位高的矩阵的情境中)不以行为单位添加校验码,而是以列为单位,这也是“交错”的含义。n列中的每一列至多只有一位(我们期待的)受到影响,因此这些列中的校验位能够检测到该错误。请读者解释为什么这种校验方式可以检测出某一行的突发错误?

Question4: 在问题3的基础上,设想一个n位宽和k位高的矩阵的情境,交错检验方法能检测出某一行的突发错误的最长位数是多少?使用该方法,最终误接收到具有突发错误数据块的概率是多少?(假设每列至多只发生一位错误)