海明编码实验报告 学科专业:计算机科学与技术 姓 名: 学 号: 指导教师: 天津工业大学计算机科学与技术学院 二零一零年十二月 1 一.海明编码原理 海明码是一种可以纠正一位差错发现两位差错的编码。它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足以下关系式: 2r>=n+1 或 2r>=k+r+1 海明码的编码效率为: R=k/(k+r) 式中 k为信息位位数 r为增加冗余位位数 2.海明码的生成与接收 二.海明编码方法 1)海明码的生成(顺序生成法)。 例3.已知:信息码为:" 1 1 0 0 1 1 0 0 " (k=8) 求:海明码码字。 解:1)把冗余码A、B、C、…,顺序插入信息码中,得海明码 码字:" A B 1 C 1 0 0 D 1 1 0 0 " 码位: 1 2 3 4 5 6 7 8 9 10 11 12 其中A,B,C,D 分别插于 2k位(k=0,1,2,3)。码位分别为1,2,4,8。 2)冗余码A,B,C,D 的线性码位是:(相当于监督关系式) A->1,3,5,7,9,11; B->2,3,6,7,10,11; C->4,5,6,7,12;(注 5=4+1;6=4+2;7=4+2+1;12=8+4) D->8,9,10,11,12。 3)把线性码位的值的偶校验作为冗余码的值(设冗余码初值为0): A=∑(0,1,1,0,1,0)=1 B=∑(0,1,0,0,1,0)=0 C=∑(0,1,0,0,0) =1 D=∑(0,1,1,0,0) =0 2 4)海明码为:"1 0 1 1 1 0 0 0 1 1 0 0" 2)海明码的接收。 例.已知:接收的码字为:"1 0 0 1 1 0 0 0 1 1 0 0"(k=8) 求:发送端的信息码。 解: 1)设错误累加器(err)初值=0 2)求出冗余码的偶校验和,并按码位累加到err 中: A=∑(1,0,1,0,1,0)=1 err=err+20=1 B=∑(0,0,0,0,1,0)=1 err=err+21=3 C=∑(1,1,0,0,0) =0 err=err+0 =3 D=∑(0,1,1,0,0) =0 err=err+0 =3 由 err≠0 可知接收码字有错, 3)码字的错误位置就是错误累加器(err)的值3。 4)纠错--对码字的第 3位值取反得正确码字: "1 0 1 1 1 0 0 0 1 1 0 0" 5)把位于 2k位的冗余码删除得信息码:"1 1 0 0 1 1 0 0" 3)发现两位差错 P5=∑(1,2,3,4,5,6,7,8,9,10,11,12) S5=∑(1,2,3,4,5,6,7,8,9,10,11,12,P5) 如果 err≠0 且 S5=0是两位错。 三.程序 import java.applet.*; import java.awt.*; import java.awt.event.*; public class Haiming extends Applet implements ActionListen...