主要内容

NB-IoT NPDSCH块错误率模拟

该示例展示了LTE Toolbox™如何在频率选择性衰落和加性高斯白噪声(AWGN)信道下创建窄带物理下行共享信道(NPDSCH)块错误率(BLER)模拟。

简介

3GPP第13版LTE开始增加对窄带物联网应用的支持。万博1manbetx版本13定义了一个单一的NB-IoT UE类别,即Cat-NB1,版本14增加了Cat-NB2,允许更大的传输块大小。本示例关注Release 13 NB-IoT。

该示例为多个信噪比点和传输参数生成了一条NB-IoT NPDSCH BLER曲线。NPSS和NSSS在适当的子帧中传输,NPSS用于实际的定时同步。NPDSCH传输不使用NPSS和NSSS子帧。NRS在NPDSCH子帧中传输,用于实际的信道估计。本例中不考虑NPBCH传输间隙。

模拟配置

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

numTrBlks = 4;%模拟传输块的数量SNRdB = -32:4:0;%信噪比范围,单位为dBirep = [0 5 9];%模拟的动作范围

设置更高层参数

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

  • 的变量NPDSCHDataType表示NPDSCH是否携带了系统信息块类型1- nb (SIB1-NB),以及是否携带了广播控制通道(bch)。的允许值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'。
  • 的变量安全部队根据3GPP TS 36.213配置NPDSCH的子帧数。表16.4.3.1 -1 [2].的有效值安全部队是0。7。

当NPDSCH携带SIB1-NB时:

  • 的变量SchedulingInfoSIB1配置NPDSCH重复次数根据3GPP TS 36.213表16.4.1.3和TBS根据表16.4.1.5.2-1 [2].的有效值SchedulingInfoSIB1是0…11。

当NPDSCH不携带SIB1-NB时:

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

  • 的变量imc在一起IRep根据3GPP TS 36.213配置TBS表16.4.1.5.1-1 [2].的有效值imc是0…13。

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

eNB配置

配置起始帧和子帧号(enb。NFrame而且enb。NSubframe)为每个信噪比点的模拟,为窄带物理单元IDenb。NNCellID, NRS天线端口数目(enb。NBRefP, 1个天线接口表示使用2000端口,2个天线接口表示使用2000和2001端口),即NB-IoT运行模式enb。OperationMode可以是任意值,如下所示:

  • “独立”:部署在LTE频谱之外的NB-IoT运营商,例如用于GSM或卫星通信的频谱

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

  • “Inband-SamePCI”:部署在LTE运营商资源块中的NB-IoT运营商enb。NBRefP与CRS端口数量相同enb。CellRefP

  • “Inband-DifferentPCI”:部署在LTE运营商资源块中的NB-IoT运营商enb。NBRefP不同的是enb。CellRefP

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

  • NPDSCHDataType要么是“BCCHNotSIB1NB”“NotBCCH”

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

enb。NFrame = 0;模拟起始帧数enb。NSubframe = 0;模拟起始子帧数enb。NNCellID = 0;NB-IoT物理cell IDenb。NBRefP = 2;NRS天线端口的数量,应该是1或2enb。OperationMode =“Inband-DifferentPCI”允许的值是'Inband-SamePCI', 'Inband-DifferentPCI', 'Guardband'或'Standalone'如果strcmpi (enb。OperationMode,“Inband-SamePCI”) enb。CellRefP = enb.NBRefP;%允许的值为NBRefP或4enb。nncellid = enb.NNCellID;elseifstrcmpi (enb。OperationMode,“Inband-DifferentPCI”) enb。CellRefP = 4;% Cell 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结束

传播信道模型配置

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

Channel = struct;初始化通道配置结构通道。种子= 6;通道种子通道。NRxAnts = 1;% 1接收天线通道。DelayProfile =“环保署”%延迟配置通道。DopplerFreq = 5;%多普勒频率,单位为Hz通道。MIMOCorrelation =“低”%多天线相关性通道。NTerms = 16;在衰落模型中使用的振荡器通道。ModelType =“GMEDS”瑞利衰落模型类型通道。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 =“立方”% 2D插值类型cec。InterpWindow =“中心”插值窗口类型cec。InterpWinSize = 3;插值窗口大小cec。Reference =“关系”信道估计参考信号

