汉明码

计算汉明码是通过扩展奇偶位以标识位错误。创建汉明码方法如下:
标识所有2的次方作为奇偶位(位置1,2,4,8,16,32等等),剩余其他的位用作数据编码。(位置3,5,6,7,9,10,11,12,13,14,15,17等等)

每一个奇偶位由汉明码中其他多个位计算,根据奇偶位的位置选取一组有序数据,由这组有序数组计算出奇偶位的值。有序数据有个很有意思的特点就是从汉明码中交替跳跃选取。
Position 1:选取1位,跳过1位,选取1位,跳过1位,选取1位,如此类推。(1,3,5,7,9,11,13,15,...)
Position 2:选取2位,跳过2位,选取2位,跳过2位,选取2位,如此类推。
(2,3,6,7,10,11,14,15,...)
Position 4:选取4位,跳过4位,选取4位,跳过4位,选取4位,如此类推。
(4,5,6,7,12,13,14,15,20,21,22,23...)
Position 8:选取8位,跳过8位,选取8位,跳过8位,选取8位,如此类推。
(8-15,24-31,40-47...)
Position 16:选取16位,跳过16位,选取16位,跳过16位,选取16位,如此类推。
(16-31,48-63,80-95...)
Position 32:选取32位,跳过32位,选取32位,跳过32位,选取32位,如此类推。
(32-63,96-127,160-191,...)
如果选取的位置1的总和是偶数,设置奇偶位为0,如果1的总和为奇数设置奇偶位为1。
例如:一组数据是10011010
创建数据文,留下奇偶位空间,_ _ 1 _0 0 1 _ 1 0 1 0
计算每一个奇偶位的校验值(用?代表要设置的奇偶位)
Position 1选取位:1,3,5,7,9,11:
? _ 1 _0 0 1 _ 1 0 1 0,总和为4,偶数奇偶性设置Position 1为0:0 _ 1 _0 0 1 _ 1 0 1 0
Position2选取位:2,3,6,7,10,11:
0 ? 1 _0 0 1 _ 1 0 1 0,总和为3,奇数奇偶性设置Position 2为1:0 1 1 _0 0 1 _ 1 0 1 0
Position4选取位:4,5,6,7,12
0 1 1 ? 0 0 1 _ 1 0 1 0,总和为1,奇数奇偶性设置Position4为1:0 1 1 1 0 0 1 _ 1 0 1 0
Position8选取位:8,9,10,11,12:
0 1 1 1 0 0 1 ? 1 0 1 0,总和为2,偶数奇偶性设置Position8为0:0 1 1 1 0 0 1 0 1 0 1 0

因此数据文为:0 1 1 1 0 0 1 0 1 0 1 0。
发现并确定错误位:
上述例子创建了数据文是0 1 1 1 0 0 1 0 1 0 1 0。假设接收到的是011100101110,那么接受者能够计算出哪一个位是错误的而且能纠正它。方法是校验每一个选择位,写下所有错误奇偶位,这样你就能发现奇偶性位置2和8是错误的。不要意外,2+8=10,位置10就是错误位的位置。一般的,选取所有的奇偶位并且将奇偶为错误的位置加起来所得到的和就是错误位的位置。假定下面数据文为偶校验,你自己可以试下否是正确。如果是错误的,指出错误位置。
010101100011
111110001100
000010001010


翻译水平不高,很多地方也不是直译的,有错误请指正。

原文:http://users.cs.fiu.edu/~downeyt/cop3402/hamming.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值