您的位置:首页 > 理论基础

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

2016-06-10 15:01 288 查看

数学原理

刚刚上计算机组成原理课的时候,或许会觉得汉明码的横空出世太神奇了,它是怎么知道二进制信息在传输过程中哪一位传错的呢?开始只是死记,后来发现太难记住了,于是想一探究竟,究竟是什么支配着这种编码纠错的可靠性。

首先我们要知道的是,汉明码是只具有一位纠错能力的编码,那么二进制信息的传输校验可以在最多只有一位发生误传这个假设下讨论。

这个问题的一个数学模型是:发送方将一串任意长度的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息