主要内容

LTE-M上行波形生成

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

简介

在系统信息(SI)上广播的单元特定子帧位图表明哪些子帧能够进行LTE-M传输。LTE-M设备可以选择启用PUSCH和PUCCH的重复,以增强覆盖范围。网络为CE模式a配置一组可能的重复,包含4个值(pusch-maxNumRepetitionCEmodeA表8-2b [3.])和CE模式B的8个值(pusch-maxNumRepetitionCEmodeB表8-2c [3.])。从这个集合中,网络动态地选择实际的重复,并将其作为调度授权的一部分发送给UE。对LTE-M设备的上行调度授权在MPDCCH上进行,对于CE模式A的设备使用DCI格式6-0A,对于CE模式b的设备使用DCI格式6-0B。结束于下行子帧n的调度授权对开始于上行子帧n+4的上行PUSCH传输有效。在跳频传输的情况下,授予用于第一次传输的窄带。后续分配可在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].LTE-M PUSCH在CE模式A中最多可以有32个重复(参见TS 36.213)。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将在接口的子帧中传输NabsPUSCH在窄带内使用与上一子帧中相同数量的连续PRB的连续上行子帧从同一起始PRB资源开始。如果资源分配或跳频将导致在可分配prb之外的PUSCH资源分配,则该子帧中的PUSCH传输将被丢弃。

Ue = struct();初始化结构问题。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 = struct();pusch。CEMode =“一个”% CE模式A或CE模式Bpusch。跳跃=正确;%开启/关闭跳频pusch。NRepPUSCH = 8;% PUSCH的总重复次数pusch。调制=“正交相移编码”符号调制pusch。Rv = 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,则这些是%用于传输的绝对PRBspusch。InitPRBSet = (2:3)';%窄带传输(非跳频,非5mhz)pusch。InitNarrowbandIndex = 1;为PUSCH, PUSCH DM-RS指定以dB为单位的功率缩放pusch。PUSCHPower = 30; pusch.PUSCHDMRSPower = 100;%如果分配跨越多个窄带,关闭跳频如果nummel (pusch. initprbset) > 6 pusch. initprbset跳线= false;结束

UL-SCH编码

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

