主要内容

NR PDSCH吞吐量

本示例演示如何测量3GPP NR标准定义的5G新无线电(NR)链路的物理下行共享信道(PDSCH)吞吐量。该实例实现了PDSCH和下行共享通道(DL-SCH)。发射机模型包括PDSCH解调参考信号(DM-RS)、PDSCH相位跟踪参考信号(PT-RS)和同步信号(SS)突发。该示例支持集群延迟线(C金宝appDL)和抽头延迟线(TDL)传播通道。您可以执行完美或实际的同步和信道估计。为了减少总的模拟时间,您可以使用并行计算工具箱™并行执行信噪比环路中的信噪比点。

介绍

本示例测量3GPP NR标准定义的5G链路的PDSCH吞吐量[1], [2], [3.], [4.]。

该示例模拟了以下5G NR功能:

  • DL-SCH运输信道编码

  • 多个码字,依赖于图层的数量

  • PDSCH,PDSCH DM-RS和PDSCH PT-RS生成

  • SS突发生成(PSS/SSS/PBCH/PBCH DM-RS)

  • 可变副载波间距和帧数字(2^n * 15khz)为普通和扩展循环前缀

  • TDL和CDL传播信道模型

模拟的其它特性包括:

  • 使用SVD预编码PDSCH预编码

  • CP-OFDM调制

  • 槽位和非槽位PDSCH和DM-RS映射

  • SS突发生成(案例A-E,SS / PBCH块Bitmap控件)

  • 完美或实用的同步和信道估计

  • HARQ操作16流程

  • 该示例在整个载体上使用单个带宽部分

该图显示了实现的处理链。为清楚起见,省略了DM-RS,PT-RS和SS突发生成。

这个例子支持宽带和子带预编金宝app码。该预编码矩阵使用SVD通过在分配(宽带情况下)或在子带均跨越所有PDSCH的PRB的信道估计来确定。有任何SS没有波束成形/在SS PBCH块爆裂。

要减少总模拟时间,可以使用并行计算工具箱并行执行SNR循环的SNR点。

模拟长度和SNR点

坐落在10ms的帧的数量方面模拟的长度。大量n帧的应该被用来产生有意义的吞吐量结果。设置SNR点来模拟。每一层的SNR每RE定义,它包括信号和噪声的所有天线间的效果。

simParameters =结构();%Clear SimParameters变量包含所有密钥仿真参数simparameters.nframes = 2;% 10毫秒帧数simParameters。SNRIn = [-5 0 5];%SNR范围(DB)

信道估计配置

逻辑变量PerfectChannelEstimator控制信道估计和同步行为。当设置为真正的,采用了完美的信道估计和同步。否则,根据接收到的PDSCH DM-RS的值,使用实际的信道估计和同步。

simParameters。PerfectChannelEstimator = true;

仿真诊断

仿真总是显示每个槽中使用的HARQ进程的PDSCH传输的CRC通过/失败结果。这包括使用的RV值和瞬时码率。请注意,代码速率可能与进程目标代码速率不同,特别是在包含SS块的槽中,当PDSCH的可用物理资源丢失时。这种码率的增加可能需要进一步的传输块重传以成功接收,即使在高信噪比。

displaydiagnostics.标记支持绘制每层的EVM。这幅图监测均衡后接收信号的质量。每层EVM图显示:

  • 每层每时隙的EVM,其示出了与EVM时间演变。

  • 每个资源块每层EVM,其显示EVM频率。

此数字随着模拟演变,并使用每个插槽更新。通常,低SNR或通道衰落可能导致信号质量(高EVM)降低。频道不同地影响每个层,因此,EVM值可能跨层不同。

在某些情况下,一些层可以有一个比别人高得多的EVM。这些低质量层可能会导致CRC错误。此行为可能由低SNR或使用太多层的信道条件引起的。你能避免受更高的SNR的组合这种情况下,较低数目的层,更高数量的天线,并且更健壮的传输(低级调制方案和目标码率)。

simparameters.displaydiagnostics = false;

运营商和PDSCH配置

设置模拟的关键参数。这些包括:

  • 资源块中的带宽(每个资源块的12个子载波)。

  • 副载波间距:15,30,60,120,240 (kHz)

  • 循环前缀长度:正常或扩展

  • 细胞ID.

  • 发射和接收天线的数量

还指定将含有DL-SCH和PDSCH参数子结构。这包括:

  • 目标代码的速度

  • 已分配资源块(PRBSet)

  • 调制方案:'QPSK','16QAM','64QAM','256QAM'

  • 层数

  • PDSCH映射类型

  • DM-RS的配置参数

  • PT-RS配置参数

其他模拟广播参数是:

  • 传播频道模型:'TDL'或'CDL'

  • SS Burst配置参数。请注意,可以通过设置ss突发生成来禁用ssbtransmited.字段到[0 0 0 0]。

