主要内容

NB-IoT NPDSCH块错误率仿真

这个例子展示了如何使用LTE工具箱™在频率选择性衰落和加性高斯白噪声(AWGN)信道下创建窄带物理下行共享信道(NPDSCH)块错误率(BLER)仿真。

介绍

LTE的3GPP第13版开始增加对窄带物联网应用的支持。版本13定义了单个N金宝appB IoT UE类别,即Cat-NB1,版本14添加了Cat-NB2,允许更大的传输块大小。本例重点介绍13版NB物联网。

该示例针对多个SNR点和传输参数生成NB-IoT-NPDSCH-BLER曲线。NPS和NSS在适当的子帧中传输,并且NPS用于实际的定时同步。NPS和NSSS子帧不用于NPDSCH传输。NRS在NPDSCH子帧中传输,并用于实际信道估计。本例中未考虑NPBCH传输间隙。

模拟配置

对于多个SNR点,模拟长度为4个DL-SCH传输块numTrBlks应用于产生有意义的吞吐量结果。信噪比可以是值数组或标量。在不同的重复值上进行模拟,以比较性能改进与重复。

numTrBlks=4;%模拟传输块数SNRdB=-32:4:0;%信噪比范围(dB)ireps=[0 5 9];%模拟的重复次数范围

设置更高层参数

在下一节中,设置以下用于配置NPDSCH的高层参数:

  • 的变量NPDSCHDataType指示NPDSCH是否承载SystemInformationBlockType1 NB(SIB1-NB),以及NPDSCH是否承载广播控制频道(BCCH)。的允许值NPDSCHDataType“SIB1NB”,“BCCHNotSIB1NB”“NotBCCH”.请注意,SIB1-NB属于BCCH。

  • NPDSCH重复次数和传输块大小(TBS)受NPDSCH是否携带SIB1-NB的影响(见3GPP TS 36.213 16.4.1.3和16.4.1.5 [2.]).NPDSCHDataType设置为“SIB1NB”说明NPDSCH携带SIB1-NB;NPDSCHDataType设置为“BCCHNotSIB1NB”“NotBCCH”表示NPDSCH未携带SIB1-NB。

  • NPDSCH重复模式和扰码序列生成受NPDSCH是否携带BCCH的影响(参见3GPP TS 36.211 10.2.3[1.]).NPDSCHDataType设置为“SIB1NB”“BCCHNotSIB1NB”表示NPDSCH携带bch;NPDSCHDataType设置为“NotBCCH”表示NPDSCH未携带bch。

NPDSCHDataType =“NotBCCH”%允许的值为'SIB1NB'、'BCCHNotSIB1NB'或'NotBCCH'
  • 的变量ISF根据3GPP TS 36.213表16.4.1.3-1为NPDSCH配置子帧的数量[2.].有效值为ISF是0…7。

当NPDSCH携带SIB1-NB时:

  • 的变量表1表16.4.1.3和表16.4.1.5.2-1所示的TBS [2.].有效值为表1是0…11。

当NPDSCH不携带SIB1-NB时:

  • 的变量IRep根据3GPP TS 36.213配置NPDSCH重复次数2.].有效值为IRep是0…15。

  • 的变量imc连同IRep表16.4.1.5.1-1 [2.].有效值为imc是0…13。

安全部队= 0;% DCI中的资源分配字段(DCI格式N1或N2)SchedulingInfoSIB1 = 0;% MasterInformationBlock-NB中调度信息字段(MIB-NB)imc = 4;%DCI中的调制和编码方案字段(DCI格式N1或N2)

eNB配置

