基于MATLAB的74循环码的编译仿真设计文档格式.docx

上传人:b****3 文档编号:14399353 上传时间:2022-10-22 格式:DOCX 页数:13 大小:130.55KB
下载 相关 举报
基于MATLAB的74循环码的编译仿真设计文档格式.docx_第1页
第1页 / 共13页
基于MATLAB的74循环码的编译仿真设计文档格式.docx_第2页
第2页 / 共13页
基于MATLAB的74循环码的编译仿真设计文档格式.docx_第3页
第3页 / 共13页
基于MATLAB的74循环码的编译仿真设计文档格式.docx_第4页
第4页 / 共13页
基于MATLAB的74循环码的编译仿真设计文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于MATLAB的74循环码的编译仿真设计文档格式.docx

《基于MATLAB的74循环码的编译仿真设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的74循环码的编译仿真设计文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

基于MATLAB的74循环码的编译仿真设计文档格式.docx

它是现代计算机技术与通信技术飞速发展的产物,在日常生活通信领域、武器控制系统等领域都被广泛应用。

纠错码(errorcorrectingcode),在传输过程中发生错误后能在收端自行发现或纠正的码。

仅用来发现错误的码一般常称为检错码。

为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。

关系的建立称为编码。

码字到达收端后,可以根据编码规则是否满足以判定有无错误。

当不能满足时,按一定规则确定错误所在位置并予以纠正。

纠错并恢复原码字的过程称为译码。

检错码与其他手段结合使用,可以纠错。

纠错编码又称信道编码,它与信源编码是信息传输的两个方面。

它们之间存在对偶的关系。

应用信道译码直接对一些自然信息进行处理,可以去掉剩余度,以达到压缩数据的目的。

为了使一种码具有检错或纠错能力,必须对原码字增加多余的码元,以扩大码字之间的差别,使一个码字在一定数目内的码元上发生错误时,不致错成另一个码字。

准确地说,即把原码字按某种规则变成有一定剩余度的码字,并使每个码字的码元间有一定的关系。

码字到达收端后,用编码时所用的规则去检验。

如果没有错误,则原规则一定满足,否则就不满足。

由此可以根据编码规则是否满足以判定有无错误。

当不能满足时,在可纠能力之内按一定的规则确定错误所在的位置,并予以纠正。

纠错并恢复原码字的过程称为译码;

码元间的关系为线性时,称为线性码;

否则称为非线性码。

检错反馈重发系统(ARQ系统)就是一例。

循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还具有循环性。

循环码的编码和解码设备都不太复杂,且检(纠)错能力强。

它不但可以检测随机的错误,还可以检错突发的错误。

循环码可以检测长为或更短的任何突发错误,包括首尾相接突发错误。

循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图中的邻接条件,即相邻两个数码之间只有一位码元不同,码元就是组成数码的单元。

符合这个特点的有多种方案,但循环码只能是表中的那种。

循环码的优点是没有瞬时错误,因为在数码变换过程中,在速度上会有快有慢,中间经过其它一些数码形式,称它们为瞬时错误。

这在某些数字系统中是不允许的,为此希望相邻两个数码之间仅有一位码元不同,即满足邻接条件,这样就不会产生瞬时错误。

循环码就是这样一种编码,它可以在卡诺图中依次循环得到。

循环码又称格雷码(GrayCode)。

2、实验要求

(1)利用(7,4)系统循环码的生成多项式为:

,请设计该循环码的编码器;

(2)随机产生重量为0或1的八种错误图样中的一种,得到实际接收码字。

(3)根据接收到的码字进行译码。

3、编译码原理

循环码最大的特点就是码字的循环特性,所谓循环特性是指:

循环码中任一许用码组经过循环移位后,所得到的码组仍然是许用码组,也就是说,不论是左移还是右移,也不论移多少位,仍然是许用的循环码组。

循环码的生成多项式写为,它是循环码码集中唯一的,幂次为的码多项式,则是一个幂次为的码多项式。

按模运算,此时:

即,且因也是次幂,故。

由于它是循环码,故按模运算后的“余式”也是循环码的一个码字,它必能被整除,即:

由以上两式可以得到:

从上式中可以看出,生成多项式g(x)应该是的一个因式,即循环码多项式应该是的一个次因式。

由生成多项式可以得出相应的典型生成矩阵及标准监督矩阵:

已知(7,4)循环码的生成多项式和校验多项式分别为:

,。

写得其生成矩阵和校验矩阵分别为:

循环码的编译码过程如下:

(1)编码过程

第一步:

将信息码字表示为,其最高次幂为;

第二步:

将与求模得出相应的余式;

第三步:

编码结果为。

(2)译码过程

由接收码字与监督矩阵相乘得出错误图样;

判断是否为零。

若不为零,则出错。

在假定至多只有一位错的情况下,可以有效地译了相应的信息码字。

在出错的情况下,将与标准监督矩阵对比,得出错误的比特位并进行更正得出前四位为信息码字。

4、仿真结果

(1)编译码程序说明

编译码程序由三个子函数及界面函数组成。

三个子函数分别完成编码、译码及字符提取的工作,以下为三个函数的源码:

%%%%%%%

%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(:

m)];

%产生编码后的码字空间C

msg_en=rem(msg*genmat,2);

%cyle_decode.m

functioncode=cycle_decode(m,msg)%循环码译码函数

%code:

译码结果

%计算伴随式

S=rem(msg*parmat'

2)'

;

count=0;

%比较译码

if(sum(S)~=0)

for(ii=1:

1:

n)

for(jj=1:

m)

if(S(jj)==parmat(jj,ii))

count=count+1;

end;

if(count==3)

mis=ii;

else

count=0;

else

mis=0;

end;

if(mis)

msg(mis)=rem(msg(mis)+1,2);

%译码结果

code=msg(1:

k);

%extracts_bits.m

functionmsg=extract_bits(inf_msg)%比特提取函数

%inf_msg:

提取结果

warningoff

len=length(inf_msg);

msg=zeros(1,len);

forii=1:

len

msg(1,ii)=str2num(inf_msg(ii));

%将字符转换成数字

%msg

%%%%%%

%cycle.m

functionvarargout=cycle(varargin)

%CYCLEMATLABcodeforcycle.fig

%CYCLE,byitself,createsanewCYCLEorraisestheexisting

%singleton*.

%

%H=CYCLEreturnsthehandletoanewCYCLEorthehandleto

%theexistingsingleton*.

%CYCLE('

CALLBACK'

hObject,eventData,handles,...)callsthelocal

%functionnamedCALLBACKinCYCLE.Mwiththegiveninputarguments.

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1