信息论与编码实验报告-汉明编码

  • 格式:doc
  • 大小:110.50 KB
  • 文档页数:4

实验报告
课程名称:信息论与编码姓名:
系:
专业:
年级:
学号:
指导教师:
职称:
年月日
实验七 汉明编码
一、实验目的
1、掌握线性分组码的编码原理
2、掌握汉明码编码方法
3、了解编码对误码性能的改善
二、实验原理
(n ,k )线性分组码的H 矩阵是一个n r n k n ⨯=⨯-)(阶矩阵,这里k n r -=是校验元的数目。

显然,r 个校验元能组成r 2列互不相同的r 重矢量,其中非全零矢量有12-r 个。

如果用这12-r 个非全零矢量作为H 矩阵的全部列,即令H 矩阵的列数12-=r n ,则此H 矩阵的各列均不相同,且无全零列,由此可构造一个纠正单个错误的(n ,k )线性分组码。

同时,12-r 是n 所能取的最大值,因为如果12->r n ,那么H 矩阵的n 列中必会出现相同的两列,这样就不能满足对H 矩阵的要求。

而由于12-=r n 是n 所能取的最大值,也就意味着码率R 取得了最大值,即
1
211--=-=-==r r n r n r n n k R
这样设计出来的码是符合我们的要求的,这样的码就是汉明码。

定义 若H 矩阵的列是由非全零且互不相同的所有二进制r 重矢量组成,则由此得到的线性分组码,称为GF(2)上的(12-r ,r r --12)汉明码。

三、实验内容
1、写出产生汉明码的的Matlab 程序
2、将程序在计算机上仿真实现,验证程序的正确性并完成习题。

四、实验环境
Microsoft Windows 7 Matlab 6.5
五、编码程序
本实验要求写出产生(3,1)汉明码的生成矩阵,由上述可知,我们的n=12-r =3,而k=r r --12=1,由此可得出r=2.
当r=2时,有3个非全零的二重矢量: (01),(10),(11)
构成矩阵:

⎦⎤⎢⎣⎡=101110H
由此得到一个能纠正单个错的(3,1)汉明码。

若码字传输中左边第一位出错,则相应的伴随式)01(=s 就是H 矩阵的第一列,也正好是“1”的二进制表示。

同理可知,无论哪一位出错,它对应的伴随式就是该位的二进制表示,故译码十分方便,特别适用于计算机内部运算和记忆系统中的纠错。

如果要得到系统码形式的H 矩阵,只需对上述矩阵进行初等变换交换列即可。


⎦⎤
⎢⎣⎡=101011H
相应地,生成矩阵G 为:
[]111G =
根据G C ⋅=μ生成码字。

由此构成的(3,1)汉明码如表3-1所示。

表3-1 (3,1)系统码
信息组 码字 0 000 1
111
MATLAB 程序:
%function f=humm_enc(a);
G=[1 1 1];%(3,1)汉明码的生成矩阵
t=input(‘输入0或1:');%t=0则产生(3,1)汉明码,t=1则对输入序列进行编码 if t==1
a=input('输入信息元序列:'); c=mod(a*G,2);%编码的码字c
disp('编码后序列:');%显示“编码后序列:”字样 disp(c); %显示编码的码字 else
disp('(3,1)汉明系统码为:');%显示“(3,1)汉明系统码为:”字样 for i=0:1; %循环变量的取值为0,1
a=dec2bin(i,1); %系统自动给出两信息元从0到1 c=mod(a*G,2) ; %输出编码的码字
disp(a); %显示系统自动给出两信息元从0到1
disp('对应码字为:'); %显示“对应码字为:”字样
disp(c); %显示编出的码字
end %结束for循环
end %结束整个程序
六、实验结果
①Untitled3
输入0或1:1
输入信息元序列:0
编码后序列:
0 0 0
②Untitled3
输入0或1:0
(3,1)汉明系统码为:0
对应码字为: 0 0 0
汉明系统码为:1
对应码字为: 1 1 1
七、实验总结
通过这次实验我对汉明编码有了进一步的认识,对生成矩阵的求法更熟悉了,同时对仿真模块的应用也有了深刻的认识,认真检验了各参数对编码的影响,此实验将为以后相类似实验的基础,以后相类似实验将更容易更快捷的被做出,可达到了学以致用的效果。