matlab课设循环码的性能分析范文.docx
《matlab课设循环码的性能分析范文.docx》由会员分享,可在线阅读,更多相关《matlab课设循环码的性能分析范文.docx(24页珍藏版)》请在冰点文库上搜索。
matlab课设循环码的性能分析范文
课程设计任务书
题目:
循环码的性能分析
初始条件:
MATLAB软件,电脑,通信原理知识
要求完成的主要任务:
输入信号:
速率为100Bd的矩形信号;信道:
AWGN;
要求:
1、画出编码器输入、输出信号,信道的输出信号,译码器的输出信号的波形、频谱
2、画出误码率与译码器输入信噪比的关系曲线;
时间安排:
1、第十三周:
查阅资料
2、第十四周:
仿真及撰写报告。
3、第十五周:
答辩
指导教师签名:
2011年12月15日
系主任(或责任教师)签名:
2011年12月15日
摘要
循环码是线性分组码中最重要的一种子类,是目前研究得比较成熟的一类码。
循环码具有许多特殊的代数性质,这些性质有助于按照要求的纠错能力系统地构造这类码,并且简化译码算法,并且目前发现的大部分线性码与循环码有密切关系。
循环码还有易于实现的特点,很容易用带反馈的移位寄存器实现其硬件。
本文只要是利用MATLAB中的SIMULINK通信系统仿真模型库进行循环码建模仿真,并调用通信系统功能函数进行编程,绘制时域波形,频谱及误码率与信噪比关系曲线图。
在此基础上,对循环码的性能进行分析,得出结论。
关键词:
MATLAB循环码SIMULINK性能
Abstract
Cyclecodeislinearspace-timeblockcodesinthemostimportantofaseed,isthepresentresearchmorematurekindofcode.Cycliccodehasmanyspecialalgebraicproperties,thesepropertiestohelpinaccordancewiththerequirementsoftheerrorcorrectionabilitytoconstructthesystemofthiskindofcode,andsimplifieddecodingalgorithm,andthemostofthelinearcodeandfoundthatthereisacloserelationshipbetweencycliccode.Cycliccodeandiseasytorealizethecharacteristic,iseasytousewiththefeedbacktheshiftregisterrealizeitshardware.
ThispaperaslongasitisintheuseofMATLABsimulationmodelbasecommunicationsystemSIMULINKcyclecodemodelingsimulation,andcallcommunicationsystemfunctionforprogramming,renderingtimedomainwaveformandspectrumandthebiterrorrateandsignal-to-noiseratiorelationsdiagram.Onthisbasis,thecirculationyardsofperformanceanalysis,drawtheconclusion.
Keywords:
MATLABcyclecodeSIMULINKperformance
1引言
MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和SIMULINK两大部分。
MATLABT通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数,函数功能覆盖了现代通信系统的各个方面。
这些函数包括:
信号源产生函数、信源编码/解码函数、接错控制编码/解码函数、调制/解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。
以纠错控制编解码函数为例:
函数库提供了线性分组码、汉明码、循环码、BCH码、里德一索洛蒙码(REED---SOLOMON)、卷积码等6种纠错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形式的函数表达。
在SIMULINK通信系统仿真模型库中,整个通信系统的流程图被概括为:
信号的产生与输入、编码与解码、调制与解调。
在SIMULIKE中通信系统仿真的一般模型如图1.1所示。
图1通信系统仿真模型
2设计原理
2.1循环码介绍
循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还具有循环性。
循环码的编码和解码设备都不太复杂,且检(纠)错能力强。
它不但可以检测随机的错误,还可以检错突发的错误。
(n,k)循环码可以检测长为n-k或更短的任何突发错误,包括首尾相接突发错误。
循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图中的邻接条件,即相邻两个数码之间只有一位码元不同,码元就是组成数码的单元。
符合这个特点的有多种方案,但循环码只能是表中的那种。
循环码的优点是没有瞬时错误,因为在数码变换过程中,在速度上会有快有慢,中间经过其它一些数码形式,称它们为瞬时错误。
这在某些数字系统中是不允许的,为此希望相邻两个数码之间仅有一位码元不同,即满足邻接条件,这样就不会产生瞬时错误。
循环码就是这样一种编码,它可以在卡诺图中依次循环得到。
循环码又称格雷码(GreyCode)。
循环码最大的特点就是码字的循环特性,所谓循环特性是指:
循环码中任一许用码组经过循环移位后,所得到的码组仍然是许用码组。
若(
)为一循环码组,则(
)、(
)……还是许用码组。
也就是说,不论是左移还是右移,也不论移多少位,仍然是许用的循环码组。
2.1.1循环码的多项式表示
设码长为n的循环码表示为(
),其中
为二进制数,通常把码组中各码元当做二进制的系数,即把上式中长为n的各个分量看做多项式:
(2—1)
的各项系数,则码字与码多项式一一对应,这种多项式中,x仅表示码元位置的标记,因此我们并不关心x的取值,这种多项式称为码多项式。
2.1.2(n,k)循环码的生成多项式
(n,k)循环码的生成多项式写为g(x),它是(n,k)循环码码集中唯一的,幂次为n-k的码多项式,则
是一个幂次为n的码多项式。
按模(
)运算,此时:
(2—2)
即
(2—3)
且因
g(x)也是n阶幂,故Q(x)=1。
由于它是循环码,故
按模(
)运算后的“余式”也是循环码的一个码字,它必能被g(x)整除,即:
(2—4)
由以上两式可以得到:
(2—5)
和
(2—6)
从上式中可以看出,生成多项式g(x)应该是
的一个因式,即循环码多项式应该是
的一个n-k次因式。
2.1.3循环码的生成矩阵和一致校验矩阵
对所有的i=0,1,2,……k-1,用生成多项式g(x)除
,有:
(2—7)
式中
是余式,表示为:
(2—8)
因此,
是g(x)的倍式,即
是码多项式,由此得到系统形式的生成矩阵为:
(2—9)
它是一个k
n阶的矩阵。
同样,由G
=0可以得到系统形式的一致校验矩阵为:
(2—10)
如已知(7,4)循环码的生成多项式和校验多项式分别为:
,
。
写得其生成矩阵和校验矩阵分别为:
(2—11)
(2—12)
2.2循环码编码原理
有信息码构成信息多项式
,其中最高幂次为k-1;
用
乘以信息多项式m(x),得到的
,最高幂次为n-1,该过程相当于把信息码(
,
,……,
,
)移位到了码字德前k个信息位,其后是r个全为零的监督位;
用g(x)除
得到余式r(x),其次数必小于g(x)的次数,即小于(n-k),将此r(x)加于信息位后做监督位,即将r(x)于
相加,得到的多项式必为一码多项式。
根据上面的讨论,可得到在(7,4)循环码编码的程序框图如图1所示:
图2.2.1编码程序框图
2.3循环码的纠错原理
纠错码的译码是该编码能否得到实际应用的关键所在。
译码器往往比编码较难实现,对于纠错能力强的纠错码更复杂。
根据不同的纠错或检错目的,循环码译码器可分为用于纠错目的和用于检错目的的循环码译码器。
通常,将接收到的循环码组进行除法运算,如果除尽,则说明正确传输;如果未除尽,则在寄存器中的内容就是错误图样,根据错误图样可以确定一种逻辑,来确定差错的位置,从而达到纠错的目的。
用于纠错目的的循环码的译码算法比较复杂,感兴趣的话可以参考一些参考书。
而用于检错目的循环码,一般使用ARQ通信方式。
检测过程也是将接受到的码组进行除法运算,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错,要求发送端重发。
用于这种目的的循环码经常被成为循环冗余校验码,即CRC校验码。
CRC校验码由于编码电路、检错电路简单且易于实现,因此得到广泛的应用。
在通过MODEM传输文件的协议如ZMODEM、XMODEM协议中均用到了CRC校验技术。
在磁盘、光盘介质存储技术中也使用该方法。
当码字c通过噪声信道传送时,会受到干扰而产生错误。
如果信道产生的错误图样是e,译码器收到的n重接受矢量是y,则表示为:
(2—15)
上式也可以写成多项式形式:
(2—16)
译码器的任务就是从y(x)中得到
,然后求的估值码字
(2—17)
并从中得到信息组
。
循环码译码可按以下三个步骤进行:
(1)有接收到的y(x)计算伴随式s(x);
(2)根据伴随式s(x)找出对应的估值错误图样
;
(3)计算
,得到估计码字
。
若
则译码正确,否则,若
,则译码错误。
由于g(x)的次数为n-k次,g(x)除E(x)后得余式(即伴随式)的最高次数为n-k-1次,故S(x)共有2n-k个可能的表达式,每一个表达式对应一个错误格式。
可以知道(7,4)循环码的S(x)共有2(7-4)=8个可能的表达式,可根据错误图样表来纠正(7,4)循环码中的一位错误,其伴随式如表1所示。
BCH(7,4)循环码错误图样表:
错误图样
错误图样码字
伴随式S(x)
伴随式
E6(x)=x6
1000000
x2
100
E5(x)=x5
0100000
x2+x
110
E4(x)=x4
0010000
x2+x+1
111
E3(x)=x3
0001000
x+1
011
E2(x)=x2
0000100
x2+1
101
E1(x)=x1
0000010
x
010
E0(x)=x0
0000001
1
001
E(x)=0
0000000
0
000
表1BCH(7,4)循环码错误图样表
上式指出了系统循环码的译码方法:
将收到的码字R(x)用g(x)去除,如果除尽则无错;否则有错。
如果有错,可由余式S(x)一一找出对应图样,然后将错误图样E(x)与R(x)模2和,即为所求码字C(x),从而实现纠错目的。
根据前面的讨论,可得(7,4)循环码译码的程序框图如图2.3.1所示:
3程序与SIMULINK仿真
3.1程序
3.1.1程序函数介绍
MATLAB中提供了循环码的编码和译码函数,本程序直接调用进行编程。
(1)encode函数
功能:
编码函数
语法:
code=encode(msg,N,K,method,opt)
说明:
用method指定的方法完成纠错编码。
其中msg代表信息码元,是一个K列矩阵,N是编码后的码字长度;K是信息位的长度;opt是有些编码方式需要的参数。
(2)decode函数
功能:
译码函数
语法:
msg=decode(code,N,K,method,opt1,opt2,opt3,opt4);
说明:
这个函数对接收到的码字进行译码,恢复出原始的信息,译码参数和方式必须和编码时采用的严格相同。
它对接收到的码字,按method指定的方式进行译码;opt1,…,opt4是可选项的参数。
(3)cyclpoly函数
功能:
生成循环码的生成多项式。
语法:
p=cyclpoly(N,K);
p=cyclpoly(N,K,fd_flag);
说明:
从p=cyclpoly(N,K)中可找到一个给定码长N和信息位长度K生成多项式p,注意不是任意给定一个多项式都可以作为生成多项式。
(4)randint函数
功能:
引起一致地分布的任意整数矩阵
语法:
out=randint(m)
out=randint(m,n)
out=randint(m,n,rg)
out=randint(m,n,rg,state)
(5)awgn函数
功能:
在某一信号中加入高斯白噪声
语法:
y=awgn(x,SNR);
说明:
信噪比SNR以dB为单位。
x的强度假定为0dBW。
如果x是复数,就加入复噪声。
(6)quantiz函数
功能:
产生一个量化序号和输出量化值。
语法:
index=quantiz(sig,partition);
[index,quantiz]=quantiz(sig,partition,codebook);
[index,quant,distor]=quantiz(sig,partition,codebook);
说明:
这个函数根据给定的区间参数量化信号,间隔矢量必须按递增顺序排列。
3.1.2各部分程序说明
(1)编码程序
m=3;n=2^m-1;k=n-m;
msg=randint(k*4,1,2);%随机提取信号
subplot(2,2.1)
stem(msg)
title('编码器输入信号')
p=cyclpoly(n,k)%循环码生成多项式
code=encode(msg,n,k,'cyclic',p);%对信号进行差错编码
subplot(2,2,2)
stem(code)
title('编码器输出信号')
(2)差错译码程序
recode=decode(code,n,k,'cyclic',p)%对信号进行译码
subplot(2,3,4)
stem(recode)
title('译码器输出信号')
(3)频谱分析程序
t=-1:
0.01:
1;
x=recode;
N=length(x);
fx=fft(x);
df=100/N;
n=0:
N/2;
f=n*df;
subplot(2,3,6);
plot(f,abs(fx(n+1))*2/N);grid;
title('频谱图')
3.1.3运行结果
总程序运行结果如下:
p=
10011
Errorrateinthereceivedcode:
0.033333
Errorrateafterdecoding:
0
图3.1.3.4信道输出信号
图3.1.3.5频谱图
由上面所有的图可以发现,编码器输入信号并不完全相同,因为对信号的提取是随机的,所以码元也是随机的,信号经过编码器后,因为要加入监督码,所以波形变得更加密集了。
信号经过译码后,波形和编码器输入信号大致相同,说明循环码的检错和纠错能力可以。
3.2SIMULINK仿真
本系统有信号产生模块、信号循环编码模块、AWGN信道、信号循环译码模块、误码率计算模块组成,在图像观察模块(包括频谱仪和示波器)观察图形。
3.2.1SIMULINK电路图
在设计中,本系统信号产生模块选用了伯努利二进制序列产生器(BernoulliBinaryGenerator)来输出速率为100Bd的随机数字信号,然后进入二进制循环码编码器(BinaryCyclicEncoder)来进行编码,再送进入AWGN信道(加入高斯白噪声)传输,接受信号送入二进制循环码译码器(BinaryCyclicDecoder)进行差错纠正,其后加一误码率计算模块(ErrorRateCalculation)计算误码率。
再用示波器Scope观察波形,用spectrumscope观察频谱。
电路图如图3.2.1所示。
图3.2.1simulink仿真总图
3.2.2模块参数设置
3.2.3仿真波形
图3.2.3.1编码器输入信号波形
图3.2.3.2编码器输入频谱
图3.2.3.3编码器输出信号波形
图3.2.3.4编码器输出信号频谱
图3.2.3.5信道输出信号波形
图3.2.3.6信道输出频谱
图3.2.3.7译码器输出信号波形
图3.2.3.8译码器输出信号频谱
图3.2.3.9SNR=10dB的误码率
3.2.4仿真结果分析
由上图结果可知,simulink仿真的结果与matlab程序仿真有所不同,由于simulink的仿真运用是运用各个板块,所以simulink像一个黑匣子,我们无法知道里面的程序是如何,所以没办法得之源程序上有什么问题。
不过有结果依旧可知,循环码可以降低误码率,提高系统抗干扰能力。
4小结
在这次基于MATLAB的通信原理课程设计中,我最大的收获是对MATLAB软件的使用有了更深的了解,尤其是simulink仿真板块的运用,更加熟练,此外,对循环码的理论知识有了进一步的认识。
刚拿到题目的时候遇到很多的困难,当时通信原理的理论学习并没有学习到循环码的章节,并且在网上并没能找到很多资源,但是通过查找了大量的循环码理论知识和MATLAB仿真应用的书籍之后,开始调试程序,并进一步了解MATLAB编程的关键字的运用,并且熟悉运用软件simulink、建模仿真、分析,在调试过程中不断出错,查阅资料之后进行不断的修正和更改,得出最终的结果。
这次MATLAB课程设计不仅仅加深了对课程理论知识的了解,并更加熟悉了计算机语言,软件的应用。
并让我了解,学习知识不仅仅只在课本上,还有更多更广的渠道获得更宽广的知识。
参考文献
[1]樊昌信,曹丽娜通信原理(第六版).北京:
国防工业出版社,2007.9
[2]徐明远,邵玉斌MATLAB仿真在通信与电子工程中的应用.西安:
西安电子科技大学学出版社,2005.6
[3]唐向宏,岳恒立,郑雪峰MATLAB及在电子信息类课程中的应用(第二版).北京:
电子工业出版社,2009.6