主要内容

NR软驱调度性能评估

这个示例模拟了下行链路(DL)和上行链路(UL)资源的调度,并测量了频分双工(FDD)模式下的网络性能。该示例包括三种不同的调度策略,还展示了如何集成自定义调度程序。为了评估不同数据流量模式下的网络性能,该示例还使用逻辑通道优先级排序(LCP)过程在未确认模式(RLC-UM)下对无线链路控制层进行建模。为了对物理层进行建模,使用了不进行任何信号处理的基于概率的直通物理层(PHY)。您可以切换到5G Toolbox™PHY层进行高保真建模。调度策略的性能是根据实现的吞吐量和资源共享的公平性来评估的。

简介

这个示例展示了调度策略(由gNB控制)如何在ue之间分配UL和DL资源。本例考虑了gNB和ue中促进UL和DL传输和接收的以下操作。

完整的PUSCH或PDSCH包以其分配的符号集的第一个符号传输。接收方在分配的符号集中的最后一个符号之后处理符号中的包。

调度程序(UL和DL)运行每一个p插槽分配UL和DL资源,其中p调度器的配置周期。在每次运行中,调度的插槽数等于调度程序运行的周期,p

UL调度器

第一个槽,在p为最近的即将到来的插槽,满足终端的PUSCH准备时间能力。例如,该图显示了调度程序在连续两次运行期间选择插槽的方式。它假设调度器周期性(p)3个槽。因此,调度器每隔3个插槽运行一次,并为3个插槽调度资源。假定所有终端的PUSCH准备时间能力大于1个插槽(14个符号)但小于2个插槽(28个符号)。

  • Run-1:当调度程序在Slot-A开始运行时,它从Slot-C开始调度3个插槽,因为对于Slot-A和Slot-B, ue没有足够的PUSCH准备时间(ue在Slot-A开始的时间为0个符号,在Slot-B开始的时间为14个符号)。对于Slot-C, UEs获得28个符号用于PUSCH制备,这满足了PUSCH制备时间的能力。因此,Slot-C、D和E在这次运行中被调度。

  • Run-2:当调度程序在Slot-D的开始运行时,它从Slot-F (Slot-F, G和H)开始调度接下来的3个相邻的插槽。

DL调度器

第一个槽,在p要在运行中调度的槽位,是立即的下一个槽位。

  • Run-1:当scheduler运行在Slot-A的开始位置时,它调度3个相邻的slot Slot-B, C, D。

  • Run-2:当scheduler在Slot-D的开始处运行时,它调度3个相邻的slot Slot-E, F和G。

您可以选择任意一种已实现的调度策略:比例公平(PF)、最佳CQI或轮询(RR)。列出了UL调度器支持的各金宝app种输入,以及考虑它们的调度策略。

所需要的控制包被假定发送到带外,而不需要传输资源。控制报文包括UL分配报文、DL分配报文、BSR (buffer status report)报文和PDSCH反馈报文。

解调参考信号(DM-RS)在本例中没有建模。但是,在PUSCH和PDSCH赋值中有一个符号没有使用。

这个例子建模:

  • 基于槽和符号的DL和UL调度。

  • 频域资源在资源块组(rbg)方面的不连续分配。

  • 可配置的子载波间距导致不同的插槽持续时间。

  • UL和DL中的异步自适应混合自动重复请求(HARQ)机制。

  • 多个逻辑通道,支持不同类型的应用程序。金宝app

  • 逻辑通道优先级(LCP),将接收到的任务分配到UL和DL的每个UE的逻辑通道中。

场景配置

设置仿真参数。

