基本概念
码距:一个编码系统中,任意2个合法码字之间的码距的最小值称为该编码系统的码距。
000和001,码距为1
根据信息论基本原理,码距d与校验码检错和纠错能力如下:
(1) d>=e+1: 可检测e个错误
(2) d>=2t+1: 可纠正t个错误
(3) d>=e+t+1: 当e>=t, 可检测e个错误并纠正t个错误。
奇偶校验码
D奇=D1⨁D2⨁D3⨁D4…⨁Dn
D偶=D1⨁D2⨁D3⨁D4…⨁Dn
码距由1增加到2,奇偶校验是一种错误检错码
| 原编码 |
奇校验 |
偶校验 |
| 0000 |
0000 1 |
0000 1 |
| 0010 |
0010 0 |
0010 1 |
| 1100 |
1100 1 |
1100 0 |
| 1010 |
1010 1 |
1010 0 |
循环冗余校验码
1.N=k+r⩽2r−1,k是有效信息位,r是校验信息位
2.生成多项式G(x)

3.模2运算

- ÷:永不借位。当部分余数的首位为1时,商为1;当部分余数的首位为0时,商为0

例如对4位信息1100进行校验
1.由N=k+r⩽2r−1的关系可以计算出r的最小值为3
2.选择生成多项式为G(x)=1011
3.发送方:用得到的余数替换编码中的最后r位即可得到对应的CRC编码,即1100000 --> 11000101

4.接受方:做模2运算
- 无错,余数为0,得到信息位1100
- 有错,余数非0,根据表查询纠错


当然,这个过程是循环的,如果没有表,也可以通过模运算次数来判断第几位出错
海明校验码
1.确定校验位数

2.确定校验位置,规定校验位Ki在海明码位号为2i−1上
3.计算校验位Pi
| 数据位 |
校验位 |
| D1 |
K1、K2 |
| D2 |
K1、K3 |
| D3 |
K2、K3 |
| D4 |
K1、K2、K3 |
| D5 |
K1、K4 |
| D6 |
K2、K4 |
| D7 |
K1、K2、K4 |
| D8 |
K3、K4 |
| D9 |
K1、K3、K4 |
| D10 |
K2、K3、K4 |
| D11 |
K1、K2、K3、K4 |
| D12 |
K1、K5 |
对于多异或结构:
奇数个1最终值为1;偶数个1最终值为0
K1=D1⨁D2⨁D4⨁D5⨁D7⨁D9⨁D11⨁D12
K2=D1⨁D3⨁D4⨁D6⨁D7⨁D10⨁D11
K3=D2⨁D3⨁D4⨁D8⨁D9⨁D10⨁D11
K4=D5⨁D6⨁D7⨁D8⨁D9⨁D10⨁D11
K5=D12
例如对1011000进行检验
1.由公式N=k+r⩽2r−1可知:r=4,k=7,那么N=r+k=11
2.发送方:进行检验后最大为K4,可计算得:K1=1,K2=0,K3=1,K4=0。所以发送的海明码为:1010101


3.接收方:
- 无错,S1S2S3…Sn=000…0
- 有错,错误1位

- 有错,错误2位。海明码错误两位时,可以纠正一位的错误