%SET波形类型和PDSCH数字(SCS和CP类型)simparameters.carrier = nrcarrierconfig;simparameters.carrier.nsizegrid = 51;资源块数的%带宽(51 rbs,30 kHz SCS为20 MHz BW)simparameters.carrier.subcarrierspacing = 30;%15,30,60,120,240(kHz)simparameters.carrier.CyclicPrefix =.'普通的';%“正常”或“扩展”(扩展CP只适用于60千赫SCS)simParameters.Carrier.NCellID = 1;%细胞身份%SS突发配置可以通过将ssbtransmited字段设置为所有零来禁用%突发simParameters.SSBurst =结构();simParameters.SSBurst.BlockPattern ='案例b';% 30千赫副载波间距simparameters.ssburst.ssbtransmited = [0 1 0 1];%位图指示在突发中传输的块simparameters.ssburst.ssbperiodicity = 20;%SS突发在MS(5,10,20,40,80,160)中的周期性%PDSCH / DL-SCH参数simParameters。PDSCH = nrPDSCHConfig;%此PDSCH定义是BLER仿真中所有PDSCH传输的基础simParameters。PDSCHExtension =结构();%该结构是为了保持DL-SCH和PDSCH的额外仿真参数%定义每个时隙PDSCH的时间 - 频率资源分配是满格(单满格BWP)simParameters.PDSCH.PRBSet = 0: simParameters.Carrier.NSizeGrid-1;% PDSCH PRB分配simParameters.PDSCH.SymbolAllocation = [0, simParameters.Carrier.SymbolsPerSlot];每个PDSCH分配的%启动符号和符号数simParameters.PDSCH.MappingType ='一种';%PDSCH映射类型('a'(插槽),'b'(非插槽))%加扰标识符simparameters.pdsch.nid = simparameters.carier.ncellid;simparameters.pdsch.rnti = 1;%PDSCH资源块映射(TS 38.211第7.3.1.6节)simParameters.PDSCH.VRBToPRBInterleaving = 0;%禁用交错资源映射simparameters.pdsch.vrbbundleSize = 4;%定义将要使用的传输层的数量simparameters.pdsch.numlayers = 2;% PDSCH传输层数定义码字调制和目标编码率%代码字的数量直接依赖于图层的数量,以确保在获取码字编号之前首先设置%图层如果Simparameters.pdsch.numcodewords> 1%Multicodeword传输(当层的数目为> 4)simParameters.PDSCH.Modulation = {16 qam的16 qam的};%'QPSK','16QAM','64QAM','256QAM'simParameters.PDSCHExtension.TargetCodeRate = [490490]/1024;%用于计算传输块大小的码率别的simparameters.pdsch.modulation =.16 qam的;%'QPSK','16QAM','64QAM','256QAM'simparameters.pdschextension.targetCoderate = 490/1024;%用于计算传输块大小的码率结束% DM-RS和天线端口配置(TS 38.211章节7.4.1.1)simparameters.pdsch.dmrs.dmrsportset = 0:simparameters.pdsch.numlayers-1;用于各层的DM-RS端口simparameters.pdsch.dmrs.dmrstypeaposition = 2;%仅映射类型A。第一个DM-RS符号位置(2,3)simparameters.pdsch.dmrs.dmrslength = 1;%前置DM-RS符号数(1个(单符号),2个(双符号))simParameters.PDSCH.DMRS.DMRSAdditionalPosition = 0;%附加DM-RS的符号位置(最大范围0 ... 3)simparameters.pdsch.dmrs.dmrsconfiguringtype = 2;% DM-RS配置类型(1,2)simParameters.PDSCH.DMRS.NumCDMGroupsWithoutData = 1;%无数据的CDM组数simParameters.PDSCH.DMRS.NIDNSCID = 1;%扰频标识(0 ... 65535)simparameters.pdsch.dmrs.nscid = 0;%加扰初始化(0,1)%PT-RS配置(TS 38.211第7.4.1.2节)simParameters.PDSCH.EnablePTRS = 0;%启用或禁用PT-RS(1或0)simParameters.PDSCH.PTRS.TimeDensity = 1;%pt-rs时间密度(l_pt-rs)(1,2,4)simparameters.pdsch.ptrs.frequencyDensy = 2;PT-RS频率密度百分比(K_PT-RS)(2或4)simparameters.pdsch.ptrs.reoffset =.'00';%Pt-RS资源元素偏移('00','01','10','11')simparameters.pdsch.ptrs.ptrsportset = [];%PT-RS天线端口,DM-RS端口集的子集。空对应于较低的DM-RS的端口号%保留PRB图案,如果需要的话(对于CORESETs,前向兼容性等)simParameters.PDSCH.ReservedPRB{1}。SymbolSet = [];%保留的PDSCH符号simparameters.pdsch.reservedProb {1} .prset = [];%保留PDSCH PRBssimparameters.pdsch.reservedprb {1} .period = [];保留资源的百分比%额外的模拟和DL-SCH相关参数%PDSCH PRB捆绑(TS 38.214第5.1.2.3节)simParameters.PDSCHExtension.PRGBundleSize = [];%2,4或[]表示“宽带”%HARQ过程和速率匹配/ TBS参数simParameters.PDSCHExtension.XOverhead = 6 * simParameters.PDSCH.EnablePTRS;当启用PT-RS时,%设置TBS(XOH)到6的顶部开销匹配的PDSCH速率匹配,否则为0simparameters.pdschextension.nharqprocesses = 16;%要使用的并行HARQ进程数simparameters.pdschextension.enableharq = true;%使用RV序列来实现每个进程的重传[0,2,3,1]LDPC解码器参数%可用算法:“信仰传播”,“分层信仰传播”,“归一化最小和”,“偏移最小和”simParameters.PDSCHExtension.LDPCDecodingAlgorithm =“分层信念传播”;simparameters.pdschextension.maximumLDPCiterationCount = 6;%在终点处定义整个传输天线几何%如果使用CDL传播信道,则整数的天线元件数量是%转换为天线面板配置时,通道模型对象被创建simparameters.ntxants = 8;PDSCH传输天线数量(1,2,4,8,16,32,64,128,256,512,1024)> = Numlayers如果Simparameters.pdsch.numcodewords> 1%多码字传输simParameters。NRxAnts = 8;%UE的数量接收天线(偶数> = numlayers)别的simParameters。NRxAnts = 2;% UE接收天线数量(1或偶数>= NumLayers)结束%定义通用CDL/TDL传播通道参数simparameters.delayprofile =.“CDL-C”;使用CDL-C模型(Urban macrocell model)simparameters.delayspread = 300e-9;Simparameter.maximumdopplershift = 5;%交叉检查PDSCH分层对沟道几何形状validateNumLayers (simParameters);

模拟依赖于关于基带波形的各种信息,例如采样率。

waveforminfo = nrofdminfo(simparameters.carrier);%获取OFDM调制步骤后的基带波形信息

传播信道模型施工

为模拟创建通道模型对象。支持CDL和TDL通道模型[金宝app5.]。

%构成的CDL或TDL信道模型对象如果包含(simparameters.delayprofile,'CDL''IGNORECASE',true)channel = nrcdlchannel;%CDL信道对象%将天线的总数转换为特定的天线面板%阵列几何形状。配置的天线数量更新% nTxAnts不是(1、2、4、8、16、32、64、128、256、512、1024)或nRxAnts中的一个%不是1甚至1。[channel.TransmitAntennaArray.Size,channel.ReceiveAntennaArray.Size] =......harraygeometry(simparameters.ntxants,simparameters.nrxants);ntxants = prod(channel.transmitantennaarray.size);nrxants = prod(channel.receiveantenntennaray.size);simparameters.ntxants = ntxants;simparameters.nrxants = nrxants;别的channel = nrtdlchannel;%TDL通道对象%设置频道几何形状通道。NumTransmitAntennas = simParameters.NTxAnts;通道。NumReceiveAntennas = simParameters.NRxAnts;结束%指定模拟信道参数和波形采样率与对象channel.delayprofile = simparameters.delayprofile;channel.delayspread = simparameters.delayspread;Channel.maximumdopplershift = SimParameters.maximumdopplershift;Channel.Samplerve = WaveformInfo.Sampleate;

得到信道多径分量的最大延迟采样数。这是从具有最大延迟的信道路径和信道滤波器的实现延迟来计算的。这是稍后冲洗信道滤波器以获得接收信号所必需的。

Chinfo = Info(频道);maxchdelay = ceil(max(chinfo.pathdelays * channel.samplerate))+ chinfo.channelfilterdelay;

预留SS突发对应的PDSCH资源

本节介绍如何保留用于SS突发传输的资源。

%获取信息有关SS突发配置首先需要一些相关的参数赋值simparameters.ssburst.ncellid = simparameters.carrier.ncellid;simparameters.ssburst.samplerve = waveforminfo.sampleate;ssbinfo =赫斯伯斯坦福(Simparameters.ssburst);%映射占用的子载波和SS突发的传输符号%(以SS定义突发命理)到PDSCH的PRB和符号在%PDSCH BWP /载体命理[mappedPRB, mappedSymbols] = mapNumerology (ssbInfo.OccupiedSubcarriers、ssbInfo.OccupiedSymbols ssbInfo.NRB, simParameters.Carrier.NSizeGrid, ssbInfo.SubcarrierSpacing, simParameters.Carrier.SubcarrierSpacing);%配置PDSCH以保护这些资源,以便PDSCH%传输不重叠的SS爆发预约= nrpdschreservedconfig;预留.symbolset = mappedsymbols;预约.prset = mappedprog;保留.period = simparameters.ssburst.ssbperifyicity *(simparameters.carrier.subcarrierspacing / 15);%插槽的周期simparameters.pdsch.reservedprb {end + 1} =预留;

