下面完整整理“差错控制”至“局域网”之前的内容,重点补全海明码的编码、定位纠错过程,以及 CRC 的模2除法、生成多项式和检错能力。全文只使用 DokuWiki 原生语法。
差错控制
一、本节概述
数据在通信信道中传输时,会受到噪声、干扰、衰减和信号失真的影响,导致接收数据与发送数据不一致。
为了将错误降低到系统允许的范围,需要使用:
Error Control(差错控制)
差错控制的基本思想是:在原始信息中增加一定数量的冗余信息,使接收方能够发现或纠正传输错误。
本节主要内容包括:
- 差错产生的原因;
- 随机错误与突发错误;
- 检错与纠错;
- 海明码;
- 循环冗余校验码。
差错控制 │ ├─ 差错产生原因 │ ├─ 热噪声 │ ├─ 冲击噪声 │ ├─ 信号失真 │ └─ 串扰 │ ├─ 差错类型 │ ├─ 随机错误 │ └─ 突发错误 │ ├─ 控制策略 │ ├─ 检错后重传 │ └─ 接收端直接纠错 │ └─ 典型编码 ├─ 海明码 └─ CRC循环冗余校验码
二、差错产生的原因
1. 热噪声
Thermal Noise(热噪声)是由电子随机热运动产生的噪声。
主要特点:
- 在通信线路中持续存在;
- 具有较宽的频谱;
- 通常幅度较小;
- 对数据位的影响具有随机性;
- 往往只造成个别位错误;
- 信噪比越高,热噪声引起的错误越少。
热噪声通常引起:
Random Error(随机错误)
2. 冲击噪声
Impulse Noise(冲击噪声)是短时间出现、但瞬间幅度很大的干扰。
常见来源包括:
- 雷电;
- 电焊机;
- 电动机启停;
- 电力设备瞬态变化;
- 开关设备;
- 外界突发电磁干扰。
冲击噪声的特点:
- 持续时间短;
- 瞬时幅度大;
- 可能同时影响多个连续数据位;
- 容易形成一串连续错误。
冲击噪声通常引起:
Burst Error(突发错误)
3. 信号失真
信号幅度、传播速度与相位、频率等参数有关。信号在传输过程中可能出现:
- 幅度失真;
- 相位失真;
- 频率失真;
- 延迟失真;
- 波形畸变。
接收端可能因此错误判断信号状态,从而产生差错。
4. 串扰
Crosstalk(串扰)是相邻线路或相邻信道之间发生信号耦合,一个信号对另一个信号产生干扰的现象。
串扰通常具有突发性,也可能导致多个数据位连续出错。
三、随机错误与突发错误
| 比较项目 | 随机错误 | 突发错误 |
|---|---|---|
| 英文名称 | Random Error | Burst Error |
| 典型原因 | 热噪声 | 冲击噪声、串扰和瞬态干扰 |
| 错误分布 | 零散、随机出现 | 集中出现在一段数据范围内 |
| 常见影响 | 一个或少量数据位 | 多个连续范围内的数据位 |
| 常用控制方法 | 奇偶校验、海明码 | CRC、交织和重传 |
1. 突发错误长度
突发错误长度是指从第一个错误位开始,到最后一个错误位结束所覆盖的总位数。
例如:
发送数据:110101101001
接收数据:110'''01011'''1001
突发错误范围内不要求每一位都发生错误。只要第一个错误位与最后一个错误位之间覆盖5位,突发错误长度就是5。
四、冗余校验原理
1. 信息位与冗余位
假设:
- 原始信息长度为
k位; - 增加
r位冗余信息; - 编码后总长度为
n位。
则:
''n=k+r''
其中:
| 符号 | 含义 |
|---|---|
k | 原始信息位数 |
r | 冗余校验位数 |
n | 编码后的总位数 |
发送方按照确定的算法,根据原始信息计算冗余位,再将信息位与冗余位一起发送。
接收方对收到的数据使用同一算法:
- 若校验结果一致,则认为数据没有检测到错误;
- 若校验结果不一致,则认为数据发生错误;
- 若编码具有纠错能力,还可以进一步确定错误位置。
2. 编码效率
增加冗余位会降低有效数据比例。
编码效率为:
''η=k÷(k+r)''
例如,7位信息增加1位校验位:
''η=7÷8=87.5%''
冗余位越多:
- 检错、纠错能力通常越强;
- 传输开销越大;
- 有效数据率越低;
- 编码和译码过程越复杂。
五、检错与纠错
1. 检错
Error Detection(检错)是指接收方能够判断数据发生了错误,但通常不能确定正确数据是什么。
发现错误后,接收方可以请求发送方重新传输。
这种策略称为:
ARQ(Automatic Repeat reQuest,自动重传请求)
发送数据
↓
接收端执行校验
↓
是否检测到错误?
├─ 否:接收数据
└─ 是:请求发送方重传
2. 纠错
Error Correction(纠错)是指接收方不仅知道发生了错误,还能确定错误位置并恢复正确数据。
利用冗余信息在接收端直接完成纠错的技术称为:
FEC(Forward Error Correction,前向纠错)
3. 检错与纠错比较
| 比较项目 | 检错 | 纠错 |
|---|---|---|
| 英文名称 | Error Detection | Error Correction |
| 能否发现错误 | 是 | 是 |
| 能否确定错误位置 | 通常不能 | 在编码能力范围内可以 |
| 能否直接恢复数据 | 不能 | 可以 |
| 是否通常需要重传 | 是 | 否 |
| 冗余位数量 | 较少 | 较多 |
| 实现复杂度 | 较低 | 较高 |
| 典型机制 | 奇偶校验、CRC | 海明码、FEC编码 |
六、海明码基本概念
1. 海明码的提出
1950年,理查德·海明研究了利用冗余位检测和纠正代码错误的方法。
Hamming Code(海明码)是一类通过增加多个校验位,实现错误检测和错误定位的线性分组码。
海明码的基本思想是:
- 将校验位放置在特定位置;
- 每个校验位检查一组数据位;
- 不同数据位参加不同的校验组合;
- 接收端根据校验失败的组合计算错误位置;
- 将错误位取反即可完成单比特纠错。
2. 海明重量
一个码字中二进制1的数量称为:
Hamming Weight(海明重量)
例如:
''10110100''
其中有4个1,因此:
''海明重量=4''
3. 海明距离
两个等长码字在对应位置上不同的位数称为:
Hamming Distance(海明距离)
可通过按位异或计算:
码字A:10110110
码字B:10011100
异或值:00101010
异或结果中有3个1,因此:
''d(A,B)=3''
其中:
XOR(Exclusive OR,异或)的运算规则是:
| A | B | A XOR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
4. 最小海明距离
一个编码系统中,任意两个合法码字之间海明距离的最小值称为:
Minimum Hamming Distance(最小海明距离)
通常记作:
''d_min''
最小海明距离决定了编码能够检测和纠正多少位错误。
七、海明距离与差错控制能力
1. 检错能力
如果最小海明距离为 d_min,则最多能够保证检测:
''d_min-1''
位错误。
若要保证检测 s 位错误,需要满足:
''d_min≥s+1''
例如:
| 最小海明距离 | 保证检测的错误位数 |
|---|---|
| 2 | 1位 |
| 3 | 2位 |
| 4 | 3位 |
| 5 | 4位 |
2. 纠错能力
如果要保证纠正 t 位错误,需要满足:
''d_min≥2t+1''
最大保证纠错位数为:
''t_max=⌊(d_min-1)÷2⌋''
其中 ⌊x⌋ 表示向下取整。
| 最小海明距离 | 保证纠正的错误位数 |
|---|---|
| 2 | 0位 |
| 3 | 1位 |
| 4 | 1位 |
| 5 | 2位 |
| 6 | 2位 |
| 7 | 3位 |
3. 几何意义
一个长度为 n 的二进制码字,可以看成 n 维超立方体中的一个顶点。
两个码字之间的海明距离,就是两个顶点之间需要改变的最少坐标数量。
如果两个合法码字的距离为 d:
- 小于或等于
d-1位的错误可以被检测; - 小于
d÷2位的错误可以被纠正。
纠错的本质是将接收到的错误码字判断为距离最近的合法码字。
4. 奇偶校验的海明距离
7位ASCII数据增加1位奇偶校验后形成8位码字。
这些合法码字之间的最小海明距离为2,因此:
- 可以检测所有1位错误;
- 不能纠正1位错误;
- 不能保证发现所有2位错误。
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)
八、海明码校验位数量
1. 基本条件
设:
- 原始数据有
m位; - 增加
k位校验位; - 编码后总长度为
n=m+k。
对于单比特纠错,每一个有效码字需要区分:
n个单比特错误位置;- 1种没有错误的情况。
因此,一个有效码字需要对应:
''n+1''
种可识别状态。
由于 k 位校验位可以表示 2^k 种状态,所以必须满足:
''2^k≥n+1''
代入 n=m+k:
''2^k≥m+k+1''
也可以写成:
''m+k+1≤2^k''
这就是单比特纠错海明码校验位数量的基本条件。
2. 教材推导
对于 m 位数据,有:
''2^m''
个有效信息。
每个有效码字需要表示:
- 1种无错误状态;
n种单比特错误状态。
总共需要:
''2^m(n+1)''
个可区分码字。
长度为 n 的二进制码字共有:
''2^n''
种可能,因此:
''2^m(n+1)≤2^n''
因为:
''n=m+k''
所以:
''n+1≤2^k''
最终得到:
''m+k+1≤2^k''
3. 常见数据位与校验位对应关系
| 数据位m | 最少校验位k | 总码长n | 验证 |
|---|---|---|---|
| 1 | 2 | 3 | 1+2+1=4≤2² |
| 4 | 3 | 7 | 4+3+1=8≤2³ |
| 7 | 4 | 11 | 7+4+1=12≤2⁴ |
| 8 | 4 | 12 | 8+4+1=13≤2⁴ |
| 11 | 4 | 15 | 11+4+1=16≤2⁴ |
| 12 | 5 | 17 | 12+5+1=18≤2⁵ |
| 26 | 5 | 31 | 26+5+1=32≤2⁵ |
4. 快速判断方法
给定数据位 m 后,从较小的 k 开始尝试:
''2^k≥m+k+1''
取满足条件的最小 k。
例如,8位数据:
尝试 k=3:
''2³=8''
''8+3+1=12''
''8<12'',不满足。
尝试 k=4:
''2⁴=16''
''8+4+1=13''
''16≥13'',满足。
因此,8位数据至少需要4位海明校验位。
九、海明码的位编号与校验关系
1. 校验位的位置
海明码把校验位放在序号为2的整数次幂的位置:
- 第1位:
2⁰=1 - 第2位:
2¹=2 - 第4位:
2²=4 - 第8位:
2³=8 - 第16位:
2⁴=16
其余位置用于存放数据位。
以11位码字为例:
| 位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 类型 | P1 | P2 | D1 | P4 | D2 | D3 | D4 | P8 | D5 | D6 | D7 |
其中:
P1、P2、P4、P8是校验位;D1~D7是数据位。
2. 校验位分组规则
把每个位置编号写成二进制数:
| 十进制位置 | 8位 | 4位 | 2位 | 1位 |
|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 1 |
| 2 | 0 | 0 | 1 | 0 |
| 3 | 0 | 0 | 1 | 1 |
| 4 | 0 | 1 | 0 | 0 |
| 5 | 0 | 1 | 0 | 1 |
| 6 | 0 | 1 | 1 | 0 |
| 7 | 0 | 1 | 1 | 1 |
| 8 | 1 | 0 | 0 | 0 |
| 9 | 1 | 0 | 0 | 1 |
| 10 | 1 | 0 | 1 | 0 |
| 11 | 1 | 0 | 1 | 1 |
一个位置参加哪些校验,由其二进制编号中哪些位为1决定。
| 校验位 | 检查条件 | 检查的位置 |
|---|---|---|
| P1 | 位置编号的最低位为1 | 1、3、5、7、9、11 |
| P2 | 位置编号的2位为1 | 2、3、6、7、10、11 |
| P4 | 位置编号的4位为1 | 4、5、6、7 |
| P8 | 位置编号的8位为1 | 8、9、10、11 |
3. 某数据位参加哪些校验
例如,第6位:
''6=0110₂''
其2位和4位为1,因此第6位参加:
- P2校验;
- P4校验;
- 不参加P1和P8校验。
第9位:
''9=1001₂''
其1位和8位为1,因此第9位参加:
- P1校验;
- P8校验。
十、海明码编码示例
1. 放置原始数据
教材示例的原始数据为:
''1001011''
将7个数据位依次放入:
''3、5、6、7、9、10、11''
号位置。
| 位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 类型 | P1 | P2 | D1 | P4 | D2 | D3 | D4 | P8 | D5 | D6 | D7 |
| 数据 | ? | ? | 1 | ? | 0 | 0 | 1 | ? | 0 | 1 | 1 |
2. 计算P1
P1检查:
''1、3、5、7、9、11''
不考虑P1本身,数据位为:
''1、0、1、0、1''
其中有3个1。
若采用偶校验,为使1的总数成为偶数:
''P1=1''
3. 计算P2
P2检查:
''2、3、6、7、10、11''
不考虑P2本身,数据位为:
''1、0、1、1、1''
其中有4个1,已经是偶数,因此:
''P2=0''
4. 计算P4
P4检查:
''4、5、6、7''
不考虑P4本身,数据位为:
''0、0、1''
其中有1个1,因此:
''P4=1''
5. 计算P8
P8检查:
''8、9、10、11''
不考虑P8本身,数据位为:
''0、1、1''
其中有2个1,因此:
''P8=0''
6. 最终码字
| 位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 编码结果 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 |
最终海明码为:
''10110010011''
十一、海明码纠错示例
1. 传输错误
假设码字:
''10110010011''
在传输过程中第6位由0变成1,接收结果为:
''10110110011''
| 位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 接收值 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
2. 接收端重新校验
接收端按照相同规则进行偶校验:
| 校验组 | 校验结果 | 含义 |
|---|---|---|
| P1组 | 正确 | 错误位置的1位标志为0 |
| P2组 | 错误 | 错误位置的2位标志为1 |
| P4组 | 错误 | 错误位置的4位标志为1 |
| P8组 | 正确 | 错误位置的8位标志为0 |
形成校验结果:
''P8 P4 P2 P1=0110₂''
转换为十进制:
''0110₂=6''
也可以直接将出错校验位编号相加:
''2+4=6''
因此可以确定:
''第6位发生错误''
将第6位取反:
''1→0''
即可恢复原码字。
3. 综合校验值
各校验结果组成的二进制数称为:
Syndrome(伴随式或校验综合)
- Syndrome为0:未检测到错误;
- Syndrome不为0:其数值指出单比特错误的位置。
十二、海明码的能力与限制
普通海明码的最小距离通常为3,因此:
- 可以纠正1位错误;
- 可以检测2位错误;
- 但普通译码器如果直接按单错处理,可能把双比特错误误判成另一位置的单比特错误。
增加一个全局奇偶校验位后,可构成:
SECDED(Single Error Correction, Double Error Detection,单错纠正、双错检测)
其能力为:
- 纠正所有单比特错误;
- 检测所有双比特错误;
- 不能纠正双比特错误。
十三、循环码
1. 基本概念
Cyclic Code(循环码)是一类具有循环性质的线性分组码。
如果一个码字是合法码字,那么将其循环左移或循环右移任意位后,得到的码字仍然是合法码字。
例如,若:
''a_(n-1) a_(n-2) … a₁ a₀''
是合法码字,则其循环移位结果也是合法码字:
''a_(n-2) a_(n-3) … a₀ a_(n-1)''
循环码便于使用移位寄存器和异或门实现。
十四、CRC循环冗余校验
1. 基本概念
CRC(Cyclic Redundancy Check,循环冗余校验)是一种基于循环码和模2多项式除法的检错方法。
CRC的主要特点:
- 检错能力强;
- 特别适合检测突发错误;
- 数学基础严谨;
- 容易使用硬件实现;
- 广泛应用于局域网和数据链路协议;
- 通常只负责检错,不直接纠错。
2. CRC基本过程
发送端:
- 选择生成多项式;
- 在原始数据后补0;
- 执行模2除法;
- 取得余数作为CRC校验码;
- 将原始数据与CRC余数组成发送码字。
接收端:
- 用相同生成多项式除接收到的完整码字;
- 如果余数为0,则未检测到错误;
- 如果余数不为0,则判定传输出现错误。
原始数据D
↓
末尾补r个0
↓
除以生成多项式G
↓
得到r位余数R
↓
原始数据+余数
↓
发送
十五、模2运算
CRC使用:
Modulo-2 Arithmetic(模2运算)
其特点:
- 加法等同于异或;
- 减法也等同于异或;
- 不产生进位;
- 不发生借位。
1. 模2加减法
| A | B | A+B或A-B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
因此:
''1+1=0''
''1-1=0''
''0-1=1''
在CRC运算中,加法和减法均可使用XOR实现。
2. 移位与乘法
多项式乘以 x,相当于二进制码左移一位。
多项式乘以 x^r,相当于二进制码末尾补 r 个0。
十六、二进制码与多项式
一个二进制码字可以表示为一个系数属于0或1的多项式。
例如:
''00101011''
从最高非零位开始对应:
''x⁵+x³+x+1''
因为:
| 二进制位 | 对应多项式项 |
|---|---|
| 第5次项为1 | x⁵ |
| 第4次项为0 | 无 |
| 第3次项为1 | x³ |
| 第2次项为0 | 无 |
| 第1次项为1 | x |
| 常数项为1 | 1 |
因此:
''00101011 ↔ x⁵+x³+x+1''
1. 生成多项式
CRC使用的除数称为:
Generator Polynomial(生成多项式)
通常记作:
''G(x)''
如果生成多项式最高次数为 r,则:
- CRC校验码长度为
r位; - 生成多项式的二进制表示长度为
r+1位。
十七、CRC数学模型
设:
- 数据多项式为
D(x); - 生成多项式为
G(x); - 生成多项式次数为
r; - 商多项式为
Q(x); - 余数多项式为
R(x)。
对数据多项式补 r 个0,相当于:
''x^rD(x)''
执行模2除法:
''x^rD(x)=Q(x)G(x)+R(x)''
其中:
''deg R(x)<r''
实际发送的码字为:
''F(x)=x^rD(x)+R(x)''
由于模2运算中的加法和减法相同,所以:
''F(x)''
能够被:
''G(x)''
整除。
接收端计算:
''F(x)÷G(x)''
正确情况下余数应为0。
十八、CRC计算步骤
假设:
- 原始数据为
M; - 生成多项式的二进制码为
P; P的最高次数为r。
计算步骤:
- 在原始数据后补
r个0; - 使用生成多项式对应的二进制数进行模2长除;
- 模2减法使用异或,不借位;
- 得到长度不超过
r位的余数; - 不足
r位时在左侧补0; - 用余数替换原来补入的
r个0; - 得到最终发送码字。
表达式为:
''发送码字=原始数据+CRC余数''
十九、CRC校验示例
教材示例使用:
''D=00101011''
对应数据多项式:
''D(x)=x⁵+x³+x+1''
生成多项式采用CRC-CCITT:
''G(x)=x¹⁶+x¹²+x⁵+1''
生成多项式二进制形式为:
''1 0001 0000 0010 0001''
十六进制形式通常简写为:
''1021H''
因为生成多项式次数为16,所以在原始数据后补16个0:
''00101011 0000000000000000''
进行模2长除后,教材得到余数:
''9509H''
因此,16位CRC校验和为:
''9509H''
其中:
H表示Hexadecimal,即十六进制;9509H的二进制形式为1001010100001001。
最终发送的数据形式为:
''00101011 1001010100001001''
二十、CRC硬件实现
CRC可以使用以下电路实现:
- 移位寄存器;
- 异或门;
- 反馈回路。
使用:
LFSR(Linear Feedback Shift Register,线性反馈移位寄存器)
实现CRC时:
- 先将寄存器清零;
- 数据逐位输入移位寄存器;
- 移出的位通过反馈线路参与异或;
- 数据全部输入后,再输入与校验位数量相同个数的0;
- 最终寄存器内容就是CRC余数。
生成多项式中系数为1的项,决定反馈异或连接的位置。
CRC-CCITT的生成多项式为:
''G(x)=x¹⁶+x¹²+x⁵+1''
因此其硬件反馈路径与:
- 第16次项;
- 第12次项;
- 第5次项;
- 常数项;
相对应。
二十一、CRC接收端校验
设正确发送码字为:
''F(x)''
传输过程中产生的错误多项式为:
''E(x)''
接收到的码字为:
''H(x)=F(x)+E(x)''
因为正确码字 F(x) 能被 G(x) 整除:
- 如果
H(x)不能被G(x)整除,说明检测到错误; - 如果
H(x)能被G(x)整除,则校验余数为0。
需要注意:
如果错误多项式 E(x) 恰好也能被 G(x) 整除,则:
''H(x)''
仍能被 G(x) 整除,此时错误无法被CRC检测。
因此,CRC不能检测所有理论上可能的错误,但合适的生成多项式可以使漏检概率非常低。
二十二、CRC的检错能力
CRC检错能力取决于生成多项式 G(x)。
1. 单比特错误
如果 G(x)至少包含两个非零项,即不是单项式,则可以检测所有单比特错误。
教材表述为:
如果生成多项式的项数大于1,可以检测所有单比特错误。
2. 奇数位错误
如果 G(x)含有因子:
''x+1''
则能够检测所有奇数个位发生的错误。
3. 突发错误
如果CRC校验位长度为 r,则可以检测所有长度:
''≤r''
的突发错误。
对于长度为 r+1 的突发错误,绝大多数也能够被检测。
更长的突发错误也具有较高的检出概率。
4. CRC核心结论
| 错误类型 | 检测条件或能力 |
|---|---|
| 单比特错误 | 生成多项式至少包含两个非零项时可全部检测 |
| 奇数位错误 | G(x)含有因子x+1时可全部检测 |
| 长度不超过r的突发错误 | 可全部检测 |
| 更长突发错误 | 可检测绝大多数,但不能保证全部检测 |
二十三、常用CRC生成多项式
1. CRC-CCITT
CRC-CCITT(Consultative Committee for International Telegraph and Telephone CRC,国际电报电话咨询委员会循环冗余校验)
''G(x)=x¹⁶+x¹²+x⁵+1''
常见十六进制表示:
''1021H''
2. CRC-16
''G(x)=x¹⁶+x¹⁵+x²+1''
3. CRC-12
''G(x)=x¹²+x¹¹+x³+x²+x+1''
4. CRC-32
''G(x)=x³²+x²⁶+x²³+x²²+x¹⁶+x¹²+x¹¹+x¹⁰+x⁸+x⁷+x⁵+x⁴+x²+x+1''
CRC-32广泛应用于局域网及其他计算机网络。
| CRC类型 | 校验位长度 | 教材给出的生成多项式 |
|---|---|---|
| CRC-12 | 12位 | x¹²+x¹¹+x³+x²+x+1 |
| CRC-16 | 16位 | x¹⁶+x¹⁵+x²+1 |
| CRC-CCITT | 16位 | x¹⁶+x¹²+x⁵+1 |
| CRC-32 | 32位 | x³²+x²⁶+x²³+x²²+x¹⁶+x¹²+x¹¹+x¹⁰+x⁸+x⁷+x⁵+x⁴+x²+x+1 |
二十四、海明码与CRC比较
| 比较项目 | 海明码 | CRC |
|---|---|---|
| 英文名称 | Hamming Code | Cyclic Redundancy Check |
| 主要目的 | 检错并纠正单比特错误 | 检测传输错误 |
| 数学基础 | 海明距离与校验位分组 | 循环码与模2多项式除法 |
| 错误定位 | 可以定位能力范围内的错误 | 通常不能定位具体错误位 |
| 直接纠错 | 可以 | 通常不可以 |
| 突发错误检测 | 一般 | 很强 |
| 冗余位计算 | 2^k≥m+k+1 | 由生成多项式次数决定 |
| 硬件实现 | 校验网络 | 移位寄存器和异或门 |
| 典型应用 | 存储器纠错、数字通信 | 局域网、数据链路和存储系统 |
二十五、考试重点
必须掌握:
- 热噪声通常产生随机错误。
- 冲击噪声通常产生突发错误。
- 检错只能发现错误,纠错可以确定并恢复错误。
- 海明距离是两个等长码字对应位置不同的位数。
- 海明重量是码字中二进制1的数量。
- 检测
s位错误要求d_min≥s+1。 - 纠正
t位错误要求d_min≥2t+1。 - 单比特纠错海明码满足
2^k≥m+k+1。 - 海明码校验位放在1、2、4、8等位置。
- 一个数据位参加哪些校验,由其位置编号的二进制形式决定。
- 校验综合的二进制数直接指出单比特错误位置。
- CRC是Cyclic Redundancy Check的缩写。
- CRC使用模2除法,加法和减法均为异或。
- 生成多项式为
r次时,CRC余数为r位。 - 发送端用余数替换数据后补的
r个0。 - 接收端使用相同生成多项式进行除法校验。
- 接收余数为0表示未检测到错误,而不是绝对保证没有错误。
r位CRC可以检测所有长度不超过r的突发错误。- CRC-32广泛应用于局域网。
二十六、常见易错点
- 能检测1位错误不等于能纠正1位错误。
- 最小海明距离为2时只能保证检出1位错误,不能纠正。
- 纠正1位错误至少要求最小海明距离为3。
- 海明距离不是码字中1的数量;后者是海明重量。
- 海明码公式中的校验状态要包含“无错误”状态。
- 校验位数量应取满足公式的最小整数。
- 海明码校验位编号是1、2、4、8,不是第1、2、3、4位连续放置。
- CRC生成多项式的次数等于校验位数量。
r次生成多项式的二进制形式有r+1位。- CRC模2减法不借位,本质上是异或。
- CRC余数不足规定长度时,应在左侧补0。
- CRC校验余数为0只表示没有检测到错误。
- CRC通常用于检错,不能直接指出错误位的位置。
- 生成多项式必须由通信双方事先约定。
- 多项式二进制表示中的最高位和最低位不能随意省略。
二十七、快速解题方法
1. 求海明码校验位数量
已知数据位 m:
- 从
k=1开始尝试; - 计算
2^k; - 计算
m+k+1; - 找到第一个满足
2^k≥m+k+1的k。
2. 求海明码错误位置
- 按原校验规则重新计算各校验组;
- 正确记为0,错误记为1;
- 按照
P8、P4、P2、P1的顺序组合; - 将所得二进制数转换为十进制;
- 十进制数就是错误位置;
- 将该位置取反完成单比特纠错。
3. 求CRC校验码
- 确定生成多项式的最高次数
r; - 在数据后补
r个0; - 使用生成多项式执行模2长除;
- 每次减法使用异或;
- 得到
r位余数; - 将余数附加到原数据后形成发送码字。
4. 验证CRC码字
- 用相同生成多项式除完整接收码字;
- 余数非0:检测到错误;
- 余数为0:未检测到错误。
二十八、英文缩写与术语速查表
| 缩写或术语 | 英文全称 | 中文含义 |
|---|---|---|
| Error Control | Error Control | 差错控制 |
| Random Error | Random Error | 随机错误 |
| Burst Error | Burst Error | 突发错误 |
| Thermal Noise | Thermal Noise | 热噪声 |
| Impulse Noise | Impulse Noise | 冲击噪声 |
| Crosstalk | Crosstalk | 串扰 |
| Error Detection | Error Detection | 检错 |
| Error Correction | Error Correction | 纠错 |
| ARQ | Automatic Repeat reQuest | 自动重传请求 |
| FEC | Forward Error Correction | 前向纠错 |
| Hamming Code | Hamming Code | 海明码 |
| Hamming Weight | Hamming Weight | 海明重量 |
| Hamming Distance | Hamming Distance | 海明距离 |
| d_min | Minimum Hamming Distance | 最小海明距离 |
| Syndrome | Syndrome | 伴随式或校验综合 |
| SECDED | Single Error Correction, Double Error Detection | 单错纠正、双错检测 |
| XOR | Exclusive OR | 异或 |
| CRC | Cyclic Redundancy Check | 循环冗余校验 |
| CRC-CCITT | Consultative Committee for International Telegraph and Telephone CRC | 国际电报电话咨询委员会CRC |
| LFSR | Linear Feedback Shift Register | 线性反馈移位寄存器 |
| Generator Polynomial | Generator Polynomial | 生成多项式 |
| Modulo-2 Arithmetic | Modulo-2 Arithmetic | 模2运算 |
| ASCII | American Standard Code for Information Interchange | 美国信息交换标准代码 |
| H | Hexadecimal | 十六进制表示标记 |
二十九、本节知识脉络
差错控制 │ ├─ 差错原因 │ ├─ 热噪声 → 随机错误 │ ├─ 冲击噪声 → 突发错误 │ ├─ 信号失真 │ └─ 串扰 │ ├─ 控制策略 │ ├─ 检错 │ │ └─ ARQ请求重传 │ └─ 纠错 │ └─ FEC直接恢复 │ ├─ 海明码 │ ├─ 海明距离 │ ├─ d_min决定检错纠错能力 │ ├─ 2^k≥m+k+1 │ ├─ 校验位位于1、2、4、8 │ └─ Syndrome指出错误位置 │ └─ CRC ├─ 循环码 ├─ 模2多项式除法 ├─ 生成多项式G(x) ├─ 余数作为校验码 ├─ 接收端重新计算余数 └─ 擅长检测突发错误