NPDSCH配置

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

  • 重复次数(NRep

  • 当没有重复时用于NPDSCH的子帧数(NSF

  • 传输块大小(TBS

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

注意,当NPDSCH不携带SIB1-NB时,如果配置了,则会触发一个错误IRep而且imc值导致空TBS。当TBS没有为特定对象定义时,就是这种情况IRep而且imc3GPP TS 36.213表16.4.1.5.1-1 [2].

repIdx = 1:numel(ireps)
npdschInfo = hNPDSCHInfo;npdschInfo。NPDSCHDataType = NPDSCHDataType;npdschInfo。Isf = Isf;如果strcmpi (NPDSCHDataType“SIB1NB”% NPDSCH携带SIB1-NBnpdschInfo。SchedulingInfoSIB1 = SchedulingInfoSIB1;其他的% NPDSCH不携带SIB1-NBnpdschInfo。IRep= ireps(repIdx);DCI中%重复次数字段(DCI格式N1或N2)npdschInfo。imc= IMCS;DCI中的%调制和编码方案字段(DCI格式N1或N2)验证IRep和IMCS的输入如果npdschInfo isempty (npdschInfo.TBS)。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,输入参数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,这不是一个有效的场景。例如,这种情况发生在安全部队设置为0和SchedulingInfoSIB1设置为3。

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

显示子帧重复模式

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

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

块错误率模拟循环

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

一个具有所需传输块大小的随机比特流经过CRC编码、卷积编码和速率匹配得到NPDSCH比特,根据特定的子帧重复模式进行重复。然后采用置乱、调制、层映射和预编码的方法形成复杂的NPDSCH符号。这些符号连同NRS信号被映射到网格和OFDM调制以创建时域波形。然后通过衰落通道传递,并添加AWGN。然后对噪声波形进行同步和解调。对恢复的NPDSCH符号进行信道估计和均衡,然后进行信道译码和解调以恢复传输块。在去置后,重复子帧进行软组合,再进行速率恢复。针对每个信噪比点计算传输块错误率。块错误率的评估是基于这样一个假设:一个bundle中的所有子帧都被用来解码终端上的传输块。bundle定义在MAC层(见3GPP TS 36.321 5.3.2.1 [3.])作为npdsch。NSF$ \ * $npdsch。NRep用于携带传输块的子帧。

%模拟开始时的绝对子帧数NSubframe = enb.NFrame*10+enb.NSubframe;初始化BLER和吞吐量结果maxThroughput = 0 (length(SNRdB),1);simThroughput = 0 (length(SNRdB),1);bler = 0 (1,numel(SNRdB));临时变量'enb_init'和'channel_init'用于创建%临时变量'enb'和'channel'在信噪比循环内创建%独立的模拟循环为'parfor'循环Enb_init = enb;Channel_init = channel;snrIdx = 1:数值(SNRdB)SNRdB = 1:数值(SNRdB)启用并行计算以提高注释输出的速度%删除上面的'for'语句并取消注释下面的'parfor'语句。这需要并行计算工具箱。。如果没有安装% 'parfor'将默认为正常的'for'语句。根据循环变量设置随机数生成器种子%以确保独立的随机流rng (snrIdx“combRecursive”);流('\n模拟%d传输块在%gdB信噪比\n'、numTrBlks SNRdB (snrIdx));Enb = enb_init;初始化eNodeB配置Channel = channel_init;初始化衰落通道配置TXCW = [];初始化传输码字numBlkErrors = 0;有错误的传输块的百分比地产= [];初始化NPDSCH编码器状态Dstate = [];初始化NPDSCH解码器状态lastOffset = 0;初始化整体帧定时偏移量偏移量= 0;初始化帧定时偏移量subframeGrid = lteNBResourceGrid(enb);初始化子帧网格subframeIdx = NSubframe;numRxTrBlks = 0;(numRxTrBlks < numTrBlks)设置当前子帧和帧号enb。NSubframe = mod(subframeIdx,10);enb。NFrame = floor((subframeIdx)/10);生成NPSS符号和索引npssSymbols = lteNPSS(enb);npssIndices = lteNPSSIndices(enb);将符号映射到子帧网格subframeGrid(npssIndices) = npssSymbols;生成NSSS符号和索引nsssSymbols = lteNSSS(enb);nsssIndices = lteNSSSIndices(enb);将符号映射到子帧网格subframeGrid(nsssIndices) = nsssSymbols;%确定是否传播了NPSS或NSSS,如果是,%没有在这个子帧中传输NPDSCHisDataSubframe = isempty(npssSymbols) && isempty(nsssSymbols);%时创建一个新的传输块并对其进行编码%传输码字为空。接收方设置码字%为空,表示bundle中的所有子帧都已被替换%已接收(在第一次传输之前也是空的)如果isempty(txcw) txTrBlk = randi([0 1],trblklen,1);txcw = lteNDLSCH(rmoutlen,txTrBlk);结束如果(isDataSubframe)为子帧生成NPDSCH符号和索引[txNpdschSymbols,estate] = lteNPDSCH(enb,npdsch,txcw,estate);npdschIndices = lteNPDSCHIndices(enb,npdsch);将符号映射到子帧网格subframgrid (npdschIndices) = txNpdschSymbols;生成NRS符号和索引nrsSymbols = lteNRS(enb);nrsIndices = lteNRSIndices(enb);将符号映射到子帧网格subframeGrid(nrsIndices) = nrsSymbols;结束执行OFDM调制生成时域波形[tx波形,ofdmInfo] = nbofdmmodululate (enb, subframgrid);添加25个样本填充。这是为了涵盖延迟的范围%期望从通道建模(的组合%实现延迟和通道延迟扩散)tx波形= [tx波形;enb.NBRefP 0(25日)];% #好< AGROW >初始化每个子帧的通道时间通道。InitTime = subframeIdx/1000;通过通道模型传递数据通道。SamplingRate = ofdmInfo.SamplingRate;[rx波形,fadingInfo] = lteFadingChannel(channel, tx波形);计算包括下行功率补偿在内的噪声增益%分配SNR = 10^(SNRdB(snrIdx)/10);%归一化噪声功率以考虑抽样率,其中%是OFDM调制中使用的IFFT大小的函数,和%天线数N0 = 1/√(2.0*enb.NBRefP*double(ofdmInfo.Nfft)*SNR);创建加性高斯白噪声噪声= N0*complex(randn(size(rx波形)),...randn(大小(rxWaveform)));在接收的时域波形中添加AWGNrx波形= rx波形+噪声;%------------------------------------------------------------------%接收%------------------------------------------------------------------%执行定时同步,提取适当的%子帧的接收波形,并执行OFDM%解调如果(perfectChannelEstimator) offset = hPerfectTimingEstimate(fadingInfo);其他的在本例中,子帧偏移量计算依赖于NPSS的%出现在子帧5中,所以我们需要填充%子帧之前,使帧偏移量返回% lteNBDLFrameOffset是子帧5的偏移量sfsamples = ofdmInfo.SamplingRate*1e-3;如果(enb.NSubframe==5) padding = zero ([sfTsamples*5,size(rx波形,2)]);offset = lteNBDLFrameOffset(enb, [padding;]rxWaveform]);如果(offset > 25) || (offset < 0) offset = lastOffset;结束lastOffset =偏移量;结束结束同步接收到的波形rx波形= rx波形(1+offset:end,:);对接收到的数据执行OFDM解调以重建%资源网格rxSubframe = nbOFDMDemodulate(enb, rx波形);信道估计如果(perfectChannelEstimator)%完美信道估计estChannelGrid = nbDLPerfectChannelEstimate(enb, channel, offset);noiseGrid = nbOFDMDemodulate(enb, noise(1+offset:end,:));noiseEst = var(noiseGrid(:));其他的[estChannelGrid, noiseEst] = lteDLChannelEstimate(...enb, cec, rxSubframe);结束如果(isDataSubframe)%获取NPDSCH索引npdschIndices = lteNPDSCHIndices(enb, npdsch);从接收的子帧中获取PDSCH资源元素。规模的%收到的子帧由PDSCH功率因数。PDSCH是%按此数量缩放,而用于的单元格参考符号%的信道估计(在PDSCH解码阶段使用)不是。[rxNpdschSymbols, npdschest] = lteExtractResources(npdschIndices,...rxSubframe estChannelGrid);解码NPDSCH[rxcw,dstate,symbols] = 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个传输块
模拟4传输块-32分贝信噪比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-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-12dB SNR NPDSCH BLER = 0.0000 NPDSCH Throughput(%) = 100.0000 %模拟4个传输块在-8dB SNR NPDSCH BLER = 0.0000 NPDSCH Throughput(%) = 100.0000 %模拟4个传输块在-4dB SNR NPDSCH BLER = 0.0000 NPDSCH Throughput(%) = 100.0000 %模拟4个传输块在0dB SNR NPDSCH BLER = 0.0000 NPDSCH Throughput(%) = 100.0000 %

图块错误率与信噪比结果

如果repIdx == 1 fh = figure;网格;持有;包含(“信噪比(dB)”);ylabel (“提单”);Legendstr = {['NRep = 'num2str (npdsch.NRep)]};其他的Legendstr = [Legendstr]'NRep = 'num2str (npdsch.NRep)];% #好< AGROW >结束图(跳频);情节(SNRdB,提单,“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)无线电传输和接收”

本地函数

物联网DL OFDM调制器函数[波形,信息]= nbofdmmodululate (enb,grid)根据TS 36.104表E.5.1-1a应用默认窗口大小如果(~ isfield (enb“窗口”enb))。Windowing = 6;结束使用NB-IoT SC-FDMA在OFDM调制上获得1/2子载波移位enb。NBULSubcarrierSpacing =“15 khz”;[波形,信息]= lteSCFDMAModulate(enb,grid);结束NB-IoT DL OFDM解调器函数grid = nbOFDMDemodulate(enb, rx波形)使用NB-IoT SC-FDMA在OFDM调制上获得1/2子载波移位enb。NBULSubcarrierSpacing =“15 khz”;grid = lteSCFDMADemodulate(enb, rx波形,0.55);% CP分数为0.55结束NB-IoT DL完美通道估计器函数H = nbDLPerfectChannelEstimate(enb,channel,timefreqoffset)重新配置NB-IoT UL完美通道估计器,以执行DL完美%信道估计enb。NBULSubcarrierSpacing =“15 khz”;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.0000NPDSCH Throughput(%) = 0.0000 % Simulating 4 transport blocks at -8dB SNR NPDSCH BLER = 1.0000 NPDSCH Throughput(%) = 0.0000 % Simulating 4 transport blocks at -4dB SNR NPDSCH BLER = 1.0000 NPDSCH Throughput(%) = 0.0000 % Simulating 4 transport blocks at 0dB SNR NPDSCH BLER = 0.0000 NPDSCH Throughput(%) = 100.0000 %