校验码——奇偶校验/CRC/海明校验

校验码,是在计算机进行数据传输的过程中,为了提高数据的可靠性设计的,一般是在信息位以外增加校验位来实现,分为多种编码形式。

名称特点
奇偶校验码能校验,不能纠错。
循环冗余校验CRC能校验,不能纠错。
海明码校验能校验,也能纠错。

1. 奇偶校验码

奇偶校验码由若干位有效信息的头部或者尾部(信息位),加上一个二进制位(校验位)组成。奇校验码即整个校验码中1的个数为奇数偶校验码即整个校验码中1的个数为偶数

信息位校验位校验码
奇校验码1001101110011011
偶校验码1001101010011010

注意,
如果有奇数个位产生错误码,则奇偶性发生变化,可以校验出误码,但不能纠错;
如果有偶数个位产生错误码,则奇偶性未发生变化,无法校验出误码(又称“漏检”)。

例如:

编码错误数误码结果
1011奇数1001奇校验发生变化。
1011偶数1000奇校验未发生变化,漏检。
1111奇数1011偶校验发生变化。
1111偶数1001偶校验未发生变化,漏检。

2. 循环冗余校验(CRC)

CRC可以检错,但不能纠错;检错能力强,漏检率低;虽然运算过程较复杂,但利于计算机硬件实现;广泛应用于数据链路。

学习循环冗余校验码,我们需要先了解异或运算和模2除法运算。

2.1 异或运算

异或运算,相同为0,不同为1。
0⊕0 = 0;0⊕1=1;1⊕0=1;1⊕1=0.

异或运算01
001
110

2.2 模2除法运算

运算过程概括:
第一步,被除数首位是几商就取几;
第二步,异或运算;
第三步,异或后余数去首位(肯定是0);
第四步,补末位(落数),再上商。
第五步,循环计算至余数位数不足除数位数时,得余数结果。

示例题:
计算1011 0010 000 模2除 1100 1。
解题:

序号运算事项过程结果
1被除数首位是几商就取几。1011 0010 000首位是1。商1
2异或运算10110⊕11001详见2.1 异或运算01111
3异或后去掉首位(肯定是0)。01111去掉首位01111
4补末位(落数),再上商。1111从被除数落下一位(即0),再取首位上商(即1)。11110
5循环至余数位数不足除数位数时,得余数结果。10110010000/11001继续循环1、2、3、4,最后余数1010已不足被除数5位。结果为1101010,余数为1010。

模2运算手稿

2.3 CRC循环冗余校验过程

CRC循环冗余校验,个人认为可以理解是一种对称加密算法,整个校验过程分为以下三步:

  • 第一步,双方约定一个生成多项式G(x)。注意,算法要求生成多项式必须包含最低次项。
    例如:约定G(x) = x4+x2+x+1,则第二、三步中模2运算的除数为10111。转换过程如下表所示:
生成多项式最低次项
G(x)x4x2x1
G(x)完整版1 * x40 * x31 * x21 * x11*x0
比特串10111
  • 第二步, 发送方基于待发送的数据生成多项式计算出差错检查码(即:冗余码),将其添加在待传输数据的后面一起发送。
  • 第三步, 接收方基于接收到的数据生成多项式计算是否产生了误码

2.4 CRC真题演练

题目: 发送方,待发送数据为101001,双方约定生成多项式G(x)=x3+x2+1,请计算编码后信息。 接收方,接收到的数据为101101001,判断传输是否产生误码。
解题:
首先,处理发送方的待发送数据。

序号运算事项过程结果
1将生成多项式转为比特串G(x)=x3 +x2+11 * x3+1 * x2+0 * x1+1 * x01101
2构造被除数101001将待发送数据后面添加生成多项式最高次数个0(本题为3)101001000
3模2除法运算101001000/1101详见2.2 模2除法运算余数为0001,去掉前面0,余1。
4冗余码1位数应与生成多项式最高次数相同(即3位),不足则前面补0。001
5编码后信息101001将冗余码添加在待发送数据后一起发送。101001 001

其次,校验接收方接收到的数据。

序号运算事项过程结果
1将生成多项式转为比特串G(x)=x3 +x2+11 * x3+1 * x2+0 * x1+1 * x01101
2构造被除数101101001接收到的数据就是被除数。101101001
3模2除法运算101101001/1101详见2.2 模2除法运算余数为11。
4检查余数11余数为0,传输过程无误码;余数不为0,传输过程产生误码。有误码

3. 海明码

海明码是利用奇偶性进行校验。 什么是奇偶性校验?——看“1. 奇偶校验码”。
海明码的编码规则如下:

说在前面:Dn代表数据码,Pk代表校验码,Hn+k代表海明码。

  1. 校验位数,公式:2k-1 >= n+k。例如:数据码为1001,n为4,则k为3满足公式,即校验位数为3 。
  2. 校验码Pi要放在2i-1的海明码位上。
  3. 海明码中任何一位都是由若干个校验码校验。
  4. 海明码中的校验码由自身校验。
  5. 被校验的海明码下标 = 所有参与校验的校验码下表之和。

3.1 海明真题演练

题目: 待传输数据码为1010,采用海明校验,请分别输出奇偶规则下的海明码。
解题:

首先,设定数据码为D,数据位数n为4,即D4;校验码为P,校验位数k,即Pk;海明码H,海明位数n+k,即Hn+k

其次,计算校验位k,公式 2k-1 >= n+k,条件n = 4,则 2k >= 5+k,推导出k=3,即可满足公式。所以海明码位数为n+k=7,即H7

现在,我们分别知道了数据码D4=1010,P3=? ? ? ,H7= ? ? ? ? ? ? ? 。

然后,计算校验码在海明码中的位数,pk放在海明码2k-1的下标位上。前面我们已经推导出k=3,所以校验码为P1、P2、P3 ,那么他们分别在海明码的位置如下:
21-1 = 1
22-1 = 2
23-1 = 4
所以,海明码中的校验码位置如下表所示:

海明码H1H2H3H4H5H6H7
数据码D1D2D3D4
校验码P1P2P3
海明码值??1?010

注意,海明码中的校验位确定后,数据位自动按顺序填充进海明码。

接着,就该求校验码的奇偶值了,这里仔细回顾编码规则中的3、4、5条,如下表所示:

校验码P1P2P3
校验码在海明码中的下标位数124
海明码 / 校验码、数据码数据码值校验规则是否参与校验是否参与校验是否参与校验
H1/P1校验码校验自身
H2 /P2校验码校验自身
H3/D11计算下标之和,3=1+2
H4 /P3校验码校验自身
H5/D20计算下标之和,5=1+4
H6/D31计算下标之和,6=2+4
H7/D40计算下标之和,7=1+2+4

统计上表中“是否参与校验”为“是”的情况得出校验码。
按照校验码列,自上而下取参与校验的数据码的值(排除校验码自身),结果如下:
P1 = 1 0 0
P2 = 1 1 0
P3 = 0 1 0
根据以上结果取奇偶值,如下表所示:

校验码参与校验结果奇校验规则偶校验规则
P11 0 001
P21 1 010
P30 1 001

所以,最终结果分别是奇校验规则(0110010)偶校验规则(1011010)

海明码H1H2H3H4H5H6H7
数据码D1D2D3D4
校验码P1P2P3
海明码值(奇校验规则)0110010
海明码值(偶校验规则)1011010
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值