rng (“默认”);重置随机数生成器simParameters = [];清除仿真参数simParameters。NumFramesSim = 100;%以10毫秒帧数表示的模拟时间simParameters。SchedulingType = 0;将该值设置为0(基于插槽的调度)或1(基于符号的调度)%模拟中ue的数量。假定ue具有顺序无线电%网络临时标识符(RNTIs)从1到numue。如果你改变请确保“simParameters. %”的长度为“%”。UEDistance等于NumUEssimParameters。NumUEs = 4;simParameters。UEDistance = [100 250 700 750];ue到gNB的距离%(米)%设置通道带宽为30mhz, sc (subcarrier spacing)为15% kHz,定义于3GPP TS 38.104节5.3.2。完整的UL和% DL带宽被假定分配给PUSCH和PDSCH。的% UL和DL载波被假设为对称信道%的带宽simParameters。DLBandwidth = 30e6;%赫兹simParameters。ULBandwidth = 30e6;%赫兹simParameters。NumRBs = 160;simParameters。SCS = 15;%千赫simParameters。DLCarrierFreq = 2.635e9;%赫兹simParameters。ULCarrierFreq = 2.515e9;%赫兹配置参数以更新gNB和DL的UL通道质量% gNB和UE频道质量。信道条件是周期性的%改进或恶化的CQIDelta每个channelUpdatePeriodicity%秒表示同一终端的所有RBs。信道条件是否为特定% UE改善或恶化是随机确定的% RBCQI = RBCQI +/- CQIDeltasimParameters。ChannelUpdatePeriodicity = 0.2;%秒simParameters。CQIDelta = 2;到gNB的距离(第一列为米)与最大值之间的映射% UL CQI可达到值(第二列)。例如,某终端为700距离gNB %米时,其CQI值最大可达10%距离落在[501,800]米范围内,根据地图。按递增顺序设置距离,中可达到的最大CQI值%递减顺序simParameters。CQIvsDistance = [200 15;500 12;800年10;1000 8;1200 7];simParameters。BSRPeriodicity = 5;%(毫秒)simParameters。EnableHARQ = true;启用或禁用HARQ。如果禁用,则没有重传simParameters。NumHARQ = 16;% HARQ进程数根据插槽数设置调度器周期性运行。值必须%小于10ms帧中的槽数simParameters。SchedulerPeriodicity = 4;simParameters。SchedulerStrategy =“PF”%支金宝app持的调度策略:'PF', 'RR'和'BestCQI'%移动平均参数在[0,1]范围内计算平均值一个UE在UL和DL方向上的%数据速率。此值用于% PF调度策略。参数值越接近1,表示越多%权重对瞬时数据速率的影响。参数值趋近于0%表示对过去的数据速率有更多的权重% AverageDataRate = ((1 - MovingAvgDataRateWeight) * PastDataRate) + (MovingAvgDataRateWeight * InstantaneousDataRate)simParameters。MovingAvgDataRateWeight = 0.5;% gNB确保PUSCH分配提前在UEs PUSCHPrepTime收到传输时间的%simParameters。PUSCHPrepTime = 200;%(微秒)为UL和DL分配给一个槽位UE的最大RBs值%传输(限制适用于新的PUSCH和PDSCH分配和%不用于重传)simParameters。RBAllocationLimitUL = 100;% For PUSCHsimParameters。RBAllocationLimitDL = 100;%用于PDSCH

加载逻辑通道配置表。表中的每一行表示一个逻辑通道,并将这些属性作为列。

  • RNTI -终端的无线网络临时标识符。

  • LogicalChannelID逻辑通道标识符。

  • LCGID -逻辑通道组标识符。

  • SeqNumFieldLength -定义序列号字段长度。它需要6或12。

  • MaxTxBufferSDUs -最大Tx缓冲区大小(以数据包数量为单位)。

  • ReassemblyTimer -定义重组定时器(毫秒)。

  • EntityType -定义RLC实体类型。它的值为0、1和2,分别表示RLC UM实体是单向DL、单向UL还是双向UM。

  • Priority -逻辑通道的优先级。

  • PBR -优先级比特率(单位:千字节每秒)。

  • 桶大小持续时间(毫秒)。

负载(“NRFDDRLCChannelConfig.mat”) simParameters。RLCChannelConfig = RLCChannelConfig;

加载包含这些字段的应用程序配置表。表中的每一行表示一个应用程序,并将这些属性作为列。

  • PacketInterval -连续两次生成报文的间隔时间,单位为毫秒。

  • PacketSize -数据包大小(以字节为单位)。

  • HostDevice -定义应用程序安装在指定配置的设备(UE或gNB)。设备取值为0、1或2。分别表示在gNB侧配置、在UE侧配置或在UE侧和在gNB侧配置。

  • RNTI -终端的无线网络临时标识符。这将标识安装应用程序的终端。

  • LCID -逻辑通道标识符。