配置起始帧和子帧号(enb.NFrameenb。NSubframe)在每个SNR点的模拟中,窄带物理小区ID细胞体,NRS天线端口的数量(enb.NBRefP其中,1个天线接口表示2000端口,2个天线接口表示2000端口和2001端口),NB-IoT的运行模式enb。OperationMode可以是以下任意值:

  • “独立的”:NB部署在LTE频谱之外的物联网载波,例如用于GSM或卫星通信的频谱

  • “Guardband”: NB-IoT运营商,部署在两个LTE运营商之间的防护带

  • “带内SamePCI”:NB部署在LTE载波的资源块中的IoT载波,具有enb.NBRefP与CRS端口数相同enb。CellRefP

  • “Inband-DifferentPCI”:NB部署在LTE载波的资源块中的IoT载波,具有enb.NBRefP不同于enb。CellRefP

enb。CellRefP在操作模式为时配置“Inband-DifferentPCI”.NPDSCH的子帧中的起始OFDM符号索引使用enb.ControlRegionSize,时的值NPDSCHDataTypeenb。OperationMode满足下列条件:

  • NPDSCHDataType要么是“BCCHNotSIB1NB”“NotBCCH”

  • enb。OperationMode要么是“带内SamePCI”“Inband-DifferentPCI”

enb.NFrame= 0;%模拟起始帧号enb.NSubframe=0;%模拟起始子帧编号细胞体= 0;% NB-IoT物理单元IDenb.NBRefP= 2;%NRS天线端口数应为1或2enb。OperationMode =“Inband-DifferentPCI”%允许的值是“Inband-SamePCI”,“Inband-DifferentPCI”,“Guardband”或“Standalone”如果strcmpi(环境运行模式,“带内SamePCI”)enb.CellRefP=enb.NBRefP;%允许的值为NBRefP或4enb.NCellID=enb.NNCellID;埃尔塞夫strcmpi(环境运行模式,“Inband-DifferentPCI”) enb。CellRefP = 4;小区RS天线接口数(必须等于NBRefP或4)enb。NCellID = 1;结束如果(strcmpi (NPDSCHDataType“BCCHNotSIB1NB”) | | strcmpi (NPDSCHDataType“NotBCCH”)) &&...(strcmpi (enb。OperationMode,“带内SamePCI”)| | strcmpi(enb.运行模式,“Inband-DifferentPCI”))enb.ControlRegionSize=3;%允许的值为0…13结束

传播信道模型配置

结构通道包含通道模型配置参数。

频道=结构;%初始化通道配置结构种子=6;%通道种子通道。NRxAnts = 1;%1接收天线频道延迟配置文件=“环保署”%延迟曲线channel.DopplerFreq=5;%多普勒频率(单位:Hz)通道。MIMOCorrelation =“低”% Multi-antenna相关性通道。NTerms = 16;%衰落模型中的振荡器channel.ModelType=“GMEDS”%瑞利衰落模型类型通道初始化阶段=“随机”%随机初始相位信道增益=“上”%正常化延迟剖面功率通道。NormalizeTxAnts =“上”传送天线规格化

信道估计配置

在本例中,参数perfectChannelEstimator控制信道估计器行为。有效的值符合事实的.当设置为符合事实的,则使用一个完美的信道估计器,否则使用一个实际的估计器,基于接收的NRS值。

%信道估计器行为perfectChannelEstimator=真;

实际的信道估计器配置有一个结构cec.5Hz多普勒的EPA延迟剖面导致信道随时间缓慢变化。因此,通过将时间窗口设置为1资源元素(RE)和频率窗口设置为25,只对导频估计执行频率平均,以确保对资源块的所有子载波进行平均。

%配置信道估计器飞行员平均数=“UserDefined”%导频符号平均的类型cec。TimeWindow = 1;%时间窗口大小(以REs为单位)cec.FreqWindow=25;%频率窗口大小(以REs为单位)cec。InterpType =“立方”%二维插值类型cec。InterpWindow =“中心”%插值窗口类型cec.InterpWinSize=3;%插值窗口大小cec。Reference =“NRS”信道估计器参考信号

NPDSCH配置

从上面定义的高层配置中获取以下NPDSCH参数:

  • 重复次数(NRep)

  • 无重复时NPDSCH使用的子帧数(NSF)

  • 传输块大小(TBS)

