差错控制
奇偶校验码
奇校验码:整个校验码(有效信息位和校验位)中‘1’的个数为奇数。
偶校验码:整个校验码(有效信息位和校验位)中‘1’的个数为偶数。
偶校验的硬件实现:各信息进行异或(模2加)运算,得到的结果即为偶校验位
能发现奇数位错误,但无法确定是哪一位出现错误
无法检测出偶数位错误
循环冗余校验码(CRC码)Cyclic Redundancy Check
循环冗余校验码的基本思想:数据发送、接收方约定一个“除数”
K个信息位+R个校验位作为“被除数”,添加校验位后需保证除法的余数为0
收到数据后,进行除法检查余数是否为0,若余数非0说明出错,则进行重传或纠错
1.确定K、R以及生成多项式对应的二进制码
K=信息码的长度
R=生成多项式最高次幂
校验码位数N=K+R
由生成多项式确定“除数”。若生成多项式中x的最高次为R,则“除数”有R+1位
2.移位
信息码左移R位,低位补0
3.相除
对移位后的信息码,用生成多项式进行模2除法,产生余数
4.检错和纠错
理论上可以证明寻欢冗余校验码的检错能力有以下特点:
- 可检测出所有奇数个错误
- 可检测出所有双比特的错误
- 可检测出所有小于等于校验位长度的连续错误
K个信息位,R个校验位,若生成多项式选择得当,且
2
R
≥
K
+
R
+
1
2^R≥K+R+1
2R≥K+R+1
纠错编码(海明校验码)
海明码设计思路:将信息位分组进行偶校验->多个校验位
信息位:
n
校验位:
k
信息位
+
校验位:
n
+
k
位
2
k
种状态
2
k
≥
n
+
k
+
1
信息位:n \\ 校验位:k \\ 信息位+校验位:n+k位 \\ 2^k种状态 \\ 2^k≥n+k+1
信息位:n校验位:k信息位+校验位:n+k位2k种状态2k≥n+k+1
解释:n+K位中任何一位都可能出错,1种正确状态
信息位:1010
过程:
- 确定校验位数量
确定海明码的位数
2
k
≥
n
+
k
+
1
设信息位
D
4
D
3
D
2
D
1
(
1010
)
,
共
4
位,校验位
P
3
P
2
P
1
,
共
3
位,对应的海明码为
H
7
H
6
H
5
H
4
H
3
H
2
H
1
2^k≥n+k+1 \\ 设信息位D_4D_3D_2D_1(1010),共4位,校验位P_3P_2P_1,共3位,对应的海明码为H_7H_6H_5H_4H_3H_2H_1
2k≥n+k+1设信息位D4D3D2D1(1010),共4位,校验位P3P2P1,共3位,对应的海明码为H7H6H5H4H3H2H1
- 确定校验位的分布
校验位
P
i
放在海明位号为
2
i
−
1
位置上
信息位按顺序放到其余位置
校验位P_i放在海明位号为2^{i-1}位置上 \\ 信息位按顺序放到其余位置
校验位Pi放在海明位号为2i−1位置上信息位按顺序放到其余位置
- 求校验位的值
H 3 : 3 − > 011 H 5 : 5 − > 101 H 6 : 6 − > 110 H 7 : 7 − > 111 三个分组,分别进行偶校验 P 1 = H 3 ⨁ H 5 ⨁ H 7 = D 1 ⨁ D 2 ⨁ D 4 = 0 ⨁ 1 ⨁ 1 = 0 P 2 = H 3 ⨁ H 6 ⨁ H 7 = D 1 ⨁ D 3 ⨁ D 4 = 0 ⨁ 0 ⨁ 1 = 1 P 3 = H 5 ⨁ H 6 ⨁ H 7 = D 2 ⨁ D 3 ⨁ D 4 = 1 ⨁ 0 ⨁ 1 = 0 H_3:3->011 \\ H_5:5->101 \\ H_6:6->110 \\ H_7:7->111 \\ 三个分组,分别进行偶校验 \\ P_1=H_3\bigoplus H_5\bigoplus H_7=D_1\bigoplus D_2\bigoplus D_4=0\bigoplus 1\bigoplus1=0 \\ P_2=H_3\bigoplus H_6\bigoplus H_7=D_1\bigoplus D_3\bigoplus D_4=0\bigoplus 0\bigoplus1=1 \\ P_3=H_5\bigoplus H_6\bigoplus H_7=D_2\bigoplus D_3\bigoplus D_4=1\bigoplus 0\bigoplus1=0 H3:3−>011H5:5−>101H6:6−>110H7:7−>111三个分组,分别进行偶校验P1=H3⨁H5⨁H7=D1⨁D2⨁D4=0⨁1⨁1=0P2=H3⨁H6⨁H7=D1⨁D3⨁D4=0⨁0⨁1=1P3=H5⨁H6⨁H7=D2⨁D3⨁D4=1⨁0⨁1=0
- 检错纠错
S 1 = P 1 ⨁ D 1 ⨁ D 2 ⨁ D 4 S 2 = P 2 ⨁ D 1 ⨁ D 3 ⨁ D 4 S 3 = P 3 ⨁ D 2 ⨁ D 3 ⨁ D 4 S_1=P_1\bigoplus D_1\bigoplus D_2\bigoplus D_4 \\ S_2=P_2\bigoplus D_1\bigoplus D_3\bigoplus D_4 \\ S_3=P_3\bigoplus D_2\bigoplus D_3\bigoplus D_4 S1=P1⨁D1⨁D2⨁D4S2=P2⨁D1⨁D3⨁D4S3=P3⨁D2⨁D3⨁D4
补充:
如果
P
1
和
P
2
同时发生错误,那么究竟是
D
1
发生的还是
P
1
和
P
2
如果P_1和P_2同时发生错误,那么究竟是D_1发生的还是P_1和P_2
如果P1和P2同时发生错误,那么究竟是D1发生的还是P1和P2
无法区分到底是1位错还是2位错
需加上“全校验位”,对整体进行偶校验
补充