负载(“NRFDDAppConfig.mat”);simParameters。AppConfig = AppConfig;

日志记录和可视化配置

参数CQIVisualization和RBVisualization控制显示%这些可视化:(i) RBs的CQI可视化(ii) RB分配%的可视化。默认情况下,这些图是禁用的。你可以启用它们%,设置为'true'simParameters。CQIVisualization = false;simParameters。RBVisualization = false;中的NumMetricsSteps时间内定期更新输出度量图模拟持续时间%simParameters。NumMetricsSteps = 20;% mat -文件,将日志写入其中。它们用于后仿真分析和可视化simParameters。ParametersLogFile =“simParameters”用于记录模拟参数simParameters。SimulationLogFile =“simulationLogs”%用于记录模拟日志验证模拟配置hNRSchedulingFDDValidateConfig (simParameters);

导出参数

根据主要配置参数,计算导出的参数。此外,设置一些特定于示例的常量。

simParameters。DuplexMode = 0;% FDDCQI报告中以RBs数量表示的子带大小%(仅使用启用5G Toolbox™PHY层处理时%)simParameters。SubbandSize = 16;simParameters。NumCells = 1;%单元格数simParameters。NCellID = 1;%物理单元IDsimParameters。GNBPosition = [0 0 0];gNB在(x,y,z)坐标中的位置在一个10ms的帧中,所选SCS的插槽持续时间和插槽数量的%(simParameters.SCS/15);%(毫秒)numSlotsFrame = 10/slotDuration;% 10ms帧的槽位数numSlotsSim = simParameters。NumFramesSim * numSlotsFrame;%模拟插槽数根据ue的距离计算ue可达到的最大CQI值gNB %maxecqis = 0 (simParameters. maxecqis = 0)NumUEs, 1);用于存储终端可达到的最大CQI值ueIdx = 1:simParameters。NumUEs根据UE到gNB的距离,找到匹配的行CQIvsDistance映射matchingRowIdx = find(simParameters. find)CQIvsDistance(:, 1) > simParameters.UEDistance(ueIdx));如果isempty(matchingRowIdx) maxecqis (ueIdx) = simParameters。CQIvsDistance (, 2);其他的maxUECQIs(ueIdx) = simParameters.CQIvsDistance(matchingRowIdx(1), 2);结束结束的数量来表示指标可视化更新的时间间隔%插槽。由于一个槽是模拟的最佳时间粒度,使%确定MetricsStepSize为整数simParameters。MetricsStepSize = ceil(numSlotsSim / simParameters.NumMetricsSteps);如果mod(numSlotsSim, simParameters.NumMetricsSteps) ~= 0如果NumSlotsSim不为,则更新NumMetricsSteps参数%能被它整除simParameters。NumMetricsSteps = floor(numSlotsSim / simParameters.MetricsStepSize);结束将初始UL和DL通道质量定义为n × p矩阵,其中“N”是ue的数量,“P”是运营商中RBs的数量%的带宽。对于每个RB,每个UE,给出了CQI的初始值%随机,并受到相应的最大可达CQI值的限制%为UE到gNB的距离simParameters。InitialChannelQualityUL = 0 (simParameters。NumUEs simParameters.NumRBs);%在不同终端的RBs上保存当前UL CQI值simParameters。InitialChannelQualityDL = 0 (simParameters。NumUEs simParameters.NumRBs);在不同终端的RBs上存储当前DL CQI值ueIdx = 1:simParameters。NumUEs为RBs分配随机的CQI值,以最大可达到的CQI值为限simParameters。InitialChannelQualityUL(ueIdx,:) = randi([1 maxUECQIs(ueIdx)], 1, simParameters.NumRBs);最初,DL和UL CQI值被假定为相等simParameters。InitialChannelQualityDL(ueIdx,:) = simParameters。InitialChannelQualityUL (ueIdx:);结束%存储每个终端关联的逻辑通道信息lchInfo = repmat(struct(“RNTI”[],“LCID”[],“EntityDir”, []), [simParameters。NumUEs 1]);ueIdx = 1:simParameters。NumUEs lchInfo (ueIdx)。RNTI = ueIdx;lchInfo (ueIdx)。LCID = simParameters.RLCChannelConfig.LogicalChannelID(simParameters.AppConfig. logicalchannelid)RNTI == ueIdx);lchInfo (ueIdx)。EntityDir = simParameters.RLCChannelConfig.EntityType(simParameters.AppConfig. appconfig . entitytype)RNTI == ueIdx);结束如果~ isfield (simParameters“SchedulingType”|| simParameters。SchedulingType == 0%如果未指定调度类型或指定基于槽位的调度rbAssignmentPlotPeriodicity = numSlotsFrame;%每帧更新RB分配可视化(10毫秒)tickGranularity = 14;simParameters。PUSCHMappingType =“一个”;simParameters。PDSCHMappingType =“一个”其他的基于符号的调度rbAssignmentPlotPeriodicity = 1;更新RB分配可视化每个插槽tickGranularity = 1;simParameters。PUSCHMappingType =“B”;simParameters。PDSCHMappingType =“B”结束

gNB和ue安装

创建gNB和UE对象,初始化UE的通道质量信息,并在gNB和UE上设置逻辑通道。辅助类hNRGNB.m而且hNRUE.m分别创建gNB和UE节点,包含RLC层和MAC (medium access control)层。对于MAC层,hNRGNB.m使用助手类hNRGNBMAC.m实现gNB MAC功能和hNRUE.m使用hNRUEMAC.m实现UE MAC功能。调度器在hNRSchedulerRoundRobin.m(RR),hNRSchedulerProportionalFair.m(PF),hNRSchedulerBestCQI.m医院药学部(最佳)。所有调度器都继承自基类hNRScheduler.m其中包含核心调度功能。对于RLC层,两者都有hNRGNB.m而且hNRUE.m使用hNRUMEntity.m实现RLC发射机和接收机的功能。实现了终端与gNB之间的PHY层直通hNRUEPassThroughPhy.m而且hNRGNBPassThroughPhy.m,分别。

simParameters。位置= simParameters.GNBPosition;gNB = hNRGNB(simParameters);创建gNB节点创建并添加调度程序开关(simParameters.SchedulerStrategy)情况下“农达”轮询调度程序调度器= hNRSchedulerRoundRobin(simParameters);情况下“PF”比例公平调度程序调度器= hnrschedulerproporalfair (simParameters);情况下“BestCQI”%最佳CQI调度器调度器= hNRSchedulerBestCQI(simParameters);结束addScheduler (gNB,调度器);将调度器添加到gNBgNB。PhyEntity = hNRGNBPassThroughPhy(simParameters);添加直通PHYconfigurePhy (gNB simParameters);setPhyInterface (gNB);%设置接口为PHY层创建UE节点集UEs = cell(simParameters。NumUEs, 1);ueIdx = 1: simParameters。NumUEs simParameters。位置= [simParameters.UEDistance(ueIdx) 0 0];UE位置%ue {ueIdx} = hNRUE(simParameters, ueIdx);问题{ueIdx}。PhyEntity = hNRUEPassThroughPhy(simParameters, ueIdx);添加直通PHYconfigurePhy(问题{ueIdx}, simParameters);setPhyInterface(用正餐{ueIdx});%设置接口为PHY层在gNB初始化UL CQI值updateChannelQuality (gNB simParameters。InitialChannelQualityUL(ueIdx,:), 1, ueIdx);UL % 1在gNB和UE初始化DL CQI值。DL CQI值帮助gNB进行调度,帮助UE进行包错概率估计updateChannelQuality (gNB simParameters。InitialChannelQualityDL(ueIdx,:), 0, ueIdx);% 0为DLsimParameters updateChannelQuality(问题{ueIdx}。InitialChannelQualityDL (ueIdx:));结束%设置逻辑通道lchInfoIdx = 1:size(simParameters. size)RLCChannelConfig, 1) rlcChannelConfigStruct = table2struct(simParameters, 1)RLCChannelConfig (lchInfoIdx:));ueIdx = simParameters.RLCChannelConfig.RNTI(lchInfoIdx);在gNB和UE上设置逻辑通道gNB。configureLogicalChannel (ueIdx rlcChannelConfigStruct);问题{ueIdx}。configureLogicalChannel (ueIdx rlcChannelConfigStruct);结束在gNB和UE节点上添加数据流量模式生成器appIdx = 1: simParameters. size(simParameters. size)AppConfig, 1) device = simParameters.AppConfig.HostDevice(appIdx);rnti = simParameters.AppConfig.RNTI(appIdx);lcid = simParameters.AppConfig.LCID(appIdx);packetSize = simParameters.AppConfig.PacketSize(appIdx);packetInterval = simParameters.AppConfig.PacketInterval(appIdx);使用计算On-Off流量模式的数据速率(kbps)数据包大小百分比(字节)和数据包间隔(毫秒)dataRate = ceil(1000/packetInterval) * packetSize * 8e-3;%将生成的应用数据包的大小限制为最大RLC% SDU大小。最大支持的RLC SDU金宝app大小为9000字节如果packetSize = 9000;结束为开关网络流量模式创建一个对象,并将其添加到指定UE的%。产生终端上行数据流量如果|| device == 2 ulApp = networkTrafficOnOff(“PacketSize”packetSize,“GeneratePacket”,真的,...“定时”, simParameters。NumFramesSim / 100,“停止时间”0,“DataRate”, dataRate);问题{rnti}。addApplication(rnti, lcid, ulApp);结束为指定的开关网络流量模式创建一个对象% UE,并将其添加到gNB。该节点生成下行数据UE在gNB上的流量百分比如果设备== 0 ||设备== 2“PacketSize”packetSize,“GeneratePacket”,真的,...“定时”, simParameters。NumFramesSim / 100,“停止时间”0,“DataRate”, dataRate);gNB。addApplication(rnti, lcid, dlApp);结束结束设置UL和DL包分发机制simParameters。MaxReceivers = simParameters.NumUEs;创建DL包分发对象dlPacketDistributionObj = hNRPacketDistribution(simParameters, 0);% 0为DL创建UL报文分发对象ulPacketDistributionObj = hNRPacketDistribution(simParameters, 1);UL % 1hNRSetUpPacketDistribution(simParameters, gNB, UEs, dlPacketDistributionObj, ulPacketDistributionObj);

