这个例子展示了如何使用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传输块若干信噪比点。大量的numTrBlks
应用于产生有意义的吞吐量结果。信噪比
可以是值数组或标量。在不同的重复值上进行了仿真,比较了重复对性能的改善。
numTrBlks = 4;%模拟传输块数SNRdB = 32:4:0;%信噪比范围,单位为dB[0 5 9];%模拟的重复次数范围
在下一节中,设置以下用于配置NPDSCH的高层参数:
的变量NPDSCHDataType
表示NPDSCH是否携带SystemInformationBlockType1-NB (SIB1-NB),是否携带广播控制通道(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配置NPDSCH的子帧数2].有效值为isf.
是0。7。
当NPDSCH承载SIB1-NB时:
的变量SchedulingInfoSIB1
表16.4.1.3和表16.4.1.5.2-1所示的TBS [2].有效值为SchedulingInfoSIB1
是0…11。
当NPDSCH不携带SIB1-NB时:
安全部队= 0;% DCI中的资源分配字段(DCI格式N1或N2)SchedulingInfoSIB1 = 0;% MasterInformationBlock-NB中调度信息字段(MIB-NB)imc = 4;DCI格式(DCI格式N1或N2)的调制和编码方案字段
配置起始帧和子帧号(enb。NFrame
和enb。NSubframe
)中的每个信噪比点,即窄带物理单元IDenb。NNCellID
,NR天线端口的数量(enb.nbrefp.
其中,1个天线接口表示2000端口,2个天线接口表示2000端口和2001端口),NB-IoT的运行模式enb。OperationMode
可以是以下任意值:
'独立'
:部署在LTE频谱之外的窄带物联网运营商,例如用于GSM或卫星通信的频谱
“Guardband”
: NB-IoT运营商,部署在两个LTE运营商之间的防护带
“Inband-SamePCI”
:NB-IOT载波部署在LTE运营商的资源块中,enb.nbrefp.
与CRS端口数量相同enb。CellRefP
“Inband-DifferentPCI”
:NB-IOT载波部署在LTE运营商的资源块中,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物理单元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。NCellID = enb.NNCellID;elseifstrcmpi(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.ControlRegoonsize = 3;%允许的值为0…13结束
结构通道
包含通道模型配置参数。
频道=结构;初始化通道配置结构channel.seed = 6;%通道种子通道。NRxAnts = 1;% 1接收天线通道。DelayProfile =“环保署”;%延迟概要通道。DopplerFreq = 5;%多普勒频率,赫兹通道。MIMOCorrelation =“低”;% Multi-antenna相关性通道。NTerms = 16;衰落模型中使用的振荡器通道。ModelType =“GMEDS”;%瑞利衰落模型类型通道。InitPhase =“随机”;%随机初始阶段channel.normalizepathgains =“上”;%标准化延迟配置文件通道。NormalizeTxAnts =“上”;传送天线规格化
在本例中,参数perfectChannelEstimator
控制信道估计器行为。有效的值真正的
或假
.设置到真正的
,则使用一个完美的信道估计器,否则使用一个实际的估计器,基于接收的NRS值。
信道估计器行为perfectChannelEstimator = true;
该实用信道估计器配置了一种结构CEC.
.5Hz多普勒的EPA延迟剖面导致信道随时间缓慢变化。因此,通过将时间窗口设置为1资源元素(RE)和频率窗口设置为25,只对导频估计执行频率平均,以确保对资源块的所有子载波进行平均。
%配置信道估计器cec。PilotAverage =“UserDefined”;%类型的导频符号平均cec。TimeWindow = 1;%窗口窗口大小cec。FreqWindow = 25;%频率窗口大小,以REs表示cec。InterpType =“立方”;二维插值型cec。InterpWindow =“中心”;插值窗口类型cec。InterpWinSize = 3;插值窗口大小cec。R.eference =“关系”;信道估计器参考信号
从上面定义的高层配置中获取以下NPDSCH参数:
重复次数(NRep
的)
无重复时用于NPDSCH的子帧数(NSF
的)
传输块大小(TBS
的)
这些参数可以通过使用类获得hNPDSCHInfo
.hNPDSCHInfo
还提供了方法displaySubframePattern
显示NPDSCH重复模式,这将在下一节中显示。
注意,当NPDSCH不携带SIB1-NB时,如果配置的IRep
和imc
值导致空TBS。这是如果没有为特定的TBS定义TBS的情况IRep
和imc
在3GPP TS 36.213表16.4.1.5.1-1 [2].
为repIdx = 1:元素个数(ireps)
npdschInfo = hNPDSCHInfo;npdschInfo。NPDSCHDataType = NPDSCHDataType;npdschInfo。安全部队=安全部队;如果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)...',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,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;结束
该示例的这一部分显示了如何执行NB-IOT NPDSCH链路级别仿真和绘图BLER结果。在下图中描绘了发射和接收链。
随着所需传输块大小的随机比特流经历CRC编码,卷积编码和速率匹配以获得根据特定子帧重复模式重复的NPDSCH比特。然后施加扰乱,调制,层映射和预编码以形成复杂的NPDSCH符号。这些符号以及NRS信号映射到网格和OFDM调制以创建时域波形。然后通过衰落通道通过AWGN。然后将噪声波形同步和解调。在恢复的NPDSCH符号上执行信道估计和均衡,之后执行频道解码和解调以恢复传输块。在解扰之后,在速率恢复之前,重复子帧是软组合的。为每个SNR点计算传输块错误速率。块误差率的评估基于假设束中的所有子帧用于解码UE处的传输块。捆绑在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:元素个数(SNRdB)% parfor snrIdx = 1:numel(SNRdB)%要启用并行计算以提高速度,请注释掉%上面的'for'语句并取消下面的'parfor'语句的注释。%这需要并行计算工具箱。如果没有安装这一点%'parcon'默认为正常的'for'语句。%根据循环变量设置随机数生成器种子%以确保独立的随机流rng (snrIdx“combRecursive”);FPRINTF(在%gdB信噪比下模拟%d传输块\n'、numTrBlks SNRdB (snrIdx));enb = enb_init;%初始化eNodeB配置频道= channel_init;%初始化衰落通道配置txcw = [];%初始化传输的码字numBlkErrors = 0;%出错的传输块数量房地产= [];%初始化NPDSCH编码器状态dstate = [];%初始化NPDSCH解码器状态lastOffset = 0;%初始化整体帧定时偏移量offset = 0;初始化帧定时偏移subframegrid = ltetbresourcegrid(eNB);初始化子帧网格subframeIdx = NSubframe;numRxTrBlks = 0;而(numRxTrBlks < numTrBlks)%设置当前子帧和帧号enb.nsubframe = mod(subframedx,10);eNB.NFRAME =楼层((子帧)/ 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中的所有子帧都已经被设置为空% received(在第一次传输之前也是空的)如果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;零(25,enb.nbrefp)];% #好< AGROW >%初始化每个子帧的信道时间通道。InitTime = subframeIdx / 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(大小(rxWaveform)),...randn(大小(rxWaveform)));%将AWGN添加到接收的时域波形中rx波形= rx波形+噪声;%-------------------------------------------------------------%接收%-------------------------------------------------------------%执行定时同步,提取适当的%子帧,并执行OFDM%解调如果(perfectChannelEstimator) offset = hPerfectTimingEstimate(fadingInfo);其他的在这个例子中,子帧偏移计算依赖于在子帧5中存在的nps%,因此我们需要填充%子帧以便它使帧偏移返回% lteNBDLFrameOffset是子帧5的偏移量sfTsamples = ofdmInfo.SamplingRate * 1 e - 3;如果(enb.nsubframe == 5)padding = zeros([sftsamples * 5,size(rxwaveform,2)]);offset = ltinbdlframeoffset(eNB,[填充; rxwaveform]);如果(offset > 25) || (offset < 0) offset = lastOffset;结束lastOffset =抵消;结束结束%同步接收的波形rx波形= rx波形(1+偏移:结束,:);%对接收到的数据进行OFDM解调,重新创建%资源网格rxSubframe = nbOFDMDemodulate (enb rxWaveform);%信道估计如果(perfectChannelEstimator)完美信道估计百分比estChannelGrid = nbDLPerfectChannelEstimate(enb, channel, offset);noiseGrid = nbOFDMDemodulate(enb, noise(1+offset:end,:));噪音= var (noiseGrid (:));其他的[estChannelGrid, noiseEst] = lteDLChannelEstimate(...eNB,CEC,Rxsubframe);结束如果(isDataSubframe)%获取NPDSCH索引npdschIndices = lteNPDSCHIndices(enb, npdsch);从接收的子帧中获取PDSCH资源元素。规模的由PDSCH功率因数Rho接收的子帧。PDSCH是的单元格参考符号%信道估计(用于PDSCH解码阶段)不是。[rxNpdschSymbols, npdschHest] = lteExtractResources(npdschIndices, npdschIndices, 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;结束%计算块错误率提单(snrIdx) = numBlkErrors / numTrBlks;FPRINTF(' npdsch bler = %. '4 f \ n”提单(snrIdx));%计算最大吞吐量和模拟吞吐量maxThroughput (snrIdx) = trblklen * numTrBlks;最大可能吞吐量%simThroughput (snrIdx) = trblklen * (numTrBlks-numBlkErrors);%模拟吞吐量FPRINTF('NPDSCH吞吐量(%%)= %。4 f % % \ n”simThroughput (snrIdx) * 100 / maxThroughput (snrIdx));结束
在-32db snr上模拟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传输块-12分贝信噪比NPDSCH提单= 0.2500 NPDSCH吞吐量(%)= 75.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 %
模拟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 %
如果reidx == 1 fh = figure;网格在;持有在;包含(“信噪比(dB)”);ylabel (“提单”);Legendstr = {[“NRep = 'num2str (npdsch.NRep)]};其他的[Legendstr] [/ cn]“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端口(s)”]);传奇(legendstr);
下面的图显示了模拟运行时的情况numTrBlks
当使用完美信道估计器时设置为1000。
下面的例子使用了helper函数:
3GPP TS 36.211 "物理通道和调制"
3GPP TS 36.213《物理层程序》
3GPP TS 36.321《介质访问控制(MAC)协议规范》
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 =“15 khz”;(波形信息]= lteSCFDMAModulate (enb、网格);结束% NB-IoT - DL OFDM解调器函数Grid = nbofdmdemodulate(eNB,rxwaveform)%使用NB-IoT SC-FDMA在OFDM调制上获得1/2副载波移位enb。NBULSubcarrierSpacing =“15 khz”;网格= lteSCFDMADemodulate (enb, rxWaveform, 0.55);% CP含量为0.55结束% NB-IoT DL完美信道估计器函数H = nbDLPerfectChannelEstimate (enb、通道timefreqoffset)%重新配置NB-IoT UL完美信道估计器,以执行DL完美%信道估计enb。NBULSubcarrierSpacing =“15 khz”;enb。NTxAnts = enb.NBRefP;enb。TotSlots = 2;H = lteULPerfectChannelEstimate(enb, channel,timefreqoffset);结束
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的传输块NPDSCH BLER = 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4 -16DB SNR NPDSCH BLER = 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟-12dB SNR的4个传输块NPDSCH BLER = 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4 -8DB SNR NPDSCH BLER = 1.0000 NPDSCH吞吐量(%)= 0.0000%模拟4 -4DB SNR NPDSCH BLER = 1.0000 NPDSCH吞吐量(%)=0.0000%模拟0DB SNR NPDSCH BLER = 0.0000 NPDSCH吞吐量(%)= 100.0000%