标识一帧中所有上行子帧lteDuplexingInfo(setfield(ue,)“NSubframe”, x)), 0:9);Ulsfs = arrayfun(@(x)strcmpi(x.)SubframeType,“上行”),信息);在这个例子中,我们假设其中的第一个绝对子帧传输的% PUSCH是第一个可用的上行链路子帧pusch。InitNSubframe = find(ulsfs,1)-1;计算分配pusch。PRBSet = getPUSCHAllocation(ue,pusch);ueTemp = ue;为所有符号创建编码传输块如果strcmpi (pusch。CEMode,“B”) & ue。缩短ueTemp。缩短= 0;结束[~,info] = ltePUSCHIndices(ueTemp,pusch);定义UL-SCH消息位trData = ones(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特定的参数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% subframes)并且PUSCH在没有任何子帧间隙的情况下被传输totmtcSubframes = pusch.NRepPUSCH;要模拟的绝对子帧总数startSubframe = ue.NFrame*10+ue.NSubframe;初始绝对子帧号lastabssf = getlastabsSF(ulsfs,pusch.InitNSubframe,totmtcSubframes);tosubframes = lastabssf-startSubframe+1;为整个传输创建一个资源网格。PUSCH和% DM-RS符号将被映射到这个数组中subframeSize = lteULResourceGridSize(ue);sfgrid = 0 ([subframeSize(1) subframeSize(2)*totSubframes subframeSize(3:end)]);mpuschSym = [];初始化PUSCH符号sf = startSubframe + (0:totSubframes -1)设置当前绝对子帧和帧号问题。NSubframe = mod(sf,10);问题。NFrame = floor((sf)/10);如果不是上行链路子帧,跳过处理duplexInfo = lteDuplexingInfo(ue);如果~ strcmpi (duplexInfo。SubframeType,“上行”继续结束计算当前子帧使用的PRBSetprbset = getPUSCHAllocation(ue,pusch);计算当前子帧的PDSCH指数。提单/证书在CE模式B中,资源元素位于a中的最后一个SC-FDMA符号中%配置了单元特定SRS的子帧将在% PUSCH映射,但不用于传输PUSCHpusch。PRBSet = PRBSet;mpuschIndices = ltePUSCHIndices(ue,pusch);创建一个空的子帧网格subframe = lteULResourceGrid(ue);从码字中编码PUSCH符号在重复的情况下,相同的符号重复出现在每一个。%一个NRepPUSCH子帧块。根据需要进行跳频如果~mod(sf,Nacc) || isempty(mpuschSym) ueTemp = ue;如果strcmpi (pusch。CEMode,“B”) & ue。缩短ueTemp。缩短= 0;为整个子帧创建符号结束mpuschSym = ltePUSCH(ueTemp,pusch,codedTrBlock)*db2mag(pusch. puschpower);结束将SRS刺穿的PUSCH符号映射到子帧网格subframe(mpuschIndices) = mpuschSym(1: nummel (mpuschIndices));创建并映射DMRS符号。问题。跳=“关闭”DRS跳变百分比问题。SeqGroup = 0;PUSCH序列组问题。CyclicShift = 0;%用于n1DMRS对于LTE-M终端,应假设循环位移场为“000”时从TS 36.211的表5.5.2.1.1-1确定n2DMRSpusch。DynCyclicShift = 0;% n2DMRS的“000”循环移位pusch。OrthCover =“关闭”%无正交覆盖序列mpuschDrs = ltePUSCHDRS(ue,pusch)*db2mag(pusch. puschdmrpower);mpuschDrsIndices = ltePUSCHDRSIndices(ue,pusch);subframe(mpuschDrsIndices) = mpuschDrs;现在将当前子帧分配到整个网格中sfgrid(:,(1:subframeSize(2))+sf*subframeSize(2),:) = subframe;结束

创建时域基带波形

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

波形= lteSCFDMAModulate(ue,sfgrid);

绘制传输网格和基带波形

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

%创建一个整体资源网格的图像。自PUSCH经历%转换预编码,我们需要分配一个单一的功率级别给所有%符号在图中可视化Plotgrid = abs(sfgrid(:,:,1));获取DM-RS位置drspos = (plotgrid==db2mag(pusch. puschdmrpower));Plotgrid (drspos) = 0;现在将所有PUSCH符号设置为一个功率级来绘图plotgrid(plotgrid~=0) = db2mag(pusch.PUSCHPower);现在写回DRS并绘制plotgrid(drspos) = db2mag(pusch. puschdmrpower);图im = image(plotgrid);Cmap = parula(64);colormap (im.Parent提出);轴xy;标题(sprintf ('LTE-M CEMode%s上行RE网格(NRepPUSCH = %d)'、pusch.CEMode pusch.NRepPUSCH))包含(OFDM符号的) ylabel (副载波的创建图例框以指示与REs相关的通道/信号类型重命名= {“PUSCH”“PUSCH DRS”};Clevels = round(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和J. Sachs,蜂窝物联网:技术、标准和性能,爱思唯尔,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 = floor(NULRB/6);nNB = 0:(NULNB-1);%窄带如果NULWB = floor(NULNB/4);其他的Nulwb = 1;结束nWB = 0:(NULWB-1);%宽带%的PRBs在窄带Ii = 0:5;ii0 = 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+ii;结束结束结束计算子帧中分配给PUSCH的资源块函数prbset = getPUSCHAllocation(ue,chs)%如果5MHz模式(最多可使用24个prb),分配相同%作为InitPRBSet如果nummel (chs.InitPRBSet) > 6 prbset = chs.InitPRBSet;返回结束获取窄带和相应的资源[prbsets,nNB] = calcNarrowbandPRBSets(ue.NULRB);如果max(chs.InitNarrowbandIndex) >错误(nNB)'指定的窄带无效。从0到%d'的带宽中只有%d个窄带。, nNB+1, nNB);结束%如果禁用跳频,则分配相同%每个子帧如果~ chs。跳跃prbset = prbsets(chs.InitPRBSet,chs.InitNarrowbandIndex+1);返回结束根据TS 36.211节5.3.4计算%跳频窄带j0 = floor((chs.InitNSubframe)/ue.NChULNB);计算这个子帧的窄带问题。NSubframe = ue.NFrame*10+ue.NSubframe;获取绝对子帧号如果mod(floor(ue.NSubframe/ue.NChULNB-j0),2) == 0 nnBi = chs.InitNarrowbandIndex;其他的nnBi = mod(chs.InitNarrowbandIndex+ue.HoppingOffset, nummel (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+ nummel (chs.InitPRBSet)-1,nnBi+1);结束获取用于最后一次传输的绝对子帧号信道百分比函数lastabssf = getlastabsSF(ulsfs,InitNSubframe,totmtcSubframes) numulsfsinFrame = sum(ulsfs);帧中活动的sfs数目ulsfsinFrame = find(ulsfs);帧中的% UL子帧(基于1)找到第一个绝对子帧和帧initabssf = mod(InitNSubframe,10);initabsf = floor(InitNSubframe/10);startIdxwithinFrame = initabssf+1;基于% 1的UL sf的索引如果~ ulsfs (startIdxwithinFrame)错误('第一个上行链路子帧的绝对子帧号无效'...’用于指定的PUSCH (%d)。这不是上行链路子帧。】,InitNSubframe)结束sfslastFrame = mod((find(ulsfsinFrame==startIdxwithinFrame)-1)+totmtcSubframes,numulsfsinFrame);%子帧到tx在最后一帧如果sfslastFrame找到与要传输的最后一个子帧对应的子帧号sfsnumlastFrame = find(ulsfs,sfslastFrame)-1;sfsnumlastFrame = sfsnumlastFrame(end);其他的%不需要部分帧sfsnumlastFrame = 0;结束lastabssf = (initabsf + floor((find(ulsfsinFrame==startIdxwithinFrame)-1)+totmtcSubframes)/numulsfsinFrame))) * 10 + sfsnumlastFrame;结束