处理循环

模拟逐槽运行。在每个槽位执行以下操作:

  • 运行gNB的MAC层和PHY层

  • 运行终端的MAC层和PHY层

  • 特定于层的日志记录和可视化

  • 提前节点的定时器。每1毫秒它也发送触发到应用程序和RLC层。应用层和RLC层根据1毫秒定时器触发执行预定操作。

为MAC (UL & DL)调度信息可视化和日志记录创建一个对象simSchedulingLogger = hNRSchedulingLogger(simParameters);创建RLC统计记录对象simlclogger = hNRRLCLogger(simParameters, lchInfo);为RLC和MAC指标创建可视化对象可视化工具= hNRMetricsVisualizer(simParameters,“RLCLogger”simRLCLogger,“LCHInfo”lchInfo,“MACLogger”, simSchedulingLogger);%运行处理循环slotNum = 0;numSymbolsSim = numSlotsSim * 14;%以符号持续时间为单位的模拟时间%执行模拟中的所有符号symbolNum = 1: tickGranularity: numSymbolsSim如果mod(symbolNum - 1,14) == 0 slotNum = slotNum + 1;结束运行gNB的MAC和PHY运行(gNB);运行终端的MAC和PHYueIdx = 1:simParameters。NumUEs运行(用正餐{ueIdx});结束% RLC测井(仅在槽边界)如果(simParameters。SchedulingType == 1 && mod(symbolNum, 14) == 0) || (simParameters. 14)SchedulingType == 0&& mod(symbolNum-1, 14) == 0) logCellRLCStats(simRLCLogger, gNB, UEs);结束% MAC测井logCellSchedulingStats(simSchedulingLogger, symbolNum, gNB, UEs);%的可视化检查槽边界如果symbolNum > 1 && (simParameters. simParameters. simParameters. simParameters. simParameters. simParameters. simParameters. simParameters. simParameters。SchedulingType == 1 && mod(symbolNum, 14) == 0) || (simParameters. 14)SchedulingType == 0 && mod(symbolNum-1, 14) == 0))% RB分配可视化(如果启用)如果simParameters。RBVisualization如果mod(slotNum, rbAssignmentPlotPeriodicity) == 0%如果达到更新周期,则在槽边界处绘图plotRBGrids (simSchedulingLogger);结束结束% CQI网格可视化(如果启用)如果simParameters。CQIVisualization如果mod(slotNum, numSlotsFrame) == 0在帧边界处绘图plotCQIRBGrids (simSchedulingLogger);结束结束如果达到更新周期,绘制RLC和调度器指标可视化图槽边界%如果mod(slotNum, simParameters.MetricsStepSize) == 0 plotMetrics(可视化工具,slotNum);结束结束%提前定时器为gNB和ue计时14个符号advanceTimer (gNB tickGranularity);ueIdx = 1:simParameters。NumUEsadvanceTimer(UEs{ueIdx}, tickGranularity);结束结束

