《Matlab的卷积码译码器的设计与仿真(共18页).doc》由会员分享,可在线阅读,更多相关《Matlab的卷积码译码器的设计与仿真(共18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上长沙理工大学通信原理课程设计报告郭林学 院 计算机与通信工程 专 业 通信工程 班 级 学 号 11 学生姓名 郭 林 指导教师 龙 敏 课程成绩 完成日期 2008年1月11日基于Matlab的卷积码译码器的设计与仿真学生姓名:郭 林 指导老师:*摘 要 本课程设计主要解决对一个卷积码序列进行维特比(Viterbi)译码输出,并通过Matlab软件进行设计与仿真,并进行误码率分析。在课程设计中,系统开发平台为Windows Vista Ultimate,程序设计与仿真均采用Matlab R2007a(7.4),最后仿真详单与理论分析一致。关键词 课程设计;卷积码译码
2、器;Matlab;Simulink;设计与仿真1 引 言本课程设计主要解决对一个卷积码序列进行维特比(Viterbi)译码输出,并通过Matlab软件进行设计与仿真。卷积码的译码有两种方法软判决和硬判决,此课程设计采用硬判决的维特比译码。1.1 课程设计目的卷积码是一种向前纠错控制编码。它将连续的信息比特序列映射为连续的编码器输出符号。这种映射是高度结构化的,使得卷积码的译码方法与分组码译码所采用的方法完全不同。可以验证的是在同样复杂度情况下,卷积码的编码增益要大于分组码的编码增益。对于某个特定的应用,采用分组编码还是采用卷积编码哪一种更好则取决于这一应用的具体情况和进行比较时可用的技术1。本
3、课程设计便是通过Matlab设计一个硬判决维特比译码输出的完整电路,并进行误码率分析。1.2 课程设计的原理卷积码,又称连环码,是由伊莱亚斯(P.elias)于1955年提出来的一种非分组码。卷积编码的最佳译码准则为:在给定已知编码结构、信道特性和接收序列的情况下,译码器将把与已经发送的序列最相似的序列作为传送的码字序列的估值。对于二进制对称信道,最相似传送序列就是在汉明距离上与接收序列最近的序列。卷积码的译码方法有两大类:一类是大数逻辑译码,又称门限译码(硬判决,编者注);另一种是概率译码(软判决,编者注),概率译码又分为维特比译码和序列译码两种。门限译码方法是以分组码理论为基础的,其译码设
4、备简单,速度快,但其误码性能要比概率译码法差2。当卷积码的约束长度不太大时,与序列译码相比,维特比译码器比较简单,计算速度快。维特比译码算法是1967年由Viterbi提出,近年来有大的发展。目前在数字通信的前向纠错系统中用的较多,而且在卫星深空通信中应用更多,该算法在卫星通信中已被采用作为标准技术。2 维特比译码原理采用概率译码的基本思想是:把已接收序列与所有可能的发送序列做比较,选择其中码距最小的一个序列作为发送序列。如果发送L组信息比特,那么对于(n,k)卷积码来说,可能发送的序列有2kL个,计算机或译码器需存储这些序列并进行比较,以找到码距最小的那个序列。当传信率和信息组数L较大时,使
5、得译码器难以实现。维特比算法则对上述概率译码做了简化,以至成为了一种实用化的概率算法。它并不是在网格图上一次比较所有可能的2kL条路径(序列),而是接收一段,计算和比较一段,选择一段最大似然可能的码段,从而达到整个码序列是一个最大似然值得序列。下面以图2.1的(2,1,3)卷积码编码器所编出的码为例,来说明维特比解码的方法和运作过程。为了能说明解码过程,这里给出该码的状态图,如图2.2所 mjmj-1mj-2输出序列m1,m2,mj,y1jy2j输入序列00adcb110011010110图2.2 (2,1,3)卷积码状态图图2.1 (2,1,3)卷积码编码器示。维特比译码需要利用图来说明移码
6、过程。根据卷积码画网格的方法,我们可以画出该码的网格图,如图2.3所示。该图设输入信息数目L=5,所以画L+N=8个时间单位,图中分别标以0至7。这里设编码器从a状态开始运作。该网格图的每一条路径都对应着不同的输入信息序列。由于所有可能输入信息序列共有2kL个,因而网格图中所有可能的路径也为2kL条。这里节点a=00,b=01,c=10,d=11。abcd节点号0123456700000000000000111111111111111100000101010101010101010101111110101010图2.3 (2,1,3)卷积码网格图设输入编码器的信息序列为(),则由编码器对应输出
7、的序列为Y=(11100),编码器的状态转移路线为abdcbdca。若收到的序列R=(11100),对照网格图来说明维特比译码的方法。由于该卷积码的约束长度为6位,因此先选择接收序列的前6位序列R1=()同到达第3时刻的可能的8个码序列(即8条路径)进行比较,并计算出码距。该例中到达第3时刻a点的路径序列是()和(),他们与R1的距离分别为3和4;到达第3时刻b点的路径序列是()和(),他们与R1的距离分别为3和4;到达第3时刻c点的路径序列是()和(),他们与R1的距离分别为4和1;到达第3时刻d点的路径序列是()和(),他们与R1的距离分别为2和3。上述每个节点都保留码距较小的路径作为幸存
8、路径,所以幸存路径码序列是()、()、()和(),如图2.4所示。用于上面类似的方法可以得到第4、5、6、7时刻的幸存路径。abcd节点号0123000000111111010101图2.4 维特比译码第3时刻幸存路径需要指出的是,对于某个节点,如果比较两条路径与接收序列的累计码距值相等时,则可以任意选者一条路径作为幸存路径,吃时不会影响最终的译码结果。在码的终了时刻a状态,得到一条幸存路径。如果2.5所示。由此可看到译码器abcd节点号0123110101456780001011100图2.5 第8时刻幸存路径输出是R=(11100),即可变换成序列(),恢复了发端原始信息。比较R和R序列,
9、可以看到在译码过程中已纠正了在码序列第1和第7位上的差错。当然如果差错出现太频繁,以致超出卷积码的纠错能力,还是会发生纠误的。3 Matlab中卷积码译码器的设计与仿真3.1 Matlab维特比译码器模块介绍在Matlab软件的Simulink组件库中包含有的两种卷积码译码模块,即后验概率卷积译码器和维特比译码器。图3.1,图3.2所示是维特比译码器参数设置对话框和模块,它通过维特比译码还原出二进制信号序列。图3.1 维特比译码器参数设置图3.2 维特比译码器模块如果卷积编码器的输入长度为k,输出信号的长度为n,则维特比译码器的输入好输出信号长度分别是n和k的整数倍。维特比译码器模块主要有以下
10、几个参数:(1)Trellis structure(Trellis结构)与维特比一冒起相对应的卷积编码器的Trellis结构。它既可以是Matlab工作区中的一个Trellis变量,也可以是通过poly2trellis()函数产生的Trellis结构。(2)Decision Type(判决类型)维特比译码器德判决类型有3种:Unquantized(非量化)、Hard Decision(硬判决)和Soft Decision(软判决),如表3.1所示。表3.1维特比译码器的判决类型判决类型解码器的输出类型说明Unquantized实数+1表示逻辑0;-1表示逻辑1Hard Decision0, 1
11、0表示逻辑0;1表示逻辑1Soft Decision介于0和2b-1之间的整数,其中b是软判决位的个数0表示具有取值为0的最大概率;2b-1表示具有取值为1的最大概率;介于两者之间的数表示取0和1的相对概率。(3)Number of soft decision bits(软判决的个数)当Decision type设置为Soft Decision时,本参数有效,并且当它的取值为b时,维特比译码器的输出是介于0和2b-1之间的一个整数。(4)Traceback depth(反馈深度)反馈深度D影响着维特比译码的精度,同时也影响着解码的时延(即在输出第一个解码数据之前输出的0的个数)。(5)Oper
12、ation mode(操作模式)维特比译码器有3种操作模式:Continuous、Terminated或Truncated。如果维特比译码器的输出信号是抽样信号,则应该把本参数设置为Continuous模式;当输入信号时帧数据时,操作模式可以是Continuous、Terminated或Truncated。对于Continuous模式,维特比译码器在每帧数据结束时保存译码器的内部状态,用于对下一帧实施解码;在Truncated模式下,解码器在每帧数据结束的时候总能恢复到全零状态,它对应于卷积编码器的On each frame复位方式;Terminated模式适用于卷积编码器的每帧输入信号的末尾
13、有足够多的零,能够把卷积编码器在完成一帧数据的编码之后把内部状态恢复为0。(6)Enable rest input port(启用复位信号端口)当Operation mode参数设置为Continuous并且选中了本选项前面的复选框之后,维特比译码器增加一个输出信号端口Rst。同时当Rst的输入信号不等于0时,维特比译码器复位到初始状态。33.2 Matlab中卷积码维特比译码器的设计整个设计的结构框图如图3.3图3.3 整体设计结构模块框图信源模块噪声信道信宿模块信号编译码器约定参数信号信号可见,本设计由3个子系统组成:信源模块对随机二进制信号进行卷积码和二进制相位调制,输出基带调制信号;信
14、道模块是一个有噪声信道;信宿模块对调制信号进行软判决译码,得到原始信息序列,并且计算调制信号的误码率。信源模块由贝努利二进制序列产生器、卷积码编码器以及二进制相位调制3个模块组成,如图3.4所示 图3.4 信源模块系统框图各个模块的参数设置分别如表3.2表3.4所示。表3.2 Bernoulli Binary Generator(贝努利二进制序列产生器)的参数设置参数名称参数值模块类型Bernoulli Binary GeneratorProbability of zero0.5Initial seed25741Sample time0.0001Frame-based outputChecke
15、dSamples per frame10000表3.3 Convolutional Encoder(卷积码编码器)的参数设置参数名称参数值模块类型Convolutional EncoderTrellisPoly2trellis(7,171 133)ResetOn each frame表3.4 BPSK Modulator Baseband(二进制相位调制模块)的参数设置参数名称参数值模块类型BPSK Modulator BasebandPhase offset(rad)0Samples per symbol1本设计使用相对较简单的一个加性高斯白噪声信道作为噪声信道,它在二进制相位调制信号中叠加
16、高斯白噪声。加性高斯白噪声模块的参数设置如表3.5。表3.5 AWGN Channel(加性高斯白噪声模块)的参数设置参数名称参数值模块类型AWGN ChannelInitial seed1237ModeSignal to noise ratio(SNR)SNR(dB)SNRInput signal power(watts)1信道模块如下图3.6所示。图3.6 信道模块示意图信宿模块在接收到二进制相位调制信号后,首先由BPSK Demodulator Baseband (二进制相位解调模块)对信号进行量化,得到硬判决量化信号,然后通过Viterbi Decoder(维特比译码器)对软判决信号实
17、施译码。译码输出信号和信源模块产生的原始信号输入到Error Rate Calculator(误比特率统计模块)中,统计得到的数据一方面通过Display(显示模块)显示出来,另一方面通过一个Selector(选择器)把其中的第一个元素(即编码信号的误比特率)保存到工作区变量BitErrorRate中。信宿模块如下图3.7所示。图3.7 信宿模块Sink各关键模块参数设置如表3.7、表3.8所示。表3.7 BPSK Demodulator Baseband(二进制相位解调模块)的参数设置参数名称参数值模块类型BPSK Demodulator BasebandPhase offset(rad)0
18、Decision typeHard decisionOutput data typeInherit via internal rule表3.7 Viterbi Decoder(维特比译码器)的参数设置参数名称参数值模块类型Viterbi DecoderTrellis structurepoly2trellis(7, 171 133)Decision typeHard decisionTreceback depth1000Operation modeTruncated将此完整设计保存,命名为convh.mdl。3.3简化维特比译码器的仿真为了验证译码模块的正确性,便让其进行最简模式运行,为此,临
19、时设计一个简化信号系统,关闭信道噪声,不进行二进制相位的调制与解调,去掉误比特率统计模块。为了能看到输入二进制码和译码输出二进制码,增加了两个To Workspace(结果输入到工作区模块),整个系统模块框图如图3.8所示。图3.8 简化译码模块框图同时,为了便于观察,将Bernoulli Binary Generator(贝努利二进制序列产生器)的参数设置为如表3.8所示,以产生简单的15位二进制随机码,也将Viterbi Decoder的Trceback depth值改为5。将To Workspace1模块和To Workspace模块的变量名分别设置为pdata和data。表3.8 简化
20、译码模块的Bernoulli Binary Generator的参数设置参数名称参数值模块类型Bernoulli Binary GeneratorProbability of zero0.5Initial seed5Sample time10Frame-based outputCheckedSamples per frame5运行仿真(),在matlab的命令窗口中输入pdata和data分别得到相应的二进制序列。对所得序列分别截图,可得如图3.9所示结果。可见,译码器能够正确进行译码,所设计简化译码器正确,因而,从理论上可推导,原设计正确。图3.9 简化译码器仿真结果通过对convh.mdl
21、文件进行仿真,证明设计正确,但因所得二进制码太多,此处便不进行截图证明。4 Matlab中卷积码译码器的误码率分析编制M文件convolutionh.m,使convh.mdl在不同的信噪比条件下重复执行前面建立的项目convh.mdl。然后绘制信道的信噪比与编码信号误比特率之间的关系曲线图。M文件代码如下:%x表示信噪比x=-10:5;%y表示信号的误比特率y=x;%准备一个空白图形hold off;%重复运行convh.mdl,检验不同条件下硬判决译码的性能 for i=1:length(x) %信道的信噪比依次取x中的元素 SNR=x(i); %运行仿真程序,得到的误比特率保存在工作区变量
22、BitErrorRate中 sim(convh); %计算BitErrorRate的均值作为本次仿真的误比特率 y(i)=mean(BitErrorRate); end%绘制x和y的关系曲线图,纵坐标采用对数坐标semilogy(x,y);%保持已经绘制的图形hold on执行此M文件,得到如图4.1所示的关系曲线图,由此图可见,随着信道信噪比的提升,维特比译码所得结果的误比特率越低,信道的可信度越高,信噪比在大于-2时信道的误码率开始明显降低。图4.1 convolutionh.m运行结果5 结束语此课程设计对整个通信系统包含的编码、传输和译码都进行了设计与仿真,从这些过程中我们看到了通信系
23、统的基本工作原理。通过整个卷积码系统的设计与仿真,使我们加深了对卷积码的理解,掌握维特比译码的基本思路,知道如何进行误码率分析从而选者合适的信道传输信号,更重要的是学会了使用Matlab作为学习工具来对我们的通信系统进行设计和仿真等操作,这对我们以后的学习和工作有着重要意义。参考文献1 Rodger E.Ziemer,Roger L.Peterson 著. 尹长川,郝建军,罗涛 等 译. 数字通信基础 (Introduction to Digital Communication). 原书第2版. 北京:机械工业出版社,2005.12 樊昌信,张甫翊,徐炳祥,吴成柯. 通信原理.第5版. 北京:
24、国防工业出版社,2007.13 邓华. Matlab通信仿真及应用实例详解. 北京:人民邮电出版社,2003.94陈国通. 数字通信. 哈尔滨:哈尔滨工业大学出版社,2002.45孙祥,徐流美,吴清. Matlab7.0基础教程. 北京:清华大学出版社,2005.5附录:convh.mdl详图附录2:M文件convolutionh.m程序清单%程序名称:convolutionh.m%程序功能:依次取不同的信噪比,重复对convh.mdl进行仿真,检验译码性能。%程序作者:郭林%最后修改日期:2008-1-1%x表示信噪比x=-10:5;%y表示信号的误比特率y=x;%准备一个空白图形hold off;%重复运行convh.mdl,检验不同条件下硬判决译码的性能 for i=1:length(x) %信道的信噪比依次取x中的元素 SNR=x(i); %运行仿真程序,得到的误比特率保存在工作区变量BitErrorRate中 sim(convh); %计算BitErrorRate的均值作为本次仿真的误比特率 y(i)=mean(BitErrorRate); end%绘制x和y的关系曲线图,纵坐标采用对数坐标semilogy(x,y);%保持已经绘制的图形hold on专心-专注-专业