主要内容

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。通过在分配(宽带壳体)或子带中的所有PDSCH PRB上平均频道估计来确定预编码矩阵。SS突发中的任何SS / PBCH块都没有波束成形。

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

仿真长度和信噪比点

在10ms帧的数量方面设置模拟的长度。应该使用大量nFrames来产生有意义的吞吐量结果。设置SNR点以模拟。每个层的SNR定义为每重RE,并且它包括信号和噪声对所有天线的影响。

simparameters = struct();%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值可能跨层不同。

在某些情况下,一些层可以比其他层更高。这些低质量的层可能导致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]。

设定波形类型和PDSCH命理(SCS和CP类型)simParameters。载体= nrCarrierConfig;simParameters.Carrier.NSizeGrid = 51;资源块数的%带宽(51 rbs,30 kHz SCS为20 MHz BW)simparameters.carrier.subcarrierspacing = 30;% 15、30、60、120、240(千赫)simParameters.Carrier.CyclicPrefix ='普通的'%“正常”或“扩展”(扩展CP只适用于60千赫SCS)simparameters.carrier.ncellid = 1;%细胞身份%SS突发配置可以通过将ssbtransmited字段设置为所有零来禁用%突发simparameters.ssburst = struct();simparameters.ssburst.blockpattern =.“案例B”% 30千赫副载波间距simparameters . ssburst . ssbtransmit = [0 1 0 1];%位图指示在突发中传输的块simParameters.SSBurst.SSBPeriodicity = 20;% SS突发设置周期毫秒(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'(slot-wise),'B'(non - slot-wise))%加扰标识符simParameters.PDSCH.NID = simParameters.Carrier.NCellID;simParameters.PDSCH.RNTI = 1;% PDSCH资源块映射(TS 38.211章节7.3.1.6)simparameters.pdsch.vrbtopbinterleaving = 0;%禁用交错资源映射simParameters.PDSCH.VRBBundleSize = 4;%定义要使用的传输层的数量simparameters.pdsch.numlayers = 2;% PDSCH传输层数定义码字调制和目标编码率码字的数量直接依赖于层的数量,因此要确保在获取码字编号之前首先设置%图层如果simParameters.PDSCH.NumCodewords > 1%MultiCrodeword传输(当数量> 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.timedity = 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模式simParameters.PDSCH.ReservedPRB{1}。SymbolSet = [];%保留的PDSCH符号simParameters.PDSCH.ReservedPRB{1}。PRBSet = [];%保留PDSCH PRBssimParameters.PDSCH.ReservedPRB{1}。时间= [];保留资源的百分比%附加仿真和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 = 300 e-9;simParameters。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或偶数。[channel.transmitantennaArray.size,channel.receiveantennaarray.size] =...hArrayGeometry (simParameters.NTxAnts simParameters.NRxAnts);nTxAnts = prod (channel.TransmitAntennaArray.Size);nRxAnts = prod (channel.ReceiveAntennaArray.Size);simParameters。NTxAnts = NTxAnts;simParameters。NRxAnts = NRxAnts;别的频道= 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 =信息(渠道);maxChDelay = ceil(max(chInfo.PathDelays*channel.SampleRate)) + chInfo.ChannelFilterDelay;

预留SS突发对应的PDSCH资源

本节介绍如何为SS突发的传输预留资源。

%获取有关SS Burst配置的信息首先需要一些相关的参数赋值simParameters.SSBurst.NCellID = simParameters.Carrier.NCellID;simParameters.SSBurst.SampleRate = waveformInfo.SampleRate;ssbInfo = hSSBurstInfo (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;预订。PRBSet = mappedPRB;预订。Period = simParameters.SSBurst.SSBPeriodicity * (simParameters.Carrier.SubcarrierSpacing/15);%插槽的周期simParameters.PDSCH。ReservedPRB{结束+ 1}=预订;

处理循环

为了确定每个信噪比点的吞吐量,使用以下步骤分析每个传输实例的PDSCH数据:

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

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

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

  • 噪声信道建模。将波形通过CDL或TDL衰落信道。添加情况。信噪比定义为每个UE天线的每个RE。对于0分贝的信噪比,信号和噪声对每个接收天线的每个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错误。

%阵列存储所有信噪比点的最大吞吐量maxThroughput = 0(长度(simParameters.SNRIn), 1);%阵列存储所有信噪比点的模拟吞吐量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。MultipleHARQProcesses = true;encodeDLSCH。TargetCodeRate = simParameters.PDSCHExtension.TargetCodeRate;%创建DL-SCH解码器系统对象以执行传输信道解码% LDPC译码采用分层信念传播,次数减半与信仰传播解码的默认值相比,%迭代decodeDLSCH = nrDLSCHDecoder;decodeDLSCH。MultipleHARQProcesses = true;decodeDLSCH。TargetCodeRate = simParameters.PDSCHExtension.TargetCodeRate;decodeDLSCH。LDPCDecodingAlgorithm = simParameters.PDSCHExtension.LDPCDecodingAlgorithm;decodeDLSCH。MaximumLDPCIterationCount = simParameters.PDSCHExtension.MaximumLDPCIterationCount;为了snrIdx = 1:元素个数(simParameters.SNRIn)%注释掉用于并行计算% parfor snrIdx = 1:numel(simParameters.SNRIn) % uncomment用于并行计算%要减少总模拟时间,可以执行此循环% parallel使用并行计算工具箱。注释掉for%语句并取消“parfor”语句的注释。如果并行计算未安装%工具箱,'Parcon'默认为正常'for'语句%将随机数生成器设置为默认值rng (“默认”);%获取模拟级参数结构的完整副本,以便它们不存在使用parfor时,% PCT广播变量simlocal = simparameters;WaveInfolocal = WaveformInfo;%拍摄频道级参数的副本以简单地进行后续参数引用载体= simLocal.Carrier;pdsch = simLocal.PDSCH;pdschextra = simLocal.PDSCHExtension;ssburst = simLocal.SSBurst;decodeDLSCHLocal = decodeDLSCH;%复制的解码器句柄,以帮助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);%定时偏移,在每个插槽中更新,以完美同步和当相关性强直时%是实际同步时的%offset = 0;%波形长度的%循环为了nslot = 0: NSlots-1%更新新插槽的运营商插槽号母舰。NSlot = NSlot;%必要时生成一个新的SS爆发如果(ssbSampleIndex==1) nSubframe = carrier. (ssbSampleIndex==1)NSlot / carrier.SlotsPerSubframe;ssburst。NFrame = floor(nSubframe / 10);ssburst。NHalfFrame = mod(nSubframe / 5,2);[ssbWaveform, ~, ssbInfo] = hSSBurst (ssburst);结束从HARQ索引表中获取当前PDSCH的HARQ进程索引harqprocidx = harqsequence(mod(harqproccntr,长度(harqsequence))+ 1);%更新当前HARQ进程信息(这将更新RV%取决于CRC通过或失败在以前的传输这个HARQ过程的%)harqProcesses (harqProcIdx) = hUpdateHARQProcess (harqProcesses (harqProcIdx) pdsch.NumCodewords);%计算槽中码字的传输块大小[PDSchindices,PDSchindicsInfo] = NRPDSChindices(载体,PDSCH);trblksize = nrtbs(pdsch.modulation,pdsch.numlayers,numel(pdsch.prbset),pdschindicsinfo.nreperprb,pdschextra.targetCodate,PDSchextra.xoverhead);% HARQ处理每码字检查以前传输的CRC,即是否需要重传?为了cwIdx = 1: pdsch。NumCodewords newdata = false;如果HarqProcesses(HarqProcidx).blkerr(cwidx)上次记录的解码错误如果(harqProcesses (harqProcIdx) .RVIdx (cwIdx) = = 1)%表示RV序列开始resetSoftBuffer (decodeDLSCHLocal 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.MODURALY,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(大小(pdschGrid)、carrier.NStartGrid dmrsSymbols, dmrsIndices, mtx);pdschGrid (dmrsAntIndices) = dmrsAntSymbols;% PDSCH PT-RS预编码和映射ptrsSymbols = nrPDSCHPTRS(载体、pdsch);ptrsIndices = nrPDSCHPTRSIndices(载体、pdsch);[ptrsAntSymbols, ptrsAntIndices] = hPRGPrecode(大小(pdschGrid)、carrier.NStartGrid ptrsSymbols, ptrsIndices, mtx);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(渠道);得到完美的信道估计路径滤波器(抵消,mag) = nrPerfectTimingEstimate (pathGains pathFilters);别的%实际同步。将接收的波形相关联%与PDSCH DM-RS给出时间偏移估计't'和%相关幅度'mag'。函数hskipweaktimingoffset%用于更新接收机定时偏差。如果%相关峰值在'mag'是弱的,当前的时机%估计值't'被忽略,之前的估计值'offset'被忽略使用%(t, mag) = nrTimingEstimate(载体、rxWaveform dmrsIndices, dmrsSymbols);抵消= hSkipWeakTimingOffset(抵消t杂志);显示一个警告,如果估计的时间偏移超过%最大信道延迟如果offset> maxchdelay警告([估计的时间偏移(%d)大于最大信道延迟(%d)。...这将导致解码失败。这可能是低信噪比造成的。”...或者没有足够的DM-RS符号来成功同步],偏移,maxchdelay);结束结束rx波形= rx波形(1+偏移:结束,:);%对接收到的数据进行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(大小(estChannelGrid),运营商。NStartGrid,pdschHest,pdschHestIndices,permute(wtx,[2 1 3]));别的所接收网格与百分比实际信道估计%每个传输层,使用PDSCH DM-RS为每个%层。该信道估计包括%发射机预编码[estChannelGrid,噪音]= nrChannelEstimate(载体、rxGrid dmrsIndices, dmrsSymbols,“CDMLengths”, pdsch.DMRS.CDMLengths);%从收到的网格中获取PDSCH资源元素%信道估计[pdschrx,pdschhest] = nrextractresources(pdschindices,rxgrid,estchannelgrid);%在预编码之前从estChannelGrid中删除预编码%矩阵计算estChannelGridPorts = precodeChannelEstimate(载体、estChannelGrid连词(mtx));%获取下一个插槽的预编码矩阵newwtx = getPrecodingMatrix(运营商,PDSCH,EstchannelGridports);结束%均衡[PDSCHEQ,CSI] = NREQUALIZEMSE(PDSCHRX,PDSCHHEST,噪音);%共相位误差补偿如果〜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位置的剩余通道% tempGridcpe = nrChannelEstimate (tempGrid ptrsIndices ptrsSymbols);在子载波,接收天线和%层。然后,通过取这个角得到CPE%的总和CPE =角度(SUM(CPE,[1 3 4]));%将均衡的PDSCH符号映射到tempGridtempGrid (pdschIndices) = pdschEq;%在每个OFDM符号参考范围内正确的CPE% PT-RS OFDM符号symLoc = pdschIndicesInfo.PTRSSymbolSet (1) + 1: pdschIndicesInfo.PTRSSymbolSet(结束)+ 1;tempGrid (:, symLoc:) = tempGrid (:, symLoc:)。* exp (1 * cpe (symLoc));%提取PDSCH符号pdschEq = tempGrid (pdschIndices);结束%解码PDSCH物理信道[dlschlls,rxsymbols] = nrpdschdecode(载波,pdsch,pdscheq,噪声);%每层显示EVM,每个插槽和每个RB如果(simLocal.DisplayDiagnostics) plotLayerEVM (NSlots、nslot pdsch,大小(pdschGrid) pdschIndices, pdschSymbols, pdschEq);结束百分比按CSI划分的llrcsi = nrlayerdemap(csi);% CSI层demapping为了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] =解码leclschlocal(dlschlls,pdsch.modulation,pdsch.numlayers,harqprocesses(harqprocidx).rv,harqprocidx-1);%存储用于计算吞吐量的值(仅针对活动PDSCH实例)如果(any(trBlkSizes ~= 0)) bitTput = [bitTput trBlkSizes.*(1-harqProcesses(harqProcIdx).blkerr)];txedTrBlkSizes = [txedTrBlkSizes trBlkSizes];结束%更新HARQ进程计数器harqProcCntr = harqProcCntr + 1;显示当前HARQ进程管理的每个码字的传输块CRC错误信息ICR = Trblksize./pdschindicsinfo.g;%瞬时码率csn =国防部(nslot carrier.SlotsPerFrame);%帧中的槽位号fprintf('\n(%3.2f%%) HARQ Proc %d: '100 * (nslot + 1) / NSlots harqProcIdx);estrings = {“通过”“失败”};rvi = harqProcesses (harqProcIdx) .RVIdx;为了Cw =1:length(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,房车= % d, CR = % f)”, csn cwrvi-1 rvSeq (cwrvi) icr (cw));结束fprintf('cw%d:%s%s。', ts cw-1 estrings {1 + harqProcesses (harqProcIdx) .blkerr (cw)});结束结束%计算最大和模拟吞吐量maxThroughput (snrIdx) =总和(txedTrBlkSizes);最大可能吞吐量%simThroughput (snrIdx) = (bitTput, 2)总和;%模拟吞吐量%在命令窗口中动态显示结果流([['\ n \ n \ nthrougpul(mbps)为',num2str(simlocal.nframes)'框架'],...'=%.4f \ n'), 1 e-6 * simThroughput (snrIdx) / (simLocal.NFrames * 10 e - 3));流(['吞吐量(%%)为',num2str(simlocal.nframes)'帧(s) = %.4f\n'],...simThroughput (snrIdx) * 100 / maxThroughput (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,“啊——”。)包含(“信噪比(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. 3 gpp TS 38.212。“NR;多路复用和信道编码。”第三代合作伙伴项目;技术规范无线电接入网。

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

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

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

本地功能

函数validateNumLayers (simParameters)验证层数,相对于天线几何nlayers = simParameters.PDSCH.NumLayers;ntxants = simParameters.NTxAnts;nrxants = simParameters.NRxAnts;antennaDescription = sprintf ('min(NTxAnts,NRxAnts) = min(%d,%d) = %d',萘锡,峰,min(Ntxants,nrxants));如果Nlayers > min(ntxants,nrxants) error('层数(%d)必须满足NLayers <= %s'...nlayers antennaDescription);结束如果通道的最大可能等级等于,则显示警告%层数如果(nlayers == min(ntxants,nrxants)) warning([“通道的最大可能等级,由%s给出,等于NLayers (%d)。”...“这可能导致某些频道条件下的解码失败。...“尝试减少层数或增加频道等级”...(使用更多的发射或接收天线)。, antennaDescription nlayers);%#OK 结束结束函数estChannelGrid = getInitialChannelEstimate(载体,nTxAnts propchannel)%在第一次传输之前获得频道估计。这可以用来%获得第一槽的预编码矩阵。OFDMINFO = NROFDMINFO(载体);Chinfo = Info(Propchannel);maxchdelay = ceil(max(chinfo.pathdelays * propchannel.samplerge))+ 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)%计算重叠载体中所有PRG的预编码矩阵%与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范围内的子载波指数%分配prg = find(prgset==i) - 1; / /查找prgsetthisPRG =相交(thisPRG pdsch.PRBSet(:) +载波。NStartGrid,'行');prgsc =(1:12)'+ 12 * thisprg';prgsc = prgsc(:);如果(~ isempty (prgSc))PRG中的平均信道估计eStallocgrid = hestgrid(prgsc,::,:);hest =允许(平均值(重塑(exhape(extallocgrid,[],r,p)),[2 3 1]);%计算分解[~ ~ V] =圣言(命令);wtx(:,:我)= V (:, 1: pdsch.NumLayers)。”;结束结束wtx = wtx / sqrt(pdsch.numlayers);% Normalize通过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, []);结束函数[mappedPRB, mappedSymbols] = mapNumerology(副载波、符号、nrbs nrbt, fs,英尺)%将SSBurst命理学映射到PDSCH命理学。输出是:% - mappedPRB:载波资源网格的基于0的PRB索引(按列排列)% - mappedSymbols:载波资源网格槽中基于0的OFDM符号索引(按行排列)%输入参数为:% -子载波:SSB资源网格基于1的行下标(列中排列)% -符号:SSB资源网格的基于1的列下标(以N × 4矩阵排列,每行4个符号表示每个发送突发,N个发送突发)使用ssbInfo设置SSB资源网格的大小。NRB,普通CP,跨越5个子帧% - nrbs:源(SSB) NRB% - nrbt:目标(载波)NRB% - fs:源(SSB)% -  FT:目标(载体)SCSmappedPRB = unique(fix((subcarriers-(nrbs*6) - 1)*fs/(ft*12) + nrbt/2),'稳定的');符号=符号。';符号=符号(:)。'-  1;如果(英国《金融时报》< fs)%如果ft/fs < 1,减少mappedsymbols =唯一(修复(符号* ft / fs),'稳定的');别的% Else, repeat by ft/fsmappedSymbols =重塑((0:(ft / fs-1))的+符号(:)*英尺/ 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);包含(“槽数”);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 =独特(rbsubs)。'this = (rbsubs==rb & p==nu); evmPerRB(rb+1,nu) = rbEVM(pdschSymbols(this),pdschEq(this));结束结束情节(0:(NRB-1)、evmPerRB);包含('资源块');ylabel('维生素(%)');传奇(“层”+ (1: pdsch.NumLayers),“位置”“EastOutside”);标题(['EVM每层每个资源块,slot #'num2str (nslot)]);drawnow;结束

也可以看看

对象

功能