仿真可视化

以下是运行时可视化的五种类型:

  • 在PUSCH和PDSCH带宽上显示终端的CQI值中启用此可视化日志记录和可视化配置部分。有关详细信息,请参见中的“渠道质量可视化”图形说明NR PUSCH软驱调度的例子。

  • 显示资源网格分配给终端:二维时频网格显示终端的资源分配情况。控件中启用此可视化日志记录和可视化配置部分。参见中“资源网格分配”图NR PUSCH软驱调度的例子。

  • 显示UL调度指标图:“上行调度器性能指标”图中显示的四个图分别表示:UL吞吐量(每个终端和小区)、UL goodput(每个终端和小区)、各终端之间的资源共享百分比(占总UL资源的百分比),以传达调度的公平性,以及各终端的未决UL缓冲区状态,以显示各终端是否获得足够的资源。UL吞吐量的最大可达到的数据速率值在吞吐量和货位图中用虚线表示。性能指标图更新为每metricsStepSize槽。

  • 显示DL调度度量图:像UL指标图一样,“下行调度器性能指标”显示DL方向的相应子图。性能指标图更新为每metricsStepSize槽。

  • 显示RLC度量图:“RLC度量可视化”图显示了RLC层(每个逻辑通道)为每个终端传输的字节数。RLC指标图的每一个更新metricsStepSize槽。

