主要内容

LTE-M上行波形生成

这个例子展示了如何创建一个上行LTE-M传输,包括物理上行共享信道(PUSCH)和相关解调参考信号(DM-RS),包括重复和跳频。与之前发布的13设备相比,Cat-M设备提供更低的成本和复杂性,通过引入重复和扩展的DRX来提高覆盖范围,以进一步节省电力。

介绍

在系统信息(SI)上广播的小区特定子帧位图表示哪些子帧能够发送LTE-M传输。LTE-M器件可选地启用PUSCH和PUCCH的重复以增强覆盖范围。网络配置一组可能的重复,其中包含CE模式a的4个值(pusch-maxnumrepetitioncemodeaTS 36.213表8-2b所载[3.],而CE模式B (pusch-maxnumrepetitioncemodeb.如TS 36.213所示表8-2C [3.]).从这个集合中,网络动态地选择实际的重复次数,并将其作为调度授权的一部分发送给UE。上行调度赠款LTE-M设备使用DCI的格式进行了MPDCCH 6-0A CE设备操作的模式在CE和6-0B设备操作模式b一个调度格兰特的结局在下行子帧n是有效的上行PUSCH传播从上行子帧n + 4。在跳频传输的情况下,授予表示第一次传输的窄带。后续分配可以在TS 36.211节5.3.4中定义的窄频带之间跳转[1].

PUSCH

对于Cat-M1 (Release 13)器件,PUSCH总是在一个窄带内传输。在Cat-M2 (Release 14)中,CE模式A的设备可以选择传输最多24个prb(如果更高的层参数)ce-pusch-maxBandwidth-config设置为5MHz,如TS 36.211第5.3.4节所示[1] / ts 36.306第4.3.4.64节[4.].te - m PUSCH在CE模式A中最多可以有32次重复(参见TS 36.213表8-2b [3.),在CE模式B下最多可重复2048次(参见TS 36.213表8-2c [3.]).对于CE模式A的BL/CE UE,当更高层参数时,使能PUSCH跳频pusch-HoppingConfigDCI格式的跳频标志6-0A表示跳频。对于CE模式B的BL/CE UE,当更高层参数时,使能PUSCH跳频pusch-HoppingConfig是集。如果PUSCH没有使能跳频,那么所有的PUSCH重复都位于相同的PRB资源上。如果为PUSCH使能跳频,则PUSCH在PUSCH内的一个子帧中传输NabsPUSCH从窄带内相同的起始PRB资源开始,使用与前一帧相同数量的连续PRB的连续上行子帧。如果资源分配或频率跳将导致可分配的prb之外的PUSCH资源分配,那么该子帧中的PUSCH传输将被丢弃。

问题=结构();%初始化结构问题。NULRB = 50;%的带宽UE.DuplexMode =.'FDD';%双工模式UE.TDDCONFIG = 1;% UL/DL配置如果TDD双工模式问题。CyclicPrefixUL ='普通的';%循环前缀长度问题。NCellID = 1;%细胞身份问题。RNTI = 1;% RNTI价值问题。NFrame = 0;%帧号UE.nsubframe = 0;%子帧数UE.ntxants = 1;%发射天线个数问题。缩短= 1;%最后一个符号可用性(SRS分配)%设置跳跃特定参数UE.HoppingOffset = 1;%一个窄带和下一个窄带之间的窄带偏移量%一个PUSCH跳向,表示为若干上行窄带UE.Nchulnb.= 2;%连续的绝对子帧数% PUCCH或PUSCH保持不变pusch =结构();pusch。CEMode =“一个”;%CE模式A或CE模式B.pusch。跳= true;%开启/关闭跳频pusch.nreppusch = 8;% PUSCH的总重复次数pusch。调制=“正交相移编码”;%符号调制pusch。房车= 0;UL-SCH处理的%冗余版本pusch。NLayers = 1;%层数pusch。TrBlkSizes = 100;%传输块大小

PUSCH分配- - - - - -PUSCH带宽通常是单一的1.4MHz窄带。每个窄带中有6个RBs,都可以在CE模式A中分配,在CE模式b中可以分配1或2个RBs。4.]).我们使用InitPRBSetinitnarrowbandindex.在窄带和传输中使用的窄带中指定PRB。如果禁用跳频,则LTE-M PDSCH将在指定的PRB中传输InitPRBSetinitnarrowbandindex.参数。如果跳频是启用的,跳频规则决定每个子帧使用的窄带。通过使用超过6个prb来推断5MHz带宽InitPRBSet范围。在这种情况下,跳跃将被禁用,而且initnarrowbandindex.忽略了。

