关于汉明码的数学原理与计算

数学原理

刚刚上计算机组成原理课的时候,或许会觉得汉明码的横空出世太神奇了,它是怎么知道二进制信息在传输过程中哪一位传错的呢?开始只是死记,后来发现太难记住了,于是想一探究竟,究竟是什么支配着这种编码纠错的可靠性。
首先我们要知道的是,汉明码是只具有一位纠错能力的编码,那么二进制信息的传输校验可以在最多只有一位发生误传这个假设下讨论。
这个问题的一个数学模型是:发送方将一串任意长度的01代码通过一定的处理,使得代码的在只有一位发生传送错误(不包括一位代码的增加或者缺失)或者完全正确的传输送达接收方的前提下,接收方能还原发送方发送的代码。
汉明码给出了一个完美的解答。它的解决方案如下:设欲检测的二进制代码有n位,为使其具有纠错能力,需要增加k位检测为。为了能准确对错误定位以及指出代码没错,新增添的检测位数k应满足

k的位数确定以后,便可由它们所承担的检测任务设定设定它们在被检测代码中的位置以及它们的取值。
设 位代码自左向右依次编为第1,2,3,4,…., 位,而将k为检测为记作 (这里的C应该是check的首字母把。。。),重点来了:
检测的 小组包含1,3,5,7,9,11…………位。
检测的 小组包含2,3,6,7,10,11,14,15……位
检测的 小组包含4,5,6,7,12,13,14,15,……位
检测的 小组包含8,9,10,11,12,13,14,15,24,……位

为什么要这样分呢?
不难发现 小组都是奇数的,我们可以这样给他划分:

再来看 小组,可以这样划分:

小组,可以这样划分:

小组,可以这样划分:

注意到奇数有一个共同点,就是它的二进制最低位都是1,其中的规律看清楚了吧。
小组里面每一组只有1个元素,一个小组加2就变成下一个小组,如
小组里面每一组只有2个元素,一个小组加4就变成下一个小组,如
小组里面每一组只有4个元素,一个小组加8就变成下一个小组,如
这不禁让我想到他们的二进制表示会出现这样的情况,因为 小组每一个都是奇数,所以
的二进制表示最低位一定是1,因为

1 3 5 7 9 11 13
二进制 1 11 101 111 1001 1011 1101
而 小组二进制表示次低位为1,因为

2 3 6 7 10 11 14
二进制 10 11 110 111 1010 1011 1110
而 小组二进制表示倒数第三位为1,因为

4 5 6 7 12 13 14
二进制 100 101 110 111 1100 1101 1110
讨论到这里,它的校验原理就几乎全部出来了。因为每一组都有一个固定的数字不变,如 每一个数的倒数第 位一定为1,其他位则包含有所有的可能。那它是怎么校验的呢?为了看得更加具体,我们假设只有第10位代码传输出错因为10的二进制表示是1010,假设采取的是偶校验(其实奇偶校验只是实现检验的一个工具,跟校验原理没有任何关系),那么第10位在 和 这两个小组里面,因为

(因为是偶校验,奇校验类似,自己分析),所以有以下式子:

因此:

同理,

而对于其他不含有第十位的小组来说,它们的校验值一定是零,于是生成的出错代码位置就被指出来了,它就是1010这个位置。实现了校验。总而言之,汉明码的精髓所在就是依次确定出错位置的每一位二进制值(是位置的二进制值,比如第十个位置,就是依次确定1010这四个数,至少需要4个校验位来确定),所以

的出现就显而易见了。因为这个式子能确保n个信息位加上k个校验位后数值小于 , 是个什么数呢?它是k位二进制能表示的最大的数 ,所以加上k个校验位以后,不需要增加校验位的位数。。。。这是在复习机组的时候不小心发现的,但是机组考得好烂,哎,考了就考了吧,没法去追究了。。。。

汉明码计算实例

原信息码:10011101
(1)确定校验码位数
原始信息码一共8,根据前面的表可得知校验码位数为4
(2)确定校验码位置
??1?001?1101
(2)计算机各位校验码
Pn校验码位校验的码字位为:第2n-1位(也就是Pn本身)、第2n-1+1位、第2n-1+2位、第2n-1+3位、……、第2n-1位,第3×2n-1位、第3×2n-1+1、……、第2×2n-1位,第5×2n-1位、第5×2n-1+1位、第3×2n-1位,……、第7×2n-1位、第7×2n-1+1位、……、第4×2n-1位,……,第(2m-1) 2n-1位、……第m×2n-1位
P1(n=1):1、3、5、7、9、11 #—-检验的bit位,下同
1 1 0 1 1 0 #—-对应位的值,下同
P2(n=2):2、3、6、7、10、11
1 1 0 0 1 1
P3(n=3):4、5、6、7、12
0 0 0 1 1
P4(n=4):8、9、10、11、12
1 1 1 0 1
最终得出插入校验码后的信息码为:111000111101

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值