Hamming码实验_第1页
Hamming码实验_第2页
Hamming码实验_第3页
Hamming码实验_第4页
Hamming码实验_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、云南大学数学与统计学实验教学中心实验报告课程名称:计算机网络实验学期:2012-2013学年第二学期成绩:指导教师: 陆正福学生姓名:卢富毓 学生学号:20101910072实验名称:Hamming码实验实验要求: 必做实验学时:4学时实验编号: No.9实验日期:2013/5/28完成日期:2013/6/3学院:数学与统计学院专业 : 信息与计算科学年级: 2010级 一、实验目的:通过实验掌握Hamming码编码实验的构造算法,以及其重要思想。二、实验内容: Hamming码编码实验1.熟悉Hamming码的设计原理;2.编程实现(15,11,3)Hamming的编码和译码算法;3.验证H

2、amming码的检错能力和纠错能力三、实验环境Win7、Eclipse四、实验过程(请学生认真填写):实验过程、结果以及相应的解释:1. 预备知识A、 与其他的错误校验码类似,汉明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。利用一个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。B、 Hamming码中主要的是生成矩阵以及校验矩阵。通过得到这二者,我们就可以对需要的字符串进行编码、检错、纠错、译码的工作了。C、 具体如下:2. 实验过程A、 原理分析:这里主要对如何纠错进行简要分析:编码所对应的码字为C = 0110011。

3、若接收到R = 0110001 。有H*x=0可以判断其存在错误。Erro=1 1 0。用Erro中的元素与校验矩阵中的每一列表,与其中一列全部相同。则带便这一列有错。找到第六位有错。异或运算后得到R = 0110011。当然这里需要注意的是Hamming 码只能纠正一位错误。当出现两位错误时,将无法纠错后得到正确结果。好了,废话不多说了。先把代码贴上来。B、 具体代码如下: /* HammingCode的实验 * *1.熟悉Hamming码的设计原理; *2.编程实现(15,11,3)Hamming的编码和译码算法; *3.验证Hamming码的检错能力和纠错能力。 */package Ha

4、mmingCode;import java.util.Scanner;/* * author 卢富毓 * see 实现HammingCode的生成、检错、纠错 * */public class HammingCode int H;int G;/* * param start * () Hamming码的具体实现 * param HMC * 类的实例 */public void start(HammingCode HMC) int send = new int11;int receive = new int15;/ step1 15,11Hamming 码的校验矩阵生成H = HMC.Creat

5、eCheckArray();/ step1 15,11Hamming 码的生成矩阵生成G = HMC.GenerateArray();/ 输入四个字符进行编码System.out.print("请输入需编码的字符(0、1)11个:");Scanner sc = new Scanner(System.in);for (int i = 0; i < 11; i+) sendi = sc.nextInt();sc.reset();HMC.encode(G, send); / 编码System.out.println("n-");/ 输入四个字符检测编码S

6、ystem.out.print("请输入需译码字符(0、1)15个:");for (int i = 0; i < 15; i+) receivei = sc.nextInt();HMC.checkAndDecode(H, receive);/ 检错以及译码/ sc.close();/* * param ToBinary * 校验矩阵 十进制数转为二进制矩阵 * return 返回校验矩阵 */public int CreateCheckArray() / 二进制 校验矩阵int m = 1;int l = 1;int b = new int416;for (int i

7、 = 0; i < b.length; i+) for (int j = 1; j < bi.length; j+) bij = 0;for (int i = 1; i < 16; i+) / 二进制m = i;if (i != 1 && i != 2 && i != 4 && i != 8) for (int j = 3; j >= 0; j-) bjl = m % 2;m = m / 2;if (m < 0) break;l+;for (int j = 0; j < 4; j+) / 二进制for (int

8、 i = 12; i < 16; i+) if (i - 12 = j) bji = 1;System.out.println("(15,11)HammingCode校验矩阵生成:");System.out.println("-");for (int i = 0; i < 4; i+) for (int j = 1; j < 16; j+) System.out.print(bij + " ");System.out.println();System.out.println("-");return