处理循环

要确定每个SNR点处的吞吐量,请使用以下步骤分析每个传输实例的PDSCH数据:

  • 更新当前HARQ进程。检查给定HARQ过程的先前传输的CRC。确定是否需要重传。如果不需要重传,则生成新数据。

  • 资源网格生成。通过调用来执行频道编码nrdlsch.系统对象。对象对输入传输块进行操作,并保留传输块的内部副本,以备需要重新传输时使用。在PDSCH上使用nrPDSCH函数。然后将预编码应用于所产生的信号。

  • 波形生成。OFDM调制生成的网格。

  • 嘈杂的频道建模。通过CDL或TDL衰落通道通过波形。添加AWGN。SNR在每个UE天线处定义每个RE。对于0 dB的SNR,信号和噪声同等地贡献到每PDSCH RE的每个接收天线的能量。

  • 执行同步和OFDM解调。为了实现完美的同步,重构信道脉冲响应以同步接收的波形。为了实际的同步,将接收到的波形与PDSCH DM-RS相关联。然后对同步信号进行OFDM解调。

  • 执行信道估计。对于完美的通道估计,重建信道脉冲响应并执行OFDM解调。对于实际信道估计,请使用PDSCH DM-RS。

  • 执行均衡和CPE补偿。MMSE均衡估计的信道。使用PT-RS符号估计公共相位误差(CPE),然后在参考PT-RS OFDM符号范围内校正每个OFDM符号中的错误。

  • 预编码矩阵计算。通过使用奇异值分解(SVD)来生成下一个传输的预编码矩阵W。

  • 解码PDSCH。为获得接收码字的估计,对所有发射和接收天线对的恢复PDSCH符号进行解调和解码,并对噪声进行估计nrPDSCHDecode函数。

  • 解码DL-SCH并为HARQ进程存储块CRC错误。将已解码软位的向量传递给nrDLSCHDecoder系统对象。该对象对码字进行解码,并返回用于确定系统吞吐量的块CRC错误。

