汉明码编码原理介绍_第1页
汉明码编码原理介绍_第2页
汉明码编码原理介绍_第3页
汉明码编码原理介绍_第4页
汉明码编码原理介绍_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、汉明码编码原理介绍 汉明码是在电信领域的一种线性调试码,以发明者理查德卫斯里汉明的名字命名。汉明码 在传输的消息流中插入验证码, 以侦测并更正单一比特错误。 由于汉明编码简单, 它们被广泛应用于 内存(RAM。其SECDE版本另外加入一检测比特,可以侦测两个或以下同时发生的比特错误,并能 够更正单一比特的错误。 1940 年,汉明于贝尔实验室工作,运用贝尔模型电脑,输入端依靠打孔卡,这不免有些 读取错误。 在平日,特殊代码将发现错误并闪灯, 使得操作者能够纠正这个错误。 在周末和下班期间, 在没有操作者的情况下, 机器只会简单地转移到下一个工作, 汉明在周末工作, 他对于不可靠的读卡 机发生错

2、误后, 总是必须重新开始方案变得愈来愈沮丧。 在接下来的几年中, 他为了解决调试的问题, 开发了功能日益强大的调试算法。在 1950年,他发表了今日所称的汉明码。现在汉明码有着广泛的 应用。 人们在汉明码出现之前使用过多种检查错误的编码方式, 但是没有一个可以在和汉明码在相同 空间消耗的情况下,得到相等的效果。 汉明码原理介绍: 奇偶校验 是一种添加一个奇偶位用来指示之前的数据中包含有奇数还是偶数个 1 的检验方式。 如果在传输的过程中, 有奇数个位发生了改变, 那么这个错误将被检测出来 (注意奇偶位本身也可能 改变)。一般来说,如果数据中包含有奇数个 1 的话,则将奇偶位设定为 1;反之,如

3、果数据中有偶 数个 1 的话,则将奇偶位设定为 0。换句话说,原始数据和奇偶位组成的新数据中,将总共包含偶数 个 1. 奇偶校验并不总是有效, 如果数据中有偶数个位发生变化, 则奇偶位仍将是正确的, 因此不能 检测出错误。而且,即使奇偶校验检测出了错误,它也不能指出哪一位出现了错误,从而难以进行更 正。数据必须整体丢弃并且重新传输。 在一个噪音较大的媒介中, 成功传输数据可能需要很长时间甚 至不可能完成。 虽然奇偶校验的效果不佳, 但是由于他只需要一位额外的空间开销, 因此这是开销最 小的检测方式。并且,如果知道了发生错误的位,奇偶校验还可以恢复数据。 如果一条信息中包含更多用于纠错的位,且通

4、过妥善安排这些纠错位使得不同的出错位产生不 同的错误结果,那么我们就可以找出出错位了。在一个 7 位的信息中,单个数据位出错有 7种可能, 因此 3 个错误控制位就足以确定是否出错及哪一位出错了。 汉明编码方案通用算法 下列通用算法可以为任意位数字产生一个可以纠错一位的汉明码。 一、1开始给数字的数据位(从左向右)标上序号 , 1 , 2, 3, 4, 5. 二、将这些数据位的位置序号转换为二进制, 1, 10, 11, 100, 101, 等。 三、数据位的位置序号中所有为二的幂次方的位(编号1, 2, 4, 8,等,即数据位位置序号 的二进制表示中只有一个 1)是校验位 四、有其它位置的数

5、据位(数据位位置序号的二进制表示中至少2个是1)是数据位 五、每一位的数据包含在特定的两个或两个以上的校验位中,这些校验位取决于这些数据位的 位置数值的二进制表示 1. 校验位1覆盖了所有数据位位置序号的二进制表示倒数第一位是1的数据:1 (校验位自身, 这里都是二进制,下同),11,101,111,1001,等 2. 校验位2覆盖了所有数据位位置序号的二进制表示倒数第二位是1的数据:10(校验位自身), 11, 110, 111, 1010, 1011,等 3. 校验位4覆盖了所有数据位位置序号的二进制表示倒数第三位是1的数据:100 (校验位自 身),101,110,111,1100, 1

6、101,1110,1111,等 4. 校验位8覆盖了所有数据位位置序号的二进制表示倒数第四位是1的数据:1000 (校验位 自身),1001,1010,1011,1100,1101,1110, 1111,等 5. 简而言之,所有校验位覆盖了数据位置和该校验位位置的二进制与的值不为0的数。 采用奇校验还是偶校验都是可行的。偶校验从数学的角度看更简单一些,但在实践中并没有区 别。 从编码形式上,我们可以发现汉明码是一个校验很严谨的编码方式。在这个例子中,通过对4 个数据位的3个位的3次组合检测来达到具体码位的校验与修正目的 (不过只允许一个位出错,两个 出错就无法检查出来了,这从下面的纠错例子中就

7、能体现出来)。在校验时则把每个汉明码与各自对 应的数据位值相加,如果结果为偶数(纠错代码为0)就是正确,如果为奇数(纠错代码为1)则说明当 前汉明码所对应的三个数据位中有错误,此时再通过其他两个汉明码各自的运算来确定具体是哪个位 出了问题。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 编码后数据位置 P1 P2 d1 P4 d2 d3 d4 P8 d5 d6 d7 d8 d9 d10 d11 p16 d12 d13 d14 d15 奇偶校验位 覆盖率 p1 X X X X X X X X X X p2 X X X X X X X X X

8、 X P4 X X X X X X X X X p8 X X X X X X X X p16 X X X X X 观察上表可发现一个比较直观的规律: 第i个检验位是第2i-1位,从该位开始,检验2i-1位, 跳过2i-1位依次类推。例如上表中第 3个检验位p4从第23-1=4位开始,检验4、5、6、7共4 位,然后跳过 int i; char str=OOOOOOOOOOO; for (i=0;i7;i+) if(mn puti=O) in put6-i=0; else in put6-i=1; en codeout2=in put0; en codeout4=in put1; en code

9、out5=in put2; en codeout6=i nput3; en codeout8=in put4; en codeout9=in put5; en codeout10=i nput6; en codeout0=i nput0F in put1Ai nput39 nput49 nput6; en codeout1=i nput0F in put2Fi nput3Fi nput5Fi nput6; en codeout3=i nput1Fi nput2F in put3; en codeout7=i nput4Fi nput5Fi nput6; for (i=0;i11;i+) if(

10、en codeouti=0) str10-i=0; else HanlizigCo dLc 册认iSJStfc电如- djh 里亦型aw 洞帧勘: |OlfJLDO N唯和弗上| I2 |oQ tl淖它科: Codo di 毎ch旧th; Ci=do d2 dj ds dt : C尸d l田占山窈田th; Ca-da di dz de 击; C4-d3 d 9ds$d e d?; (1) 若S= 0,则认为没有错误; (2) 若Sm0,且S含有奇数个1,则认为产生了单位错; 若Sm0,且S含有偶数个1,则认为产生了两位错; 其中的情况(2)中,根据错误图样可以确定错误位置,将其取反即可完成纠错

11、因为对用户而言 真正有用的是数据,校验位是无用的。为了节省时间和器材,只对数据纠错,而对校验位不进行纠错, 纠错后的数据也不再写回存储器 str10-i=1; m_encodeout=str; UpdateData(false); void CHammingDlg:OnButtonNoise() srand(unsigned)time(NULL); m_noisebit=rand()%11; en codeoutm_ no isebit-1=e ncodeoutm_ no isebit-1F1; UpdateData(false); void CHammingDlg:OnButtonDecod

12、e() int output7; int N,check4; char str=0000000; N=0; int i; output0=encodeout2; output1=encodeout4; output2=encodeout5; output3=encodeout6; output4=encodeout8; output5=encodeout9; output6=encodeout10; check0=e ncodeout2Fe ncodeout4Fe ncodeout6Fe ncodeout8Fe ncodeout10; check1=e ncodeout2Fe ncodeout

13、5Fe ncodeout6Fe ncodeout9Fe ncodeout10; check2=e ncodeout4Fe ncodeout5Fe ncodeout6; check3=e ncodeout8Fe ncodeout9Fe ncodeout10; check0!=encodeout0?N=N+1:N=N; check1!=encodeout1?N=N+2:N=N; check2!=encodeout3?N=N+4:N=N; check3!=encodeout7?N=N+8:N=N; en codeoutN-1=e ncodeoutN-1F1; output0=encodeout2; output1=encodeout4; output2=encodeout5; output3=encod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论