9、 b;/* * param Generate * 生成矩阵 十进制数转为二进制矩阵 * return */public int GenerateArray() / 生成矩阵 增加还没有做int g = new int412;int l = 1;int m = 1;for (int i = 1; i < 16; i+) / 二进制m = i;if (i != 1 && i != 2 && i != 4 && i != 8) for (int j = 3; j >= 0; j-) gjl = m % 2;m = m / 2;if (m &

10、lt; 0) break;l+;/ G 生成int G = new int1115;for (int i = 0; i < G.length; i+) for (int j = 0; j < Gi.length; j+) if (j = i) Gij = 1; else Gij = 0;for (int j = 11; j < 15; j+) for (int i = 0; i < G.length; i+) Gij = gj - 11i + 1;System.out.println("(15,11)HammingCode生成矩阵:");System

11、.out.println("-");for (int i = 0; i < 11; i+) for (int j = 0; j < 15; j+) System.out.print(Gij + " ");System.out.println();System.out.println("-");return G;/* * param encode * 用生成矩阵编码 * param G * 代表生成矩阵 * param send * 输入的字符诸位 1、0 等 * return */public int encode(int

12、 G, int send) / 利用生成矩阵 编码int newArray = new intG1.length; / 得到X*G的一个矩阵for (int i = 0; i < newArray.length; i+) newArrayi = 0;for (int j = 0; j < G.length; j+)newArrayi += sendj * Gji;if (newArrayi & 1) = 1) newArrayi = 1; else newArrayi = 0;System.out.print("(15,11)HammingCode的编码:&quo

13、t;);for (int i = 0; i < newArray.length; i+) System.out.print(newArrayi + " ");return newArray;/* * * param H * 校验矩阵错误 * param receive * 收到的信息 * return 返回海明码的译码 */public int checkAndDecode(int H, int receive) / 检测错误以及纠正错误int e = new intH.length; / H*x得到int flag = 0;for (int i = 0; i <

14、; e.length; i+) / 得到Hx的一个矩阵ei = 0;for (int j = 0; j < receive.length; j+) ei = ei (receivej & Hij + 1);/ 检测编码是否有错 H*x=0System.out.print("H*x为:");for (int i = 0; i < e.length; i+) System.out.print(ei + " ");System.out.println();for (int i = 0; i < e.length; i+) if (ei

15、 != 0) flag = -1;break;if (flag = -1) / 代表有错 flag 得到位错的下标flag = 0;int k = 0;for (int i = e.length - 1; i >= 0; i-) flag += Math.pow(2, i) * ek;k+;System.out.print("接收的数据第" + flag + "位有错:");for (int i = 0; i < receive.length; i+) System.out.print(receivei);System.out.println

16、();/ 进行纠错flag = flag - 1;receiveflag = receiveflag 1;System.out.print("接收的数据纠错后:");for (int i = 0; i < receive.length; i+) System.out.print(receivei); else / System.out.println();System.out.print("接收正确,数据为:");for (int i = 0; i < receive.length; i+) System.out.print(receivei

17、);System.out.println();System.out.print("(15,11)HammingCode译码为:");for (int i = 0; i < 11; i+) System.out.print(receivei + " ");System.out.println();return e;public static void main(String args) HammingCode HMC = new HammingCode();HMC.start(HMC);结果如下:校验矩阵和生成矩阵结果如图:当输入正确与接收相同时结果如图:当收到结果有错的时候(其中错误为非校验位)结果如图:当收到结果有错的时候(其中错误为校验位)结果如图:/进过三种不同的形式的检验,得到编写的15,11,3海明码的算法正确。五、实验总结1遇到的问题及分析:遇到问题:首先还是在矩

温馨提示

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

评论

0/150

提交评论