主要内容

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 (Release 13)器件,PUSCH总是在单个窄带内传输。在Cat-M2(第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.]),最多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;%细胞身份问题。RNTI = 1;% RNTI价值问题。NFrame = 0;%帧数问题。NSubframe = 0;%子帧数问题。NTxAnts = 1;%发送天线数问题。缩短= 1;%最后一个符号可用性(SRS分配)%设置跳跃的具体参数问题。HoppingOffset = 1;一个窄带与下一个窄带之间的偏移量%一个PUSCH跳到,表示为上行窄带数问题。NChULNB = 2;%所覆盖的连续绝对子帧数% PUCCH或PUSCH保持不变pusch =结构();pusch。CEMode =“一个”% CE模式A或CE模式Bpusch。跳= 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。在Cat-M2 CE模式A配置中可能有5MHz的扩展BW(见TS 36.306章节4.3.4.64 [4])。我们使用InitPRBSetInitNarrowbandIndex指定窄带内的prb和传输中使用的窄带。如果禁用跳频,则LTE-M PDSCH将在指定的prb中传输InitPRBSetInitNarrowbandIndex参数。如果使能跳频,跳频规则决定每一子帧使用的窄带。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 = 1 (pusch.TrBlkSizes (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。跳来跳去支持跳变和全单元参数问题。HoppingOffset问题。NChULNB定义跳跃模式。在本例中,如果分配范围超过一个窄带,频率跳变将被禁用。对于LTE-M,每个子帧对块的PUSCH应用相同的置乱序列Nacc子帧、所有其他处理阶段,如符号调制、层映射、预编码和资源元素映射,对于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 = zeros([subframeSize(1) subframeSize(2)* tosubframes subframeSize(3:end)]); / /结束mpuschSym = [];%初始化PUSCH符号sf = startSubframe + (0: tosubframes -1)%设置当前的绝对子帧和帧数问题。NSubframe = mod(科幻,10);问题。NFrame =地板((sf) / 10);%如果这不是上行子帧,跳过处理duplexInfo = lteDuplexingInfo(问题);如果~ strcmpi (duplexInfo。SubframeType,“上行”继续结束%计算当前子帧中使用的PRBSetpusch prbset = getPUSCHAllocation(问题);%计算当前子帧的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;%用于n1DMRS%对于LTE-M终端,在下列情况下应假定循环移位字段为'000'%确定n2DMRS从表5.5.2.1.1 TS 36.211pusch。DynCyclicShift = 0;% n2DMRS循环移位'000'pusch。OrthCover =“关闭”%无正交覆盖序列pusch mpuschDrs = ltePUSCHDRS(问题)* db2mag (pusch.PUSCHDMRSPower);pusch mpuschDrsIndices = ltePUSCHDRSIndices(问题);子帧(mpuschDrsIndices) = mpuschDrs;%现在将当前的子帧分配到整个网格中sfgrid (:, (1: subframeSize(2)) +科幻* subframeSize(2):) =子帧;结束

创建时域基带波形

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

波形= lteSCFDMAModulate(问题、sfgrid);

绘制传输网格和基带波形

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

创建一个整体资源网格的映像。自从PUSCH开始%变换预编码,我们需要给所有人分配一个功率等级%符号在情节中形象化plotgrid = abs (sfgrid (:,: 1));%获取DM-RS位置drspos = (plotgrid = = db2mag (pusch.PUSCHDMRSPower));plotgrid (drspos) = 0;%现在将所有push符号设置为一个能量等级来绘图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.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设置颜色传奇(重命名{:});

本地函数

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

  • 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和5G之路

本地函数

计算LTE载波带宽的宽带,窄带和prbset函数[prbsets, nNB nWB] = calcNarrowbandPRBSets (NULRB)窄带和宽带(见36.211章节5.2.4)NULNB =地板(NULRB / 6);nNB = 0: (NULNB-1);%窄带如果NULNB >= 4 NULWB = floor(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:元素个数(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(“无效的窄带(s)指定。从0…%d'的带宽中只有%d窄带。nNB + 1, nNB);结束%如果跳频被禁用,分配是相同的%每个子帧如果~ chs。跳跃prbset = prbset (chs.InitPRBSet,chs.InitNarrowbandIndex+1);返回结束%跳频窄带计算根据TS 36.211节5.3.4j₀地板= ((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,它们在相同的RBs上%在窄带内[rbstartIndex,nbstartIndex] = find(prbsets == chs.InitPRBSet(1));[rbendIndex,nbendIndex] = find(prbsets == chs.InitPRBSet(end));如果(isempty(rbstartIndex) || isempty(rbendIndex)) || (nbstartIndex ~= nbendIndex) error('指定的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;基于% 1的索引到UL sf如果~ ulsfs (startIdxwithinFrame)错误('第一个上行子帧的绝对子帧数无效'...'用于指定的PUSCH (%d)。这不是上行子帧'】,InitNSubframe)结束sfslastFrame =国防部((找到(ulsfsinFrame = = startIdxwithinFrame) 1) + totmtcSubframes numulsfsinFrame);%子帧到最后一帧的tx如果sfslastFrame%找到与要传输的最后一帧相对应的子帧号sfsnumlastFrame =找到(ulsfs sfslastFrame) 1;sfsnumlastFrame = sfsnumlastFrame(结束);其他的%不需要部分帧sfsnumlastFrame = 0;结束lastabssf = (initabsf + floor(((find(ulsfsinFrame==startIdxwithinFrame)-1)+totmtcSubframes)/numulsfsinFrame)) * 10 + sfsnumlastFrame;结束