您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 真1 Matlab、Simulink及S
基于Matlab的cdma2000前向业务信道仿真1Matlab、Simulink及S函数Matlab是集数值计算、符号运算及图形处理等强大功能于一体的科学计算语言,可以直接地处理矩阵或者数组,语句精炼,编程效率高。Simulink软件包是Matlab环境下的仿真工具,它可以进行动态系统建模、仿真及综合分析。在Simulink提供的图形用户界面GUI上,只要进行鼠标的简单拖拉操作就可以构造出用户所需仿真模型。Simulink提供了S函数,即系统函数,它使用户可以利用MATLAB,C语言,C++语言以及FORTRAN等语言的程序创建自定义的Simulink模块。•2cdma2000•从二十世纪八十年代初,ITU(国际电信联盟)就开始了对第三代移动通信系统的研究,其最初被称为FPLMTS,而后被改名为IMT-2000(InternationalMobileTelecommunications-2000)。IMT-2000采用的三个主流标准是欧洲的W-CDMA、美国的cdma2000和中国的TD-SCDMA。由此可见,cdma2000是实现第三代移动通信非常重要的标准之一。•3cdma2000前向业务信道•前向业务信道是cdma2000系统中的一类重要信道。本文对它的仿真是在SR1下的RC1条件下进行的。其中SR1(SpreadingRate1)表示最终扩频后的数据速率为1.2288Mchips/s,RC1表示一种无线配置(RadioConfiguration)。无线配置被定义为一组前向业务信道或反向业务信道的数据传送结构,它具有特定的物理层参数,例如,信息速率、编码结构等。••图1前向业务信道的结构图InfBitsAddFQIAdd8tailbitsConvolutionalEncoderSymbolRepetitionBlockInterleaverModulationSymbol•前向业务信道的结构如图1所示,图中的各个框图就是仿真中要实现的主要模块,它们分别代表:•FrameQualityIndicator(帧质量校验)•帧质量校验主要用于检错,报告一帧中是否有错码。它采用的是循环冗余校验码(CRC)。•(2)8EncoderTailBits(8位编码尾比特)•8位编码尾比特固定为全零,目的是为了自动初始化后面的卷积编码器。•(3)ConvolutionalEncoder(卷积编码器)•卷积编码器产生约束长度为9,编码效率为1/2的卷积码。•(4)SymbolRepetition(符号重复)•这个模块主要是为了进行速率匹配。•(5)BlockInterleaver(块交织)•块交织技术可以看成是将一帧符号按一定顺序(行)写入一矩阵内,再按一定顺序(列)依次将其读出,打乱原有的排列顺序。交织技术主要用于对抗突发误码,它可将大片连续误码分散至各部分。这样做的原因是卷积码的纠突发误码能力弱于纠随机误码能力。•4仿真•仿真环境•扩谱速率:SR1;•无线配置:RC1;•最大数据速率:9.6kbps;•前向纠错编码速率:1/2;•前向纠错编码方式:卷积码。–仿真过程及结果分析•本文分别采用时间流和数据流两种方法进行仿真。所谓时间流仿真,即在Simulink仿真中,所有的模块在每一个时间步长上同时执行。而数据流仿真,即在Matlab仿真中,函数按照数据流的顺序依次执行,也就是处理数据首先经过一个运算阶,然后再经过下一个运算阶。时间流仿真信源:采用一常数模块与一零阶保持器来构建,如图2所示。图2信源模型•CRC发生器:采用C语言S函数来构造此模块。首先在C语言环境下,编写程序sis2000crcgen.c以完成CRC的逻辑功能。然后,调出S函数模块。••在S-functionname中键入sis2000crcgen.c,并在parameters中键入参数名rate_set1即可。这样就得到了CRC发生器。接着采用同样的方法构造了卷积编码器、符号重复器、块交织器、长码发生器及数据扰码器。其余的模块可以直接在Simulink中调用。最后,得到cdma2000的前向业务信道仿真图如图4。图4前向业务信道仿真模型图9扰码后的输出波形频谱•通过以上时间流仿真,得到Timeoffset=0.668的波形如图5~8所示。这些波形清楚地显示出数据帧在经过不同功能模块后的状态,但它只是某一时刻的波形,并不能据此看出其内在的逻辑规律。不过从一段时间来看,其规律就显而易见。同时,采用频谱示波器可以看到扰码后的输出波形频谱如图9所示。扰码后的输出波形可认为是由多个矩形信号构成,其频谱就是由多个小Sinc信号的叠加而形成一个大的Sinc信号。图10工作空间获取数据模型•数据流仿真•为了使数据流的仿真结果与时间流的仿真结果具有可比性,都采用同一个信源来获得信息比特。因此,采用simout模块将时间流信源的输出送到Matlab工作空间中,如图10所示。图11卷积编码器(1/2,9)结构图5仿真编码•然后,用edit命令打开M文件的编辑框,编写如下程序:•function[cycb,convout,inbit,out]=cdma2000()•globalsimout;%定义simout为全局变量•cycb=encode(simout,184,172,’cyclic’);•%进行CRC编码•a=zeros(184,501);•fori=1:184*501•a(i)=cycb(i);•end•b=zeros(8,501);•c=cat(1,a,b);%加8位尾比特•bit=zeros(96192,1);•fori=1:96192•bit(i)=c(i);•end•tran_func=sim2logi('convenc');%将卷积编码的结构图(见图11)转换为转移矩阵•conb=convenco(bit,tran_func);•%进行卷积编码•conb=conb';•convout=zeros(2*length(bit),1);•fori=1:2*length(bit)•convout(i)=conb(i);•end•e=zeros(384,501);•fori=1:501•forj=1:384•e(j,i)=convout(j+(i-1)*384);•end•end•intout=zeros(384,501);•inbit=zeros(384,1);•fori=1:501•inbit=interleavers(e(:,i));%进行块交织•intout(:,i)=inbit;•end•k=zeros(384*501,1);•fori=1:384*501•k(i)=intout(i);•end•power=randint(384*501,1);%产生功控比特•out=xor(k,power);%进行扰码•function[b]=interleavers(e)%块交织的函数•a=zeros(24,16);•fori=1:384•a(i)=e(i);•end•b=zeros(384,1);•a=a';•forj=24:-1:1•fori=1:16•b(i+16*(24-j))=a(i,j);•end•end•通过以上数据流仿真,得到了图1中各模块的输出数据,将此数据流通过示波器,发现与时间流仿真所得结果有一定差异。但此差异是合理的。因为在时间流仿真过程中,各模块的执行时间几乎无延迟,较好地满足了通信系统对时间的要求。而在数据流仿真过程中,下一函数的执行需要调用以前函数的生成结果,这样势必造成执行语句时的等待,这种等待会引起较大延时。因此在同一时刻得到的波形不可能完全一致。6归纳总结•上面我们采用两种方法对cdma2000前向业务信道进行了仿真,得到与理论较吻合的结果。从中可以归纳以下几点:•(1)详细地分析cdma2000前向业务信道的结构及各模块工作原理,是进行仿真的前提。•(2)在时间流仿真中,Simulink没有提供现成的模块,所以要首先合成出合适的模块,通常可以用已有模块搭建,或用S函数编程实现。•(3)数据流仿真中,纯粹是采用M文件编程实现,而Matlab中的数据结构单元是矩阵,因此预初始化矩阵,且尽量避免使用循环语句,这样可以有效提高程序执行效率,减少等待时间。•(4)用Simulink的时间流直接进行仿真,可以反复修改电路参数,同时在Scope模块上看到仿真结果,达到最佳设计要求,大大简化了设计流程,减轻了设计负担,充分体现了Simulink工具的优越性。•(5)还需改进之处是无法将数据流的延迟减小到与时间流延迟可比的程度。
本文标题:真1 Matlab、Simulink及S
链接地址:https://www.777doc.com/doc-3392115 .html