写在前面:
学习计组的时候,听网课的时候一开始没整明白,后来自己找了其他视频跟博客,总算把这个知识点捋清楚了~
现整理成笔记,希望能帮助到一起学习的同学们。我会在文末附上一个我参考的视频的地址,视频讲得很清晰明了,很有帮助。
海明码解题过程(以数据1010为例):
1.求出海明码长度及检验码有多少位:
通过上面推导得出的公式构建不等式并求解,即可求得应该增加多少位校验码。
不等式解释如下:
海明码的纠错目的是发现数据中哪一位发生错误。
数据总共有m+p位,每一位都有出错的可能,因此只出错一位的情况有m+p种。
校验码总共有2^p种取值,其中有一种取值对应着数据正确的情况,另外的取值分别对应着某一位出错的情况。
因此需要2^p-1>=m+p,才能保证能够发现每一种(单个位)出错的情况。
2.确定海明码的位置,及进行分组:
校验码放在2^n(n=0、1、2、…)位置上。
【在此处的例子中,由于第一步已经求出了p=3位校验码,所以校验码只要插入到
2
0
、
2
1
、
2
2
2^0、2^1、2^2
20、21、22这三个位置就可以了。】
分组:首先将位置序号1、2、3、…化成二进制。
【此处的例子中,m=4】
然后遵循以下规律分组:
第1组:序号二进制数的从右往左的第1位为1;
第2组:从右往左的第2位为1;
第3组:从右往左的第3位为1…
依次类推。
3.求出校验码的值及海明码:
得到分组之后,按求奇偶校验码的方法求校验码,通常题目会说明是使用“奇校验”还是“偶校验”。
之后再把求得的校验码放入数据中即可得到海明码。
4.进行纠错:
首先按照原数据写出p1、p2、p3、m3、m5、m7,然后在每一组前面新增一位e1、e2、e3。e1、e2、e3的值按奇偶校验法的规则求出。
求出e1、e2、e3之后,将这三个值按顺时针旋转九十度得到一个新的数,如:
将这个数化为10进制,即可知道是哪一位出错。比如此处的101,那就是第五位出错。如果数值为000,则证明数据没有出错。
参考资料(链接可能失效,侵删):
①★★视频:天勤公开课-计算机组成原理:https://www.bilibili.com/video/BV1SJ41157pR?from=search&seid=3918195512624917135
②视频:哈工大-计算机组成原理:https://www.bilibili.com/video/BV1ix41137Eu?p=109
END