计组+网络——数据校验码之奇偶校验码海明校验码以及循环冗余校验码

一、奇偶校验码(Parity Bit)

它是一种检错码。能发现代码中一位出错的情况,因为其利用的是编码中1的个数的奇偶性作为依据,所以不能发现偶数位错误。

二、海明校验码(Hamming Code)

假设校验位个数为 r,则它能表示 2r 种情况,用其中一种情况表示“没有出错”,其余 2r-1 种情况指出错误发生在哪一位,信息位加校验位总共有 k+r 位,因此发生错误的情况也有 k+r 种,于是 2r -1 需要能校验 k+r 种情况,也就是说要满足关系式:
2 r ⩾ k + r + 1 {2^r} \geqslant k + r + 1 2rk+r+1

1. 确定海明码的位数

信息 n 位,假设校验位 k 位,总共会有2k 种情形,除了一种正确的情况,其余2k - 1 要能满足编码后的数据位数。即 2k -1 ⩾ \geqslant n + k

假设信息位为 1010
信息位有4位, 可以得出校验位k=3,设信息位 D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 D 1 D_1 D1,校验位
P 3 P_3 P3 P 2 P_2 P2 P 1 P_1 P1,那么对应的海明码为 H 7 H_7 H7 H 6 H_6 H6 H 5 H_5 H5 H 4 H_4 H4 H 3 H_3 H3 H 2 H_2 H2 H 1 H_1 H1

2. 确定校验码的分布

规定:校验码 P i P_i Pi 放在海明码 2i-1 的位置上,信息位按顺序放在其余位置
如图:

H 7 H_7 H7 H 6 H_6 H6 H 5 H_5 H5 H 4 H_4 H4 H 3 H_3 H3 H 2 H_2 H2 H 1 H_1 H1
D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 P 3 P_3 P3 D 1 D_1 D1 P 2 P_2 P2 P 1 P_1 P1
1010

3. 求校验位的值

D1 (在第3位): 0 1 1(3)
D2 (在第5位): 1 0 1 (5)
D3 (在第6位): 1 1 0(6)
D4 (在第7位): 1 1 1(7)
P1(在第1位): 0 0 1
P2(在第2位): 0 1 0
P3(在第3位): 1 0 0

因为需要根据校验位来确定在传输信息中哪一位出了错误,所以校验位要与信息位建立一定的关系:
(从右至左竖着看,P1、P2、P3各管一列)右第一列,第3、5、7位的数值都是1,于是将D1、D2、D4 和 P1分为一组;右第二列,第3、6、7位的数值都是1,将D1、D3、D4 和P2分为一组;右第三列,第5、6、7位的数值都是1,将D2、D3、D4 和P3分为一组
注意:题目中可能会要求使用奇校验或偶校验求P的值,此处以偶校验为例
P1 = D1 ⊕ \oplus D2 ⊕ \oplus D4 = 0 ⊕ \oplus 1 ⊕ \oplus 1 = 0
P2 = D1 ⊕ \oplus D3 ⊕ \oplus D4 = 0 ⊕ \oplus 0 ⊕ \oplus 1 = 1
P3 = D2 ⊕ \oplus D3 ⊕ \oplus D4 = 1 ⊕ \oplus 0 ⊕ \oplus 1 = 0
于是:

H 7 H_7 H7 H 6 H_6 H6 H 5 H_5 H5 H 4 H_4 H4 H 3 H_3 H3 H 2 H_2 H2 H 1 H_1 H1
D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 P 3 P_3 P3 D 1 D_1 D1 P 2 P_2 P2 P 1 P_1 P1
1010010

4. 检错

检验方程:
S1 = P1 ⊕ \oplus D1 ⊕ \oplus D2 ⊕ \oplus D4
S2 = P2 ⊕ \oplus D1 ⊕ \oplus D3 ⊕ \oplus D4
S3 = P3 ⊕ \oplus D2 ⊕ \oplus D3 ⊕ \oplus D4
在这里插入图片描述

当接收到:1010010,可计算得出:
S1=0
S2=0
S3=0
当接收到:1010000
S1=0
S2=1
S3=0
说明第010位出错,即第2位出错

检验d位错,码距为d+1;纠正d位错,码距为2d+1

三、循环冗余校验码(Cyclic Redundancy Check)

基本思想

数据的发送方、接收方约定一个除数
K个信息为+R个校验位作为“被除数”,添加校验位后需保证除法的余数为0
收到数据后,进行除法检查余数是否为0,若余数非0则说明出错,则进行重传或者纠错

求解步骤

设生成多项式是G(x)=x3+x2+1,信息码为101001,求对应的CRC码
1、 确定K、R以及生成多项式对应的二进制码
K=信息码的长度=6
R=生成多项式的最高次幂=3
校验码的位数N=K+R=9

生成多项式G(x)= 1 * x3 + 1 * x2+ 0 * x1+ 1 * x0,对应二进制码 1101

2、移位
为了确定最低位R位的校验位,将信息码左移R位,低位先补0
101001000

3、相除
对移位后的信息码,用生成多项式进行模2除法,产生余数
在这里插入图片描述
得到的CRC码:101001 001

4、检错和纠错
发送:101001001 记为 C 9 C 8 C 7 C 6 C 5 C 4 C 3 C 2 C 1 C_{9}C_{8}C_{7}C_{6}C_{5}C_{4}C_{3}C_{2}C_{1} C9C8C7C6C5C4C3C2C1
接收:101001001 用 1101 进行模2除,余数为000,代表没有出错
接收:101001011 用1101 进行模2除,余数为010,代表
在这里插入图片描述
出错位有可能是第2位或者第9位,说明CRC码不具备纠错能力。
若生成多项式选择得当,且 2 R ⩾ K + R + 1 2^R\geqslant K+R+1 2RK+R+1,则CRC码可纠正1位错。

理论上,CRC码可以:

  • 检测所有奇数位个错误
  • 检测出所有双比特的错误
  • 检测出所有小于等于检验位长度的连续错误
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值