Hamming Codes
1. 海明校验码检错采用的是分组交叉奇偶校验法。
将编码中的数据位分成r个校验组,组内采取奇偶校验,每组一个校验位,可构成r位检错码。r>1
全部检错码为0表示数据正常,不为零时检错码的值表示编码中出错数据位。
2. 编码方式:每一数据位至少参加2个校验组,一位出错,可引起多个检错码的变化。
•设海明码 N 位,其中数据位 k 位,校验位 r 位
•校验位 r 位表示共 r 个校验组
•N=k+r≤2r-1
例如我们课上讲的(4,3)编码:4个数据位,3个校验位。其编码如下
H7 H6 H5 H4 H3 H2 H1
D4 D3 D2 P3 D1 P2 P1
包含G3 G2 G1个校验组,P3 P2 P1分属其中一组:
其中 P1=D1⊕D2⊕D4 P2=D1⊕D3⊕D4 P3=D2⊕D3⊕D4
G1=P1⊕D1⊕D2⊕D4 G2=P2⊕D1⊕D3⊕D4 G3=P3⊕D2⊕D3⊕D4
对应的位数: G1(P1,H3,H5,H7) G2(P2,H3,H6,H7) G3(P3,H5,H6,H7)
然后根据G3G2G1就可以判断出错位。(只能检验纠正一位出错位)

不过貌似老师也没讲具体标志位的位置是怎么确定的,下面是我找到的一些资料:
3. 码字(Code Word) 按如下方法构建:
(1)、把所有2的幂次方的数据位标记为奇偶校验位(编号为1, 2, 4, 8, 16, 32, 64等的位置)
–(4,3)编码中的P1,P2,P3存放的位置H1,H2,H4
(2)、其他数据位用于待编码数据. (编号为3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17等的位置)
–(4,3)编码中的D1-D4
(3)、每个奇偶校验位的值代表了代码字中部分数据位的奇偶性,其所在位置决定了要校验和跳过的比特位顺序。
位置1:校验1位,跳过1位,校验1位,跳过1位(1,3,5,7,9,11,13,15,…)
位置2:校验2位,跳过2位,校验2位,跳过2位 (2,3,6,7,10,11,14,15,…)
位置4:校验4位,跳过4位,校验4位,跳过4位 (4,5,6,7,12,13,14,15,20,21,22,23,…)
位置8:校验8位,跳过8位,校验8位,跳过8位(8-15,24-31,40-47,…)
–(4,3)编码中P1=D1⊕D2⊕D4(H1,H3,H5,H7) P2=D1⊕D3⊕D4 P3=D2⊕D3⊕D4
4. 采用偶校验,如果全部校验的位置中有奇数个1,把该奇偶校验位置为1;
如果全部校验的位置中有偶数个1,把该奇偶校验位置为0.
5. 小例子:待传送数据(一个字节):10011010
构造海明码, 对应的校验位留空 _ _ 1 _ 0 0 1 _ 1 0 1 0
然后计算每个校验位的奇偶性 :
P1检验1,3,5,7,9,11位,发现有偶数个1(自己数数看),所以P1=0;
P2检验2,3,6,7,10,11位,发现有奇数个1,所以P2 =1;
P3检验4,5,6,7,12位,发现有奇数个1,所以P3 =1;
P4检验8,9,10,11,12位,发现有偶数个1,所以P4 =0;
因此最后的编码为: 011100101010.
假定实际接收到的数据 011100101110. 则第10 位出错。
---------------------------------------------------------------------------------
Hamming Codes的更多相关文章
- 洛谷P1461 海明码 Hamming Codes
P1461 海明码 Hamming Codes 98通过 120提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 给出 N,B 和 ...
- USACO 2.1 Hamming Codes
Hamming CodesRob Kolstad Given N, B, and D: Find a set of N codewords (1 <= N <= 64), each of ...
- 洛谷 P1461 海明码 Hamming Codes
P1461 海明码 Hamming Codes 题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B &l ...
- 【USACO 2.1】Hamming Codes
/* TASK: hamming LANG: C++ URL:http://train.usaco.org/usacoprob2?a=5FomsUyB0cP&S=hamming SOLVE: ...
- USACO Section 2.1: Hamming Codes
挺简单的一道题 /* ID: yingzho1 LANG: C++ TASK: hamming */ #include <iostream> #include <fstream> ...
- USACO Hamming Codes DFS 构造
我还是用了很朴素的暴力匹配A了这题,不得不感叹USACO时间放的好宽... /* ID: wushuai2 PROG: hamming LANG: C++ */ //#pragma comment(l ...
- P1461 海明码 Hamming Codes
题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位 ...
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
hamming解题报告----------------------------------------------------------------------------------------- ...
- USACO Hamming Codes
题目大意:求n个两两hamming距离大于等于d的序列,每个元素是一个b bit的数 思路:仍然暴力大法好 /*{ ID:a4298442 PROB:hamming LANG:C++ } */ #in ...
- USACO2.1 Hamming Codes【枚举+二进制处理+输出格式+题意理解】
这道题加了2个看起来奇奇怪怪的$tag$ 1.输出格式:不得不说这个格式输出很恶心,很像$UVA$的风格,细节稍微处理不好就会出错. 因为这个还$WA$了一次: ,m=n; ) { ;i<=t+ ...
随机推荐
- ruby在线学习
http://tryruby.org/ [Heroku空间] 免费ruby空间
- plsql快速选中一行的快捷键
实际工作中,经常用到pl/sql,在sql window中,经常性的用到选中一行然后按F8执行这条sql语句.用鼠标选中一行不是特别方便.用快捷键就快多了. 1.使用home键(不是windows键奥 ...
- java模式之-模板方法模式
模板方法模式是java设计模式常见的模式之一. <JAVA与模式>中写道: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法 ...
- if语句使用
package yuan; public class Yuan { public static void main(String[] args) { int a = 1; int b = 8; int ...
- Html11.09CSS层叠样式表内容整理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- bzoj 1951: [Sdoi2010]古代猪文
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...
- Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...
- python 字典排序 关于sort()、reversed()、sorted()
一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...
- xlistview的(java)
package com.bwie.xlistviews; import java.text.SimpleDateFormat;import java.util.Date; import com.bwi ...
- [Unity3D]调用Android接口
简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...