计算机组成原理汉明码~通俗易懂

汉明码(Hamming Code)原理及实现

汉明码实现原理
汉明码(Hamming Code)是广泛用于内存和磁盘纠错的编码。汉明码不仅可以用来检测转移数据时发生的错误,还可以用来修正错误。(要注意的是,汉明码只能发现和修正一位错误,对于两位或者两位以上的错误无法正确和发现)。

设将要进行检测的二进制代码为n位,为使其具有纠错能力,需要再加上k位的检测位,组成n+k位的代码。那么,新增加的检测位数k应满足:

2k -1≥n+k
代码长度和检测位数的关系

nk
12
2~43
5~114
12~265

当k的位数确定后,便可根据承担的检测任务设定他们在传送代码中的位置和他们的取值。首先,将所要检测的代码分为P n组,分多少个组,我们通过k的值来确定。下面我用一个例子来说明。

假设将要进行检测的二进制代码为0101,位数n=4,根据公式2k≥n+k+1可以得出k的值是3,所以最终形成的汉明码应为n+k=7位。

所以分组分为P1、P2、P4。原因则是第一组是20、第二组则是21 、同理第三组则是22 、依次列推分组应按照2k-1。同时以后根据分组产生的数插入的位置也是按照此规律插入,比如第一组插入20、即第1位,第二组插入21 、即第2位,以此类推。那么组分好了,他们每一组中包含的位则是:

p1包含(1,3,5,7,9,11,…位)

p2包含(2,3,6,7,10,11,14,15,…位)

p3包含(4,5,6,7,12,13,14,15,…位)

编号12345678910
二进制0001001000110100010101100111100010011010

将编号转成二进制从右向左,如果第一位是1,例如编号是1,3,5,7…的就分入第一组,如果第二位是1的,例如编号2,3,6,7,10…的就分入第二组,以此类推将所有的编号分入相应的组中。下面我么来看例子0101是如何产生汉明码的(采用配偶原则)

序号1234567
名称p1p2b4p3b3b2b1
传送数0101

其中p1、p2、p3是我们插入的检测位

如果按照配偶原则来配置汉明码,则C1应使1 3 5 7位中“1”的个数为偶数;C2应使2 3 6 7位中“1”的个数为偶数;C4应使4 5 6 7位中“1”的个数为偶数。

按照上面我所说的则:

C1=③位+⑤位+⑦位,即C1=B4+B3+B1=0+1+1=0

C2=③位+⑥位+⑦位,即C2=B4+B2+B1=0+0+1=1

C4=⑤位+⑥位+⑦位,即C4=B3+B2+B1=1+0+1=0

所以0101的汉明码应为C1C2B4C4B3B2B1,即0100101

检错:

1.分组,分好P1,P2,P3……

2.分别对每个组校验,没有错的给它0,有错的给1.

把P从大到小排列起来,得到一串1010,

for example:

     组别:          P3   P2   P1

     标志:          0     1     0

从大到小排列起来,标志排成了一串一零串。这个数就是出错的数据的位置。

本例中,010位置上的位错了,换成十进制是第2个位置上的数错了。

然后,我们发现了它错误的位置,又因为它是二进制的,不是0就是1,所以,可以顺便把它纠错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狗蛋儿l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值