汉明码原理

汉明码的构造原理

“汉明码”,英文名为 “hanming code”,是一种“错误纠正码”,由 理查德·卫斯里·汉明于1950年发明,它可以用来检测并且纠正数据从发送端发往接收端中发生的错误。时至今日仍在ECC memory 上显示其应用价值。

汉明码实质是一种多重奇偶校验,它在有效信息位中加入几个校验位形成汉明码,使码距比较均匀的拉大,具有检验并纠正一位错误的能力。“校验位”是一种二进制位,它被用来添加到需要传输的数据信息中,以确保信息在传输过程中不会发生丢失或者改变。

“校验位”究竟有多少位,我们使用以下公式来计算:

2k  >= N+K+1

其中,K代表校验位的位数,N代表信息位的位数。信息位N值与校验位K值的对应关系表如下:

在通过公式确定了校验码的位数后,接下来给大家介绍如何确定校验码的位置。校验码Ci必须是在2的i-1次方位置,只能放在例如1,2,4,8,16...的位置(位置从右向左排序)。

假如目前有一个三位信息码(D1,D2,D3),那么校验位与信息位排列的位置是这样的:

C1,C2,C3 为奇偶校验位,其余三位D1,D2,D3 为信息位。

那么,哪个校验位管哪组数据呢?接下来要介绍汉明码的核心编码方法,将索引的二进制形式表示出来:

6110
5101
4100
3011
2010
1001

从右往左(低位往高位)数,第一位是“1”的索引有001,011,101,分别对应的十进制索引为1,3,5,那么这几个十进制对应的数据位和“奇偶校验位”C1构成了一组。

同理,可确定第二位是“1”的索引有010,011,110,分别对应的十进制索引为2,3,6,那么这几个十进制对应的数据位和“奇偶校验位”C2构成了一组。

第三位是“1”的索引有100,101,110,分别对应的十进制索引为4,5,6,那么这几个十进制对应的数据位和“奇偶校验位”C3构成了一组。

确立好分组之后,接下来需要填充数据位,假设传输3位数据位:101

10C31C2C1

然后,我们就需要填充每一组的“奇偶校验位”。(采用偶校验)

对于第一组来说(1,3,5位为一组):1的个数为1个,奇数个,因此C1应该为1,这样1的个数最后才能保证为偶数。

同理,对于第二组来说(2,3,6位为一组):1的个数位2个,偶数个,因此C2应该为0,这样1的个数最后才能确保为偶数。

对于第三组来说(4,5,6位为一组),1的个数为1个,奇数个,因此C3应该为1,这样1的个数最后才能确保为偶数。

最后,总的汉明码构造完毕,如下所示:

101101

小贴士:给大家介绍一下“奇偶校验位”。一个奇偶校验位是用来添加至二进制数据中的比特位,它通过确保整个二进制数据信息中“1”的个数是奇数还是偶数,来判断数据是否在传输过程中发生改变。奇校验会检查数据中“1”的个数是否为奇数,如果不是,则会在校验位中添加一个“1”,反之,会在校验位中添加一个“0”。同学们可以据此推出偶校验的方法。

作者:速易芯刘彦

更多详细文章可关注公众号 “速易芯Fastchip” !

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
明码是一种用于检错和纠错的编码方式,它的编码原理是在数据中添加冗余信息,以增加数据的可靠性。具体来说,明码通过在数据中添加一定数量的校验位,使得数据中的所有位数都满足某种特定的规律,从而可以检测出任意一位是否出现错误,并且还能够纠正一定数量的错误。 明码的编码过程如下: 1. 确定要发送的数据,例如"1010"。 2. 确定校验位的数量。校验位的数量是指要添加到数据中的冗余位数。根据明码原理,校验位的数量应该满足以下公式:2^r ≥ n + r + 1,其中n为数据位数,r为校验位数。例如,如果要发送的数据为4位二进制数,那么校验位的数量应该为3。 3. 确定校验位的位置。校验位的位置是指在数据中哪些位置上要添加校验位。根据明码原理,校验位的位置应该是2的幂次方(从1开始计数),例如第1、2、4位。因此,在本例中,校验位应该被添加到第1、2和4位。 4. 在校验位的位置上添加校验位。校验位的值是通过对数据中对应的位进行异或操作得到的,例如,在本例中,第1、2和4位的校验位值为1、0和0。 5. 将数据和校验位合并起来,形成最终的明码。在本例中,最终的明码为"1101010"。 当接收方接收到明码时,它可以执行以下步骤来检测和纠正错误: 1. 计算接收到的数据中每个校验位的值。 2. 如果某个校验位的值与发送方计算出的值不同,说明该位存在错误。 3. 根据错误的校验位的位置,确定出错的数据位。 4. 对出错的数据位进行纠错,例如将0改为1或将1改为0。 通过这种方式,明码可以提高数据传输的可靠性,从而被广泛应用于通信和存储系统中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

速易芯Fastchip

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

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

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

打赏作者

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

抵扣说明:

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

余额充值