模拟日志

用于仿真的参数和仿真日志保存在mat文件中,以便后期仿真分析和可视化。仿真参数保存在一个mat文件中,文件名为配置参数的值simParameters。ParametersLogFile.每个时间步骤日志、调度分配日志和RLC日志保存在mat文件中simParameters。SimulationLogFile.模拟完成后,打开文件进行加载DLTimeStepLogsULTimeStepLogsSchedulingAssignmentLogs,RLCLogs在工作空间中。

时间步长日志:DL和UL时间步日志格式相同。日志格式的详细信息,请参见《模拟日志》章节NR PUSCH软驱调度

调度分配日志:所有调度任务的信息和相关信息都记录在这个文件中。该表显示了示例日志条目。

RLC日志:有关RLC日志格式的详细信息,请参见NR PUSCH软驱调度

您可以运行脚本NRPostSimVisualization以获得日志的后模拟可视化。在后期模拟脚本中,为您提供了一个变量isLogReplay,提供“资源网格分配”和“渠道质量可视化”图形的可视化选项。

  • isLogReplay为true表示模拟日志的重放。

  • isLogReplayfalse表示分析特定帧的细节。在“资源网格分配”窗口中,输入帧号以可视化整个帧的资源分配。这里输入的帧数也控制了“通道质量可视化”图形的帧数。

%获取日志simulationLogs = cell(1,1);logInfo = struct(“DLTimeStepLogs”[],“ULTimeStepLogs”[],“SchedulingAssignmentLogs”[],“RLCLogs”[]);[logInfo。DLTimeStepLogs logInfo。ULTimeStepLogs] = getSchedulingLogs(simSchedulingLogger); logInfo.SchedulingAssignmentLogs = getGrantLogs(simSchedulingLogger);%调度任务日志logInfo。RLCLogs= getRLCLogs(simRLCLogger); simulationLogs{1} = logInfo; save(simParameters.ParametersLogFile,“simParameters”);将模拟参数保存在mat文件中保存(simParameters。SimulationLogFile,“simulationLogs”);将模拟日志保存在mat文件中

进一步的探索

您可以使用这个示例进一步研究这些选项。

自定义调度

您可以修改已存在的调度策略,创建新的调度策略。执行以下步骤来完成此任务。

