主要内容

LTE-M上行链路波形生成

该示例示出了如何创建由物理上行链路共享信道(PUSCH)和相关的解调参考信号(DM-RS)组成的上行链路LTE-M传输,包括重复和跳频。与预先发布的13设备相比,CAT-M器件可提供更低的成本和复杂性,通过引入重复和扩展DRX来提供更高的成本和复杂性,增强了覆盖率,以进行进一步的省电。

介绍

在系统信息(SI)上广播的小区特定子帧位图表示哪些子帧能够发送LTE-M传输。LTE-M器件可选地启用PUSCH和PUCCH的重复以增强覆盖范围。网络配置一组可能的重复,其中包含CE模式a的4个值(pusch-maxnumrepetitioncemodea如ts36.213表8-2b所示[3.])和CE模式B的8个值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(版本13)设备,始终以单个窄带传输PUSCH。在CAT-M2(版本14)中,如果更高的层参数,CE模式A中的设备可以可选地传输到多达24个PRBCE-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-HoppingConfig设置,DCI格式6-0A中的跳频标志表示跳频。对于CE模式B中的BL / CE UE,在更高层参数时启用PUSCH跳频pusch-HoppingConfig被设置。如果对PUSCH未启用跳频,则所有PUSCH重复都位于相同的PRB资源中。如果为PUSCH启用跳频,则PUSCH在子帧中传输NabsPUSCH连续上行链路子帧使用与在窄带内的相同启动PRB资源中的先前子帧中的相同数量的连续PRB。如果资源分配或跳频将导致分配PRB外部的PUSCH资源分配,则该子帧中的PUSCH传输被丢弃。

问题=结构();%初始化结构UE.NULRB = 50;%的带宽UE.DuplexMode ='FDD'%双工模式UE.TDDCONFIG = 1;如果TDD双工模式,则%UL / DL配置UE.CyclicPrefixul ='普通的'%循环前缀长度问题。NCellID = 1;%细胞标识UE.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.hopping.= true;%启用/禁用跳频pusch.nreppusch = 8;%PUSCH重复总数pusch.modulation ='QPSK'%符号调制pusch.rv = 0;UL-SCH处理的%冗余版本pusch.nlayers = 1;%的层数pusch.trblksizes = 100;%运输块大小

PUSCH分配 -PUSCH带宽通常是单个1.4MHz窄带。每个窄带中有6个RB,可以在CE模式B中的CE模式A和1或2 RB中分配。在CAT-M2 CE模式中,可以在CAT-M2 CE模式下进行5MHz的扩展BW(参见TS 36.306第4.3.4.64节[4.])。我们使用initprbset.initnarrowbandindex.在窄带和传输中使用的窄带中指定PRB。如果禁用跳频,则LTE-M PDSCH将在指定的PRB中传输initprbset.initnarrowbandindex.参数。如果使能跳频,跳频规则决定每一子帧使用的窄带。5MHz带宽是通过使用超过6个prb在initprbset.范围。在这种情况下,跳跃将被禁用,而且initnarrowbandindex.忽略了。

所有情况下,%在窄带内指定基于RB的基于RB的相对指标%除了5MHz Cat-M2 CE模式A,如果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 ue,配置了特定SRS的子帧中最后一个SC-FDMA符号中的资源元素将被计数到PUSCH映射中,但不用于PUSCH的传输。因此,如果CE模式为B,在创建编码传输块时关闭缩短。

