主要内容

NR PDSCH吞吐量

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

介绍

该示例测量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 * 15 kHz)

  • 普通和扩展循环前缀

  • TDL和CDL传播通道模型

模拟的其他特点是:

  • 基于SVD的PDSCH子带预编码

  • CP-OFDM调制

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

  • SS突发生成(case A-E, SS/PBCH块位图控制)

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

  • HARQ操作有16个进程

  • 该示例使用整个载波的单个带宽部分

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

有关本示例中实现的步骤的更详细说明,请参见5G NR通信链路型号DL-SCH和PDSCH发送和接收处理链

这个例子支持宽带预编码和子金宝app带预编码。预编码矩阵使用SVD确定,通过平均分配(宽带情况)或子带中所有PDSCH prb的信道估计。在SS突发中没有任何SS/PBCH块的波束形成。

为了减少总的模拟时间,您可以使用并行计算工具箱并行执行信噪比环路的信噪比点。

模拟长度和信噪比点

将模拟的长度设置为10ms帧的数量。应该使用大量的nframe来产生有意义的吞吐量结果。设置模拟的信噪比点。每一层的信噪比是按RE定义的,它包括信号和噪声对所有天线的影响。有关此示例使用的信噪比定义的解释,请参见用于链路仿真的信噪比定义

simParameters =结构();%清除simParameters变量以包含所有关键的模拟参数simParameters.NFrames=2;% 10毫秒帧数simParameters。SNRIn = [-5 0 5];%信噪比范围(dB)

信道估计器配置

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

simParameters.PerfectChannelEstimator=真;

模拟诊断

变量显示模拟信息控制仿真信息的显示,如用于每个子帧的HARQ进程ID。在CRC错误的情况下,还会显示RV序列的索引值。

simParameters。DisplaySimulationInformation = true;%| DisplayDiagnostics |标志允许绘制每层的EVM。%此图监控均衡后接收信号的质量。每层的EVM图显示:% *每层每槽的EVM,显示EVM随时间的变化。% *每层每个资源块的EVM,以频率显示EVM。%这个数字随着模拟而发展,并随着每个插槽而更新。%通常,低信噪比或信道褪色会导致信号减少%质量(高EVM)。通道对各层的影响不同,%因此,EVM值可能在不同层之间有所不同。%在某些情况下,某些层的EVM可能比其他层高得多低质量层可能导致CRC错误。这种行为可能是造成的%由低信噪比或使用太多的层信道条件。你%可以通过较高的信噪比,较低的数字组合来避免这种情况%的层,更高的天线数量,更可靠的传输%(较低的调制方案和目标码率)。simParameters.DisplayDiagnostics=false;

载波和PDSCH配置

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

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

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

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

  • 细胞ID

  • 发射和接收天线的数量

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

  • 目标代码的速度

  • 已分配资源块(PRBSet)

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

  • 层数

  • PDSCH映射类型

  • DM-RS配置参数

  • PT-RS配置参数

