计算机组成原理学习笔记-海明校验码

说明:可以先看实际举例再回头看其他说明便于快速理解。

一、特点

既可检错也可纠错

二、用途背景

原因:信息传输时因为种种原因会出现部分信息发生改变的情况,即二进制信息的某个别位出现错误的情况。
用途:通过在原信息的特定位置加上海明码的方法,来实现对一串数据位中的某个(注意是“某个”,大多数情况下只会出现一个位出错,
若多位出错则该校验法失效)出错位的纠错(即错误定位和纠正)

二、预备定义和文本约定

  1. 信息位:用于存放要传输信息数据的二进制0和1;
  2. 校验位:即在原本信息位中插入的二进制校验码0和1。
  3. 信息码:信息位构成的二进制序列
  4. 海明校验码(后面简称校验码):由所有校验位组成的二进制序列
  5. I 1 _ 1 1……I n _ n n:第一到第n个信息位
  6. r 0 _0 0……r n _ n n:第一到第n个校验位

三、主要步骤

  1. 确定校验位个数:根据要传输的信息位个数,确定要插入的校验位个数,要满足2r ≥ I + r + 1(r为校验位个数,I为信息位个数)
  2. 确定校验位插入位置:由低位到高位依次插入所有位,要求2n位置下插入的都是校验位
  3. 确定校验码并插入:1. 求出每个信息位的位置十进制拆解成2的幂次方多项式之和,每个系数不为0的幂次方(假设为n)确定将影响r n _n n的值的信息位。(比如:第7位要插入I 4 _4 4,十进制位置7拆解为22+21+20,即说明这个信息位I 4 _4 4会影响r 2 _2 2,r 1 _1 1,r 1 _1 1)。然后r n _n n=每个会影响该校验位的信息位的异或
  4. 数据传输
  5. 接收数据
  6. 重新求校验码:因为接受的数据校验位的位置可以确定,即用忽略掉所有2n位后得到的信息位按照3重新求得校验码
  7. 校验码比对:取接收的校验码和重新求得的校验码按位进行异或操作,得到一个与校验码的等长二进制序列.
  8. 错误定位 : 将上述等长序列化为十进制,即得到出错位所在的位置。
  9. 纠错:对接收数据中的出错位取反

四、核心思想

n个校验位能记录至多2n-1个位的奇偶信息:
  • **为什么-1?**这里是为了巧妙利用校验位的安插位置,使得校验位的改变,能表示出错的十进制位置化成二进制后,对应位的改变。传输数据的n个位从1开始。因此去掉全0的序列。
  • (去掉全0的序列后) n个校验位组成的二进制序列有2n种,每种序列化为十进制d,确定传输数据中d位置的位的状态,通过传输前后校验码的异或比对,即能确定状态发生改变的位的位置,即实现的错误定位。而对二进制的纠错,只需对出错位取反即可。

四、实际举例

假设要传输二进制信息10111,五位信息位为I5I4I3I2I1,而接收到的信息码为11111,整个传输及纠错流程又是怎样?

  1. 确定校验位个数r
    代入公式2r ≥ I + r + 1 后,2r ≥ 5 + r + 1,得到r=4.
  2. 确定校验位插入位置
    校验位个数确定,总位数就确定为9位了。对应2n位置下将插入的都是校验位,剩下的依次将插入信息位,如下表:
987654321总位数
I5I4I3I2I1信息位
r3r2r1r0校验位
  1. 确定校验码并插入
    ∵I5的位置为9 = 23+20,影响r3,r0.
    I4的位置为7 = 22+21+20,影响r2,r1,r0.
    I3的位置为6 = 22+21,影响r2,r1.
    I2的位置为5 = 22+20,影响r2,r0.
    I1的位置为3 = +21+20,影响r1,r0.
    r0 = I1 ⊕I2⊕ I4⊕I5 = 1
    r1 = I1 ⊕ I3⊕I4 = 0
    r2 = I2⊕ I3⊕ I4 = 0
    r3 = I5 = 1
    得到校验码为:1001
    插入后如下表:
987654321总位数
10111信息位
1001校验位
  1. 传输后接收后重新计算海明校验码
    接收到的数据如下表
987654321总位数
11111信息位
1001校验位

同步骤3,求得新校验码为:1110

  1. 校验码比对
    用新校验码1111与接收到的旧校验码1001进行按位异或运算,得到:0111

  2. 错误定位
    将5求得的比对结果化为十进制为7,即得出接收数据中,错误位置为7

  3. 纠错
    对错误位置按位取反

987654321总位数
11->0111信息位
1001校验位

得到信息码为10111,即为正确信息

## 如有谬误,欢迎指正
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值