%识别帧中的所有上行链路子帧信息= arrayfun (@ (x) lteDuplexingInfo (setfield(问题,'nsubframe',x)),0:9);ulsfs = arrayfun(@(x)strcmpi(x.subframetype,“上行”),信息);%在这个例子中,我们假设第一个绝对子帧发送%PUSCH是第一个可用的上行链路子帧pusch.initnsubframe =查找(ULSF,1)-1;%计算分配pusch.prbset = getPuschallocation(UE,PUSCH);Uetemp = UE;%为所有符号创建编码传输块如果Strcmpi(pusch.code,“B”) & &问题。缩短ueTemp。缩短= 0;结尾[〜,INFO] = LTEPUSCHINDICES(UETEMP,PUSCH);%定义UL-SCH消息比特TRDATA = ONE(PUSCH.TLBLKSIZE(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.hopping.启用跳跃和细胞范围的参数问题。HoppingOffsetUE.Nchulnb.定义跳跃模式。在本例中,如果分配范围超过一个窄带,频率跳变将被禁用。对于LTE-M,每个子帧对块的PUSCH应用相同的置乱序列NACC.子帧,所有其他处理阶段I.符号调制,层映射,预编码和映射到资源元素对于LTE PUSCH是相同的。

扰块中的%子帧数Nacc = 1;如果strcmpi(ue.duplexmode,'FDD')&& strcmpi(pusch.code,“B”nacc = 4;elseifstrcmpi(ue.duplexmode,'TDD')&& strcmpi(pusch.code,“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;%为整个传输创建资源网格。脓液和%dm-rs符号将在此阵列中映射子帧= lteulresourcegridsize(UE);sfgrid = zeros([子帧大小(1)子帧(2)* totsubframes子帧(3:结束)]);mpuschsym = [];%初始化PUSCH符号为了sf = startsubframe +(0:totsubframes -1)%设置当前绝对子帧和帧号ue.nsubframe = mod(sf,10);UE.NFRAME =地板((SF)/ 10);%如果这不是上行子帧,跳过处理duplexInfo = lteduplexInfo(UE);如果〜Strcmpi(DuplexInfo.subframetype,“上行”继续结尾%计算当前子帧中使用的PRBSETprbset = getPuschallocation(UE,PUSCH);%计算当前子帧的PDSCH指数。适用于BL / CE UECE模式B的百分比,在最后一个SC-FDMA符号中的资源元素配置有单元特定SRS的%子帧将被计算在%PUSCH映射,但不用于传输PUSCHpusch。PRBSet = PRBSet;pusch mpuschIndices = ltePUSCHIndices(问题);%创建一个空的子帧网格子帧= LTEULRESOURCEGRID(UE);%编码码字的PUSCH符号在重复的情况下,相同的符号在每一个中重复%nreppusch子帧块。根据需要应用跳频如果~mod(sf,Nacc) || isempty(mpuschSym) ueTemp = ue;如果Strcmpi(pusch.code,“B”) & &问题。缩短ueTemp。缩短= 0;%为完整子帧创建符号结尾MPUSCHSYM = LTEPUSCH(UETEMP,PUSCH,CODEDTLOCK)* DB2MAG(PUSCH.PUSCHPOWER);结尾%Map SRS将PUSCH符号刺穿到子帧网格子帧(mpuschindices)= mpuschsym(1:numel(mpuschindices));%创建并映射DMRS符号。ue.hpping =.“关闭”%Drs跳跃UE.Seqgroup = 0;% PUSCH序列组ue.cyclicshift = 0;%用于n1DMRSLTE-M UE的%,应当在何时假设“000”的循环移位字段%确定TS 36.211的表5.5.2.1.1-1的N2DMRpusch.cyncyclicshift = 0;% n2DMRS循环移位'000'pusch.torthcover =“关闭”%无正交覆盖序列MPUSCHDR = LTEPUSCHDRS(UE,PUSCH)* DB2MAG(PUSCH.PUSCHDMRSPOWER);MPUSCHDRSindices = LTEPUSCHDRSINDICES(UE,PUSCH);子帧(mpuschdrsindices)= mpuschdrs;%现在将当前的子帧分配到整个网格中sfgrid(:,(1:子帧(2))+ SF *子帧(2),:) =子帧;结尾

创建时域基带波形

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

波形= LTESCFDMAMOMODULUTS(UE,SFGRID);

绘制传输网格和基带波形

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

%创建整个资源网格的图像。自脓血管以来%变换预编码,我们需要为全部分配单个功率电平%符号以在绘图中可视化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.code,pusch.nreppusch))xlabel('OFDM符号')ylabel('子载波'%创建图例框以指示与REs关联的通道/信号类型重命名= {'pusch''pusch drs'};CLEVELS =圆形(DB2MAG([PUSCH.PUSCHPOWER PUSCH.PUSCHDMRSPOWER]));n = numel(重命名);l =行(那些(n),一个(n),“线宽”,8);%生成线%根据CMAP设置颜色set(l,{'颜色'},mat2cell(cmap(min(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和The Dug Goad

本地功能

%计算LTE载波带宽的宽带,窄带和PRBSETS功能[prbsets,nnb,nwb] = calcnarrowbandprbsets(nulrb)%窄带和宽带(见36.211第5.2.4节)NULNB =地板(NULRB / 6);nnb = 0 :( nulnb-1);%窄带如果NULNB> = 4 NULWB =地板(NULNB / 4);别的NULWB = 1;结尾nwb = 0 :( nulwb-1);%宽带窄带中的%PRBII = 0:5;II0 =地板(NULRB / 2) -  6 *(NULNB / 2);prbsets = zeros(6,numel(nnb));为了NB = 1:numel(nnb)如果mod(nulrb,2)&& nnb(nb)> =(nulnb / 2)prbsets(:,nb)= 6 *(nnb(nb))+ II0 + II + 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.initnarrowBandIndex)> Max(NNB)错误('指定的窄带无效。带宽中只有0 ...%d'的窄带,NNB + 1,NNB);结尾%如果跳频被禁用,分配是相同的%每个子帧如果~Chs.hopping 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(楼层(UE.nsubframe / ue.nchulnb-J0),2)== 0 nnbi = chs.initnarrowBandIndex;别的nnbi = mod(chs.initnarrowbandindex + Ue.hoppingOffset,numel(nnb));结尾%计算此子帧的PRBSET,它们位于同一RB上窄带内%[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 = mod(ini​​tnsubframe,10);initabsf =楼层(initnsubframe / 10);startidxwithinframe = initabssf + 1;基于% 1的索引到UL sf如果〜ULSFS(STARTIDXWithInframe)错误([“第一个上行链路子帧的绝对子帧号无效”......'用于PUSCH(%d)指定的。这不是上行链路子帧'】,InitNSubframe)结尾sfslastframe = mod((find(find(ulsfsinframe == startidxwithinframe)-1)+ totmtcsubframes,numulesfsinframe);最后帧中的%子帧到Tx如果sfslastframe.%找到与上次子帧相对应的子帧号码sfsnumlastframe = find(ulsfs,sfslastframe)-1;sfsnumlastframe = sfsnumlastframe(END);别的%不需要部分帧sfsnumlastframe = 0;结尾lastabssf = (initabsf + floor(((find(ulsfsinFrame==startIdxwithinFrame)-1)+totmtcSubframes)/numulsfsinFrame)) * 10 + sfsnumlastFrame;结尾