当前位置:文档之家› 汉明码的编译码设计与仿真

汉明码的编译码设计与仿真

关键词:MATLAB 汉明码性能
1.前 言
线性分组码是指将信息序列划分为长度为K的序列段,在每一段后面附加r位的监督码,且监督码和信息码之间构成线性关系,即它们之间可由线性方程组来联系。这样构成的抗干扰码称为线性分组码。它是一种能够纠正一位错码或检测两位错码的一种效率较高的线性分组码。汉明码是一种线性分组码。
G= (式3.2.5)
G成为生成矩阵,根据式3.2.4知:由G和信息码就能产生所有码字。生成矩阵也可分为两部分,即
G= (式3.2.6)
上式中
Q= (式3.2.7)
Q为 阶矩阵, 为 阶单位阵。
2.3 校正子(伴随式)S
设一发送码组A=[ ],在传输的过程中可能发生误码。接受码组B=[ ],收发码组之差定义为错误图样E。
disp(c);
End
●编码流程图
编码程序的设计流程图:
3.3 (7,4)汉明码编码程序的编译及仿真
functionf=hammingencod(a)
G=[1 0 0 0 1 1 1;0 1 0 0 1 1 0;0 0 1 0 1 0 1;0 0 0 1 0 1 1];
a=input('输入信息元序列:');
本次课程设计的任务就是利用MATLAB技术实现汉明码的编译码的设计和仿真。从而进一步加深对汉明码编译码原理的理解。
2.(7,4)汉明码的构造原理
2.1 汉明码的构造原理
线性分组码是一类重要的纠错码,应用很广泛。在(n,k)分组码中,若监督码元是按线性关系模2相加而得到的,则称其为线性分组码。
现在以(7,4)分组码为例来说明线性分组码的特点。设其码字为A=[ , ],前4位是信息元,后3位是监督元,可用下列线性方程组来描述该分组码产生监督元:
输入接收序列B=[0100011]
错误出现在第3位
原发送码字为:
0110011
5.总结
这次通信原理课程设计的题目是汉明码的编码、译码的仿真。通过到图书馆查阅相关的资料,得知汉明码的编码、译码仿真可以用FPGA和MATLAB来做。
刚接到这个题目时,感觉有点迷茫和彷徨,不知道从何入手。尽管上学期刚学的《信息论与编码》中也讲过线性分组码中的(7,4)汉明码的编解码方法,在本次课题中,(7,4)汉明码的编码相对来说比较容易,程序也就一小段;解码方面相对就比较复杂,用到了很多的变量。但是通过反复实践和观察,最终还是有所突破,并顺利完成了课题要求。其次在画图和设置参数的时候遇到了不少困难。通过学习相关的教程和查阅MATLAB中的help,这些困难都迎刃而解,分别绘出编码和译码的码型。这其中我深刻地体会到专业知识的重要性。可想而知,理论知识对实际的操作有极大的帮助。
ifS==0
disp('接收到的码字无错误。');
E=dec2bin(0,7);
end
fori=1:1:7
ifS==H(:,i)'
E=dec2bin(2^(7-i),7);%计算R的错误图样
fprintf('错误出现在第%1.0f位\n',i);
break;
end
end
a=mod(B-E,2);%计算原发送码序列
显然,这3个方程是线性无关的。代入上述公式可得(7,4)码的全部码组,如表1所示。
表1 (7,4)汉明码的全部码组
信息位
a6a5a4a3
监督位
a2a1a0
信息位
a6a5a4a3
监督位
a2a1a0
0000
000
1000
111
0001
011
1001
100
0010
101
1010
010
0011
110
1011
(式3.2.3)
其中P为 阶矩阵, 为 阶单位阵。
因为 或 ,所以可以用这个关系式来作为判断接收码字A是否出错的依据。若 ,则说明码字A有错,反之则说明码字A无错。
● 生成矩阵G
若将(3.2.1式)的监督方程补充完整并写成矩阵的形式:
(式3.2.4)
即:A=G·[ ]=G·M
即汉明码的编码原理
上式中
E=dec2bin(0,7);
end
for i=1:1:7
if S==H(:,i)'
E=dec2bin(2^(7-i),7);%计算R的错误图样
fprintf('错误出现在第%1.0f位\n',i);
break;
end
end
a=mod(B-E,2);%计算原发送码序列
disp('原发送码字为:');
c=mod(a*G,2);
disp('编码后序列为:');
disp(c);
x=.01:.01:4;
[m,n]=size([a]'*ones(1,100));
y=reshape(([a]'*ones(1,100))',1,m*n);
plot(x,y)
axis([0 4 0 1.5]);
set(gca,'XTick',0:1:4);
2.2 监督矩阵H和生成矩阵G
●监督矩阵H
式(3.1)所示的(7,4)汉明码的监督方程可以改写为:
(式3.2.1)
用矩阵的形式可以将上式表示为:
(式3.2.2)
并简记为: 或
其中,H成为监督矩阵,只要H给定,信息位和监督位的关系也就随即确定下来了。H的行数就是监督矩阵的数目,等于监督数目r。H序列可分为两部分:
plot(x,y)
holdon;
plot(x,z,'--r')
axis([0 7 0 1.5]);
set(gca,'XTick',0:1:7);
set(gca,'YTick',0:0.5:2.5);
set(gca,'ZTick',0:0.5:2.5);
title('hanmingdecode')
xlabel('value')
4.2 (7,4)汉明码译码程序的设计
function g=hammingdecod(B)
H=[1 1 1 0 1 0 0 ;1101 0 1 0;1011 0 0 1];
B=input('输入接收序列B=');
S=mod(B*H',2);%计算B的伴随式
ifS==0
disp('接收到的码字无错误。');
0 0 1
1
0 0 0 0 0 1 0
0 1 0
2
0 0 0 0 1 0 0
1 0 0
3
0 0 0 1 0 0 0
0 1 1
4
0 0 1 0 0 0 0
1 0 1
5
0 1 0 0 0 0 0
1 1 0
6
1 0 0 0 0 0 0
1 1 1
7
无错
0 0 0 0 0 0 0
0 0 0
无错
由上表可知:当S=001时,则出错在0位,即b0出错;
disp(a)
●译码流程图
译码程序设计的流程图:
4.3 (7,4)汉明码译码程序的编译及仿真
functiong=hammingdecod(B)
H=[1 1 1 0 1 0 0 ;1 1 0 1 0 1 0;1 0 1 1 0 0 1];
B=input('输入接收序列B=');
S=mod(B*H',2);%计算B的伴随式
MATLAB(Matrix Laboratory,矩阵实验室)是Mathwork公司推出的一套高效率的数值计算和可视化软件。其中,MATLAB通信工具箱是一套用于在通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包。MATIAB通信工具箱由两大部分组成:通信系统功能函数库和SIMULINK通信系统仿真模型库。MATLAB通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数、函数功能覆盖了现代通信系统的各个方面。这些函数包括:信号源产生函数、信源编码/解码函数、纠错控制编码/解码函数、调制/解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。以纠错控制编解码函数为例:函数库提供了线性分组码、汉明码、循环码、BCH码、里德一索洛蒙码(REED—SOLOMON)、卷积码等6种纠错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形式的函数表达。
function f=hammingencod(a)
G=[1 0 0 0 1 1 1;0 1 0 0 1 1 0;0 0 1 0 1 0 1;0 0 0 1 0 1 1];
%(7,4)汉明码的生成矩阵
a=input('输入信息元序列:');
c=mod(a*G,2); %编码的码字c
disp('编码后序列为:');
disp('原发送码字为:');
disp(a)
x=.01:.01:7;
[m,n]=size([a]'*ones(1,100));
y=reshape(([a]'*ones(1,100))',1,m*n);
[m,n]=size([B]'*ones(1,100));
z=reshape(([B]'*ones(1,100))',1,m*n);
set(a,'YTick',0:0.5:1.5);
title('hanmingencode')
xlabel('value')
相关主题