CH10 Error Detection and Correction
文章目录
10.1 INTRODUCTION
10.1.1 Types of Error
single-bit error:在给定的数据单元,仅有一位发生从0到1的变化。
burst error:数据单元中有两位或者更多位发送1到0或者0到1的错误。
- burst error并不意味这差错在连续位上出现
- The length of burst error is measured from the first corrupted bit to the last corrupted bit
![image-20211222153516654](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222153516654.png)
10.1.2 Redundancy
为了能够检测或者纠正错误,除了数据之外还要发送额外的位,称为redundancy。
10.1.3 Detection Versus Correction
Detection:只看差错是否发生,只回答是否。
Correction:知道破坏位的个数,在报文中的位置
纠错方法:向前纠错,重传
10.1.4 Forward Error Correction and Retransmission
forward error correction:接收方通过冗余位尝试推测报文,如果差错位数很小,那么可行。
retransmission:接收方检测到有差错发生并且要求发送方重新发送文本。
10.1.5 Coding
编码:块编码 & 卷积编码
模运算modular arithmetic:使用有限范围的正整数0~N-1,其上限称为模数N。
(1)模2运算 Modulo-2 Arithmetic
10.2 Block Coding
datawords:在块编码中,把报文划分成块,每块有 k 位,称为数据字datawords
codewords:并增加 r个冗余位使其长度变为 n = k + r,形成 n 位的块称为码字codewords
![image-20211222155231083](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222155231083.png)
invaild or illegal: 2 n − 2 k 2^n-2^k 2n−2k冗余码
10.2.1 Error Detection
可以进行差错检测的条件:
- 接收方有有效码字的列表
- 原来的码字变成无效的码字
如果码字在传输中被破坏,但接收到的码字仍然是一个有效的码字,差错则无法被检测到。
10.2.2 Error Correction
检错比纠错更复杂,需要加入更多的冗余位redundancy
10.2.3 Hamming distance
Hamming distance between two words d ( x , y ) d(x,y) d(x,y):两个相同长度的字的汉明距离是对应位不同的数量。
计算:对两个字异或后计算1的个数
d
(
000
,
011
)
=
2
;
d
(
000
,
101
)
=
2
d(000,011)=2;d(000,101) = 2
d(000,011)=2;d(000,101)=2
10.2.4 Minimum Hamming distance
minimum hamming distance:一组字中所有可能对的汉明距离的最小值。
![image-20211222161250512](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222161250512.png)
(1)Three Parameters
- datawords 长度 : k
- codewords 长度:n
- minimum hamming distance : d m i n d_{min} dmin
编码方案写成 C ( n , k ) C(n,k) C(n,k)和一个单独的 d m i n d_{min} dmin表达式。如上的编码方案可以写成: C ( 5 , 2 ) , d m i n = 3 C(5,2),d_{min} = 3 C(5,2),dmin=3
(2)Hamming Distance and Error
接收到的码字和发送的码字之间的汉明距离是传输中被破坏的位数。
(3)Minimum Distance of Error Detection
为了保证最多检测出s个错误,最小汉明距离
d
m
i
n
d_{min}
dmin需要满足:
d
m
i
n
=
s
+
1
d_{min} = s+1
dmin=s+1
(4)Minimum Distance of Error Correction
为保证最多纠正t个错误,最小汉明距离
d
m
i
n
d_{min}
dmin需要满足:
d
m
i
n
=
2
t
+
1
d_{min} = 2t+1
dmin=2t+1
EXAMPLE:
d m i n = 4 d_{min} =4 dmin=4的编码方案,检错和纠错能力分别是多少?
这个方案最多检测到 3个差错 (s = 3),但是它只能纠正 1个差错。即如果这个编码用于纠错,它的部分能力被浪费了。
纠错码需要的最小距离是奇数 (3, 5, 7, . . . )。
10.3 Linear Block Codes 线性块编码
在线性块编码中,任两个有效码字的异或(即模二加)生成另一个有效码字。
![image-20211222163550273](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222163550273.png)
10.3.1 Minimum Hamming Distance in Linear Block Codes
线性块编码的最小汉明距离:具有最小1的个数的非0有效码字中1的个数。
![image-20211222163810460](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222163810460.png)
10.3.2 Some Linear Block Codes
(1)Simple Parity-Check code 简单奇偶校验码
- 基本思路:n = k+1。冗余位使codewords中的1的个数为偶数。
- 最小汉明距离 d m i n = 2 d_{min} = 2 dmin=2
- simple parity check codes单个位检错编码,不能纠正任何差错
![image-20211222164312794](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222164312794.png)
能检测出奇数个错误
![image-20211222164423711](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222164423711.png)
(2)two dimensional parity check 两维奇偶校验
数据以表格形式组织,分别放在各自的行中。
对于每一行和每一列,计算出一个奇偶校验位。
two dimensional parity check可以检测出表中任意位置发生的三个差错。
![image-20211222165103187](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222165103187.png)
(3)Hamming Code 汉明编码
本书只讨论最小汉明距离为 d m i n = 3 d_{min} = 3 dmin=3 的汉明码,它最多能检测出 2 位差错和最多纠正 1 位差错。
当 d m i n = 3 d_{min} = 3 dmin=3时,m和n的关系: n = 2 m − 1 n = 2^m - 1 n=2m−1
汉明码要求:
{
m
=
r
>
=
3
k
=
n
−
m
n
=
2
m
−
1
\begin{cases} m = r>=3\\ k = n -m\\ n = 2^m-1 \end{cases}
⎩⎪⎨⎪⎧m=r>=3k=n−mn=2m−1
s在正确情况下一定是0,三个校正子异或得结果
注意接收方和发送方要使用相同的等式。
生成器不关系奇偶位( q 0 , q 1 , . . . , q n q_0,q_1,...,q_n q0,q1,...,qn)的错误和无差错。其他情况相应的位必须要反转,但是若出现2位错误反转后也未必正确。
跟踪 3个数据字从发送端到目的端的路径。
数据字 0100 变成码字 0100011,接收到码字0100011。校正子是 000(无差错),最后数据字是 0100。
数据字 0111 变成码字 0111001,接收到码字 0011001。校正子是 011,b2 发生差错,反转后得到数据字 0111。
数据字 1101 变成码字 1101000,接收到码字0001000。校正子是101,b0发生差错,反转后得到数据字 0000。是错误的数据字。说明此编码检测不到两个差错。
PERFORMANCE
检测突发性错误,每个码字只有一个突发性错误。
- 不是每次发送一个码字,每次发送表中的一列
![image-20211222172927096](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222172927096.png)
10.4 CYCLIC CODES 循环码
10.4.1 Cyclic Redundancy Check
循环码是有一个附加性质的特殊线性块编码。这个性质是如果码字循环移位(旋转),其结果是另一个循环码字。
数据位,码字和除数等位数关系
- 数据位:k位
- 码字:n位
- 被除数补充:n-k位
- 除数:n-k+1位
除法的余数加到数据字形成新的码字,商被丢弃。
循环冗余校验的过程:
10.4.3 Polynomials
多项式的每一项表示位置,系数代表值
![image-20211222191926661](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222191926661.png)
(1)多项式的计算规则
- 加减法
- 加减相同幂次项的系数
- 加和减相同
- 加减是删除相同项,保留不同项
- 乘除法
- 幂次相加减
- 多项式相乘
- 每项分别相乘
- 最后删除相同项
- 多项式相除
- 同二进制除法
- 移位
- 左移m位,每项乘以 x m x^m xm
- 右移m位,每项除以 x m x^m xm
- 没有负数幂次
![image-20211222192619874](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222192619874.png)
循环码的除数常称为生成多项式,简称生成子。
10.4.4 Cyclic Code Analysis 循环编码分析
一些表示:
数
据
字
d
(
x
)
码
字
c
(
x
)
生
成
多
项
式
g
(
x
)
校
正
子
s
(
x
)
差
错
e
(
x
)
数据字d(x)\quad 码字c(x)\quad 生成多项式g(x)\\ 校正子s(x)\quad 差错e(x)
数据字d(x)码字c(x)生成多项式g(x)校正子s(x)差错e(x)
- s ( x ) ≠ 0 s(x)≠0 s(x)=0:一位或者多位被破坏
-
s
(
x
)
=
0
s(x)=0
s(x)=0:
- 没有被破坏
- 某些位破坏但检测不出来
接收到的码字:
c
(
x
)
+
e
(
x
)
c(x)+e(x)
c(x)+e(x)===初始发送的码字+错误项
接
收
到
的
码
字
g
(
x
)
=
c
(
x
)
+
e
(
x
)
g
(
x
)
=
c
(
x
)
g
(
x
)
+
e
(
x
)
g
(
x
)
=
e
(
x
)
g
(
x
)
\frac{接收到的码字}{g(x)} = \frac{c(x)+e(x)}{g(x)} = \frac{c(x)}{g(x)}+\frac{e(x)}{g(x)} = \frac{e(x)}{g(x)}
g(x)接收到的码字=g(x)c(x)+e(x)=g(x)c(x)+g(x)e(x)=g(x)e(x)
Single bit error 单个位差错:
e ( x ) = x i e ( x ) g ( x ) = x i g ( x ) e(x)=x^i\\ \frac{e(x)}{g(x)} = \frac{x^i}{g(x)} e(x)=xig(x)e(x)=g(x)xi
若g(x)有两项(一般来说), x 0 x^0 x0项系数不为0,那么不能除尽,可以检错
![image-20211222194453148](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222194453148.png)
Two isolated Single-Bit Error两个独立的单个位差错:
设 e ( x ) = x i + x j e(x) = x^i+x^j e(x)=xi+xj, i i i和 j j j表示差错位置, i − j i-j i−j表示差错距离
则:
e
(
x
)
=
x
i
(
x
j
−
i
+
1
)
e(x) = x^i(x^{j-i}+1)
e(x)=xi(xj−i+1)
e
(
x
)
g
(
x
)
=
x
i
(
x
j
−
i
+
1
)
g
(
x
)
\frac{e(x)}{g(x)} = \frac{x^i(x^{j-i}+1)}{g(x)}
g(x)e(x)=g(x)xi(xj−i+1)
若g(x)的表达式为____+1,那么要想能满足差错检测,即不能被
x
i
(
x
j
−
i
+
1
)
x^i(x^{j-i}+1)
xi(xj−i+1)整除
![image-20211222194940553](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222194940553.png)
Odd Numbers of Error 奇数个错误:
包含 x + 1 x+1 x+1因子的生成多项式能检测到所有奇数个差错。
Burst Error突发性差错:
突发性差错项: e ( x ) = x j + . . . + x i = x i ( x j − i + . . . + 1 ) e(x) = x^j+...+x^i=x^i(x^{j-i}+...+1) e(x)=xj+...+xi=xi(xj−i+...+1)
- 能检测任何的单比特差错: g ( x ) g(x) g(x)不能整除 x i x^i xi
-
(
x
j
−
i
+
.
.
.
+
1
)
/
(
x
r
+
.
.
.
+
1
)
(x^{j-i}+...+1)/(x^r+...+1)
(xj−i+...+1)/(xr+...+1),除数代表不能整除
x
i
x^i
xi的生成多项式,此时有三种情况:
- j − i < r j-i<r j−i<r,令 L = j − i + 1 [ 差 错 长 度 ] L = j-i+1[差错长度] L=j−i+1[差错长度],即差错长度 L < r + 1 L<r+1 L<r+1时,任何差错可以被检测
- j − i = r j-i=r j−i=r,令 L = r + 1 L = r+1 L=r+1,长度为r+1的差错无法检测的概率是 ( 1 2 ) r − 1 (\frac{1}{2})^{r-1} (21)r−1
- j − i > r j-i>r j−i>r,令 L > r + 1 L > r+1 L>r+1,长度大于r+1的差错无法检测的概率是 ( 1 2 ) r (\frac{1}{2})^{r} (21)r
高性能生成多项式的特点:
-
至少有两项
-
x0 的系数一定不为 0**
-
不能整除$ x^ t + 1(2 ≤ t ≤ n − 1)$
-
应当有因子 x + 1 x + 1 x+1
10.5 Checksum
用校验和进行简单检错的方法常用于Internet的其它高层协议中。
发送数据时,同时还发送它们的和(用于检错校验,因此称为校验和)。
校验和的步骤:【发送方】
- 报文被划分为16-bit 字。
- 校验和字的初始值设为0。
- 所有字包括校验和使用反码运算相加。
- 对累加和求反码变成校验和。
- 校验和随数据一起发送。
校验和的步骤:【接收方】
- 报文(包括校验和)被划分成16位字。
- 使用反码运算将所有字相加
- 对该和求反码生成新校验和
- 如果校验和是0,接收报文,否则丢弃
![image-20211222201556684](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222201556684.png)
】
- 报文被划分为16-bit 字。
- 校验和字的初始值设为0。
- 所有字包括校验和使用反码运算相加。
- 对累加和求反码变成校验和。
- 校验和随数据一起发送。
校验和的步骤:【接收方】
- 报文(包括校验和)被划分成16位字。
- 使用反码运算将所有字相加
- 对该和求反码生成新校验和
- 如果校验和是0,接收报文,否则丢弃
![image-20211222201556684](https://gitee.com/sun-yunqi/img/raw/master/pictureStore/image-20211222201556684.png)