%为所有情况指定窄带内基于1的RBs相对索引如果5MHz Cat-M2 CE模式A,这些是%绝对PRBs用于传输pusch。InitPRBSet = (2:3) ';%窄带传输(非跳频,非5mhz)pusch。InitNarrowbandIndex = 1;%在PUSCH的DB中指定电源缩放,PUSCH DM-RSpusch。PUSCHPower = 30; pusch.PUSCHDMRSPower = 100;%如果分配跨越多个窄带,则关闭跳频如果numel(pusch. initprbset) > 6 pusch. initprbset跳= false;结尾

UL-SCH编码

对于CE模式B中的BL/CE终端,配置了cell specific SRS的子帧中最后一个SC-FDMA符号中的资源元素应被计算在PUSCH映射中,但不用于PUSCH的传输。因此,如果是CE模式B,则在创建编码传输块时关闭缩短。

%识别一个帧中的所有上行子帧信息= arrayfun (@ (x) lteDuplexingInfo (setfield(问题,'nsubframe',x)),0:9);ulsfs = arrayfun(@(x)strcmpi(x.subframetype,“上行”),信息);在这个例子中,我们假设第一个绝对子帧% PUSCH传输为第一个可用上行子帧pusch。InitNSubframe =找到(ulsfs, 1) 1;%计算分配pusch.prbset = getPuschallocation(UE,PUSCH);Uetemp = UE;%为所有符号创建编码传输块如果strcmpi (pusch。CEMode,“B”) & &问题。缩短ueTemp。缩短= 0;结尾[〜,INFO] = LTEPUSCHINDICES(UETEMP,PUSCH);%定义UL-SCH消息位trData = 1 (pusch.TrBlkSizes (1), 1);%创建编码的UL-SCH位pusch.betacqi = 2.0;pusch.betari = 2.0;pusch.betaack = 2.0;codedtlock = ltuulsch(uetemp,pusch,info.g,trdata);

LTE-M PUSCH代

在这个例子中,我们产生LTE-M PUSCH和相应的DM-RS信号重复和可选跳频。pusch。NRepPUSCH控制PUSCH的重复次数。UE-specific参数pusch。跳来跳去启用跳转和单元范围参数问题。HoppingOffsetUE.Nchulnb.定义跳跃模式。在本例中,如果分配范围超过一个窄带,跳频将被禁用。对于LTE-M,每个子帧对一个block的PUSCH应用相同的置乱序列Nacc子帧,所有其他处理阶段I.符号调制,层映射,预编码和映射到资源元素对于LTE PUSCH是相同的。

