基于MATLAB的74循环码的编译仿真.docx
- 文档编号:7883558
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:171.59KB
基于MATLAB的74循环码的编译仿真.docx
《基于MATLAB的74循环码的编译仿真.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的74循环码的编译仿真.docx(13页珍藏版)》请在冰豆网上搜索。
基于MATLAB的74循环码的编译仿真
基于MATLAB的(7-4)循环码的编译仿真
HarbinInstituteofTechnology
信息论与编码实验报告
基于MATLAB的(7,4)循环码的编译仿真
院系:
电子与信息工程学院
姓名:
周才发
学号:
13S005051
班级:
通信二班
哈尔滨工业大学
基于MATLAB的(7,4)循环码的编译仿真
(电子与信息工程学院13S005051周才发序号:
15)
1、循环码简介
随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。
随着经济文化水平的显著提高,人们对生活质量及工作软件的要求也越来越高。
在计算机通信信息码中循环码是线性分组码的一个重要子集,是目前研究得最成熟的一类码。
它有许多特殊的代数性质,它使计算机通信以一种以数据通信形式出现,实现了在计算机与计算机之间或计算机与终端设备之间进行有效的与正确地信息传递,它使得现代通信的可靠性与有效性实现了质的飞跃。
它是现代计算机技术与通信技术飞速发展的产物,在日常生活通信领域、武器控制系统等领域都被广泛应用。
纠错码(errorcorrectingcode),在传输过程中发生错误后能在收端自行发现或纠正的码。
仅用来发现错误的码一般常称为检错码。
为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。
关系的建立称为编码。
码字到达收端后,可以根据编码规则是否满足以判定有无错误。
当不能满足时,按一定规则确定错误所在位置并予以纠正。
纠错并恢复原码字的过程称为译码。
检错码与其他手段结合使用,可以纠错。
纠错编码又称信道编码,它与信源编码是信息传输的两个方面。
它们之间存在对偶的关系。
应用信道译码直接对一些自然信息进行处理,可以去掉剩余度,以达到压缩数据的目的。
为了使一种码具有检错或纠错能力,必须对原码字增加多余的码元,以扩大码字之间的差别,使一个码字在一定数目内的码元上发生错误时,不致错成另一个码字。
准确地说,即把原码字按某种规则变成有一定剩余度的码字,并使每个码字的码元间有一定的关系。
关系的建立称为编码。
码字到达收端后,用编码时所用的规则去检验。
如果没有错误,则原规则一定满足,否则就不满足。
由此可以根据编码规则是否满足以判定有无错误。
当不能满足时,在可纠能力之内按一定的规则确定错误所在的位置,并予以纠正。
纠错并恢复原码字的过程称为译码;码元间的关系为线性时,称为线性码;否则称为非线性码。
检错码与其他手段结合使用,可以纠错。
检错反馈重发系统(ARQ系统)就是一例。
循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还具有循环性。
循环码的编码和解码设备都不太复杂,且检(纠)错能力强。
它不但可以检测随机的错误,还可以检错突发的错误。
循环码可以检测长为
或更短的任何突发错误,包括首尾相接突发错误。
循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图中的邻接条件,即相邻两个数码之
编译码程序由三个子函数及界面函数组成。
三个子函数分别完成编码、译码及字符提取的工作,以下为三个函数的源码:
%%%%%%%
%cyle_code.m
function[msg_en]=cycle_code(m,msg)%循环码编码函数
%输入参数
%m:
监督位的位数;
%msg:
信息码字
%输出参数
%msg_en:
编码结果
%inputparameters
%码长与信息码字
n=2^m-1;
k=n-m;
%产生生成矩阵parmat和校验矩阵genmat
pol=cyclpoly(n,k);
[parmat,genmat,k]=cyclgen(7,pol);
%调整生成矩阵与监督矩阵
gen_temp=eye(k);
par_temp=eye(m);
parmat=[par_tempgenmat(:
1:
m)'];
genmat=[gen_tempgenmat(:
1:
m)];
%产生编码后的码字空间C
msg_en=rem(msg*genmat,2);
%%%%%%%
%cyle_decode.m
functioncode=cycle_decode(m,msg)%循环码译码函数
%输入参数
%m:
监督位的位数;
%msg:
信息码字
%输出参数
%code:
译码结果
%码长与信息码字
n=2^m-1;
k=n-m;
%产生生成矩阵parmat和校验矩阵genmat
pol=cyclpoly(n,k);
[parmat,genmat,k]=cyclgen(7,pol);
%调整生成矩阵与监督矩阵
gen_temp=eye(k);
par_temp=eye(m);
parmat=[par_tempgenmat(:
1:
m)'];
genmat=[gen_tempgenmat(:
1:
m)];
%计算伴随式
S=rem(msg*parmat',2)';
count=0;
%比较译码
if(sum(S)~=0)
for(ii=1:
1:
n)
for(jj=1:
1:
m)
if(S(jj)==parmat(jj,ii))
count=count+1;
end;
end;
if(count==3)
mis=ii;
else
count=0;
end;
end;
else
mis=0;
end;
if(mis)
msg(mis)=rem(msg(mis)+1,2);
end;
%译码结果
code=msg(1:
k);
%%%%%%%
%extracts_bits.m
functionmsg=extract_bits(inf_msg)%比特提取函数
%输入参数
%inf_msg:
信息码字
%输出参数
%msg:
提取结果
warningoff
len=length(inf_msg);
msg=zeros(1,len);
forii=1:
len
msg(1,ii)=str2num(inf_msg(ii));%将字符转换成数字
end;
%msg
%%%%%%
%cycle.m
functionvarargout=cycle(varargin)
%CYCLEMATLABcodeforcycle.fig
%CYCLE,byitself,createsanewCYCLEorraisestheexisting
%singleton*.
%
%H=CYCLEreturnsthehandletoanewCYCLEorthehandleto
%theexistingsingleton*.
%
%CYCLE('CALLBACK',hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinCYCLE.Mwiththegiveninputarguments.
%
%CYCLE('Property','Value',...)createsanewCYCLEorraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforecycle_OpeningFcngetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtocycle_OpeningFcnviavarargin.
%
%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone
%instancetorun(singleton)".
%
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Edittheabovetexttomodifytheresponsetohelpcycle
%LastModifiedbyGUIDEv2.530-Nov-201321:
58:
46
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@cycle_OpeningFcn,...
'gui_OutputFcn',@cycle_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforecycleismadevisible.
functioncycle_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstocycle(seeVARARGIN)
handles.output_code=hObject;
handles.m=3;
handles.n=2^(handles.m)-1;
handles.k=handles.n-handles.m;
handles.input_msg=[0000];
handles.output_msg=[0000];
handles.output_encode=[0000000];
handles.output_decode=[0000000];
handles.intput_decode=[0000000];
handles.flag=0;
guidata(hObject,handles);
%Choosedefaultcommandlineoutputforcycle
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakescyclewaitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=cycle_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
%---Executesonbuttonpressinencode.
functionencode_Callback(hObject,eventdata,handles)
%hObjecthandletoencode(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
handles.code=extract_bits(handles.codes);
%guidata(hObject,handles);
handles.encode=cycle_code(handles.m,handles.code)
handles.flag=0;
str=num2str(handles.encode);
set(handles.outcode,'string',str);
guidata(hObject,handles);
%---Executesonbuttonpressindecode.
functiondecode_Callback(hObject,eventdata,handles)
%hObjecthandletodecode(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
handles.input_decode=extract_bits(handles.codes);
guidata(hObject,handles);
handles.decode=cycle_decode(handles.m,handles.input_decode);
handles.flag=1;
str=num2str(handles.decode);
set(handles.outcode,'string',str);
guidata(hObject,handles);
functioninputcode_Callback(hObject,eventdata,handles)
%hObjecthandletoinputcode(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
handles.codes=get(hObject,'String');
guidata(hObject,handles);
%Hints:
get(hObject,'String')returnscontentsofinputcodeastext
%str2double(get(hObject,'String'))returnscontentsofinputcodeasadouble
%---Executesduringobjectcreation,aftersettingallproperties.
functioninputcode_CreateFcn(hObject,eventdata,handles)
%hObjecthandletoinputcode(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled
%Hint:
editcontrolsusuallyhaveawhitebackgroundonWindows.
%SeeISPCandCOMPUTER.
ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
(1)界面说明及运行结果
界面由四部分组成,分别是输入、输出及编译码按钮。
其运行的初始界面如下图所示。
当进行编码时,其操作过程为:
在输入框内输入相应的信息码字,如“1101”,并按编码按钮,其输出结果为“1101001”,其运行结果如下图所示:
当进行译码时,其操作过程为:
在输入框内输入相应的信息码字,如“1101001”,并按编码按钮,其输出结果为“1101”,其运行结果如下图所示:
当随机错一位时,在输入框内输入相应的信息码字,如“0101001”,并按编码按钮,其输出结果为“1101”。
其运行结果如下图所示:
.
当随机错两位时,在输入框内输入相应的信息码字,如“0101001”,并按编码按钮,其输出结果为“0001”。
其运行结果如下图所示:
(2)运行说明
由上述验证可以得到GUI界面的运行方式:
先在输入框内输入相应的信息码字,然后按“编码”或“译码”按钮。
在输出框就会有相应的编译码输出。
2、结论
(1)通过验证,由MATLAB编写的编译码函数可以实现(7,4)循环码的编译码;
(2)通过验证,GUI界面可以有效地引用相应函数实现(7,4)循环码的编译码;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 74 循环码 编译 仿真