这些参数可以通过使用类获得hNPDSCHInfohNPDSCHInfo还提供了方法displaySubframePattern显示NPDSCH重复模式,将在下一节中显示。

注意,当NPDSCH不携带SIB1-NB时,如果配置的IRepimc值会导致TBS为空。这是未为特定值定义TBS时的情况IRepimc在3GPP TS 36.213表16.4.1.5.1-1 [2.].

repIdx=1:numel(IREP)
npdschInfo=hNPDSCHInfo;npdschInfo.NPDSCHDataType=NPDSCHDataType;npdschInfo.ISF=ISF;如果strcmpi(NPDSCHDataType,“SIB1NB”)%携带SIB1-NB的NPDSCHnpdschInfo.SchedulingInfoSIB1=SchedulingInfoSIB1;其他的% NPDSCH不携带SIB1-NBnpdschInfo.IRep=IRep(repIdx);%DCI中的重复编号字段(DCI格式N1或N2)npdschInfo.IMCS=IMCS;%DCI中的调制和编码方案字段(DCI格式N1或N2)%验证IRep和IMCS的输入如果isempty(npdschInfo.TBS)npdschInfo.TBS稳定错误(['无效[ITBS,ISF](其中ITBS=IMCS='num2str (imc)...“,ISF=”num2str(安全部队)')对,返回空TBS,检查上表或3GPP TS 36.213表16.4.1.5.1-1']);结束结束

创建结构npdsch利用所获得的重复次数(npdschInfo。NRep),则NPDSCH的子帧数(npdschInfo。NSF)从类实例npdschInfo,输入参数NPDSCHDataType以及无线网络临时标识符RNTI。注意NSF=8在下列情况下使用NPDSCHDataType“SIB1NB”

npdsch.NSF=npdschInfo.NSF;npdsch.NRep=npdschInfo.NRep;npdsch.NPDSCHDataType=NPDSCHDataType;npdsch.RNTI=1;

使用DL-SCH码率验证配置的上层参数。码率是CRC编码后的比特数与速率匹配后的比特数之比。因为当SIB1NB被设置为符合事实的,码率R可以大于或等于1,这不是有效的方案。例如,这种情况发生在ISF设置为0,表1设置为3。

[~,info]=ltenpdschindice(enb,npdsch);rmoutlen=info.G;%速率匹配后的位长度,即码字长度trblklen = npdschInfo.TBS;%传输块大小R=(trblklen+24)/rmoutlen;% DL-SCH信道编码率,24表示CRC比特数如果R >= 1错误([“DL-SCH编码率(”num2str(R)“)大于或等于配置参数的1。”]);结束

显示子帧重复模式

的变量显示模式控制NPDSCH子帧重复模式的显示。下图显示了当NPDSCH携带BCCH时的示例,NPDSCH包括npdschInfo.NSF=3不同的子帧,每种颜色表示一个子帧,该子帧表示1ms。每个子帧重复npdschInfo.NRep=4因此,总共需要12个子帧来传输NPDSCH。

当前配置的NPDSCH重复模式为%显示下面displayPattern = false;%显示NPDSCH重复模式如果displayPattern == true npdschInfo.displaySubframePattern;结束

块错误率模拟环路

示例的这一部分显示了如何执行NB IoT NPDSCH链路级模拟和绘制BLER结果。发送和接收链如下图所示。

具有所需传输块大小的随机比特流经过CRC编码、卷积编码和速率匹配以获得NPDSCH比特,这些比特根据特定子帧重复模式重复。然后应用加扰、调制、层映射和预编码来形成复杂NPDSCH符号。这些符号ls和NRS信号被映射到网格,OFDM被调制以产生时域波形。然后通过衰落信道并添加AWGN。然后同步和解调噪声波形。对恢复的NPDSCH符号进行信道估计和均衡,然后进行信道解码和解调执行解扰以恢复传输块。解扰后,重复子帧在速率恢复之前进行软组合。计算每个SNR点的传输块错误率。块错误率的评估基于以下假设,即束中的所有子帧用于在速率恢复时解码传输块捆绑在MAC层中定义(参见3GPP TS 36.321 5.3.2.1[3.])作为npdsch。NSF$\次$npdsch.NRep用于承载传输块的子帧。

%模拟起始点的绝对子帧数NSubframe=enb.NFrame*10+enb.NSubframe;%初始化BLER和吞吐量结果最大吞吐量=零(长度(SNRdB),1);SimThroughts=0(长度(SNRdB),1);bler=零(1,numel(SNRdB));%临时变量'enb_init'和'channel_init'用于创建在SNR循环中创建临时变量“enb”和“channel”'parfor'循环的独立仿真循环enb_init=enb;channel_init=channel;snrIdx=1:numel(SNRdB)%parfor snrIdx=1:numel(SNRdB)%为了能够使用并行计算来提高速度,请将注释输出%上面的'for'语句并取消下面的'parfor'语句的注释。%这需要并行计算工具箱。如果未安装%“parfor”将默认为正常的“for”语句。%根据循环变量设置随机数生成器种子%确保独立的随机流rng (snrIdx“combRecursive”);fprintf(“\n正在%gdB SNR处模拟%d个传输块\n”,numTrBlks,SNRdB(snrIdx));enb=enb_init;%初始化eNodeB配置频道= channel_init;%初始化衰落信道配置txcw = [];%初始化传输的码字numblkerors=0;%有错误的传输块数房地产= [];%初始化NPDSCH编码器状态dstate=[];%初始化NPDSCH解码器状态lastOffset = 0;%初始化整个帧定时偏移偏移量=0;初始化帧定时偏移子帧网格=lteNBResourceGrid(enb);%初始化子帧网格子帧idx=NSubframe;numRxTrBlks=0;虽然(numRxTrBlks < numTrBlks)%设置当前子帧和帧编号enb.NSubframe=mod(子帧idx,10);enb.NFrame=地板((子帧idx)/10);%生成NPS符号和索引npssSymbols = lteNPSS (enb);npssIndices = lteNPSSIndices (enb);将符号映射到子帧网格子帧栅格(npssIndices)=npssSymbols;%生成NSSS符号和索引nsssSymbols=LTENSS(enb);nsssIndices=LTENSSindices(enb);将符号映射到子帧网格subframeGrid (nsssIndices) = nsssSymbols;%确定是否有NPSS或NSSS被传播,如果是,%不要在此子帧中传输NPDSCHISDATASUBRAME=isempty(NPSSSSYMBOLS)和&isempty(nsssSymbols);创建一个新的传输块并对其进行编码%发送的码字为空。接收器设置码字%为空,表示束中的所有子帧已被删除%已接收(在第一次传输之前也是空的)如果等空(txcw)txTrBlk=randi([01],trblklen,1);txcw=lteNDLSCH(rmoutlen,txTrBlk);结束如果(ISDATA子帧)%生成子帧的NPDSCH符号和索引[txNpdschSymbols,estate]=lteNPDSCH(enb,npdsch,txcw,estate);npdschIndices=lteNPDSCHIndices(enb,npdsch);将符号映射到子帧网格subframeGrid (npdschIndices) = txNpdschSymbols;%生成NRS符号和索引nrsSymbols = lteNRS (enb);nrsIndices = lteNRSIndices (enb);将符号映射到子帧网格子帧栅格(nrsIndices)=nRSSYMBOL;结束%进行OFDM调制以产生时域波形[txWaveform, ofdmInfo] = nbOFDMModulate (enb subframeGrid);%添加25个样品填充。这是为了覆盖延迟的范围%预期来自渠道建模(以下组合)实现延迟和信道延迟扩展%)txWaveform=[txWaveform;零(25,enb.NBRefP)];% #好< AGROW >%初始化每个子帧的信道时间channel.InitTime=子帧idx/1000;%通过通道模型传递数据通道。SamplingRate = ofdmInfo.SamplingRate;[rx波形,fadingInfo] = lteFadingChannel(channel, tx波形);计算噪声增益,包括下行功率的补偿%分配信噪比=10^(SNRdB(snrIdx)/20);%将噪声功率标准化,以考虑采样率%是OFDM调制中使用的IFFT大小的函数%天线数量N0 = 1 /(√(2.0 * enb.NBRefP *双(ofdmInfo.Nfft)) *信噪比);%创建加性高斯白噪声噪声=N0*复数(randn(大小(Rx波形)),...randn(大小(rx波形));%将AWGN添加到接收的时域波形中rx波形=rx波形+噪声;%------------------------------------------------------------------%接受者%------------------------------------------------------------------%执行定时同步,提取适当的%接收波形的子帧,并执行OFDM%解调如果(perfectChannelEstimator) offset = hPerfectTimingEstimate(fadingInfo);其他的%在此示例中,子帧偏移计算依赖于%在子帧5中存在的NPS上,因此我们需要填充%它之前的子帧,以便% lteNBDLFrameOffset是子帧5的偏移量sfTsamples=ofdmInfo.SamplingRate*1e-3;如果(enb.NSubframe==5)padding=0([sft样本*5,大小(rxWaveform,2)];offset=lteNBDLFrameOffset(enb[padding;rxWaveform]);如果(offset > 25) || (offset < 0) offset = lastOffset;结束lastOffset =抵消;结束结束%同步接收到的波形rx波形= rx波形(1+偏移:结束,:);%对接收到的数据执行OFDM解调以重新创建%资源网格rxSubframe = nbOFDMDemodulate (enb rxWaveform);%信道估计如果(估计者)完美信道估计百分比estChannelGrid=nbDLPerfectChannelEstimate(enb,信道,偏移量);noiseGrid=nbOFDMDemodulate(enb,噪声(1+偏移量:结束,:);noiseEst=var(noiseGrid(:);其他的[estChannelGrid, noiseEst] = lteDLChannelEstimate(...enb、cec、RX子帧);结束如果(ISDATA子帧)%获取NPDSCH索引npdschIndices = lteNPDSCHIndices(enb, npdsch);从接收的子帧中获取PDSCH资源元素。规模的%由PDSCH功率因数Rho接收的子帧。PDSCH是%按此量缩放,而单元格引用符号用于%信道估计(用于PDSCH解码阶段)不是。[rxNpdschSymbols,npdschHest]=LTE提取资源(npdschIndices,...rxSubframe,estChannelGrid);%解码NPDSCH[rxcw dstate,符号]= lteNPDSCHDecode (...enb, npdsch, rxNpdschSymbols, npdschest, noiseEst,dstate);解码传输块时,所有的子帧在一个包%已收到如果dstate。EndOfTx [trblkout,blkerr] = lteNDLSCHDecode(trblklen,rxcw);numBlkErrors = numBlkErrors + blkerr;numRxTrBlks = numRxTrBlks + 1;%重新初始化以启用新传输块的传输txcw = [];结束结束subframeIdx = subframeIdx + 1;结束%计算块错误率bler(snrIdx)=numblkerors/numTrBlks;fprintf(' npdsch bler = %. '4 f \ n”,bler(snrIdx));%计算最大吞吐量和模拟吞吐量maxThroughput (snrIdx) = trblklen * numTrBlks;%最大可能吞吐量simThroughput (snrIdx) = trblklen * (numTrBlks-numBlkErrors);%模拟吞吐量fprintf('NPDSCH吞吐量(%%)= %。4 f % % \ n”simThroughput (snrIdx) * 100 / maxThroughput (snrIdx));结束
在-32dB信噪比下模拟4个传输块
在-32dB SNR NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%时模拟4个传输块在-28dB SNR NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%时模拟4个传输块在-24dB SNR NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在-20dB SNR下模拟4个传输块NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在-16dB SNR下模拟4个传输块NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在-12dB SNR下模拟4个传输块NPDSCH BLER=0.2500 NPDSCH吞吐量(%)=75.0000%在-8dB信噪比下模拟4个传输块NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%在-4dB信噪比下模拟4个传输块NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%在0dB信噪比下模拟4个传输块NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%
在-32dB SNR NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%时模拟4个传输块在-28dB SNR NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%时模拟4个传输块在-24dB SNR NPDSCH BLER=0.2500 NPDSCH吞吐量(%)=75.0000%在-20dB SNR下模拟4个传输块NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%在-16dB SNR下模拟4个传输块NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%在-12dB SNR下模拟4个传输块NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%在-8dB SNR下模拟4个传输块NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%在-4dB SNR下模拟4个传输块NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%在0dB SNR下模拟4个传输块NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%

图块错误率与信噪比结果

如果reidx == 1 fh = figure;网格在…上;持有在…上;xlabel(“信噪比(dB)”);伊莱贝尔(“呜呜”); legendstr={[“NRep=”num2str(npdsch.NRep)]};其他的legendstr=[legendstr[“NRep=”num2str(npdsch.NRep)];% #好< AGROW >结束数字(fh);绘图(SNRdB、bler、,“o”);

结束设置数字标题如果strcmpi(NPDSCHDataType,“SIB1NB”)npdsch.NSF=8;结束标题([' 'char(npdsch.NPDSCHDataType)“:TBS=”num2str(trblklen)...”;NSF = 'num2str(npdsch.NSF)'; 'num2str(enb_init.NBRefP)“NRS端口”]); 图例(legendstr);

下图显示了使用的模拟运行numTrBlks使用完美信道估计器时设置为1000。

附录

下面的例子使用了helper函数:

选定的参考书目

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

  2. 3GPP TS 36.213《物理层程序》

  3. 3GPP TS 36.321《介质访问控制(MAC)协议规范》

  4. 3GPP TS 36.101“用户设备(UE)无线传输和接收”

局部函数

%NB-IoT-DL-OFDM调制器作用[波形,信息]=nbOFDMModulate(enb,电网)%应用默认窗口大小根据TS 36.104表E.5.1-1a如果(~isfield(enb,“窗口”))enb.加窗=6;结束%使用NB-IoT SC-FDMA在OFDM调制上获得1/2副载波移位enb。NBULSubcarrierSpacing =“15kHz”; [波形,信息]=LTESCFDMA调制(enb,网格);结束% NB-IoT - DL OFDM解调器作用网格=nbOFDMDemodulate(enb,RX波形)%使用NB-IoT SC-FDMA在OFDM调制上获得1/2副载波移位enb。NBULSubcarrierSpacing =“15kHz”;网格=lteSCFDMADemodulate(enb,RX波形,0.55);% CP含量为0.55结束% NB-IoT DL完美信道估计器作用H=nbDLPerfectChannelEstimate(enb、信道、TimeReqOffset)%重新配置NB-IoT UL完美信道估计器,以执行DL完美%信道估计enb。NBULSubcarrierSpacing =“15kHz”;enb。NTxAnts = enb.NBRefP;enb。TotSlots = 2;H = lteULPerfectChannelEstimate(enb, channel,timefreqoffset);结束
NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在-28dB信噪比下模拟4个传输块NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在-24dB信噪比下模拟4个传输块NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在-20dB信噪比下模拟4个传输块NPDSCH吞吐量(%)=0.0000%在-16dB SNR下模拟4个传输块NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在-12dB SNR下模拟4个传输块NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在-8dB SNR下模拟4个传输块NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在-4dB SNR NPDSCH BLER=1.0000 NPDSCH吞吐量(%)=0.0000%在0dB SNR NPDSCH BLER=0.0000 NPDSCH吞吐量(%)=100.0000%下模拟4个传输块