扰块中的%子帧数Nacc = 1;如果strcmpi(问题。DuplexMode,'FDD') & & strcmpi (pusch。CEMode,“B”) Nacc = 4;elseifstrcmpi(问题。DuplexMode,“TDD”) & & strcmpi (pusch。CEMode,“B”) Nacc = 5;结尾%要模拟的BL/CE子帧总数(所有上行子帧均为BL/CE%子帧),该PUSCH传输没有任何子帧间隔totmtcSubframes = pusch.NRepPUSCH;%总绝对子帧模拟startSubframe = ue.NFrame * 10 + ue.NSubframe;初始绝对子帧数lastabssf = getlastabsSF (ulsfs pusch.InitNSubframe totmtcSubframes);totSubframes = lastabssf-startSubframe + 1;%为整个传输创建一个资源网格。PUSCH和%dm-rs符号将在此阵列中映射subframeSize = lteULResourceGridSize(问题);sfgrid = 0 ([subframeSize(1) subframeSize(2)* tosubframes subframeSize(3:end)]);mpuschSym = [];%初始化PUSCH符号为了sf = startsubframe +(0:totsubframes -1)%设置当前绝对子帧和帧号问题。NSubframe = mod(科幻,10);问题。NFrame =地板((sf) / 10);%如果这不是上行链路子帧,则跳过处理duplexInfo = lteduplexInfo(UE);如果〜Strcmpi(DuplexInfo.subframetype,“上行”继续结尾%计算当前子帧中使用的PRBSetpusch prbset = getPUSCHAllocation(问题);%计算当前子帧的PDSCH指数。适用于BL / CE UECE模式B的百分比,在最后一个SC-FDMA符号中的资源元素配置有cell specific SRS的子帧将被计算在% PUSCH映射,但不用于PUSCH的传输pusch。PRBSet = PRBSet;pusch mpuschIndices = ltePUSCHIndices(问题);%创建一个空的子框架网格子帧= LTEULRESOURCEGRID(UE);从码字中对PUSCH符号进行编码在重复的情况下,相同的符号在每一个重复%nreppusch子帧块。根据需要应用跳频如果~mod(sf,Nacc) || isempty(mpuschSym) ueTemp = ue;如果strcmpi (pusch。CEMode,“B”) & &问题。缩短ueTemp。缩短= 0;%为完整子帧创建符号结尾MPUSCHSYM = LTEPUSCH(UETEMP,PUSCH,CODEDTLOCK)* DB2MAG(PUSCH.PUSCHPOWER);结尾%Map SRS将PUSCH符号刺穿到子帧网格子帧(mpuschindices)= mpuschsym(1:numel(mpuschindices));%创建并映射DMRS符号。问题。跳=“关闭”;% DRS跳跃问题。SeqGroup = 0;% PUSCH序列组ue.cyclicshift = 0;%用于n1DMRS%对于LTE-M终端,应假定循环移位字段为'000'%确定TS 36.211的表5.5.2.1.1-1的N2DMRpusch.cyncyclicshift = 0;% n2DMRS的“000”循环移位pusch。OrthCover =“关闭”;%无正交覆盖序列MPUSCHDR = LTEPUSCHDRS(UE,PUSCH)* DB2MAG(PUSCH.PUSCHDMRSPOWER);MPUSCHDRSindices = LTEPUSCHDRSINDICES(UE,PUSCH);子帧(mpuschdrsindices)= mpuschdrs;%现在将当前的子帧分配到整个网格中sfgrid(:,(1:子帧(2))+ SF *子帧(2),:) =子帧;结尾

创建时域基带波形

通过OFDM调制资源网格,生成时域基带波形。得到的矩阵有四列;其中之一将包含复杂的基带时域波形样本的MPDCCH

波形= lteSCFDMAModulate(问题、sfgrid);

绘制发射网格和基带波形

绘制网格和时域基带波形。如果传输使用多个端口,则只显示第一个端口。请注意,资源网格图使用PUSCH和DM-RS的功率级别为资源元素分配颜色。

%创建一个整体资源网格的图像。因为PUSCH经历%转换预编码,我们需要分配一个单一的功率级别给所有%符号在图中形象化plotgrid = abs (sfgrid (:,: 1));%获得DM-RS位置drspos = (plotgrid = = db2mag (pusch.PUSCHDMRSPower));plotgrid (drspos) = 0;%现在设置所有PUSCH符号为一个权力级别来绘制plotgrid (plotgrid ~ = 0) = db2mag (pusch.PUSCHPower);%现在写回DRS和情节plotgrid(drspos)= db2mag(pusch.puschdmrspower);图IM =图像(Plotgrid);CMAP = Parula(64);Colormap(IM.Parent,CMAP);轴xy;标题(sprintf ('LTE-M CEMode%s Uplink RE Grid (NRepPUSCH = %d)'、pusch.CEMode pusch.NRepPUSCH))包含(OFDM符号的) ylabel (副载波的%创建图例框以指示与REs关联的通道/信号类型重命名= {“PUSCH”;“PUSCH DRS”};clevels =圆(db2mag ([pusch。PUSCHPower pusch.PUSCHDMRSPower])); N = numel(reNames); L = line(ones(N),ones(N),“线宽”8);%生成线%根据cmap设置颜色集(L, {“颜色”}, mat2cell(提出(min (1 + clevels长度城市规划机构(cmap)),:), (1, N), 3));%根据cmap设置颜色传奇(重命名{:});

本地功能

在此示例中使用以下本地功能:

  • calcnarrowbaandprbsets.-计算窄带和相关的prb

  • getPDSCHAllocation—计算PUSCH子帧分配

  • getlastabsSF-计算PUSCH的最后一个子帧号

选定的书目

  1. 3GPP TS 36.211“物理信道和调制”

  2. 3GPP TS 36.212《多路复用和信道编码》

  3. 3GPP TS 36.213“物理层程序”

  4. 3GPP TS 36.306《用户设备(UE)无线电接入能力》

  5. 3GPP TS 36.331“无线电资源控制(RRC)协议规范”

  6. O. Liberg,M. Sundberg,Y.-P。王,J.Bergman和J. Sachs,蜂窝互联网:技术,标准和表现,elsevier,2018。

  7. E. Dahlman, S. Parkvall和J Skold 4G LTE-Advanced Pro和5G之路

本地功能

%计算LTE载波带宽的宽频带、窄带和prbset函数[prbsets, nNB nWB] = calcNarrowbandPRBSets (NULRB)%窄频带和宽频带(见36.211第5.2.4节)NULNB =地板(NULRB / 6);nnb = 0 :( nulnb-1);%窄带如果NULWB = floor(NULNB/4);别的NULWB = 1;结尾nWB = 0: (NULWB-1);%宽带%窄带内的prb2 = 0:5;0 = floor(NULRB/2) - 6*(NULNB/2);prbsets = 0(6元素个数(nNB));为了nb = 1:元素个数(nNB)如果国防部(NULRB, 2) & & nNB (nb) > = (NULNB / 2) prbsets (:, nb) = 6 * (nNB (nb)) + ii0 + 2 + 1;别的prbsets (:, nb) = 6 * (nNB (nb)) + ii0 + 2;结尾结尾结尾%计算子帧中分配给PUSCH的资源块函数chs prbset = getPUSCHAllocation(问题)%如果使用5MHz模式(最多24个prb),分配相同%作为InitPRBSet如果numel(chs.InitPRBSet) > 6 prbset = chs.InitPRBSet;返回;结尾%获取窄带和相应的资源[prbsets, nNB] = calcNarrowbandPRBSets (ue.NULRB);如果max(chs. init窄带索引)> max(nNB) error()“无效的窄带(s)指定。从0开始的带宽中只有%d窄频带…%d'nNB + 1, nNB);结尾%如果禁用跳频,则分配相同%每个子帧如果~ chs。跳跃prbset = prbsets(chs.InitPRBSet,chs.InitNarrowbandIndex+1);返回结尾%按照TS 36.211第5.3.4节进行跳频窄带计算J0 =楼层((CHS.INITNSUBFRAME)/ 0.NCHULNB);%计算此子帧的窄带问题。NSubframe = ue.NFrame * 10 + ue.NSubframe;%获取绝对子帧号如果mod(floor(ue.NSubframe/ue.NChULNB-j0),2) == 0 nnBi = chs. init窄带索引;别的nnBi =国防部(chs.InitNarrowbandIndex + ue.HoppingOffset元素个数(nNB));结尾%计算此子帧的PRBSet,它们在相同的RBs上窄带内%[rbstartIndex,nbstartIndex] = find(prbsets == chs.InitPRBSet(1));[rbendIndex,nbendIndex] = find(prbsets == chs.InitPRBSet(end));如果(isempty(rbstartIndex) || isempty(rbendIndex)) || (nbstartIndex ~= nbendIndex)错误('指定的PRBSet无效,必须是单一窄带内的资源');结尾prbset = prbsets (rbstartIndex: rbstartIndex +元素个数(chs.InitPRBSet) 1, nnBi + 1);结尾%获取用于最后一次传输的绝对子帧数频道的百分比函数Lastabssf = getLastabssf(ULSFS,initnsubframe,totmtcsubframes)numulsfsinframe = sum(ulsfs);帧中的%SFS数量ulsfsinFrame =找到(ulsfs);帧中的%UL子帧(基于1)%找到第一个绝对子帧和帧initabssf =国防部(InitNSubframe 10);initabsf =地板(InitNSubframe / 10);startIdxwithinFrame = initabssf + 1;到UL sf的基于% 1的索引如果〜ULSFS(STARTIDXWithInframe)错误(['第一个上行子帧的绝对子帧号无效'...'用于PUSCH(%d)指定的。这不是上行链路子帧'】,InitNSubframe)结尾sfslastFrame =国防部((找到(ulsfsinFrame = = startIdxwithinFrame) 1) + totmtcSubframes numulsfsinFrame);最后帧中的%子帧到Tx如果sfslastframe.%找到与最后一个子帧对应的子帧号sfsnumlastframe = find(ulsfs,sfslastframe)-1;sfsnumlastframe = sfsnumlastframe(END);别的%不需要部分帧sfsnumlastFrame = 0;结尾lastssf = (initabsf + floor((((find(ulsfsinFrame==startIdxwithinFrame)-1)+totmtcSubframes)/numulsfsinFrame)) * 10 + sfsnumlastFrame;结尾