目录1.概述..............................................................................................................................................21.1题目要求....................................................................................................................21.2需求说明....................................................................................................................22.设计..............................................................................................................................................32.1码块分段及CRC校验..............................................................................................32.2Turbo编码模块..........................................................................................................72.3速率匹配....................................................................................................................92.4级联..........................................................................................................................112.5加扰..........................................................................................................................112.6调制..........................................................................................................................122.7MIMO发射处理......................................................................................................173.程序结构图................................................................................................................................18无线通讯基站的基带仿真系统设计文档1.概述1.1题目要求以OFDM技术为基础的3G系统中,基站的基带系统承担了3GPP协议物理层算法处理部分。请设计一个基带发端仿真系统,系统要求实现的各个处理单元如下系统框图所示:图1基带发端仿真系统框图1.2需求说明参考3GPPLTE物理层相关标准,使用C/C++为开发工具,设计无线通讯基站的基带仿真系统。(1)每个无线帧有10个子帧,每个子帧分2个slot,以20秒为一个子帧周期向基带处理器下发一组小区参数,参数下发的截止时间为上一子帧的第19.8秒;(2)如上图所示,基带处理器收到高层软件配置的小区参数0.2秒钟后,根据UE(用户终端)数目,给每个UE发送1或者2包PRBS数据作为TB块(业务数据);(3)基带处理器对该包PRBS数据完成CRCA添加、CRCB添加、Turbo编码和速率匹配等功能,处理时间为9.8秒钟,如果处理不完则丢弃该包数据,等待高层软件重新下发小区参数;(4)高层软件将该子帧的小区参数存储在基站参数存储区,再由基站参数存储区转发给第二阶段新增的各个基带处理单元;(5)基带处理器实现码块级联、加扰、调制和MIMO功能;(6)基带处理器的处理时间一共为19.8秒钟,如果处理不完则丢弃该组数据,等待高层软件重新下发参数;(7)针对该子系统,设计一个方案满足应用的需要,要求基带处理器的各个单元在说明文档中都要求有接口格式和实现原理的描述。2.设计2.1码块分段及CRC校验2.1.1CRC校验CRC本质上属于循环码,校验比特由以下两个多项式生成gCRC24A(D)=[D24+D23+D18+D17+D14+D11+D10+D7+D6+D5+D4+D3+D+1]gCRC24B(D)=[D24+D23+D6+D5+D+1]CRC输入单元13210,...,,,,Aaaaaa,校验比特为13210,...,,,,Lppppp,对于23122221230241221230......pDpDpDpDaDaDaAAA,除以上述多项式后,余数为0。发端添加CRC校验时,二进制输入消息序列用向量形式寄存,向量每个元素表示消息多项式的一个系数,第一比特对应多项式的最高阶,首先进入寄存器。消息序列乘运算可以通过在消息序列尾部扩展24个0实现,这里称扩展后的序列为扩展消息序列。每个时钟周期有一位扩展消息序列进入寄存器进行长除运算,同时移出一个比特作为反馈,当移出的比特为1时,寄存器中的值将和生成多项式系数进行异或运算,得到的结果循环左移进入移位寄存器,经过个时钟周期(这里为原始消息序列的长度),当扩展消息序列全部进入LFSR后,寄存器中保留的就是需要添加的校验位。2.1.2码块分割算法在36.212小节5.1.2中已描述得较为详细,具体的算法流程主要如下:a)根据输入序列长度和最大码块尺寸确定是否需要进行分割和二次CRC;b)如果不需要进行码块分割和二次CRC,则根据36.212中表5.1.3-3查表得到最接近的允许码块尺寸,计算出需要的填充零比特比特数,然后将设置为0的填充比特添置输入序列前;如果需要进行码块分割则同时需要二次CRC,模块首先计算出总共需要传输的码块数量,然后计算两种分割尺寸的大小(程序ParameterGen.cpp中的K_plus和K_minus)以及该尺寸码块的数量(程序ParameterGen.cpp中的K_minus_num和K_plus_num),在函数LTE_cb_crc()中根据得到的分割尺寸和码块数量计算填充零比特的数量,将码块分段,最后做二次CRC。CRC校验及码块分割流程图如下:信道编码信息码块CRC添加N码块分割零比特填充分块码二次CRC零比特填充110,...,,rKrrrccc图2CRC校验及码块分割流程图2.1.3函数及其接口说明CRC校验主函数FunctionCRC_attachment.cpp(intmessage[],intmess_CRC[])输入Inputmessage[]%输入进行CRC处理的比特流输出Outputmess_CRC[]%过传输块,编码块CRC校验以及码块分割的比特流主函数调用的子函数FunctionLTE_tb_crc(intmessage[],intmessage_tbCRC[])transmitblockCRC处理,包括CodeBlock子块的CRC处理进行CRC校验处理,使用tbcrcflag作为标志位,区分进行CRCA或CRCB校验输入message[]%输入进行CRC处理的比特流输出mess_tbCRC[]%经过CRCA或CRCB校验的比特流FunctionLTE_cb_crc(intmessage_tbCRC[],intmessage_cbCRC[])%完成CBcrc的拆分,添加CRC和重组过程根据码块分割函数产生的参数,进行码块分割,对不同的码块使用LTE_tb_crc函数,实现CRCB处理输入message[]%输入进行CRCB处理的比特流输出mess_tbCRC[]%经过传输块,编码块CRC校验以及码块分割的比特流根据输入业务数据的长度,查找QPPinterleaverpara[][]交织表,确定分块的大小,数量,保存在全局变量K_plus,K_minus,K_minus_num,K_plus_num。2.2Turbo编码模块2.2.1Turbo码编码器采用8状态、并行级联结构的Turbo码,码率为1/3,编码器结构图如下:DDDDDD交织器输出分量编码器1分量编码器2kckckxkxkzkzkaka如图所示,Turbo码编码器包括两方面的设计内容:码内交织器和递归系统卷积码(RSC)编码器。2.2.2码内交织器Turbo编码所使用的交织器是二次置换多项式交织器(QPP)。函数QPPinterleaver完成该功能,其接口说明如下:voidQPPinterleaver(intmm1[],intmm2[])%******************************************************%QPP交织器%******************************************************%输入%--mm1[]待交织比特流%输出%--mm2[]QPP交织后比特流各个码块进行Turbo码编码时,首先根据码块长度查找QPP交织器参数表QPPinterleaverpara(由36.212表5.1.3-3提供)。第1列对应码块消息长度,第2,3列分别为该行值对应的交织器参数和。根据码块长度K查表可以确定交织器参数和,然后由下式(1)可以确定交织映射关系。2.2.3RSC编码器RSC编码器的设计与传统卷积码编码器不同,需要特定的尾比特处理。函数RSC_Encode完成RSC编码器功能,其接口说明如下:voidRSC_Encode(intmessage[],intRSC_Code[],intx[])%******************************************************%递归系统卷积码编码器%******************************************************%输入%--message[]待编码比特流%输出%--RSC_Code[]经编码器后的校验比特流%--x[]经编码器后的系统比特流如图所示,卷积码编码输入比特由和抽头反馈两者共同决定,而的来源又分正常编码和尾比特处理两种模式。正常编码时,来自于编码器输入;尾比特处理时,来自于反馈,所以尾比特处理时的值将一直为0,这样就保障了寄存器的清零。正常模式时,根据编码器分量码的传递函数3231()1,1DDGDDD,得出编码寄存器的状态转移参数表Trellis,Trellis列数表示当前状态数CurrentState,其第2列输入比特为0时的转移状态,此时第1列表示输出校验比特;第3列表示输入比特为1时的转移状态,此时第1列取反表示输出校验比特。正常模式时,输出系统比特流即为输入比特流。尾比特处理模式时,其分配按照36.212中5.1.3.2.2小节所示的方法进行。整个Turbo码编码器的函数接口如下:CB_TurboEn