基本概念

码距:一个编码系统中,任意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=D1D2D3D4DnD_{奇}= \overline{D_{1}\bigoplus D_{2} \bigoplus D_{3}\bigoplus D_{4}…\bigoplus D_{n}}
D=D1D2D3D4DnD_{偶}= D_{1}\bigoplus D_{2} \bigoplus D_{3}\bigoplus D_{4}…\bigoplus D_{n}
码距由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+r2r1N=k+r\leqslant 2^r-1,k是有效信息位,r是校验信息位
2.生成多项式G(x)
数据校验码(奇偶校验码、循环校验码、海明码)

3.模2运算

  • +/-:异或逻辑
  • ×:模2加求部分积之和

数据校验码(奇偶校验码、循环校验码、海明码)

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

数据校验码(奇偶校验码、循环校验码、海明码)


例如对4位信息1100进行校验

1.由N=k+r2r1N=k+r\leqslant 2^r-1的关系可以计算出r的最小值为3
2.选择生成多项式为G(x)=1011
3.发送方:用得到的余数替换编码中的最后r位即可得到对应的CRC编码,即1100000 --> 11000101
数据校验码(奇偶校验码、循环校验码、海明码)
4.接受方:做模2运算

  • 无错,余数为0,得到信息位1100
    数据校验码(奇偶校验码、循环校验码、海明码)
  • 有错,余数非0,根据表查询纠错
    数据校验码(奇偶校验码、循环校验码、海明码)数据校验码(奇偶校验码、循环校验码、海明码)
    当然,这个过程是循环的,如果没有表,也可以通过模运算次数来判断第几位出错

海明校验码

1.确定校验位数
数据校验码(奇偶校验码、循环校验码、海明码)

2.确定校验位置,规定校验位KiK_{i}在海明码位号为2i12^{i-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=D1D2D4D5D7D9D11D12K_{1}= D_{1}\bigoplus D_{2}\bigoplus D_{4}\bigoplus D_{5}\bigoplus D_{7}\bigoplus D_{9}\bigoplus D_{11}\bigoplus D_{12}
K2=D1D3D4D6D7D10D11K_{2}= D_{1}\bigoplus D_{3}\bigoplus D_{4}\bigoplus D_{6}\bigoplus D_{7}\bigoplus D_{10}\bigoplus D_{11}
K3=D2D3D4D8D9D10D11K_{3}= D_{2}\bigoplus D_{3}\bigoplus D_{4}\bigoplus D_{8}\bigoplus D_{9}\bigoplus D_{10}\bigoplus D_{11}
K4=D5D6D7D8D9D10D11K_{4}= D_{5}\bigoplus D_{6}\bigoplus D_{7}\bigoplus D_{8}\bigoplus D_{9}\bigoplus D_{10}\bigoplus D_{11}
K5=D12K_{5}=D_{12}


例如对1011000进行检验

1.由公式N=k+r2r1N=k+r\leqslant 2^r-1可知:r=4,k=7,那么N=r+k=11
2.发送方:进行检验后最大为K4,可计算得:K1=1,K2=0,K3=1,K4=0。所以发送的海明码为:1010101

数据校验码(奇偶校验码、循环校验码、海明码)
数据校验码(奇偶校验码、循环校验码、海明码)

3.接收方:

  • 无错,S1S2S3Sn=0000S_{1}S_{2}S_{3}…S_{n}=000…0
    数据校验码(奇偶校验码、循环校验码、海明码)
  • 有错,错误1位
    数据校验码(奇偶校验码、循环校验码、海明码)
    数据校验码(奇偶校验码、循环校验码、海明码)
  • 有错,错误2位。海明码错误两位时,可以纠正一位的错误
    数据校验码(奇偶校验码、循环校验码、海明码)

相关文章: