主要内容

NB-IoT NPDSCH块错误率仿真

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

介绍

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

该示例为一些信噪比点和传输参数生成了窄带物联网NPDSCH BLER曲线。NPSS和NSSS在适当的子帧中传输,NPSS用于实际的定时同步。NPSS和NSSS子帧不用于NPDSCH传输。NRS以NPDSCH子帧传输,用于实际的信道估计。本例中没有考虑NPBCH传输间隙。

模拟配置

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

numTrBlks = 4;%模拟传输块数SNRDB = -32:4:0;%信噪比范围,单位为dB[0 5 9];%模拟的重复次数范围

设置更高层参数

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

  • 的变量npdschdattype.表示NPDSCH是否携带SystemInformationBlockType1-NB (SIB1-NB),是否携带广播控制通道(BCCH)。的允许值npdschdattype.“SIB1NB”“BCCHNotSIB1NB”“NotBCCH”.请注意,SIB1-NB属于BCCH。

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

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

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

当NPDSCH携带SIB1-NB时:

  • 的变量schedulinginfosib1.表16.4.1.3和表16.4.1.5.2-1所示的TBS [2].有效值为schedulinginfosib1.是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)中的每个信噪比点,即窄带物理单元IDenb。NNCellID, NRS天线端口数目(enb。NBRefP其中,1个天线接口表示2000端口,2个天线接口表示2000端口和2001端口),NB-IoT的运行模式enb。OperationMode可以是以下任意值:

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

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

  • 'inband-samepci':部署在LTE运营商资源块中的窄带物联网运营商enb。NBRefP与CRS端口数量相同enb。CellRefP

  • “Inband-DifferentPCI”:部署在LTE运营商资源块中的窄带物联网运营商enb。NBRefP不同的是enb。CellRefP

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

  • npdschdattype.要么是“BCCHNotSIB1NB”“NotBCCH”

  • enb。OperationMode要么是'inband-samepci'“Inband-DifferentPCI”

