hamming code汉明码

hamming code只能纠错单个错误

汉明码的精髓就在于,在2^n处为纠错码,如果有data传输错误,会有两个纠错码发现错误,这两个纠错码何在一起就是错误点的坐标。
以下为例子:
假设data为:001_1000_1110,是一个11bit位数:

在这里插入图片描述
如上表绿色为data,蓝色为编码值,右下角角标为地址。
在这里插入图片描述
address=0x0001: p1 = address_0x0101 ^ address_0x1001 ^ address_0x1101 ^ address_0x0011 ^ address_0x0111 ^ address_0x1011 ^ address_0x1111 = p5 ^ p9 ^ p13 ^ p3 ^ p7 ^ p11 ^ p15 ([0]=1)
address=0x0010:p2 = address_0x0110 ^ address_0x1010 ^ address_0x1110 ^ address_0x0011 ^ address_0x0111^ address_0x1011 ^ address_0x1111 = p6 ^ p10 ^ p14 ^ p3 ^ p7 ^ p11 ^ p15 ([1]=1)
address=0x0100:p4 = address_0x0101 ^ address_0x0110 ^ address_0x0111 ^ address_0x1100 ^ address_0x1101 ^ address_0x1110 ^ address_0x1111 = p5 ^ p6 ^ p7 ^ p12 ^ p13 ^ p14 ^ p15 ([2]=1)
address=0x1000:p8 = address_0x1001 ^ address_0x1010 ^ address_0x1011 ^ address_0x1100 ^ address_0x1101 ^ address_0x1110 ^ address_0x1111 = p9 ^ p10 ^ p11 ^ p12 ^ p13 ^ p14 ^ p15 ([3]=1)

如果说不出错的话:p1 ^ p2 ^ p2 ^ p3 ^ p4 ^ p5 ^ p6 ^ p7 ^ p8 ^ p9 ^ p10 ^ p11 ^ p12 ^ p13 ^ p14 ^ p15 = (p3 ^ p3 ^ p3) ^ (p5 ^ p5 ^ p5) ^ (p6 ^ p6 ^ p6) ^ (p7 ^ p7 ^ p7 ^ p7) ^ (p9 ^ p9 ^ p9) ^ (p10 ^ p10 ^ p10) ^ (p11 ^ p11 ^ p11 ^ p11) ^ (p12 ^ p12 ^ p12)^ (p13 ^ p13 ^ p13 ^ p13) ^ (p14 ^ p14 ^ p14 ^ p14) ^ (p15 ^ p15 ^ p15 ^ p15 ^ p15) = p3 ^ p5 ^ p6 ^ p9 ^ p10 ^ p12 ^ p15

将值为1的address来做异或:
0 0 1 0
0 1 0 0
0 1 1 0
0 1 1 1
1 0 0 0
1 1 0 0
1 1 0 1
异或 1 1 1 0
--------------------------------
0 0 0 0
假设有一个值由0变成1:
0 0 1 0
0 1 0 0
0 1 1 0
0 1 1 1
1 0 0 0
1 1 0 0
1 1 0 1
异或 1 1 1 0
new_address
--------------------------------
0 0 0 0
异或 new_address
-------------------------------
= new_address

同理一个值由1变为0,上面的公式就是去掉一个原来存在的address,最后的结果就是输出原来存在的address,不管是由1变0还是由0变1,最后都能找到该错误值的地址

硬件实现时:
个位数地址:addr0 = p1_传输 ^ p1_计算结果(传输结果=计算结果,则个位数地址为0)
p1_传输 = p1
p1_计算 = p5 ^ p9 ^ p13 ^ p3 ^ p7 ^ p11 ^ p15 (都是传输过来的值,再计算)
同理可得到add1 = p2_传输 ^ p2_计算结果;
addr2 = p4_传输 ^ p4_计算结果
addr3 = p8_传输 ^ p8_计算结果
错误的地址addr_error = {addr3, addr2, addr1, addr0}, 用分类讨论(case)将对应的结果把值翻转即可

https://www.bilibili.com/video/BV1pV411y7E8/?spm_id_from=333.788.recommend_more_video.-1&vd_source=8fe00fe985db84afad067de6c9f4df1e

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值