创建自定义调度器类

创建一个新类customStrategy.m并继承hNRScheduler.m.实现类的构造函数来调用基类构造函数,如下所示。的构造函数。hNRSchedulerRoundRobin.mhNRSchedulerProportionalFair.mhNRSchedulerBestCQI.m欲知详情。

函数obj = customStrategy(param) obj = obj@hNRScheduler(simParameters);调用超类构造函数来初始化属性初始化特定于此自定义调度策略的任何属性。结束

实现自定义UL调度

覆盖scheduleULResourcesSlot通过在类中实现基类的函数customStrategy.m.函数。

函数uplinkGrants = scheduleULResourcesSlot(obj, slotNum)实现自定义UL调度来填充输出'uplinkGrants'结束

第一次输入obj自定义调度器对象。通过继承,它包含基类的上下文hNRScheduler.m它可以作为调度决策的输入。第二次输入slotNum是在10ms帧中其UL资源被调度的槽位号。注意,它不是运行UL调度器的当前槽,而是正在被调度的槽。中使用上下文obj,执行自定义调度并填充输出uplinkGrants使用一个有效的UL调度分配数组来构造此函数。uplinkGrants每个UE最多只能分配一个任务。这个数组中的每个元素都是一个UE的PUSCH赋值。另外,根据UL分配中分配的HARQ流程ID更新UL HARQ流程的上下文。看到scheduleULResourcesSlot函数hNRScheduler.m欲知详情。

实现自定义DL调度

遵循类似自定义UL调度的过程来覆盖scheduleDLResourcesSlot通过在类中实现基类的函数customStrategy.m.函数。

创建并安装自定义调度器

类中的gNB中,若要在本例中使用自定义调度器,请创建其对象并将其安装到gNB和ue安装部分。

调度器= customScheduler(simParameters);addScheduler (gNB,调度器);将调度器添加到gNB

使用5G Toolbox™物理层

您还可以通过使用创建PHY对象来从直通PHY层切换到5G Toolbox™物理层处理hNRGNBPhy.m而且hNRUEPhy.m.有关详细信息,请参见“gNB和UEs设置”部分基于物理层集成的NR电池性能评估

基于所选择的调度策略,本例显示了gNB将UL和DL资源分配给多个ue。资源网格的运行时可视化显示提供了关于分配给每个UE的RBs和分配用于传输的HARQ进程ID的详细信息。UL和DL调度性能基于终端上的吞吐量和goodput、资源共享公平性和未决缓冲区状态的运行时图进行分析。通过使用保存的日志进行更彻底的后期模拟分析,可以提供每个槽基础上发生的操作的详细图像。

使用RLC AM

您还可以通过修改输入结构字段将RLC实体的工作模式从UM切换到确认模式(AM)EntityType而且SeqNumFieldLengthconfigureLogicalChannel的函数hNRNode.m.设置EntityType到3和SeqNumFieldLength到12岁或18岁。您还可以添加和设置以下字段的输入结构,以探索RLC AM功能:

  • PollRetransmitTimer: RLC AM实体的发送端用来重传轮询的定时器

  • PollPDU: RLC AM实体发送端根据pdu数量触发轮询的参数

  • PollByte: RLC AM实体发送端使用的参数,用于触发基于SDU字节数的轮询

  • MaxRetransmissions: RLC SDU(包括段)所对应的最大重传数

  • StatusProhibitTimer: RLC AM实体接收端使用的定时器,用于禁止频繁传输状态pdu

附录

下面的例子使用了这些helper函数和类:

参考文献

[1]3gpp ts 38.104。“NR;基站(BS)无线电发射和接收。第三代伙伴计划;技术规范集团无线接入网

[2]3gpp ts 38.214。“NR;数据的物理层程序。”第三代伙伴计划;技术规范集团无线接入网

[3]3gpp ts 38.321。“NR;介质访问控制(MAC)协议规范第三代伙伴计划;技术规范集团无线接入网

[4]3gpp ts 38.322。“NR;无线电链路控制协议规范。第三代伙伴计划;技术规范集团无线接入网

[5]3gpp ts 38.331。“NR;无线电资源控制协议规范。第三代伙伴计划;技术规范集团无线接入网

相关的话题