教你如何计算海明码
来源:互联网 发布:js课程设计 编辑:程序博客网 时间:2024/04/27 14:01
一、海明码检错/纠错基本思想
海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以也仅用于信道特性比较好的环境中,如以太局域网。它的检错、纠错基本思想如下:
(1)将有效信息按某种规律分成若干组,每组安排一个校验位通过异或运算进行校验,得出具体的校验码
(2)在接收端同样通过异或运算看各组校验结果是否正确,并观察出错的校校组,或者多个出错的校验组的共同校验位,得出具体的出错比特位
(3)对错误位取反来将其纠正
二、海明码计算
海明码计算要按以下步骤来进行:计算校验码位数→确定校验码位置→确定校验码
1. 计算校验码位数
假设用N表示添加了校验码位后整个传输信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位数,它们之间的关系应满足:N=K+r≤2r-1(是为了确保r位校验码能校验全部的数据位,因为r位校验码所能表示的最大十进制数为2r-1,同时也确保各位码本身不被其他校验码校验)
信息码位数
1
2~4
5~11
12~26
27~57
58~120
121~247
校验码位数
2
3
4
5
6
7
8
2. 确定校验码位置
海明码的校验码的位置必须是在2n次方位置(n从0 开始,分别代表从左边数起分别是第1、2、4、8、16……),信息码也就是在非2n次方位置
3. 确定校验码
- 校验位置选择原则:第i位校验码从当前校验码位开始,每次连续校验i位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。确定每个校验码所校验的比特位:
- P2校验码位校验的码字位为:第2位(也就是P2本身)、第3位,第6位、第7位,第10位、第11位,第14位、第15位,……。
- P3校验码位校验的码字位为:第4位(也就是P4本身)、第5位、第6位、第7位,第12位、第13位、第14位、第15位,第20位、第21位、第22位、第23位,……。
- Pn校验码位校验的码字位为:第2n-1位(也就是Pn本身)、第2n-1+1位、第2n-1+2位、第2n-1+3位、……、第2n-1位,第3×2n-1位、第3×2n-1+1、……、第2×2n-1位,第5×2n-1位、第5×2n-1+1位、第3×2n-1位,……、第7×2n-1位、第7×2n-1+1位、……、第4×2n-1位,……,第(2m-1) 2n-1位、……第m×2n-1位
最后每组通过异或逻辑运算(与偶校验原理一样),使每组的运算结果为0,即可得出第i位校验码的值
4. 实现校验和纠错
把以上这些校验码所校验的位分成对应的组,则在接收端的对各校验位再进行逻辑“异或运算”,如果采用的是偶校验,正常情况下均为0。
如果发现多组校验结果不正确,则查看这些组中公共校验的数据位(只有数据位才可能被几个校验码进行校验),以最终确定是哪个数据位出了差错(海明码只能检查一位出错);
最后,对所找到的出错数据位取反即可实现纠错。
三、海明码计算示例
原信息码:10011101(1)确定校验码位数
原始信息码一共8,根据前面的表可得知校验码位数为4
(2)确定校验码位置
??1?001?1101
(2)计算机各位校验码
Pn校验码位校验的码字位为:第2n-1位(也就是Pn本身)、第2n-1+1位、第2n-1+2位、第2n-1+3位、……、第2n-1位,第3×2n-1位、第3×2n-1+1、……、第2×2n-1位,第5×2n-1位、第5×2n-1+1位、第3×2n-1位,……、第7×2n-1位、第7×2n-1+1位、……、第4×2n-1位,……,第(2m-1) 2n-1位、……第m×2n-1位
P1(n=1):1、3、5、7、9、11 #----检验的bit位,下同
1 1 0 1 1 0 #----对应位的值,下同
P2(n=2):2、3、6、7、10、11
1 1 0 0 1 1
P3(n=3):4、5、6、7、12
0 0 0 1 1
P4(n=4):8、9、10、11、12
1 1 1 0 1
最终得出插入校验码后的信息码为:111000111101
- 教你如何计算海明码
- 海明码的计算
- 海明码计算详解
- 海明码的计算
- 教你如何具体求海明码——软考系列之计算机组成
- 关于海明码的计算
- 海明码计算及其纠错原理详解
- 海明码
- 海明码
- 海明码
- 海明码
- 海明码
- 海明码
- 海明码
- 海明码
- 海明码
- 海明码
- 海明码
- Filter过滤器,不过滤特定资源
- KMP模式匹配算法原理
- js判空函数
- ubuntu 修改virtualbox硬盘大小
- 获取所有非manager的员工emp_no
- 教你如何计算海明码
- 使用flashback恢复数据
- [题解]bzoj3813 奇数国
- sql语句
- lintcode--全排列
- 无线信道信道衰落知识点总结
- java中一个字符串的大小写转换
- 【初学Linux】Web开发环境搭建——JDK的安装
- Docker-compose配置文件详解