%数组存储所有SNR点的最大吞吐量maxthrougpul = zeros(长度(simparameters.snrin),1);%数组存储所有SNR点的模拟吞吐量simThroughput = 0(长度(simParameters.SNRIn), 1);%根据HARQ配置,设置要使用的冗余版本(RV)序列如果simParameters.PDSCHExtension.EnableHARQ%在RAN WG1 #91会议(R1-1719301)的最终报告中,它是在R1-1717405中观察到的%,如果性能是优先级,[0 2 3 1]应该使用%。如果自解码是优先级,那么它应该是%考虑到码率的上限%每个RV自解码的顺序如下:0>3>2>1rvSeq = [0 2 3 1];别的%HARQ禁用 - 具有RV = 0的单个传输,无重传rvseq = 0;结束%创建DL-SCH编码器系统对象以执行传输通道编码EncodedLsch = nrdlsch;EncodedLsch.multipreharqprocesses = true;EncodedLsch.targetCoderate = SimParameters.PDSchextension.targetCoderate;%创建DL-SCH解码器系统对象以执行传输信道解码%使用分层信仰传播为LDPC解码,有一半的数量%迭代相比的默认置信传播解码DecodedLsch = nrdlschdecoder;DecodedLsch.multipreharqprocesses = true;DecodedLsch.targetCoderate = SimParameters.pdschextension.targetCoderate;DecodedLsch.ldpcdecodingAlgorithm = SimParameters.PDSchextension.LDPCDecodingAlgorithm;解码ledlsch.maximumldpciterationcount = simparameters.pdschextension.maximumLdpciterationCount;为了snridx = 1:numel(simparameters.snrin)%注释掉用于并行计算%parcor snridx = 1:numel(simpparameters.snrin)%解释并行计算%要减少总模拟时间,可以执行此循环% parallel使用并行计算工具箱。注释掉for%语句并取消“parfor”语句的注释。如果并行计算未安装%工具箱,'Parcon'默认为正常'for'语句%将随机数生成器设置为默认值RNG(“默认”);%采取仿真级参数结构的完整副本,以便它们不是使用Parcom时%PCT广播变量simlocal = simparameters;WaveInfolocal = WaveformInfo;%拍摄频道级参数的副本以简单地进行后续参数引用carrier = simlocal.carrier;pdsch = simlocal.pdsch;pdschextra = simlocal.pdschextension;ssburst = simlocal.ssburst;DecodedLschlocal =解码ledlsch;%复制的解码器句柄,以帮助PCT分类变量decodedlschlocal.reset();%在每个信噪比点开始时重置译码器pathFilters = [];ssbWaveform = [];%为新的信噪比点准备模拟SNRdB = simLocal.SNRIn (snrIdx);fprintf中('\n模拟传输方案1 (%dx%d)和SCS=%dkHz, %s通道在%gdB信噪比为%d 10ms帧(s)\n'......simparameters.ntxants,simparameters.nrxants,carrier.subcarrierspacing,......simlocal.delayprofile,snrdb,simlocal.nframes);在模拟和分析中使用%初始化变量bittput = [];每次传输成功收到的比特数量txedTrBlkSizes = [];%每次传输的传输信息比特数%指定的顺序周期,我们通过HARQ进程harqsequence = 1:pdschextra.nharqprocesses;%初始化所有HARQ进程的状态HarqProcesses = HNewHarqProcesses(PDSchextra.nharqProcesses,Rvseq,PDSCH.Numcodewords);harqproccntr = 0;%HARQ过程计数器%重置通道,使每个SNR点会遇到相同的%通道实现复位(信道);仿真期间中的斜槽总数nslots = simlocal.nframes * carrier.slotsperframe;%索引到当前SS突发样本的开始的开始传送%ssbsampleindex = 1;%获得用于传输的预编码矩阵(WTX)第一个传输块estChannelGrid = getInitialChannelEstimate(载体、simLocal.NTxAnts通道);newWtx = getPrecodingMatrix(载体,pdsch estChannelGrid);%定时偏置,更新在每个时隙为完美的同步和当相关性强直时%是实际同步时的%偏移量= 0;%波形长度的%循环为了nslot = 0: NSlots-1%更新新插槽的运营商插槽号母舰。NSlot = NSlot;在必要时生成新的SS突发如果(ssbsampleindex == 1)nsubframe = carrier.nslot / carrier.slotspersubframe;ssburst.nframe =楼层(nsubframe / 10);ssburst.nhalfframe = mod(nsubframe / 5,2);[SSBWAVEFORM,〜,SSBINFO] =奶族(SSBURST);结束从HARQ索引表中获取当前PDSCH的HARQ进程索引harqprocidx = harqsequence(mod(harqproccntr,长度(harqsequence))+ 1);%更新当前HARQ进程信息(此更新RV%取决于CRC通过或失败在以前的传输%此HARQ过程)harqProcesses (harqProcIdx) = hUpdateHARQProcess (harqProcesses (harqProcIdx) pdsch.NumCodewords);%计算插槽中的码字的传输块大小[pdschIndices,pdschIndicesInfo] = nrPDSCHIndices(载体,PDSCH);trBlkSizes = nrTBS(pdsch.Modulation,pdsch.NumLayers,numel(pdsch.PRBSet),pdschIndicesInfo.NREPerPRB,pdschextra.TargetCodeRate,pdschextra.XOverhead);%HARQ处理%检查每个码字的先前传输的CRC,即需要重传?为了cwIdx = 1: pdsch。NumCodewords newdata = false;如果HarqProcesses(HarqProcidx).blkerr(cwidx)最后录制解码的%错误如果(harqProcesses (harqProcIdx) .RVIdx (cwIdx) = = 1)%发出RV序列的开始ResetsoftBuffer(解码型雪地,CWIDX-1,HarqProcidx-1);在这种情况下需要%显式重置newdata = true;结束别的%没有错误newdata = true;结束如果newdata trBlk = randi([0 1],trBlkSizes(cwIdx),1);setTransportBlock (encodeDLSCH trBlk、cwIdx-1 harqProcIdx-1);结束结束%编码DL-SCH传输块codedTrBlocks = encodeDLSCH(pdsch.Modulation,pdsch.NumLayers,......pdschIndicesInfo.G harqProcesses (harqProcIdx) .RV harqProcIdx-1);得到在前一个槽中计算的预编码矩阵(wtx)wtx = newwtx;%资源网格阵列pdschGrid = nrResourceGrid(载体、simLocal.NTxAnts);% PDSCH调制和预编码pdschSymbols = nrPDSCH(载体,pdsch codedTrBlocks);[pdschAntSymbols, pdschAntIndices] = hPRGPrecode(大小(pdschGrid)、carrier.NStartGrid pdschSymbols, pdschIndices, mtx);与PDSCH传输周期相关联的电网中的PDSCH映射%pdschGrid (pdschAntIndices) = pdschAntSymbols;%PDSCH DM-RS预编码和映射DMRSSYMBOLS = NRPDSCHDMRS(载波,PDSCH);dmrsindices = nrpdschdmrsindices(载体,pdsch);[dmrsantsymbols,dmrsantindices] = hprgprecode(size(pdschgrid),carrier.nstartgrid,dmrssymbols,dmrsindices,wtx);pdschgrid(dmrsantindices)= dmrsantsymbols;%PDSCH PT-RS预编码和映射ptrssymbols = nrpdschptrs(载体,pdsch);ptrsindices = nrpdschptrsindices(载体,pdsch);[ptrsantsymbols,ptrsantindices] = hprgprecode(大小(pdschgrid),carrier.nstartgrid,ptrssymbols,ptrsindices,wtx);pdschgrid(ptrsantindices)= ptrsantsymbols;关联资源元素的%OFDM调制txwaveform = nrofdmodulate(载体,pdschgrid);%将SS突发波形的适当部分添加到%传输波形元=大小(txWaveform, 1);txWaveform = txWaveform + ssbWaveform(ssbSampleIndex + (0:Nt-1),:);ssbSampleIndex = mod(ssbSampleIndex + Nt,size(ssb波形,1));%通过频道模型传递数据。在末尾附加零%发送波形以刷新通道内容。这些零百分比频道引入的任何延迟。这是一个混合多路径延迟和实现延迟的百分比。这个值可能取决于采样率,延迟配置文件和延迟的百分比变更% 传播txWaveform = [txWaveform;0 (maxChDelay、尺寸(txWaveform 2)));[rxWaveform, pathGains sampleTimes] =通道(txWaveform);%将AWGN添加到接收的时域波形中通过在OFDM调制中使用的IFFT大小%规格化噪声功率,随着OFDM调制器应用此归一化的%%传播波形。也要按照接收的数量进行规范%天线,因为信道模型将这种标准化应用于默认情况下%接收波形信噪比= 10 ^ (SNRdB / 20);%计算线性噪声增益n0 = 1 /(sqrt(2.0 * simlocal.nrxants * double(waveinfolocal.nfft))* snr);噪声= N0 *复合物(Randn(randn(rxwaveform)),randn(size(rxwaveform)));rxwaveform = rxwaveform +噪声;如果(Simlocal.PerfectChannEleStimator)%完美同步。使用频道提供的信息%找到最强的多径组件pathfilters = getpathfilters(频道);得到完美的信道估计路径滤波器[offset,mag] = nrperfecttimingestimate(pathgains,pathfilters);别的%实际同步。将接收的波形相关联%与PDSCH DM-RS给出时间偏移估计't'和%相关幅度'mag'。函数hskipweaktimingoffset%用于更新接收机定时偏差。如果%相关峰值在'mag'是弱的,当前的时机%估计值't'被忽略,之前的估计值'offset'被忽略使用%[t,mag] = nrtimingestimate(运营商,rxwaveform,dmrsindices,dmrssymbols);Offset = HskipWeakTimingOffsoffs(偏移,T,MAG);%显示警告,如果估计的定时偏移量超过%最大信道延迟如果offset> maxchdelay警告([估计的时间偏移(%d)大于最大信道延迟(%d)。......这将导致解码失败。这可能是低信噪比造成的。”......'或者没有足够的DM-RS符号来成功同步。'],偏移,maxchdelay);结束结束rxwaveform = rxwaveform(1 + offset:结束,:);%在接收数据上执行OFDM解调以重新创建%资源网格,包括实际事件中的填充%同步导致一个不完整的槽被解调rxGrid = nrOFDMDemodulate(载体,rxWaveform);[K,L,R] =尺寸(rxGrid);如果(L 结束如果(Simlocal.PerfectChannEleStimator)%完美的通道估计,使用路径增益的值%由渠道提供。该频道估计没有%包括发射器预编码的效果estChannelGrid = nrPerfectChannelEstimate(载体,pathGains pathFilters,抵消,sampleTimes);%获得完美的噪音估计(来自噪声实现)kotidgrid = nrofdmdemodulate(载波,噪声(1 +偏移:结束,:));destemest = var(诊断(:));%获取预编码矩阵用于下一时隙newWtx = getPrecodingMatrix(载体,pdsch estChannelGrid);%获取从接收到的电网PDSCH资源要素和%信道估计[pdschRx pdschHest, ~, pdschHestIndices] = nrExtractResources (pdschIndices, rxGrid estChannelGrid);%将预编码应用于频道估计pdschhest = hprgprecode(size(estchannelgrid),carrier.nstartgrid,pdschhest,pdschhestindices,perfute(wtx,[2 1 3]));别的所接收网格与百分比实际信道估计%每个传输层,使用PDSCH DM-RS为每个% 层。该频道估计包括效果%变送器预编码[EstchannElgrid,Desement] = NrchanneLestimate(运营商,RxGrid,DMRSindices,DMRSSymbols,'cdmlength', pdsch.DMRS.CDMLengths);%获取从接收到的电网PDSCH资源要素和%信道估计[pdschrx,pdschhest] = nrextractresources(pdschindices,rxgrid,estchannelgrid);%在预编码之前从EstchannelGrid中删除预编码%矩阵计算estChannelGridPorts = precodeChannelEstimate(载体、estChannelGrid连词(mtx));%获取预编码矩阵用于下一时隙newwtx = getPrecodingMatrix(运营商,PDSCH,EstchannelGridports);结束%均衡[PDSCHEQ,CSI] = NREQUALIZEMSE(PDSCHRX,PDSCHHEST,噪音);%常见相位误差(CPE)补偿如果〜isempty(ptrsindices)初始化临时网格以存储相等的符号tempGrid = nrResourceGrid(载体、pdsch.NumLayers);%从接收的网格中提取PT-RS符号并进行估计%通道网格[ptrsrx,ptrshest,〜,〜,ptrshestindices,ptrslayerindices] = nrextractresources(ptrsindices,rxgrid,estchannelgrid,tempgrid);如果(Simlocal.PerfectChannEleStimator)%将预编码应用于频道估计ptrshest = hprgprecode(size(estchannelgrid),carrier.nstartgrid,ptrshest,ptrshestindices,erfute(wtx,[2 1 3]));结束%均衡PT-RS符号并将它们映射到tempGridptresq = nrequalizemse(ptrsrx,ptrshest,噪音);tempgrid(ptrslayerindices)= ptreqe;%估计PT-RS位置处的残差通道%tempgrid.CPE = nrchannelestimate(tempgrid,ptrsindices,ptrssymbols);在子载波,接收天线和%层。然后,通过取这个角得到CPE%的总和CPE =角度(SUM(CPE,[1 3 4]));%将均衡的PDSCH符号映射到tempGridtempgrid(pdschindices)= pdscheq;在参考范围内的每个OFDM符号中的%正确CPE%pt-rs OFDM符号symloc = pdschindicsInfo.ptrssymbolset(1)+1:pdschindicsInfo.ptrssymbolset(END)+1;tempgrid(:,symloc,:) = tempgrid(:symloc,:)。* exp(-1i * cpe(symloc));%提取PDSCH符号pdscheq = tempgrid(pdschindices);结束%解码PDSCH物理通道[dlschlls,rxsymbols] = nrpdschdecode(载波,pdsch,pdscheq,噪声);%每层显示EVM,每个插槽和每个RB如果(SIMLOCAL.DISPLYDIAGNOSTICS)PLOTLAYEREVM(NSLOTS,NSLOT,PDSCH,尺寸(PDSCHGRID),PDSCHINDICE,PDSCHSYMBOLS,PDSCHEQ);结束CSI%SCALE LLRScsi = nrlayerdemap(csi);%CSI层解映射为了cwidx = 1:pdsch.numcodewords qm = length(dlschllrs {cwidx})/ length(rxsymbols {cwidx});每符号%位CSI {CWIDX} = REPMAT(CSI {CWIDX}。',QM,1);%按每个符号的每个位展开dlschLLRs{cwIdx} = dlschLLRs{cwIdx} .* csi{cwIdx}(:);百分率(CSI)结束%解码DL-SCH传输信道%将解码CRC错误写入HARQ进程状态结构中decodeDLSCHLocal.TransportBlockLength = trBlkSizes;[decbits,harqProcesses(harqProcIdx).blkerr] = decodeDLSCHLocal(dlschLLRs,pdsch.Modulation,pdsch.NumLayers,harqProcesses(harqProcIdx).RV,harqProcIdx-1);%存储用于计算吞吐量的值(仅针对活动PDSCH实例)如果(任何(trblksize〜= 0))bittput = [bittput trblksizes。*(1-harqprocesses(harqprociddx).blkerr)];txedtrblksizes = [txedtrblksizes trblksizes];结束%更新HARQ进程计数器harqproccntr = harqproccntr + 1;显示当前HARQ进程管理的每个码字的传输块CRC错误信息ICR = Trblksize./pdschindicsinfo.g;%瞬时码率csn = mod(nslot,cross.slotsperframe);帧中的%插槽号fprintf中('\ n(%3.2f %%)harq proc%d:',100 *(nslot + 1)/ nslots,harqprocidx);estrings = {“通过”'失败的'};RVI = HarqProcesses(HarqProcidx).rvidx;为了CW = 1:长度(RVI)CWRVI = RVI(CW);%上创建在RV序列和译码错误的RV状态给定的位置的报告如果Cwrvi == 1 ts = sprintf(最初的传播(NSlot = % d,房车= % d, CR = % f)”、csn rvSeq (cwrvi)、icr (cw));别的ts = sprintf('重传#%d(nslot =%d,rv =%d,cr =%f)',cwrvi-1,csn,rvseq(cwrvi),ICR(CW));结束fprintf中('cw%d:%s%s。',cw-1,ts,estrings {1 + harqprocesses(harqprocidx).blkerr(cw)});结束结束%计算最大和模拟吞吐量maxthrougpul(snridx)= sum(txedtrblksizes);%最大吞吐量simThroughput (snrIdx) = (bitTput, 2)总和;%模拟吞吐量%在命令窗口中动态显示结果流([['\ n \ n \ nthrougpul(mbps)为',num2str(simLocal.NFrames)'帧(S)'],......'=%.4f \ n'), 1 e-6 * simThroughput (snrIdx) / (simLocal.NFrames * 10 e - 3));流(['吞吐量(%%)关于',num2str(simLocal.NFrames)'帧(s) = %.4f\n'],......Simkrouguppul(Snridx)* 100 / maxthrougpul(snridx));结束
模拟传输方案1(8x2)和SCS = 30kHz,CDL-C通道在-5DB SNR处进行2个10ms帧(2.50%)HARQ PROC 1:CW0:初始传输(NSLOT = 0,RV = 0,CR =0.513458)失败。(5.00%)HARQ PROC 2:CW0:初始传输(NSLOT = 1,RV = 0,CR = 0.513458)失败。(7.50%)HARQ PROC 3:CW0:初始传输(NSLOT = 2,RV = 0,CR = 0.451578)失败。(10.00%)HARQ PROC 4:CW0:初始传输(NSLOT = 3,RV = 0,CR = 0.451578)失败。(12.50%)HARQ PROC 5:CW0:初始传输(NSLOT = 4,RV = 0,CR = 0.451578)失败。(15.00%)HARQ PROC 6:CW0:初始传输(NSLOT = 5,RV = 0,CR = 0.451578)失败。(17.50%)HARQ PROC 7:CW0:初始传输(NSLOT = 6,RV = 0,CR = 0.451578)失败。(20.00%)HARQ PROC 8:CW0:初始传输(NSLOT = 7,RV = 0,CR = 0.451578)失败。(22.50%)HARQ PROC 9:CW0:初始传输(NSLOT = 8,RV = 0,CR = 0.451578)失败。(25.00%)HARQ PROC 10:CW0:初始传输(NSLOT = 9,RV = 0,CR = 0.451578)失败。 (27.50%) HARQ Proc 11: CW0:Initial transmission (NSlot=10,RV=0,CR=0.451578) failed. (30.00%) HARQ Proc 12: CW0:Initial transmission (NSlot=11,RV=0,CR=0.451578) failed. (32.50%) HARQ Proc 13: CW0:Initial transmission (NSlot=12,RV=0,CR=0.451578) failed. (35.00%) HARQ Proc 14: CW0:Initial transmission (NSlot=13,RV=0,CR=0.451578) failed. (37.50%) HARQ Proc 15: CW0:Initial transmission (NSlot=14,RV=0,CR=0.451578) failed. (40.00%) HARQ Proc 16: CW0:Initial transmission (NSlot=15,RV=0,CR=0.451578) failed. (42.50%) HARQ Proc 1: CW0:Retransmission #1 (NSlot=16,RV=2,CR=0.451578) passed. (45.00%) HARQ Proc 2: CW0:Retransmission #1 (NSlot=17,RV=2,CR=0.451578) passed. (47.50%) HARQ Proc 3: CW0:Retransmission #1 (NSlot=18,RV=2,CR=0.451578) passed. (50.00%) HARQ Proc 4: CW0:Retransmission #1 (NSlot=19,RV=2,CR=0.451578) passed. (52.50%) HARQ Proc 5: CW0:Retransmission #1 (NSlot=0,RV=2,CR=0.451578) passed. (55.00%) HARQ Proc 6: CW0:Retransmission #1 (NSlot=1,RV=2,CR=0.451578) passed. (57.50%) HARQ Proc 7: CW0:Retransmission #1 (NSlot=2,RV=2,CR=0.451578) passed. (60.00%) HARQ Proc 8: CW0:Retransmission #1 (NSlot=3,RV=2,CR=0.451578) passed. (62.50%) HARQ Proc 9: CW0:Retransmission #1 (NSlot=4,RV=2,CR=0.451578) passed. (65.00%) HARQ Proc 10: CW0:Retransmission #1 (NSlot=5,RV=2,CR=0.451578) passed. (67.50%) HARQ Proc 11: CW0:Retransmission #1 (NSlot=6,RV=2,CR=0.451578) passed. (70.00%) HARQ Proc 12: CW0:Retransmission #1 (NSlot=7,RV=2,CR=0.451578) passed. (72.50%) HARQ Proc 13: CW0:Retransmission #1 (NSlot=8,RV=2,CR=0.451578) passed. (75.00%) HARQ Proc 14: CW0:Retransmission #1 (NSlot=9,RV=2,CR=0.451578) passed. (77.50%) HARQ Proc 15: CW0:Retransmission #1 (NSlot=10,RV=2,CR=0.451578) passed. (80.00%) HARQ Proc 16: CW0:Retransmission #1 (NSlot=11,RV=2,CR=0.451578) passed. (82.50%) HARQ Proc 1: CW0:Initial transmission (NSlot=12,RV=0,CR=0.451578) failed. (85.00%) HARQ Proc 2: CW0:Initial transmission (NSlot=13,RV=0,CR=0.451578) failed. (87.50%) HARQ Proc 3: CW0:Initial transmission (NSlot=14,RV=0,CR=0.451578) failed. (90.00%) HARQ Proc 4: CW0:Initial transmission (NSlot=15,RV=0,CR=0.451578) failed. (92.50%) HARQ Proc 5: CW0:Initial transmission (NSlot=16,RV=0,CR=0.451578) failed. (95.00%) HARQ Proc 6: CW0:Initial transmission (NSlot=17,RV=0,CR=0.451578) failed. (97.50%) HARQ Proc 7: CW0:Initial transmission (NSlot=18,RV=0,CR=0.451578) failed. (100.00%) HARQ Proc 8: CW0:Initial transmission (NSlot=19,RV=0,CR=0.451578) failed. Throughput(Mbps) for 2 frame(s) = 24.1728 Throughput(%) for 2 frame(s) = 40.0000 Simulating transmission scheme 1 (8x2) and SCS=30kHz with CDL-C channel at 0dB SNR for 2 10ms frame(s) (2.50%) HARQ Proc 1: CW0:Initial transmission (NSlot=0,RV=0,CR=0.513458) passed. (5.00%) HARQ Proc 2: CW0:Initial transmission (NSlot=1,RV=0,CR=0.513458) passed. (7.50%) HARQ Proc 3: CW0:Initial transmission (NSlot=2,RV=0,CR=0.451578) passed. (10.00%) HARQ Proc 4: CW0:Initial transmission (NSlot=3,RV=0,CR=0.451578) passed. (12.50%) HARQ Proc 5: CW0:Initial transmission (NSlot=4,RV=0,CR=0.451578) passed. (15.00%) HARQ Proc 6: CW0:Initial transmission (NSlot=5,RV=0,CR=0.451578) passed. (17.50%) HARQ Proc 7: CW0:Initial transmission (NSlot=6,RV=0,CR=0.451578) passed. (20.00%) HARQ Proc 8: CW0:Initial transmission (NSlot=7,RV=0,CR=0.451578) passed. (22.50%) HARQ Proc 9: CW0:Initial transmission (NSlot=8,RV=0,CR=0.451578) passed. (25.00%) HARQ Proc 10: CW0:Initial transmission (NSlot=9,RV=0,CR=0.451578) passed. (27.50%) HARQ Proc 11: CW0:Initial transmission (NSlot=10,RV=0,CR=0.451578) passed. (30.00%) HARQ Proc 12: CW0:Initial transmission (NSlot=11,RV=0,CR=0.451578) passed. (32.50%) HARQ Proc 13: CW0:Initial transmission (NSlot=12,RV=0,CR=0.451578) passed. (35.00%) HARQ Proc 14: CW0:Initial transmission (NSlot=13,RV=0,CR=0.451578) passed. (37.50%) HARQ Proc 15: CW0:Initial transmission (NSlot=14,RV=0,CR=0.451578) passed. (40.00%) HARQ Proc 16: CW0:Initial transmission (NSlot=15,RV=0,CR=0.451578) passed. (42.50%) HARQ Proc 1: CW0:Initial transmission (NSlot=16,RV=0,CR=0.451578) passed. (45.00%) HARQ Proc 2: CW0:Initial transmission (NSlot=17,RV=0,CR=0.451578) passed. (47.50%) HARQ Proc 3: CW0:Initial transmission (NSlot=18,RV=0,CR=0.451578) passed. (50.00%) HARQ Proc 4: CW0:Initial transmission (NSlot=19,RV=0,CR=0.451578) passed. (52.50%) HARQ Proc 5: CW0:Initial transmission (NSlot=0,RV=0,CR=0.451578) passed. (55.00%) HARQ Proc 6: CW0:Initial transmission (NSlot=1,RV=0,CR=0.451578) passed. (57.50%) HARQ Proc 7: CW0:Initial transmission (NSlot=2,RV=0,CR=0.451578) passed. (60.00%) HARQ Proc 8: CW0:Initial transmission (NSlot=3,RV=0,CR=0.451578) passed. (62.50%) HARQ Proc 9: CW0:Initial transmission (NSlot=4,RV=0,CR=0.451578) passed. (65.00%) HARQ Proc 10: CW0:Initial transmission (NSlot=5,RV=0,CR=0.451578) passed. (67.50%) HARQ Proc 11: CW0:Initial transmission (NSlot=6,RV=0,CR=0.451578) passed. (70.00%) HARQ Proc 12: CW0:Initial transmission (NSlot=7,RV=0,CR=0.451578) passed. (72.50%) HARQ Proc 13: CW0:Initial transmission (NSlot=8,RV=0,CR=0.451578) passed. (75.00%) HARQ Proc 14: CW0:Initial transmission (NSlot=9,RV=0,CR=0.451578) passed. (77.50%) HARQ Proc 15: CW0:Initial transmission (NSlot=10,RV=0,CR=0.451578) passed. (80.00%) HARQ Proc 16: CW0:Initial transmission (NSlot=11,RV=0,CR=0.451578) passed. (82.50%) HARQ Proc 1: CW0:Initial transmission (NSlot=12,RV=0,CR=0.451578) passed. (85.00%) HARQ Proc 2: CW0:Initial transmission (NSlot=13,RV=0,CR=0.451578) passed. (87.50%) HARQ Proc 3: CW0:Initial transmission (NSlot=14,RV=0,CR=0.451578) passed. (90.00%) HARQ Proc 4: CW0:Initial transmission (NSlot=15,RV=0,CR=0.451578) passed. (92.50%) HARQ Proc 5: CW0:Initial transmission (NSlot=16,RV=0,CR=0.451578) passed. (95.00%) HARQ Proc 6: CW0:Initial transmission (NSlot=17,RV=0,CR=0.451578) passed. (97.50%) HARQ Proc 7: CW0:Initial transmission (NSlot=18,RV=0,CR=0.451578) passed. (100.00%) HARQ Proc 8: CW0:Initial transmission (NSlot=19,RV=0,CR=0.451578) passed. Throughput(Mbps) for 2 frame(s) = 60.4320 Throughput(%) for 2 frame(s) = 100.0000 Simulating transmission scheme 1 (8x2) and SCS=30kHz with CDL-C channel at 5dB SNR for 2 10ms frame(s) (2.50%) HARQ Proc 1: CW0:Initial transmission (NSlot=0,RV=0,CR=0.513458) passed. (5.00%) HARQ Proc 2: CW0:Initial transmission (NSlot=1,RV=0,CR=0.513458) passed. (7.50%) HARQ Proc 3: CW0:Initial transmission (NSlot=2,RV=0,CR=0.451578) passed. (10.00%) HARQ Proc 4: CW0:Initial transmission (NSlot=3,RV=0,CR=0.451578) passed. (12.50%) HARQ Proc 5: CW0:Initial transmission (NSlot=4,RV=0,CR=0.451578) passed. (15.00%) HARQ Proc 6: CW0:Initial transmission (NSlot=5,RV=0,CR=0.451578) passed. (17.50%) HARQ Proc 7: CW0:Initial transmission (NSlot=6,RV=0,CR=0.451578) passed. (20.00%) HARQ Proc 8: CW0:Initial transmission (NSlot=7,RV=0,CR=0.451578) passed. (22.50%) HARQ Proc 9: CW0:Initial transmission (NSlot=8,RV=0,CR=0.451578) passed. (25.00%) HARQ Proc 10: CW0:Initial transmission (NSlot=9,RV=0,CR=0.451578) passed. (27.50%) HARQ Proc 11: CW0:Initial transmission (NSlot=10,RV=0,CR=0.451578) passed. (30.00%) HARQ Proc 12: CW0:Initial transmission (NSlot=11,RV=0,CR=0.451578) passed. (32.50%) HARQ Proc 13: CW0:Initial transmission (NSlot=12,RV=0,CR=0.451578) passed. (35.00%) HARQ Proc 14: CW0:Initial transmission (NSlot=13,RV=0,CR=0.451578) passed. (37.50%) HARQ Proc 15: CW0:Initial transmission (NSlot=14,RV=0,CR=0.451578) passed. (40.00%) HARQ Proc 16: CW0:Initial transmission (NSlot=15,RV=0,CR=0.451578) passed. (42.50%) HARQ Proc 1: CW0:Initial transmission (NSlot=16,RV=0,CR=0.451578) passed. (45.00%) HARQ Proc 2: CW0:Initial transmission (NSlot=17,RV=0,CR=0.451578) passed. (47.50%) HARQ Proc 3: CW0:Initial transmission (NSlot=18,RV=0,CR=0.451578) passed. (50.00%) HARQ Proc 4: CW0:Initial transmission (NSlot=19,RV=0,CR=0.451578) passed. (52.50%) HARQ Proc 5: CW0:Initial transmission (NSlot=0,RV=0,CR=0.451578) passed. (55.00%) HARQ Proc 6: CW0:Initial transmission (NSlot=1,RV=0,CR=0.451578) passed. (57.50%) HARQ Proc 7: CW0:Initial transmission (NSlot=2,RV=0,CR=0.451578) passed. (60.00%) HARQ Proc 8: CW0:Initial transmission (NSlot=3,RV=0,CR=0.451578) passed. (62.50%) HARQ Proc 9: CW0:Initial transmission (NSlot=4,RV=0,CR=0.451578) passed. (65.00%) HARQ Proc 10: CW0:Initial transmission (NSlot=5,RV=0,CR=0.451578) passed. (67.50%) HARQ Proc 11: CW0:Initial transmission (NSlot=6,RV=0,CR=0.451578) passed. (70.00%) HARQ Proc 12: CW0:Initial transmission (NSlot=7,RV=0,CR=0.451578) passed. (72.50%) HARQ Proc 13: CW0:Initial transmission (NSlot=8,RV=0,CR=0.451578) passed. (75.00%) HARQ Proc 14: CW0:Initial transmission (NSlot=9,RV=0,CR=0.451578) passed. (77.50%) HARQ Proc 15: CW0:Initial transmission (NSlot=10,RV=0,CR=0.451578) passed. (80.00%) HARQ Proc 16: CW0:Initial transmission (NSlot=11,RV=0,CR=0.451578) passed. (82.50%) HARQ Proc 1: CW0:Initial transmission (NSlot=12,RV=0,CR=0.451578) passed. (85.00%) HARQ Proc 2: CW0:Initial transmission (NSlot=13,RV=0,CR=0.451578) passed. (87.50%) HARQ Proc 3: CW0:Initial transmission (NSlot=14,RV=0,CR=0.451578) passed. (90.00%) HARQ Proc 4: CW0:Initial transmission (NSlot=15,RV=0,CR=0.451578) passed. (92.50%) HARQ Proc 5: CW0:Initial transmission (NSlot=16,RV=0,CR=0.451578) passed. (95.00%) HARQ Proc 6: CW0:Initial transmission (NSlot=17,RV=0,CR=0.451578) passed. (97.50%) HARQ Proc 7: CW0:Initial transmission (NSlot=18,RV=0,CR=0.451578) passed. (100.00%) HARQ Proc 8: CW0:Initial transmission (NSlot=19,RV=0,CR=0.451578) passed. Throughput(Mbps) for 2 frame(s) = 60.4320 Throughput(%) for 2 frame(s) = 100.0000