enb。NFrame = 0;%模拟启动帧数enb。NSubframe = 0;%模拟启动子帧号enb。NNCellID = 0;% NB-IoT物理单元IDenb。NBRefP = 2;%NR天线端口数量,应为1或2enb。OperationMode =“Inband-DifferentPCI”%允许的值是“Inband-SamePCI”,“Inband-DifferentPCI”,“Guardband”或“Standalone”如果strcmpi(eNB.OperationMode,'inband-samepci') enb。CellRefP = enb.NBRefP;%允许的值是nbrefp或4eNB.ncellid = eNB.nncellid;eleesifstrcmpi(eNB.OperationMode,“Inband-DifferentPCI”) enb。CellRefP = 4;小区RS天线接口数(必须等于NBRefP或4)enb。NCellID = 1;结束如果(strcmpi (NPDSCHDataType“BCCHNotSIB1NB”) | | strcmpi (NPDSCHDataType“NotBCCH”) & &......(strcmpi (enb。OperationMode,'inband-samepci') | | strcmpi (enb。OperationMode,“Inband-DifferentPCI”enb))。ControlRegionSize = 3;%允许的值为0…13结束

传播信道模型配置

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

频道=结构;初始化通道配置结构通道。种子= 6;%通道种子通道。NRxAnts = 1;% 1接收天线通道。DelayProfile =“环保署”%延迟概要channel.dopplerfreq = 5;Hz中%多普勒频率通道。MIMOCorrelation ='低的'% Multi-antenna相关性通道。NTerms = 16;衰落模型中使用的振荡器通道。ModelType =“GMEDS”%瑞利衰落模型类型channel.initphase =.“随机”%随机初始阶段通道。NormalizePathGains =“上”正规化延迟轮廓功率通道。NormalizeTxAnts =“上”传送天线规格化

信道估计配置

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

信道估计器行为PerfectChannElestimator = True;

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

配置信道估计器cec.pilotaverage =.“UserDefined”导频符号平均值的类型cec。TimeWindow = 1;%时间窗口大小,以REs表示cec。FreqWindow = 25;RES中的%频率窗口大小cec。InterpType =“立方”二维插值型cec。InterpWindow =“中心”%插值窗口类型cec。InterpWinSize = 3;插值窗口大小cec。Reference =“关系”信道估计器参考信号

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(ireps)
npdschinfo = hnpdschinfo;npdschinfo.npdschdatatype = npdschdattype;npdschinfo.isf = ISF;如果Strcmpi(npdschdatype,“SIB1NB”%npdsch携带sib1-nbnpdschinfo.schedulinginfosib1 = schedulinginfosib1;其他的% NPDSCH不携带SIB1-NBnpdschInfo。IRep= ireps(repIdx);DCI中的%重复编号字段(DCI格式N1或N2)npdschinfo.imcs = imcs;DCI中的%调制和编码方案字段(DCI格式N1或N2)%验证IREP和IMC的输入如果isempty(npdschinfo.tbs)npdschinfo.tbstable错误(['无效[ITBS,ISF](其中ITBS=IMCS=')num2str (imc)......”,安全部队= 'num2str(安全部队)')对,返回空TBS,检查上表或3GPP TS 36.213表16.4.1.5.1-1']);结束结束

创建结构npdsch利用所获得的重复次数(npdschInfo。NRep),则NPDSCH的子帧数(npdschInfo。NSF)从类实例npdschInfo,输入参数npdschdattype.和无线网络临时标识RNTI。请注意,NSF = 8使用时使用npdschdattype.“SIB1NB”

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

使用DL-SCH码率验证配置的上层参数。码率是CRC编码后的比特数与速率匹配后的比特数之比。因为当SIB1NB被设置为真正的,码率R可以大于或等于1,这不是一个有效的场景。例如,这种情况发生在安全部队设置为0,schedulinginfosib1.设置为3。

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

显示子帧重复模式

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

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

块错误率模拟环路

本部分示例演示了如何执行窄带物联网NPDSCH链路级仿真和绘制BLER结果。发送和接收链如下图所示。

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

%模拟起始点的绝对子帧数NSubframe = enb.NFrame * 10 + enb.NSubframe;%初始化BLER和吞吐量结果maxThroughput = 0(长度(SNRdB), 1);simThroughput = 0(长度(SNRdB), 1);提单= 0(1,元素个数(SNRdB));%临时变量“enb_init”和“channel_init”用于创建在SNR循环中创建临时变量“enb”和“channel”'parfor'循环的独立仿真循环enb_init = eNB;channel_init =频道;snridx = 1:numel(snrdb)% parfor snrIdx = 1:numel(SNRdB)%要使用并行计算的使用,以增加速度评论%上面的'for'语句并取消下面的'parfor'语句的注释。%这需要并行计算工具箱。如果没有安装% 'parfor'将默认为普通的'for'语句。%根据循环变量设置随机数生成器种子%以确保独立的随机流rng (snrIdx“combRecursive”);流(在%gdB信噪比下模拟%d传输块\n',numtrblks,snrdb(snridx));eNB = enb_init;%初始化eNodeB配置频道= channel_init;%初始化衰落信道配置txcw = [];%初始化传输的码字numBlkErrors = 0;百分比具有错误的传输块数房地产= [];%初始化NPDSCH编码器状态dstate = [];%初始化NPDSCH解码器状态lastOffset = 0;初始化整体帧定时偏移抵消= 0;初始化帧定时偏移subframeGrid = lteNBResourceGrid (enb);%初始化子帧网格subframeIdx = NSubframe;numRxTrBlks = 0;(numRxTrBlks < numTrBlks)%设置当前子帧和帧号enb。NSubframe =国防部(subframeIdx 10);enb。NFrame =地板((subframeIdx) / 10);%生成NPSS符号和索引npssSymbols = lteNPSS (enb);npssIndices = lteNPSSIndices (enb);将符号映射到子帧网格subframeGrid (npssIndices) = npssSymbols;%生成NSSS符号和索引nssssymbols = ltenss(eNB);nsssindices = ltenssindices(eNB);将符号映射到子帧网格subframeGrid (nsssIndices) = nsssSymbols;%确定是否有NPSS或NSSS被传播,如果是,%不要在这个子帧中传输NPDSCHisDataSubframe = isempty(npssSymbols) && isempty(nsssSymbols); / /使用实例创建一个新的传输块并对其进行编码%传输码字为空。接收器设置码字%要为空,以发出捆绑包中的所有子帧收到的%(在第一次传输之前它也是空的)如果isempty(txcw) txTrBlk = randi([0 1],trblklen,1);txcw = lteNDLSCH (rmoutlen txTrBlk);结束如果(isdatasubframe)%生成子帧的NPDSCH符号和索引[txNpdschSymbols,房地产]= lteNPDSCH (txcw, enb, npdsch房地产);npdschIndices = lteNPDSCHIndices (enb npdsch);将符号映射到子帧网格subframeGrid (npdschIndices) = txNpdschSymbols;%生成NRS符号和索引nrsSymbols = lteNRS (enb);nrsIndices = lteNRSIndices (enb);将符号映射到子帧网格subframegrid(nrsindices)= nrssymbols;结束%进行OFDM调制以产生时域波形[txWaveform, ofdmInfo] = nbOFDMModulate (enb subframeGrid);%添加25个样品填充。这是为了覆盖延迟的范围%期望从渠道建模(组合实现延迟和信道延迟扩展%)txWaveform = [txWaveform;enb.NBRefP 0(25日)];% #好< AGROW >%初始化每个子帧的信道时间Channel.Inittime = SubframeDX / 1000;%通过频道模型传递数据通道。SamplingRate = ofdmInfo.SamplingRate;[rx波形,fadingInfo] = lteFadingChannel(channel, tx波形);计算噪声增益,包括下行功率的补偿%分配SNR = 10 ^(SNRDB(SNRIDX)/ 20);将噪声功率归一化,以考虑采样率%是OFDM调制中使用的IFFT大小的函数%天线数量N0 = 1 /(√(2.0 * enb.NBRefP *双(ofdmInfo.Nfft)) *信噪比);创建加性高斯白噪声噪声= n0 *复杂(Randn(randn(rxwaveform)),......Randn(尺寸(rxwaveform))));%将AWGN添加到接收的时域波形中rxwaveform = rxwaveform +噪声;%------------------------------------------------------------------%接收%------------------------------------------------------------------%执行定时同步,提取适当的收到波形的%子帧,并执行OFDM%解调如果(perfectChannelEstimator) offset = hPerfectTimingEstimate(fadingInfo);其他的在这个例子中,子帧偏移计算依赖于% on NPSS present in subframe 5,所以我们需要填充%子帧,以便返回的帧偏移量为% lteNBDLFrameOffset是子帧5的偏移量sftsamples = OFDMINFO.SAMPLINGRATE * 1E-3;如果(enb.NSubframe==5) padding = 0 ([sfTsamples*5,size(rx波形,2)]);offset = lteNBDLFrameOffset(enb,[填充;rxWaveform]);如果(offset > 25) || (offset < 0) offset = lastOffset;结束lastOffset =抵消;结束结束%同步接收的波形rx波形= rx波形(1+偏移:结束,:);%对接收到的数据进行OFDM解调,重新创建%资源网格rxSubframe = nbOFDMDemodulate (enb rxWaveform);%信道估计数如果(PerfectChanneLestimator)完美信道估计百分比EstchannelGrid = nbdlperfectChanneLestimate(eNB,频道,偏移);kotidgrid = nbofdmdemodulate(eNB,噪声(1 +偏移:结束,:));destemest = var(诊断(:));其他的[estChannelGrid, noiseEst] = lteDLChannelEstimate(......cec, enb rxSubframe);结束如果(isdatasubframe)%获取NPDSCH索引npdschIndices = lteNPDSCHIndices(enb, npdsch);从接收的子帧中获取PDSCH资源元素。规模的由PDSCH功率因数Rho接收的子帧。PDSCH是的单元格参考符号%信道估计(用于PDSCH解码阶段)不是。[rxnpdschsymbols,npdschhest] = lteextractresources(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)= numblkerrors / numtrblks;流(' npdsch bler = %. '4 f \ n”提单(snrIdx));%计算最大吞吐量和模拟吞吐量maxThroughput (snrIdx) = trblklen * numTrBlks;%最大吞吐量simThroughput (snrIdx) = trblklen * (numTrBlks-numBlkErrors);%模拟吞吐量流('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%模拟4在-20dB SNR NPDSCH BLER = 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4在-16DB SNR NPDSCH BLER = 1.0000 NPDSCH吞吐量(%)= 0.0000%在-12DB SNR NPDSCH BLER = 0.2500 NPDSCH吞吐量(%)= 75.0000%模拟4输送块,在-8DB SNR NPDSCH BLER = 0.0000 NPDSCH吞吐量(%)= 100.0000%模拟4输送块在-4db snr npdsch bler= 0.0000 NPDSCH吞吐量(%)= 100.0000%模拟4在0dB SNR NPDSCH BLER = 0.0000 NPDSCH吞吐量(%)= 100.0000%
模拟4传输块-32分贝信噪比NPDSCH提单= 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4传输块-28分贝信噪比NPDSCH提单= 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4传输块-24分贝信噪比NPDSCH提单= 0.2500 NPDSCH吞吐量(%)= 75.0000%模拟4传输块-20分贝信噪比NPDSCH提单=0.0000 NPDSCH吞吐量(%)= 100.0000%模拟4传输块-16分贝信噪比NPDSCH提单= 0.0000 NPDSCH吞吐量(%)= 100.0000%模拟4传输块-12分贝信噪比NPDSCH提单= 0.0000 NPDSCH吞吐量(%)= 100.0000%模拟运输4块8分贝信噪比NPDSCH提单= 0.0000 NPDSCH吞吐量(%)= 100.0000%模拟4在-4dB SNR NPDSCH BLER = 0.0000 NPDSCH Throughput(%) = 100.0000 %模拟4个传输块在0dB SNR NPDSCH BLER = 0.0000 NPDSCH Throughput(%) = 100.0000 %

Plot Block错误率vs信噪比结果

如果reidx == 1 fh = figure;网格;持有;Xlabel(“信噪比(dB)”);ylabel('bler');legendstr = {('nrep ='num2str(npdsch.nrep)]};其他的Legendstr = [letcendstr ['nrep ='num2str(npdsch.nrep)]];% #好< AGROW >结束图(跳频);情节(SNRdB,提单,“o”);

结束设置数字标题如果Strcmpi(npdschdatype,“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.16.101“用户设备(UE)无线电传输和接收”

本地函数

% NB-IoT - DL OFDM调制器函数[波形,信息] = nbofdmodulate(eNB,网格)%应用默认窗口大小根据TS 36.104表E.5.1-1a如果(~ isfield (enb“窗口”)))eNB.Windowing = 6;结束%使用NB-IoT SC-FDMA在OFDM调制上获得1/2副载波移位enb。NBULSubcarrierSpacing ='15khz';(波形信息]= lteSCFDMAModulate (enb、网格);结束% NB-IoT - DL OFDM解调器函数网格= nbOFDMDemodulate (enb rxWaveform)%使用NB-IoT SC-FDMA在OFDM调制上获得1/2副载波移位enb。NBULSubcarrierSpacing ='15khz';Grid = LTESCFDMADEMODULES(eNB,RxWaveForm,0.55);% CP含量为0.55结束% NB-IoT DL完美信道估计器函数h = nbdlperfectChanneLestimate(eNB,频道,timefreqoffset)%重新配置NB-IoT UL完美信道估计器,以执行DL完美%信道估计enb。NBULSubcarrierSpacing ='15khz';enb。NTxAnts = enb.NBRefP;enb。TotSlots = 2;H = lteULPerfectChannelEstimate(enb, channel,timefreqoffset);结束
NPDSCH提单= 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4传输块-28分贝信噪比NPDSCH提单= 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4传输块-24分贝信噪比NPDSCH提单= 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4传输块-20分贝信噪比NPDSCH提单= 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4传输块-16分贝信噪比NPDSCH提单= 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4传输块-12分贝信噪比NPDSCH提单= 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟运输4块8分贝信噪比NPDSCH提单= 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4运输块4 db信噪比NPDSCH提单= 1.0000NPDSCH吞吐量(%)= 0.0000 %在0dB信噪比下模拟4个传输块NPDSCH BLER = 0.0000 NPDSCH吞吐量(%)= 100.0000 %