海明校验码原来这样算!!!

SEC/DED简介

由于一位奇偶校验只能检查出奇数个错误且无法定位错误和纠正错误.于是海明就想把多奇偶结合起来,弥补一位奇偶校验的部分缺点.
海明编码中的每一位有效信息位至少被两位校验位所校验,因此可以做到定位一位错误和纠正一位错误和检测两位错误.
缺点:无法区分一个错误和两个错误

套路

校验位数r及其位置

有效信息(k位) + 检验信息(r位): k+r ≤2^r - 1
傻子才反复算,一次算完查表,你要看247位以上的???想吧.

kr-min
12
2~43
5~114
12~265
27~576
58~1207
121~2478
248~…

从上表可知,要对一个字节(8bits)进行海明校验则需要另外半个字节的长度,两字节(16bits)则要5位校验码.

第i个海明码校验码Pi位于第2^(i-1)位.比如第一个校验码在第一位,而第三个校验码在第八位.
如下图(csdn表格真的难搞…)

位置j123456789101112131415161718192021222324
编码之后的数据位P1P2D1P4D2D3D4P8D5D6D7D8D9D10D11P16D12D13D14D15D16D17
拆分P1+2P41+42+41+2+41+82+81+2+84+81+4+82+4+81+2+4+81+162+161+2+164+161+4+16lazy

根据设计思想:每一个数据都至少被两个校验码所校验,故第j位的数据被编号小于j的若干个海明位号之和等于j的校验位所校验。
举个例子,八位数据D1D2…D8,查表可知需要四个校验位(P1,P2,P4,P8)
D1被谁校验了呢?D1位于第3位,小于3的海明码又位号和为3的只有P1,P2;
D2也如此,第五位,5=1+4,说明D2被P1,P4校验了.
D3呢?第六位,6 =2 +4 ,说明第D3被P2,P4校验了.
D4,7=1+2+4,说明第D3被P1,P2,P4校验了.
…类推

计算校验位Pi

对于八位数据D1D2…D8,先把校验位空出来??D1?D2D3D4?D5D6D7D8
P1 = D1⊕D2⊕D4⊕D5⊕D7
P2 = D1⊕D3⊕D4⊕D6⊕D7
P4 = D2⊕D3⊕D4⊕D8
P8 = D5⊕D6⊕D7⊕D8
然后把P1,P2,P4,P8填进去即可
那如果是十六位呢??还是一样的套路啊,拆分的P中哪些数据位下有P几,异或运算就算那些对应的数据位
P1 = D1⊕D2⊕D4⊕D5⊕D7⊕D9⊕D11⊕D12⊕D14⊕D16
P2 = D1⊕D3⊕D4⊕D6⊕D7⊕D10⊕D11⊕D13⊕D14
P4 = D2⊕D3⊕D4⊕D8⊕D9⊕D10⊕D11⊕D15⊕D16
P8 = D5⊕D6⊕D7⊕D8⊕D9⊕D10⊕D11
P16=D12⊕D13⊕D14⊕D15⊕D16

总结

要是教材写的在让人更容易明白一点,我宁愿减寿一年.
入门白菜,欢迎指教拍砖.

相关链接

  • COD (这方面的内容有点少)
  • 计算机组成与系统架构 (有点小错误)
  • https://blog.csdn.net/u010927640/article/details/49531781?locationNum=3&fps=1 (深入浅出)
  • https://www.mscto.com/void/536131.html (+电路)
  • https://blog.csdn.net/callinglove/article/details/84852374 (+代码)
  • https://www.icourse163.org/learn/HUST-1003159001?tid=1450203445#/learn/content?type=detail&id=1214319387&cid=1217937711 (视频)
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值