软件设计---海明码(汉明码)的计…

汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。由于汉明编码简单,它们被广泛应用于内存(RAM)。
汉明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。利用一个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置

1、这里使用字母 D 代表数据。
2、这里使用字母 P 代表在数据中插入的校验码。
3、 这里使用字母 H 代表插入校验码后的所有数据
---------------------------------------------------------------------------
一、计算校验位的个数
举个例子:
假设数据位为: 101101001 共9位
根据公式:
软件设计---海明码(汉明码)的计算    (P 代表校验码的位数,D 代表数据的位数)
由于数据位有9位,带入公式,变形得到: 软件设计---海明码(汉明码)的计算,可知当 P 最小为 4 的时候满足公式
所以D = 4, 即 9 个数据位需要 4 位校验位。
---------------------------------------------------------------------------
二、计算校验位的位置
根据公式  软件设计---海明码(汉明码)的计算计算,(i 代表是第几个校验码)。
校验码的位置依次是:
第1个:2的0次方(第 1 个位置)
第2个: 2的1次方 第 2 个位置
第3个: 2的2次方 第 4 个位置
第4个: 2的3次方 第 8 个位置
第5个: 2的4次方 第 16 个位置
第6个: 2的5次方 第 32 个位置
......   ,其他位置上就是数据位

最后得到的海明码的位置排序是:(P 代表校验码,D 代表数据、排列从右往左)
D8、 D7、 D6、 D5、 D4、 P4、 D3、 D2、 D1、 P3、 D0、 P2、 P1
所以,带入数据位得: 1、0、0、1、0、P4、1、1、0、P3、1、P2、P1
---------------------------------------------------------------------------
三、最后就是要计算出校验码具体的值了
既然是校验码,肯定是用来校验数值的。
(校验取值方法:海明码【特别强调,海明码的第几位,不是校验码的第几位】的第几位就取几位跳几位,包括自身。
比如p1在第一位,就取一位,再跳过一位;
比如p3在第四位,就取四位,再跳过四位)

p1校验:p1、1、0、1、0、0、1
p2校验:p2、1、1、1、1、0
p3校验:p3、0、1、1、0、1
p4校验:p4、0、1、0、0、1

之后有两种校验方法分别确定 p1、p2、p3、p4 的值(奇校验和偶校验)
奇校验:保证 1 的个数为奇数个
偶校验:保证 1 的个数为偶数个

这里采用偶校验的方法:
p1校验:共有 3 个 1 ,即 奇数个 1 ,偶校验为 p1 = 1
p2校验:共有 4 个 1 ,即 偶数个 1 ,偶校验为 p2 = 0
p3校验:共有 3 个 1 ,即  奇数 个 1 ,偶校验为 p3 = 1
p4校验:共有 2 个 1 ,即 偶数个 1 ,偶校验为 p4 = 0

所以最终的海明码的值为: 1、0、0、1、0、0、1、1、0、1、1、0、1



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值