主要内容

LTE-M上行链路波形生成

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

介绍

在系统信息(SI)上广播的特定小区子帧位图表明哪些子帧能够进行LTE-M传输。LTE-M设备可以选择性地使PUSCH和PUCCH重复以增强覆盖。该网络为CE模式a配置了一组可能的重复,包含4个值(pusch-maxNumRepetitionCEmodeA如ts36.213表8-2b所示[3.])及8个CE模式B值(pusch-maxNumRepetitionCEmodeB如ts36.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.]),最多2048个重复的CE模式B(见TS 36.2133.])。对于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传输被丢弃。

问题=结构();%初始化结构问题。NULRB = 50;%的带宽问题。DuplexMode =“FDD”%双工模式问题。TDDConfig = 1;% UL/DL配置,如果TDD双工模式问题。CyclicPrefixUL =“正常”%循环前缀长度问题。NCellID = 1;%细胞标识UE.rnti = 1;% RNTI价值问题。NFrame = 0;%帧数问题。NSubframe = 0;%子帧数问题。NTxAnts = 1;%发送天线数问题。缩短= 1;%最后一个符号可用性(SRS分配)%设置跳跃的具体参数问题。HoppingOffset = 1;一个窄带和下一个窄带之间%窄带偏移%一个PUSCH跳到,表示为上行窄带数UE.Nchulnb = 2;%所覆盖的连续绝对子帧数%PUCCH或PUSCH保持在同​​一个pusch =结构();pusch。CEMode =“一个”% CE模式A或CE模式Bpusch.hopping.= true;%启用/禁用跳频pusch。NRepPUSCH = 8;% PUSCH总重复次数pusch.modulation =.'QPSK'%符号调制pusch。房车= 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忽略了。

%为所有情况指定窄带内基于1的RBs相对索引%除了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 =找到(ulsfs, 1) 1;计算分配pusch。pusch PRBSet = getPUSCHAllocation(问题);ueTemp =问题;%为所有符号创建编码传输块如果strcmpi (pusch。CEMode,“B”) & &问题。缩短ueTemp。缩短= 0;结束[~,信息]= ltePUSCHIndices (ueTemp pusch);%定义UL-SCH消息比特TRDATA = ON(PUSCH.TRBLKSIZE(1),1);%创建编码的UL-SCH位pusch。BetaCQI = 2.0;pusch。BetaRI = 2.0;pusch。BetaACK = 2.0;codedTrBlock = lteULSCH (ueTemp pusch、info.G trData);

LTE-M PUSCH代

在这个例子中,我们产生了LTE-M PUSCH和相应的DM-RS信号重复和可选跳频。pusch。NRepPUSCH控制PUSCH重复次数。UE-specific参数pusch.hopping.启用跳跃和细胞范围的参数问题。HoppingOffset问题。NChULNB定义跳跃模式。在本例中,如果分配范围超过一个窄带,频率跳变将被禁用。对于LTE-M,每个子帧对块的PUSCH应用相同的置乱序列nacc.子帧、所有其他处理阶段,如符号调制、层映射、预编码和资源元素映射,对于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: tosubframes -1)%设置当前的绝对子帧和帧数ue.nsubframe = mod(sf,10);UE.NFRAME =楼层((SF)/ 10);%如果这不是上行子帧,跳过处理duplexInfo = lteDuplexingInfo(问题);如果~ strcmpi (duplexInfo。SubframeType,“上行”继续结束%计算当前子帧中使用的PRBSETprbset = getPuschallocation(UE,PUSCH);%计算当前子帧的PDSCH索引。提单/ CE问题%在CE模式B中,a中最后一个SC-FDMA符号中的资源元素配置有单元特定SRS的%子帧将被计算在% PUSCH映射,但不用于PUSCH的传输pusch。PRBSet = PRBSet;pusch mpuschIndices = ltePUSCHIndices(问题);%创建一个空的子帧网格子帧= lteULResourceGrid(问题);%从码字中编码PUSCH符号在重复的情况下,相同的符号在每一个中重复%一个NRepPUSCH子帧块。根据需要进行跳频如果~mod(sf,Nacc) || isempty(mpuschSym) ueTemp = ue;如果strcmpi (pusch。CEMode,“B”) & &问题。缩短ueTemp。缩短= 0;%为完整的子帧创建符号结束mpuschSym = ltePUSCH (ueTemp pusch codedTrBlock) * db2mag (pusch.PUSCHPower);结束%将SRS戳穿的PUSCH符号映射到子帧网格子帧(mpuschIndices) = mpuschSym(1:元素个数(mpuschIndices));%创建并映射DMRS符号。问题。跳=“关闭”% DRS跳跃问题。SeqGroup = 0;% PUSCH序列组问题。CyclicShift = 0;%用于n1DMRSLTE-M UE的%,应当假设循环移位字段何时%确定n2DMRS从表5.5.2.1.1 TS 36.211pusch。DynCyclicShift = 0;% n2DMRS循环移位'000'pusch.torthcover =“关闭”%无正交覆盖序列pusch mpuschDrs = ltePUSCHDRS(问题)* db2mag (pusch.PUSCHDMRSPower);pusch mpuschDrsIndices = ltePUSCHDRSIndices(问题);子帧(mpuschDrsIndices) = mpuschDrs;%现在将当前的子帧分配到整个网格中sfgrid (:, (1: subframeSize(2)) +科幻* subframeSize(2):) =子帧;结束

创建时域基带波形

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

WaveForm = LTESCFDMAMODULUTS(UE,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 = image(plotgrid);提出= parula (64);colormap (im.Parent提出);轴xy;标题(sprintf ('LTE-M CEMode%s Uplink RE Grid (NRepPUSCH = %d)',pusch.ceode,pusch.nreppusch))xlabel(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(cmap(min(min(1 + clevels,length(cmap)),:),一个(1,n),3));%根据cmap设置颜色传奇(重命名{:});

本地函数

本例中使用了以下本地函数:

  • calcNarrowbandPRBSets-计算窄带和相关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。Wang, J. Bergman and J. Sachs, Cellular Internet of Things: Technologies, Standards and Performance, Elsevier, 2018。

  7. E. Dahlman,S. Parkvall和J Skold 4G LTE-Advanced Pro和The To Lof to 5G

本地函数

%计算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);%宽带% prb窄带2 = 0:5;i0 = floor(NULRB/2) - 6*(NULNB/2);prbsets = 0(6元素个数(nNB));nb = 1:numel(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窄bandindex) > max(nNB) error('指定的窄带无效。从0 ...%d'的带宽中只有%d窄带,NNB + 1,NNB);结束%如果跳频被禁用,分配是相同的%每个子帧如果~ chs。跳跃prbset = prbset (chs.InitPRBSet,chs.InitNarrowbandIndex+1);返回结束%跳窄带计算根据TS 36.211第5.3节j₀地板= ((chs.InitNSubframe) / ue.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,它们位于同一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(ulsfsinframe == startidxwithInframe)-1)+ totmtcsubframes,numulesfsinframe);%子帧到最后一帧的tx如果sfslastFrame%找到与上次子帧相对应的子帧号sfsnumlastFrame =找到(ulsfs sfslastFrame) 1;sfsnumlastFrame = sfsnumlastFrame(结束);其他的%不需要部分帧sfsnumlastFrame = 0;结束lastabssf = (initabsf + floor(((find(ulsfsinFrame==startIdxwithinFrame)-1)+totmtcSubframes)/numulsfsinFrame)) * 10 + sfsnumlastFrame;结束