结果

显示测量的吞吐量。这是根据给定数据传输可用资源的链路最大可能吞吐量的百分比计算的。

图;情节(simParameters.SNRIn simThroughput * 100. / maxThroughput,'o-。')包含('snr(db)');ylabel('吞吐量(%)');网格;标题(Sprintf('%s (%dx%d) / NRB=%d / SCS=%dkHz'......simParameters.DelayProfile、simParameters.NTxAnts simParameters.NRxAnts,......simparameters.carrier.nsizegrid,simparameters.carrier.subcarrierspacing));%捆绑密钥参数并导致录制组合结构simResults。simParameters = simParameters;simResults。simThroughput = simThroughput;

下图显示了模拟10000子帧的吞吐量结果(NFrames = 1000Snrin = -18:2:16).

附录

这个例子使用了以下帮助函数:

选定的参考书目

  1. 3 gpp TS 38.211。“NR;物理通道和调制。”第三代合作伙伴项目;技术规范无线电接入网。

  2. 3GPP TS 38.212。“NR;多路复用和信道编码。”第三代合作伙伴项目;技术规范无线电接入网。

  3. 3GPP TS 38.213。“NR;控制物理层程序。”第三代合作伙伴项目;技术规范无线电接入网。

  4. 3 gpp TS 38.214。“NR;数据的物理层程序。”第三代合作伙伴项目;技术规范无线电接入网。

  5. 3GPP TR 38.901。“从0.5到100 GHz的频率的频道模型研究。”第三代合作伙伴项目;技术规范无线电接入网。