其他模拟范围内的参数包括:

  • 传播信道模型延迟剖面(TDL或CDL)

  • SS突发配置参数。请注意,SS突发生成可以通过设置SSBTransmitted字段为[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(千赫)simParameters.Carrier.CyclicPrefix=“正常”;%“正常”或“扩展”(扩展CP只适用于60千赫SCS)simParameters.Carrier.NCellID = 1;%细胞身份SS突发配置%可以通过将ssbtransmit字段设置为全零来禁用突发simParameters。SSBurst =结构();simParameters.SSBurst.BlockPattern =“案例B”;%30kHz子载波间隔simParameters.SSBurst.SSBTransmitted=[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 =“A”;%PDSCH映射类型('A'(插槽方向),'B'(非插槽方向))%匆忙标识符simParameters.PDSCH.NID=simParameters.Carrier.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%多码字传输(当层数为> 4时)simParameters.PDSCH.Modulation = {“16QAM”“16QAM”};% ' qpsk ', ' 16qam ', ' 64qam ', ' 256qam 'simParameters.PDSCHExtension.TargetCodeRate = [490490]/1024;%用于计算传输块大小的代码速率其他的simParameters.PDSCH.Modulation =“16QAM”;% ' 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 = 2;%附加DM-RS符号位置(最大范围0…3)simParameters.PDSCH.DMRS.DMRSConfigurationType = 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.FrequencyDensity = 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.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)的PDSCH速率匹配开销为6,否则为0simParameters.PDSCHExtension.NHARQProcesses = 16;%要使用的并行HARQ进程数simParameters.PDSCHExtension.EnableHARQ = true;%启用每个进程的重传,使用RV序列[0,2,3,1]LDPC解码器参数%可用算法:“信念传播”,“分层信念传播”,“归一化最小和”,“偏移最小和”simParameters.PDSCHExtension.LDPCDecodingAlgorithm =“规范化min-sum”;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% Multi-codeword传输simParameters.NRxAnts=8;%UE接收天线的数量(偶数>=numlayer)其他的simParameters.NRxAnts=2;%UE接收天线的数量(1个或偶数>=numlayer)结束%定义通用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.transmitantenarray.Size,channel.ReceiveAntennaArray.Size]=...hArrayGeometry(simParameters.NTxAnts,simParameters.NRxAnts);NTxAnts=prod(channel.transmitantenarray.Size);NRxAnts=prod(channel.ReceiveAntennaArray.Size);simParameters.NTxAnts=NTxAnts;simParameters.NRxAnts=NRxAnts;其他的频道= nrTDLChannel;%信道对象%设置通道几何图形通道。NumTransmitAntennas = simParameters.NTxAnts;通道。NumReceiveAntennas = simParameters.NRxAnts;结束为对象分配仿真通道参数和波形采样率通道。DelayProfile = simParameters.DelayProfile;通道。DelaySpread = simParameters.DelaySpread;通道。MaximumDopplerShift = simParameters.MaximumDopplerShift;通道。SampleRate = waveformInfo.SampleRate;

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

chInfo=信息(频道);maxChDelay=ceil(最大值(chInfo.PathDelays*channel.SampleRate))+chInfo.ChannelFilterDelay;

预留SS突发对应的PDSCH资源

本节说明如何为SS突发的传输保留资源。

%获取SS突发配置信息首先需要一些相关的参数赋值simParameters.SSBurst.NCellID = simParameters.Carrier.NCellID;simParameters.SSBurst.SampleRate = waveformInfo.SampleRate;ssbInfo = hSSBurstInfo (simParameters.SSBurst);%映射SS暴被占用的子载波和发送的符号%(定义在SS爆命理学)到PDSCH PRBs和符号% PDSCH BWP/载体命理学[mappedPRB, mappedSymbols] = mapNumerology (ssbInfo.OccupiedSubcarriers、ssbInfo.OccupiedSymbols ssbInfo.NRB, simParameters.Carrier.NSizeGrid, ssbInfo.SubcarrierSpacing, simParameters.Carrier.SubcarrierSpacing);%配置PDSCH保留这些资源,以便PDSCH%传输不重叠的SS爆发reservation=NRPDSCREServedConfig;reservation.SymbolSet=mappedSymbols;reservation.PRBSet=mappedPRB;reservation.Period=simParameters.SSBurst.SSBPeriodicity*(simParameters.Carrier.SubcarrierSpacing/15);%插槽的周期simParameters.PDSCH.ReservedPRB{end+1}=保留;

处理循环

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

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

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

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

  • 噪声信道建模。将波形通过CDL或TDL衰落信道。添加AWGN。有关此示例使用的SNR定义的说明,请参阅用于链路仿真的信噪比定义

  • 执行同步和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),用块CRC错误更新HARQ进程。将已解码软位的向量传递给nrDLSCHDecoder系统对象。该对象解码码字并返回用于确定系统吞吐量的块CRC错误。

%阵列存储所有信噪比点的最大吞吐量maxThroughput = 0(长度(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.MultipleHARQProcesses=true;encodeDLSCH.TargetCodeRate=simParameters.PDSCHExtension.TargetCodeRate;创建DL-SCH解码器系统对象来执行传输信道解码%使用分层信任传播进行LDPC解码,使用一半的与信念传播解码的默认值相比,%迭代decodeDLSCH=nrdlsch解码器;decodeDLSCH.MultipleHARQProcesses=true;decodeDLSCH.TargetCodeRate=simParameters.PDSCHExtension.TargetCodeRate;decodeDLSCH.LDPCDecodingAlgorithm=simParameters.PDSCHExtension.LDPCDecodingAlgorithm;decodeDLSCH.MaximumLDPCIterationCount=simParameters.PDSCHExtension.MaximumLDPCIterationCount;snrIdx=1:numel(simParameters.SNRIn)%并行计算的注释%parfor snrIdx=1:numel(simParameters.SNRIn)%n取消对并行计算的注释为了减少总的模拟时间,你可以执行这个循环%使用并行计算工具箱进行并行计算。注释掉“for”%语句并取消对“parfor”语句的注释。如果% Toolbox未安装,'parfor'默认为普通的'for'语句。因为parfor-loop迭代是并行执行的%不确定顺序,模拟信息显示为每个信噪比%点可以相互缠绕。要关闭模拟信息显示,%设置上面的'displaySimulationInformation'变量为false%重置随机数生成器,使每个SNR点%体验相同的噪声实现rng(“默认”);%获取模拟级参数结构的完整副本,以便它们不存在%使用parfor时的PCT广播变量simLocal = simParameters;waveinfoLocal = waveformInfo;%获取通道级参数的副本,以简化后续参数引用carrier=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'...simLocal.NTxAnts、simLocal.NRxAnts carrier.SubcarrierSpacing,...simLocal.DelayProfile、SNRdB simLocal.NFrames);%指定循环HARQ进程ID的固定顺序harqSequence = 0: pdschextra.NHARQProcesses-1;%初始化所有HARQ进程的状态harqEntity = harqEntity (harqSequence rvSeq pdsch.NumCodewords);重置信道,使每个信噪比点体验相同%通道实现重置(渠道);%模拟期间的插槽总数NSlots = simLocal。NFrames * carrier.SlotsPerFrame;%指向要删除的当前SS突发样本集开始的索引%传播ssbSampleIndex = 1;%获取在数据传输中使用的预编码矩阵(wtx)第一个传输块estChannelGrid = getInitialChannelEstimate(载体、simLocal.NTxAnts通道);newWtx = getPrecodingMatrix(载体,pdsch、estChannelGrid pdschextra.PRGBundleSize);%定时偏移,更新在每个插槽完美的同步和%,用于实际的同步抵消= 0;%循环整个波形长度nslot = 0: NSlots-1%更新新槽位的运营商槽位号carrier.NSlot=NSlot;%必要时生成新的SS突发如果(ssbSampleIndex==1)nSubframe=carrier.NSlot/carrier.SlotsPerSubframe;ssburst.nfframe=floor(nSubframe/10);ssburst.nhalframe=mod(nSubframe/5,2);[ssbWaveform,~,ssbInfo]=hsburst(ssburst);结束%计算槽中传输的传输块大小[pdschIndices, pdschIndicesInfo] = nrPDSCHIndices(载体,pdsch);trBlkSizes = nrTBS (pdsch.Modulation、pdsch.NumLayers元素个数(pdsch.PRBSet) pdschIndicesInfo.NREPerPRB, pdschextra.TargetCodeRate, pdschextra.XOverhead);% HARQ处理cwIdx = 1: pdsch。NumCodewords%如果当前进程和码字有新数据,则创建一个新的DL-SCH传输块如果harqEntity.NewData(cwIdx)trBlk=randi([01],trBlkSizes(cwIdx),1);setTransportBlock(encodeDLSCH,trBlk,cwIdx-1,harqEntity.HARQProcessID);%如果由于先前RV序列超时而产生新数据,则显式刷新解码器软缓冲区如果harqEntity.SequenceTimeout (cwIdx) resetSoftBuffer (decodeDLSCHLocal, cwIdx-1 harqEntity.HARQProcessID);结束结束结束%编码DL-SCH传输块codedTrBlocks = encodeDLSCH (pdsch.Modulation pdsch.NumLayers,...pdschIndicesInfo.G,harqEntity.RedundancyVersion,harqEntity.HARQProcessID);得到在前一个槽中计算的预编码矩阵(wtx)wtx = newWtx;%为插槽创建资源网格pdschGrid = nrResourceGrid(载体、simLocal.NTxAnts);% PDSCH调制和预编码pdschSymbols=nrPDSCH(载波、pdsch、编码数据块);[pdschAntSymbols、PDSCHANTDICES]=hPRGPrecode(大小(pdschGrid)、载波.NStartGrid、pdschSymbols、PDSCHNDICES、wtx);与PDSCH传输周期相关联的电网中的PDSCH映射%pdschGrid (pdschAntIndices) = pdschAntSymbols;% PDSCH DM-RS预编码和映射dmrsSymbols=nrPDSCHDMRS(载波,pdsch);dmrsIndices=nrPDSCHDMRSIndices(载波,pdsch);[dmrsAntSymbols,DMRSantidices]=hPRGPrecode(大小(pdschGrid),载波.NStartGrid,dmrsSymbols,dmrsIndices,wtx);pdschGrid(DMRSantidices)=dmrsAntSymbols;%PDSCH PT-RS预编码和映射ptrsSymbols = nrPDSCHPTRS(载体、pdsch);ptrsIndices = nrPDSCHPTRSIndices(载体、pdsch);[ptrsAntSymbols, ptrsAntIndices] = hPRGPrecode(大小(pdschGrid)、carrier.NStartGrid ptrsSymbols, ptrsIndices, mtx);pdschGrid (ptrsAntIndices) = ptrsAntSymbols;% OFDM调制txWaveform = nrOFDMModulate(载体、pdschGrid);%将SS突发波形的适当部分添加到%传输波形元=大小(txWaveform, 1);txWaveform = txWaveform + ssbWaveform(ssbSampleIndex + (0:Nt-1),:);ssbSampleIndex = mod(ssbSampleIndex + Nt,size(ssb波形,1));%通过通道模型传递数据。的末尾加0%发送波形以刷新频道内容。这些零取零%考虑信道中引入的任何延迟。这是一种混合多路径延迟和实现延迟的百分比。这个值可能%的变化取决于采样率,延迟轮廓和延迟%的传播txWaveform=[txWaveform;零(maxChDelay,大小(txWaveform,2))];% #好< AGROW >[RX波形、路径增益、采样次数]=通道(TX波形);%将AWGN添加到接收到的时域波形中根据OFDM调制中使用的IFFT尺寸对噪声功率进行归一化,%时,OFDM调制器将这种归一化应用到%传播波形。也要按照接收的数量进行规范%天线,因为信道模型将这种标准化应用于%默认情况下,接收到的波形信噪比= 10 ^ (SNRdB / 10);N0 = 1 /√(2.0 * simLocal.NRxAnts *双(waveinfoLocal.Nfft) *信噪比);噪音= N0 *复杂(randn(大小(rxWaveform)), randn(大小(rxWaveform)));rx波形= rx波形+噪声;如果(simLocal.PerfectChannelEstimator)%完美同步。使用由%通道以查找最强的多路径分量pathFilters=getPathFilters(通道);[offset,mag]=NRPerfectTimeInEstimate(路径增益,路径过滤器);其他的%实际同步。关联接收波形%与PDSCH DM-RS给出时间偏移估计't'和%相关幅度'mag'。这个函数%hSkipWeakTimingOffset用于更新接收机定时%抵消。如果'mag'的相关峰是弱的,电流%计时估计't'被忽略,之前的估计使用了% 'offset'(t, mag) = nrTimingEstimate(载体、rxWaveform dmrsIndices, dmrsSymbols);抵消= hSkipWeakTimingOffset(抵消t杂志);%如果估计的正时偏移量超过规定值,则显示警告最大信道延迟百分比如果offset > maxChDelay warning([估计的时间偏移(%d)大于最大信道延迟(%d)。...'这将导致解码失败。这可能是由低信噪比引起的...'或者没有足够的DM-RS符号来成功同步。'),抵消,maxChDelay);结束结束rxWaveform = rxWaveform(1 +抵消:最终,);%对接收到的数据进行OFDM解调,重新创建%资源网格,包括实际事件中的填充%同步导致一个不完整的槽被解调rxGrid = nrOFDMDemodulate(载体、rxWaveform);[K, L R] =大小(rxGrid);如果(L < carrier.SymbolsPerSlot) rxGrid = cat(2,rxGrid,zeros(K,carrier.SymbolsPerSlot-L,R));结束如果(simLocal.PerfectChannelEstimator)完美信道估计,使用路径增益的值%由通道提供。此通道估计值不可用%包括发射机预编码的影响estChannelGrid = nrPerfectChannelEstimate(载体,pathGains pathFilters,抵消,sampleTimes);获得完美的噪声估计(从噪声实现)noiseGrid = nrOFDMDemodulate(载波,噪声(1+偏移:结束,:));噪音= var (noiseGrid (:));%得到下一个槽的预编码矩阵newWtx = getPrecodingMatrix(载体,pdsch、estChannelGrid pdschextra.PRGBundleSize);从接收的网格中获取PDSCH资源元素%信道估计[pdschRx pdschHest, ~, pdschHestIndices] = nrExtractResources (pdschIndices, rxGrid estChannelGrid);%对信道估计应用预编码pdschHest=hPRGPrecode(大小(estChannelGrid)、carrier.NStartGrid、pdschHest、pdschhestindex、permute(wtx[2 1 3]);其他的%实际信道估计之间的接收网格和%每个传输层,使用PDSCH DM-RS为每个%层。该信道估计包括%发射机预编码[estChannelGrid,noiseEst]=nrChannelEstimate(载波、rxGrid、DMR指示、DMR符号、,“CDM长度”,pdsch.DMRS.CDM长度);从接收的网格中获取PDSCH资源元素%信道估计[pdschRx, pdschHest] = nrExtractResources (pdschIndices、rxGrid estChannelGrid);%在预编码之前从estChannelGrid中删除预编码%矩阵计算estChannelGridPorts=预解码信道估计(载波,estChannelGrid,conj(wtx));%得到下一个槽的预编码矩阵newWtx = getPrecodingMatrix(载体,pdsch、estChannelGridPorts pdschextra.PRGBundleSize);结束%均衡[pdschEq, csi] = nrEqualizeMMSE (pdschRx pdschHest,噪音);%共相位误差(CPE)补偿如果~ isempty (ptrsIndices)%初始化临时网格以存储均衡符号tempGrid = nrResourceGrid(载体、pdsch.NumLayers);%从接收的网格中提取PT-RS符号并进行估计%通道网格[ptrsRx ptrsHest, ~, ~, ptrsHestIndices ptrsLayerIndices] = nrExtractResources (ptrsIndices, rxGrid, estChannelGrid tempGrid);如果(simLocal.PerfectChannelEstimator)%对信道估计应用预编码ptrsHest = hPRGPrecode(大小(estChannelGrid),运营商。NStartGrid,ptrsHest,ptrsHestIndices,permute(wtx,[2 1 3]));结束%均衡PT-RS符号并将它们映射到tempGridptrsEq = nrEqualizeMMSE (ptrsRx ptrsHest、噪音);tempGrid (ptrsLayerIndices) = ptrsEq;%估计PT-RS位置的剩余通道%临时栅格cpe = nrChannelEstimate (tempGrid ptrsIndices ptrsSymbols);%子载波、接收天线和%层。然后,通过取这个角得到CPE%的总和Cpe = angle(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=临时网格(pdschIndices);结束%解码PDSCH物理信道[dlschLLRs, rxSymbols] = nrPDSCHDecode(载体、pdsch pdschEq,噪音);显示EVM每层,每槽和每RB如果(simLocal.DisplayDiagnostics) plotLayerEVM (NSlots、nslot pdsch,大小(pdschGrid) pdschIndices, pdschSymbols, pdschEq);结束百分比按CSI划分的llrcsi = nrLayerDemap (csi);%CSI层去映射cwIdx = 1: pdsch。NumCodewordsQm = length(dlschLLRs{cwIdx})/length(rxSymbols{cwIdx});每符号%位csi{cwIdx}=repmat(csi{cwIdx}',Qm,1);%按每个符号的每一位展开dlschLLRs{cwIdx} = dlschLLRs{cwIdx} .* csi{cwIdx}(:);%按CSI分级结束%解码DL-SCH传输信道decodeDLSCHLocal.TransportBlockLength=trBlkSizes;[decbits,blkerr]=解码的DlschLocal(dlschLLRs,pdsch.调制,pdsch.NumLayers,harqEntity.冗余版本,harqEntity.HARQProcessID);%存储值以计算吞吐量simthrough(snrIdx)=simthrough(snrIdx)+sum(~blkerr.*trBlkSizes);maxthrough(snrIdx)=maxthrough(snrIdx)+sum(trBlkSizes);%用CRC错误更新当前进程并前进到下一进程procstatus=updateAndvance(harqEntity、blkerr、trBlkSizes、pdschIndicesInfo.G);如果(simLocal.DisplaySimulationInformation)fprintf(' \ n (% 3.2 f % %) NSlot = % d % s的100 * (nslot + 1) / NSlots nslot, procstatus);结束结束%在命令窗口中动态显示结果如果(simLocal.DisplaySimulationInformation)fprintf(' \ n ');结束流(“\n%d帧的吞吐量(Mbps)=%.4f\n”simLocal.NFrames 1 e-6 * simThroughput (snrIdx) / (simLocal.NFrames * 10 e - 3));流('吞吐量(%%)for %d frame(s) = %.4f\n',simLocal.NFrames,simThroughput(snrIdx)*100/maxThroughput(snrIdx));结束
模拟传输方案1(8x2)和SCS=30kHz,CDL-C信道的信噪比为-5dB,用于2个10ms帧(2.50%),NSlot=0,HARQ Proc 0:CW0:初始传输失败(RV=0,CR=0.537116)。(5.00%)NSlot=1,HARQ程序1:CW0:初始传输失败(RV=0,CR=0.537116)。(7.50%)NSlot=2,HARQ程序2:CW0:初始传输失败(RV=0,CR=0.474736)。(10.00%)NSlot=3,HARQ Proc 3:CW0:初始传输失败(RV=0,CR=0.474736)。(12.50%)NSlot=4,HARQ Proc 4:CW0:初始传输失败(RV=0,CR=0.474736)。(15.00%)NSlot=5,HARQ程序5:CW0:初始传输失败(RV=0,CR=0.474736)。(17.50%)NSlot=6,HARQ程序6:CW0:初始传输失败(RV=0,CR=0.474736)。(20.00%)NSlot=7,HARQ程序7:CW0:初始传输失败(RV=0,CR=0.474736)。(22.50%)NSlot=8,HARQ Proc 8:CW0:初始传输失败(RV=0,CR=0.474736)。(25.00%)NSlot=9,HARQ Proc 9:CW0:初始传输失败(RV=0,CR=0.474736)。(27.50%)NSlot=10,HARQ Proc 10:CW0:初始传输失败(RV=0,CR=0.474736)。(30.00%)NSlot=11,HARQ Proc 11:CW0:初始传输失败(RV=0,CR=0.474736)。(32.50%)NSlot=12,HARQ Proc 12:CW0:初始传输失败(RV=0,CR=0.474736)。(35.00%)NSlot=13,HARQ Proc 13:CW0:初始传输失败(RV=0,CR=0.474736)。(37.50%)NSlot=14,HARQ Proc 14:CW0:初始传输失败(RV=0,CR=0.474736)。(40.00%)NSlot=15,HARQ Proc 15:CW0:初始传输失败(RV=0,CR=0.474736)。(42.50%)NSlot=16,HARQ程序0:CW0:重传#1通过(RV=2,CR=0.474736)。(45.00%)NSlot=17,HARQ程序1:CW0:重传#1通过(RV=2,CR=0.474736)。(47.50%)NSlot=18,HARQ程序2:CW0:重传#1通过(RV=2,CR=0.4736)。(50.00%)NSlot=19,HARQ程序3:CW0:重传#1通过(RV=2,CR=0.474736)。(52.50%)NSlot=20,HARQ程序4:CW0:重传#1通过(RV=2,CR=0.4736)。(55.00%)NSlot=21,HARQ程序5:CW0:重传#1通过(RV=2,CR=0.474736)。(57.50%)NSlot=22,HARQ程序6:CW0:重传#1通过(RV=2,CR=0.4736)。(60.00%)NSlot=23,HARQ程序7:CW0:重传#1通过(RV=2,CR=0.474736)。(62.50%)NSlot=24,HARQ程序8:CW0:重传#1通过(RV=2,CR=0.474736)。(65.00%)NSlot=25,HARQ程序9:CW0:重传#1通过(RV=2,CR=0.474736)。(67.50%)NSlot=26,HARQ程序10:CW0:重传#1通过(RV=2,CR=0.474736)。(70.00%)NSlot=27,HARQ程序11:CW0:重传#1通过(RV=2,CR=0.474736)。(72.50%)NSlot=28,HARQ程序12:CW0:重传#1通过(RV=2,CR=0.4736)。(75.00%)NSlot=29,HARQ程序13:CW0:重传#1通过(RV=2,CR=0.474736)。(77.50%)NSlot=30,HARQ程序14:CW0:重传#1通过(RV=2,CR=0.474736)。(80.00%)NSlot=31,HARQ程序15:CW0:重传#1通过(RV=2,CR=0.474736)。(82.50%)NSlot=32,HARQ Proc 0:CW0:初始传输失败(RV=0,CR=0.474736)。(85.00%)NSlot=33,HARQ程序1:CW0:初始传输失败(RV=0,CR=0.474736)。(87.50%)NSlot=34,HARQ程序2:CW0:初始传输失败(RV=0,CR=0.474736)。(90.00%)NSlot=35,HARQ程序3:CW0:初始传输失败(RV=0,CR=0.474736)。(92.50%)NSlot=36,HARQ程序4:CW0:初始传输失败(RV=0,CR=0.474736)。(95.00%)NSlot=37,HARQ程序5:CW0:初始传输失败(RV=0,CR=0.474736)。(97.50%)NSlot=38,HARQ程序6:CW0:初始传输失败(RV=0,CR=0.474736)。(100.00%)NSlot=39,HARQ程序7:CW0:初始传输失败(RV=0,CR=0.474736)。2帧的吞吐量(Mbps)=24.1728 2帧的吞吐量(%)=40.0000模拟传输方案1(8x2)和SCS=30kHz,CDL-C信道在0dB SNR下,2 10ms帧的吞吐量(2.50%)NSlot=0,HARQ Proc 0:CW0:通过初始传输(RV=0,CR=0.537116)。(5.00%)NSlot=1,HARQ程序1:CW0:通过初始传输(RV=0,CR=0.537116)。(7.50%)NSlot=2,HARQ程序2:CW0:通过初始传输(RV=0,CR=0.474736)。(10.00%)NSlot=3,HARQ程序3:CW0:通过初始传输(RV=0,CR=0.474736)。(12.50%)NSlot=4,HARQ程序4:CW0:通过初始传输(RV=0,CR=0.474736)。(15.00%)NSlot=5,HARQ程序5:CW0:通过初始传输(RV=0,CR=0.474736)。(17.50%)NSlot=6,HARQ程序6:CW0:通过初始传输(RV=0,CR=0.474736)。(20.00%)NSlot=7,HARQ程序7:CW0:通过初始传输(RV=0,CR=0.474736)。(22.50%)NSlot=8,HARQ程序8:CW0:通过初始传输(RV=0,CR=0.474736)。(25.00%)NSlot=9,HARQ程序9:CW0:初始传输通过(RV=0,CR=0.474736)。(27.50%)NSlot=10,HARQ程序10:CW0:通过初始传输(RV=0,CR=0.474736)。(30.00%)NSlot=11,HARQ程序11:CW0:通过初始传输(RV=0,CR=0.474736)。(32.50%)NSlot=12,HARQ Proc 12:CW0:通过初始传输(RV=0,CR=0.474736)。(35.00%)NSlot=13,HARQ Proc 13:CW0:初始传输通过(RV=0,CR=0.474736)。(37.50%)NSlot=14,HARQ Proc 14:CW0:初始传输通过(RV=0,CR=0.474736)。(40.00%)NSlot=15,HARQ程序15:CW0:通过初始传输(RV=0,CR=0.474736)。(42.50%) NSlot=16, HARQ Proc 0: CW0: Initial transmission passed (RV=0,CR=0.474736). (45.00%) NSlot=17, HARQ Proc 1: CW0: Initial transmission passed (RV=0,CR=0.474736). (47.50%) NSlot=18, HARQ Proc 2: CW0: Initial transmission passed (RV=0,CR=0.474736). (50.00%) NSlot=19, HARQ Proc 3: CW0: Initial transmission passed (RV=0,CR=0.474736). (52.50%) NSlot=20, HARQ Proc 4: CW0: Initial transmission passed (RV=0,CR=0.474736). (55.00%) NSlot=21, HARQ Proc 5: CW0: Initial transmission passed (RV=0,CR=0.474736). (57.50%) NSlot=22, HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.474736). (60.00%) NSlot=23, HARQ Proc 7: CW0: Initial transmission passed (RV=0,CR=0.474736). (62.50%) NSlot=24, HARQ Proc 8: CW0: Initial transmission passed (RV=0,CR=0.474736). (65.00%) NSlot=25, HARQ Proc 9: CW0: Initial transmission passed (RV=0,CR=0.474736). (67.50%) NSlot=26, HARQ Proc 10: CW0: Initial transmission passed (RV=0,CR=0.474736). (70.00%) NSlot=27, HARQ Proc 11: CW0: Initial transmission passed (RV=0,CR=0.474736). (72.50%) NSlot=28, HARQ Proc 12: CW0: Initial transmission passed (RV=0,CR=0.474736). (75.00%) NSlot=29, HARQ Proc 13: CW0: Initial transmission passed (RV=0,CR=0.474736). (77.50%) NSlot=30, HARQ Proc 14: CW0: Initial transmission passed (RV=0,CR=0.474736). (80.00%) NSlot=31, HARQ Proc 15: CW0: Initial transmission passed (RV=0,CR=0.474736). (82.50%) NSlot=32, HARQ Proc 0: CW0: Initial transmission passed (RV=0,CR=0.474736). (85.00%) NSlot=33, HARQ Proc 1: CW0: Initial transmission passed (RV=0,CR=0.474736). (87.50%) NSlot=34, HARQ Proc 2: CW0: Initial transmission passed (RV=0,CR=0.474736). (90.00%) NSlot=35, HARQ Proc 3: CW0: Initial transmission passed (RV=0,CR=0.474736). (92.50%) NSlot=36, HARQ Proc 4: CW0: Initial transmission passed (RV=0,CR=0.474736). (95.00%) NSlot=37, HARQ Proc 5: CW0: Initial transmission passed (RV=0,CR=0.474736). (97.50%) NSlot=38, HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.474736). (100.00%) NSlot=39, HARQ Proc 7: CW0: Initial transmission passed (RV=0,CR=0.474736). 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%) NSlot=0, HARQ Proc 0: CW0: Initial transmission passed (RV=0,CR=0.537116). (5.00%) NSlot=1, HARQ Proc 1: CW0: Initial transmission passed (RV=0,CR=0.537116). (7.50%) NSlot=2, HARQ Proc 2: CW0: Initial transmission passed (RV=0,CR=0.474736). (10.00%) NSlot=3, HARQ Proc 3: CW0: Initial transmission passed (RV=0,CR=0.474736). (12.50%) NSlot=4, HARQ Proc 4: CW0: Initial transmission passed (RV=0,CR=0.474736). (15.00%) NSlot=5, HARQ Proc 5: CW0: Initial transmission passed (RV=0,CR=0.474736). (17.50%) NSlot=6, HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.474736). (20.00%) NSlot=7, HARQ Proc 7: CW0: Initial transmission passed (RV=0,CR=0.474736). (22.50%) NSlot=8, HARQ Proc 8: CW0: Initial transmission passed (RV=0,CR=0.474736). (25.00%) NSlot=9, HARQ Proc 9: CW0: Initial transmission passed (RV=0,CR=0.474736). (27.50%) NSlot=10, HARQ Proc 10: CW0: Initial transmission passed (RV=0,CR=0.474736). (30.00%) NSlot=11, HARQ Proc 11: CW0: Initial transmission passed (RV=0,CR=0.474736). (32.50%) NSlot=12, HARQ Proc 12: CW0: Initial transmission passed (RV=0,CR=0.474736). (35.00%) NSlot=13, HARQ Proc 13: CW0: Initial transmission passed (RV=0,CR=0.474736). (37.50%) NSlot=14, HARQ Proc 14: CW0: Initial transmission passed (RV=0,CR=0.474736). (40.00%) NSlot=15, HARQ Proc 15: CW0: Initial transmission passed (RV=0,CR=0.474736). (42.50%) NSlot=16, HARQ Proc 0: CW0: Initial transmission passed (RV=0,CR=0.474736). (45.00%) NSlot=17, HARQ Proc 1: CW0: Initial transmission passed (RV=0,CR=0.474736). (47.50%) NSlot=18, HARQ Proc 2: CW0: Initial transmission passed (RV=0,CR=0.474736). (50.00%) NSlot=19, HARQ Proc 3: CW0: Initial transmission passed (RV=0,CR=0.474736). (52.50%) NSlot=20, HARQ Proc 4: CW0: Initial transmission passed (RV=0,CR=0.474736). (55.00%) NSlot=21, HARQ Proc 5: CW0: Initial transmission passed (RV=0,CR=0.474736). (57.50%) NSlot=22, HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.474736). (60.00%) NSlot=23, HARQ Proc 7: CW0: Initial transmission passed (RV=0,CR=0.474736). (62.50%) NSlot=24, HARQ Proc 8: CW0: Initial transmission passed (RV=0,CR=0.474736). (65.00%) NSlot=25, HARQ Proc 9: CW0: Initial transmission passed (RV=0,CR=0.474736). (67.50%) NSlot=26, HARQ Proc 10: CW0: Initial transmission passed (RV=0,CR=0.474736). (70.00%) NSlot=27, HARQ Proc 11: CW0: Initial transmission passed (RV=0,CR=0.474736). (72.50%) NSlot=28, HARQ Proc 12: CW0: Initial transmission passed (RV=0,CR=0.474736). (75.00%) NSlot=29, HARQ Proc 13: CW0: Initial transmission passed (RV=0,CR=0.474736). (77.50%) NSlot=30, HARQ Proc 14: CW0: Initial transmission passed (RV=0,CR=0.474736). (80.00%) NSlot=31, HARQ Proc 15: CW0: Initial transmission passed (RV=0,CR=0.474736). (82.50%) NSlot=32, HARQ Proc 0: CW0: Initial transmission passed (RV=0,CR=0.474736). (85.00%) NSlot=33, HARQ Proc 1: CW0: Initial transmission passed (RV=0,CR=0.474736). (87.50%) NSlot=34, HARQ Proc 2: CW0: Initial transmission passed (RV=0,CR=0.474736). (90.00%) NSlot=35, HARQ Proc 3: CW0: Initial transmission passed (RV=0,CR=0.474736). (92.50%) NSlot=36, HARQ Proc 4: CW0: Initial transmission passed (RV=0,CR=0.474736). (95.00%) NSlot=37, HARQ Proc 5: CW0: Initial transmission passed (RV=0,CR=0.474736). (97.50%) NSlot=38, HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.474736). (100.00%) NSlot=39, HARQ Proc 7: CW0: Initial transmission passed (RV=0,CR=0.474736). 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;simResults。maxThroughput = maxThroughput;

下图显示了模拟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到100GHz频率的信道模型研究”,《第三代合作伙伴计划》;技术规范组无线接入网。

本地函数

函数validateNumLayers (simParameters)%验证相对于天线几何体的层数numlayers = simParameters.PDSCH.NumLayers;ntxants = simParameters.NTxAnts;nrxants = simParameters.NRxAnts;antennaDescription = sprintf ('min(NTxAnts,NRxAnts)=min(%d,%d)=%d', nrxants ntxants min (ntxants nrxants));如果Numlayers > min(ntxants,nrxants) error('层的数量(%d)必须满足NumLayers <= %s'...numlayers antennaDescription);结束如果通道的最大可能等级等于,则显示警告%层数如果(numlayers == min(ntxants,nrxants)) warning([“通道的最大可能等级,由%s给出,等于NumLayers (%d)。”...“在某些信道条件下,这可能导致解码失败。”...“尝试减少层数或增加频道等级”...(使用更多的发射或接收天线)。, antennaDescription numlayers);% #好< SPWRN >结束结束函数estChannelGrid=getInitialChannelEstimate(载波、nTxAnts、propchannel)%在第一次传输前获取信道估计。这可以用来%获取第一个时隙的预编码矩阵。ofdmInfo = nrOFDMInfo(载体);chInfo = info (propchannel);maxChDelay = ceil(max(chInfo.PathDelays*propchannel.SampleRate)) + chInfo.ChannelFilterDelay;%临时波形(仅适用于尺寸)tmpWaveform = 0 ((ofdmInfo.SampleRate / 1000 / carrier.SlotsPerSubframe) + maxChDelay nTxAnts);%过滤通道[~,路径增益,采样次数]=propchannel(tmpWaveform);%完美的时间同步pathFilters = getPathFilters (propchannel);抵消= nrPerfectTimingEstimate (pathGains pathFilters);%理想信道估计estChannelGrid = nrPerfectChannelEstimate(载体,pathGains pathFilters,抵消,sampleTimes);结束函数wtx = getPrecodingMatrix(载体,pdsch、hestGrid prgbundlesize)%计算载波中所有重叠的prg的预编码矩阵%与PDSCH分配%由载波网格寻址的最大CRBmaxCRB=carrier.NStartGrid+carrier.NSizeGrid-1;% PRG大小如果nargin==4 && ~isempty(prgbundlesize) Pd_BWP = 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]);i=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 = permute(mean(重塑(estAllocGrid,[],R,P)),[2 3 1]);%计算分解[~ ~ V] =圣言(命令);wtx(:,:我)= V (:, 1: pdsch.NumLayers)。”;结束结束wtx = wtx / sqrt(pdsch.NumLayers);%按NumLayers标准化结束函数estChannelGrid = precodeChannelEstimate(载体、estChannelGrid W)%对信道估计的最后维数应用预编码矩阵W[K,L,R,P]=尺寸(网格);estChannelGrid=重塑(estChannelGrid[K*L R P]);estChannelGrid=hPRGPrecode([K*L R P],carrier.NStartGrid,estChannelGrid,整形(1:numel(estChannelGrid),[K*L R P]),W);estChannelGrid=重塑(estChannelGrid,K,L,R,[]);结束函数[mappedPRB,mappedSymbols]=mapNumerology(子载波,符号,NRB,nrbt,fs,ft)%将SSBurst命理学映射到PDSCH命理学。输出为:% - mappedPRB:载波资源网格的基于0的PRB索引(按列排列)%-mappedSymbols:载波资源网格(排成一行)时隙中基于0的OFDM符号索引%输入参数为:%-子载波:SSB资源网格的基于1的行下标(列中排列)%-符号:SSB资源网格的基于1的列下标(以N×4矩阵排列,一行中每个传输突发4个符号,N个传输突发)%SSB资源网格的大小使用ssbInfo.NRB,普通CP,跨越5个子帧% - nrbs:源(SSB) NRB% - nrbt:目标(载波)NRB%-fs:源(SSB)SCS% - ft:目标(载体)SCSmappedPRB=唯一(固定((子载波-(nrbs*6)-1)*fs/(ft*12)+nrbt/2),“稳定”);符号=符号。';符号=符号(:)。”——1;如果(英国《金融时报》< fs)%如果ft/fs < 1,减少mappedSymbols =独特(修复(符号*英尺/ fs),“稳定”);其他的%否则,按ft/fs重复mappedSymbols=重塑((0:(ft/fs-1))'+符号(:)'*ft/fs,1,[]);结束结束函数plotLayerEVM (NSlots、nslot pdsch、siz pdschIndices, pdschSymbols, pdschEq)%绘制EVM信息持续的slotEVM;持续的rbEVM持续的evmPerSlot;如果(nslot==0) slotEVM = comm.EVM;rbEVM = comm.EVM;evmPerSlot =南(NSlots pdsch.NumLayers);图;结束: evmPerSlot (nslot + 1) = slotEVM (pdschSymbols pdschEq);次要情节(2,1,1);情节(0:(NSlots-1)、evmPerSlot“啊——”);包含(“插槽号”);ylabel (“EVM(%)”);传奇(“层”+ (1: pdsch.NumLayers),“位置”“东区”);头衔(“每层每槽的EVM”);次要情节(2,1,2);(k ~ p) = ind2sub (siz pdschIndices);Rbsubs = floor((k-1) / 12);NRB = siz(1) / 12;evmPerRB =南(NRB pdsch.NumLayers);ν= 1:pdsch。NumLayersrb=unique(rbsubs)。“this=(rbsubs==rb&p==nu);evmPerRB(rb+1,nu)=rbEVM(pdschSymbols(this),pdschEq(this));结束结束情节(0:(NRB-1)、evmPerRB“x-”);包含(“资源块”);ylabel (“EVM(%)”);传奇(“层”+ (1: pdsch.NumLayers),“位置”“东区”);头衔(['EVM每层每个资源块,slot #'num2str(nslot)];现在抽;结束

另请参阅

对象

功能

相关的话题