本地功能

功能validateNumLayers (simParameters)%验证相对于天线几何形状的层数nlayers = simparameters.pdsch.numlayers;ntxants = simparameters.ntxants;nrxants = simparameters.nrxants;Antennadecrounction = Sprintf('min(NTxAnts,NRxAnts) = min(%d,%d) = %d',ntxants,nrxants,分钟(ntxants,nrxants));如果Nlayers > min(ntxants,nrxants) error('层数(%d)必须满足NLayers <= %s'......nlayers,天平页面);结束如果通道的最大可能等级等于,则显示警告%层数如果(nlayers> 2)&&(nlayers == min(ntxants,nrxants))警告([“通道的最大可能等级,由%s给出,等于NLayers (%d)。”......“这可能导致某些频道条件下的解码失败。......'尝试减少层数或增加频道排名'......(使用更多的发射或接收天线)。, antennaDescription nlayers);%#确定结束结束功能estChannelGrid = getInitialChannelEstimate(载体,nTxAnts propchannel)%获得第一传输之前信道估计。这可以用于%获得第一槽的预编码矩阵。ofdmInfo = nrOFDMInfo(载体);chInfo = INFO(propchannel);maxChDelay =小区(MAX(chInfo.PathDelays * propchannel.SampleRate))+ chInfo.ChannelFilterDelay;%临时波形(仅对大小需要)tmpWaveform = 0 ((ofdmInfo.SampleRate / 1000 / carrier.SlotsPerSubframe) + maxChDelay nTxAnts);%过滤通过通道[~, pathGains sampleTimes] = propchannel (tmpWaveform);%完美的时间同步pathFilters = getPathFilters (propchannel);抵消= nrPerfectTimingEstimate (pathGains pathFilters);%完美的频道估计estChannelGrid = nrPerfectChannelEstimate(载体,pathGains pathFilters,抵消,sampleTimes);结束功能WTX = getPrecodingMatrix(载体,PDSCH,hestGrid)%计算预编码所有PRGS矩阵在载体重叠的PDSCH分配的百分比通过载波网格解决的%最大CRBmaxCRB =载体。NStartGrid +载波。NSizeGrid - 1;%prg大小如果(isfield(pdsch,'prgbundlesize')&&〜的isEmpty(pdsch.PRGBundleSize))Pd_BWP = pdsch.PRGBundleSize;别的pd_bwp = maxcrb + 1;结束载波网格中每个RB的% PRG编号(基于1)NPRG = cell ((maxCRB + 1) / Pd_BWP);prgset = repmat ((1: NPRG)、Pd_BWP 1);prgset = prgset(母舰。NStartGrid + (1: carrier.NSizeGrid)。');(~, ~, R, P) = (hestGrid)大小;wtx = 0 ([pdsch。NumLayers P NPRG]);为了我= 1:nprg当前PRG和PDSCH中的%子载波指数%分配thisprg = find(prgset == i) -  1;thisprg =交叉(thiceprg,pdsch.prbset(:) + cross.nstartgrid,'行');prgSc =(1:12) '+ 12 * thisPRG';prgSc = prgSc(:);如果(~ isempty (prgSc))PRG的%平均信道估计eStallocgrid = hestgrid(prgsc,::,:);hest =允许(平均值(重塑(exhape(extallocgrid,[],r,p)),[2 3 1]);%SVD分解[~ ~ V] =圣言(命令);wtx(:,:我)= V (:, 1: pdsch.NumLayers)。”;结束结束wtx = wtx / sqrt(pdsch.numlayers);Numlayers的%正常化结束功能estChannelGrid = precodeChannelEstimate(载体、estChannelGrid W)%将预编码矩阵W应用于频道估计的最后一个维度(K, L R P) = (estChannelGrid)大小;estChannelGrid =重塑(estChannelGrid,[K*L R P]);estChannelGrid = hPRGPrecode ([K L R P], carrier.NStartGrid estChannelGrid,重塑(1:元素个数(estChannelGrid), [K * L R P]), W);estChannelGrid =重塑(estChannelGrid K, L, R, []);结束功能[MappedPro,MappedSymbols] = MapNumerology(子载波,符号,NRB,NRBT,FS,FT)%将SSBurst数字映射到PDSCH数字。输出是:% - mappedPRB:载波资源网格的基于0的PRB索引(按列排列)% -  MapedSymbols:载波资源网格中的插槽中的基于0的OFDM符号索引(连续排列)%输入参数为:% - 子载波:SSB资源网格的基于1的行下标(排列在列中)% - 符号:用于SSB资源网格的基于1的列下标(以n×4矩阵排列,为行中的每个传输突发的4个符号,n发送突发)%SSB资源网格使用SSBINFO.nRB,普通CP,跨越5子帧来划分% - nrbs:源(SSB) NRB% - nrbt:目标(载波)NRB% -  FS:源(SSB)SCS% - 英尺:靶(载体)SCSMappedPrb =唯一(FIX((子载波 - (NRB * 6) -  1)* FS /(FT * 12)+ NRBT / 2),'稳定的');符号=符号。';符号=符号(:)。'-  1;如果(FT %如果ft/fs < 1,减少mappedsymbols =唯一(修复(符号* ft / fs),'稳定的');别的% Else, repeat by ft/fsMappedSymbols = REPAPE((0:(0:(ft / fs-1))'+符号(:)'* ft / fs,1,[]);结束结束功能Plotlayerevm(NSLOTS,NSLOT,PDSCH,SIZ,PDSCHINDICE,PDSCHSYMBOL,PDSCHEQ)%plot EVM信息执着的slotevm;执着的rbEVM执着的evmPerSlot;如果(nslot == 0)slotEVM = comm.EVM;rbEVM = comm.EVM;evmPerSlot = NaN的(NSLOTS,pdsch.NumLayers);数字;结束Evmperslot(nslot + 1,:) = slotevm(pdschsymbols,pdscheq);子图(2,1,1);图(0:(nslots-1),EVMPERSLOT);Xlabel('插槽号');ylabel('维生素(%)');传奇(“层”+ (1: pdsch.NumLayers),“位置”'eastoutside');标题('每个插槽每层EVM');次要情节(2,1,2);(k ~ p) = ind2sub (siz pdschIndices);Rbsubs = floor((k-1) / 12);NRB = siz(1) / 12;evmPerRB =南(NRB pdsch.NumLayers);为了NU = 1:pdsch.NumLayers为了RB =唯一(RBSBS)。这个=(rbsubs == rb&p == nu);EVMPERRB(RB + 1,NU)= RBEVM(PDSCHSYMBOLS(此),PDSCHEQ(此));结束结束图(0:(NRB-1),EVMPerrb);Xlabel('资源块');ylabel('维生素(%)');传奇(“层”+ (1: pdsch.NumLayers),“位置”'eastoutside');标题(['EVM每层每个资源块,slot #'num2str (nslot)]);drawnow;结束

也可以看看

对象

功能