В этом примере показано, как создать пользовательскую стратегию планирования и управлять ею с помощью интерфейсов, предлагаемых планировщиком среднего управления доступом (MAC). Пример также показывает, как интегрировать пользовательскую стратегию планирования в среду симуляции уровня системы 5G и оценить производительность сети.
Планировщик предлагает функциональный интерфейс, который позволяет слою MAC управлять планировщиком. Вызовы функции падают в любой из этих двух категорий, аналогичных описанному ниже. Каждый вызов имеет уникальную роль.
Набор вызовов функции обновляет контекст планировщика. Этот контекст содержит информацию, используемую планировщиком, чтобы принять решения планирования.
Эти интерфейсные вызовы (чтобы запустить DL и планировщик UL) обеспечивают решения планирования, который состоит из DL и присвоений ресурса UL.
Для подробного описания формата ввода и вывода этих функций см. hNRScheduler.m.
В этом разделе описываются демонстрационную стратегию планирования, которую использует этот пример.
Стратегия планирования, рассмотренная в этом примере, является циклической стратегией без поддержки повторных передач. Каждый UE получает каждую Энную группу блока ресурса (RBG) в полосе пропускания, где N является количеством UEs в ячейке. UL и планировщики DL присваивают RBGs UE, если существует ненулевая буферная сумма в соответствующем направлении. hCustomScheduler.m класс помощника используется, чтобы реализовать эту стратегию планирования.
Выполните эти шаги, чтобы создать и реализовать эту стратегию планирования.
Создайте новый класс hCustomScheduler
, и наследуйте его от hNRScheduler.m суперкласса. Реализуйте конструктора класса, чтобы вызвать конструктора суперкласса.
function obj = hCustomScheduler(simParameters)
% Invoke the super class constructor to initialize the properties
obj = obj@hNRScheduler(simParameters);
% Initialize the properties that are specific to this custom scheduling strategy
end
Настройка планирование UL вовлекает переопределение функций суперкласса в hCustomScheduler
выбрать пазы UL, которые будут запланированы и запланируют выбранные пазы.
Замените функциональный selectULSlotsToBeScheduled
с вашей пользовательской логикой, чтобы выбрать пазы, которые будут запланированы в текущем запуске.
function slotNum = selectULSlotsToBeScheduled(obj)
% Select the set of slots to be scheduled in this UL scheduler run
end
Если вы не заменяете эту функцию, стратегия выбора паза по умолчанию реализована в суперклассе (hNRScheduler.m).
Замените scheduleULResourcesSlot
функционируйте со своей пользовательской логикой, чтобы запланировать выбранные пазы. Если selectULSlotsToBeScheduled
выбирает несколько пазов, затем механизм планировщика вызывает эту функцию для каждого из выбранных пазов. Один паз планируется на вызов входным параметром slotNum
как запланированный паз. Ваша пользовательская логика должна вывести массив допустимых присвоений UL для запланированного паза. Каждое присвоение UL является структурой, которая содержит поля, чтобы задать физический восходящий канал совместно использованный канал (PUSCH) передача. Для подробного описания полей структуры смотрите scheduleULResourcesSlot
функция в hNRScheduler.m классе.
function uplinkGrants = scheduleULResourcesSlot(obj,slotNum)
% Implement custom UL scheduling to populate the output uplink grants
end
Изучить, как планирование UL настраивается путем переопределения scheduleULResourcesSlot
согласно описанной стратегии, см. hCustomScheduler.m. Пользовательская стратегия не заменяет selectULSlotsToBeScheduled
функция и стратегия выбора паза значения по умолчанию использования в hNRScheduler.m суперклассе.
Выполните шаги (похожий на UL, планирующий), чтобы настроить планирование DL. Процесс включает переопределение selectDLSlotsToBeScheduled
и scheduleDLResourcesSlot
функции в hCustomScheduler
выбрать пазы DL, которые будут запланированы и запланируют выбранные пазы.
function slotNum = selectDLSlotsToBeScheduled(obj)
% Select the set of slots to be scheduled in this DL scheduler run
end
function downlinkGrants = scheduleDLResourcesSlot(obj,slotNum)
% Implement custom DL scheduling to populate the output downlink grants
end
Изучить, как планирование DL настраивается путем переопределения scheduleDLResourcesSlot
согласно описанной стратегии, см. hCustomScheduler.m. Пользовательская стратегия не заменяет selectDLSlotsToBeScheduled
функция и стратегия выбора паза значения по умолчанию использования в hNRScheduler.m суперклассе.
param.NumUEs = 4; % Number of UEs in the cell param.NumRBs = 160; % Number of resource blocks in the bandwidth scheduler = hCustomScheduler(param); % Scheduler object
Этот раздел обновляет контекст планировщика и запускает планировщик с помощью интерфейса планировщика.
Запустите DL и планировщики UL. Они звонят по поводу, берут информацию о текущем времени как входная структура.
% Current system frame number currentTimeInfo.SFN = 0; % Current slot number currentTimeInfo.CurrSlot = 0; % Current symbol number currentTimeInfo.CurrSymbol = 0; % Assign UL resources to UEs for the slot to be scheduled ulResourceAssignments = runULScheduler(scheduler,currentTimeInfo); disp(length(ulResourceAssignments));
0
% Assign DL resources to UEs for the slot to be scheduled
dlResourceAssignments = runDLScheduler(scheduler,currentTimeInfo);
disp(length(dlResourceAssignments));
0
Поскольку планировщик не имеет никакой информации о UL и буферном состоянии DL, это принимает буферное состояние как нуль и не планирует ресурса.
Запустите планировщик DL после обновления буферного состояния DL трех UEs.
% Update DL buffer status for UE-1 lcBufferStatus.RNTI = 1; lcBufferStatus.LogicalChannelID = 20; lcBufferStatus.BufferStatus = 2000; % In bytes updateLCBufferStatusDL(scheduler,lcBufferStatus); % Update DL buffer status for UE-2 lcBufferStatus.RNTI = 2; lcBufferStatus.LogicalChannelID = 25; lcBufferStatus.BufferStatus = 3000; % In bytes updateLCBufferStatusDL(scheduler,lcBufferStatus); % Update DL buffer status for UE-3 lcBufferStatus.RNTI = 3; lcBufferStatus.LogicalChannelID = 28; lcBufferStatus.BufferStatus = 8000; % In bytes updateLCBufferStatusDL(scheduler,lcBufferStatus); % Run DL scheduler to see the scheduled assignments dlResourceAssignments = runDLScheduler(scheduler,currentTimeInfo); for i = 1:length(dlResourceAssignments) disp(dlResourceAssignments{i}); end
RNTI: 1 Type: 'newTx' RBGAllocationBitmap: [1 0 0 0 1 0 0 0 1 0] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 PrecodingMatrix: 1 MCS: 9 FeedbackSlotOffset: 2 RV: 0 HARQID: 0 NDI: 1 RNTI: 2 Type: 'newTx' RBGAllocationBitmap: [0 1 0 0 0 1 0 0 0 1] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 PrecodingMatrix: 1 MCS: 9 FeedbackSlotOffset: 2 RV: 0 HARQID: 0 NDI: 1 RNTI: 3 Type: 'newTx' RBGAllocationBitmap: [0 0 1 0 0 0 1 0 0 0] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 PrecodingMatrix: 1 MCS: 9 FeedbackSlotOffset: 2 RV: 0 HARQID: 0 NDI: 1
UE-4 не получил ресурсов, потому что буферное состояние DL обновляется только для UE-1, UE-2 и UE-3.
Запустите планировщик UL после обновления буферного состояния UL всех UEs. Эта информация прибывает в форме CE буферного отчета о состоянии (BSR) из UEs.
% Update UL buffer status for UE-1 macCEInfo.RNTI = 1; macCEInfo.LCID = 60; % Long Truncated BSR macCEInfo.Packet = [64;21;88;108]; % BSR packet content processMACControlElement(scheduler,macCEInfo); % Update UL buffer status for UE-2 macCEInfo.RNTI = 2; macCEInfo.LCID = 62; % Long BSR macCEInfo.Packet = [53;34;78;101;103]; % BSR packet content processMACControlElement(scheduler,macCEInfo); % Update UL buffer status for UE-3 macCEInfo.RNTI = 3; macCEInfo.LCID = 60; % Long Truncated BSR macCEInfo.Packet = [38;48;55;12]; % BSR packet content processMACControlElement(scheduler,macCEInfo); % Update UL buffer status for UE-4 macCEInfo.RNTI = 4; macCEInfo.LCID = 62; % Long BSR macCEInfo.Packet = [64;21;55]; % BSR packet content processMACControlElement(scheduler,macCEInfo); % Run UL scheduler to see the scheduled assignments ulResourceAssignments = runULScheduler(scheduler,currentTimeInfo); for i = 1:length(ulResourceAssignments) disp(ulResourceAssignments{i}); end
RNTI: 1 Type: 'newTx' RBGAllocationBitmap: [1 0 0 0 1 0 0 0 1 0] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 NumAntennaPorts: 1 MCS: 9 TPMI: 0 RV: 0 HARQID: 0 NDI: 1 RNTI: 2 Type: 'newTx' RBGAllocationBitmap: [0 1 0 0 0 1 0 0 0 1] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 NumAntennaPorts: 1 MCS: 9 TPMI: 0 RV: 0 HARQID: 0 NDI: 1 RNTI: 3 Type: 'newTx' RBGAllocationBitmap: [0 0 1 0 0 0 1 0 0 0] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 NumAntennaPorts: 1 MCS: 9 TPMI: 0 RV: 0 HARQID: 0 NDI: 1 RNTI: 4 Type: 'newTx' RBGAllocationBitmap: [0 0 0 1 0 0 0 1 0 0] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 NumAntennaPorts: 1 MCS: 9 TPMI: 0 RV: 0 HARQID: 0 NDI: 1
Запустите планировщик UL после обновления качества канала UL, и затем наблюдайте схему модуляции и кодирования (MCS) индекс в присвоениях ресурса.
% Update the UL channel quality for UE-2 channelQualityInfo.RNTI = 2; channelQualityInfo.CQI = 8*ones(1,param.NumRBs); updateChannelQualityUL(scheduler,channelQualityInfo); % Update the UL channel quality for UE-3 channelQualityInfo.RNTI = 3; channelQualityInfo.CQI = 15*ones(1,param.NumRBs); updateChannelQualityUL(scheduler,channelQualityInfo); % Run UL scheduler to see the scheduled assignments ulResourceAssignments = runULScheduler(scheduler,currentTimeInfo); for i = 1:length(ulResourceAssignments) disp(ulResourceAssignments{i}); end
RNTI: 1 Type: 'newTx' RBGAllocationBitmap: [1 0 0 0 1 0 0 0 1 0] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 NumAntennaPorts: 1 MCS: 9 TPMI: 0 RV: 0 HARQID: 1 NDI: 1 RNTI: 2 Type: 'newTx' RBGAllocationBitmap: [0 1 0 0 0 1 0 0 0 1] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 NumAntennaPorts: 1 MCS: 11 TPMI: 0 RV: 0 HARQID: 1 NDI: 1 RNTI: 3 Type: 'newTx' RBGAllocationBitmap: [0 0 1 0 0 0 1 0 0 0] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 NumAntennaPorts: 1 MCS: 25 TPMI: 0 RV: 0 HARQID: 1 NDI: 1 RNTI: 4 Type: 'newTx' RBGAllocationBitmap: [0 0 0 1 0 0 0 1 0 0] StartSymbol: 0 NumSymbols: 14 SlotOffset: 1 MappingType: 'A' DMRSLength: 1 NumLayers: 1 NumCDMGroupsWithoutData: 2 NumAntennaPorts: 1 MCS: 9 TPMI: 0 RV: 0 HARQID: 1 NDI: 1
Присвоения показывают, что схема кодирования модуляции (MCS) присвоения ресурса UL на UE-3 больше схемы кодирования модуляции (MCS) UE-2. Точно так же можно наблюдать эффект качества канала на MCS для присвоений ресурса DL при помощи updateChannelQualityDL
функционируйте, чтобы обновить качество канала DL.
Включите планировщик к примеру симуляции уровня системы 5G Toolbox™ NR FDD, Планируя Оценку результатов деятельности.
Скопируйте hCustomScheduler.m файл в папку в качестве примера.
Создайте пользовательский объект планировщика и установите его на gNB (как описано в разделе "gNB and UEs Setup" NR FDD, Планируя пример Оценки результатов деятельности).
scheduler = hCustomScheduler(simParameters);
addScheduler(gNB,scheduler);
% Add scheduler to gNB
Запустите основной скрипт примера симуляции NR FDD, Планируя Оценку результатов деятельности, и затем наблюдайте эффективность планировщика.
Получившиеся графики показывают, что пропускная способность и полезная пропускная способность (который составляет только новые передачи) являются тем же самым для всех UEs, потому что пользовательская стратегия планирования не поддерживает повторные передачи.
[1] 3GPP TS 38.321. “NR; спецификация протокола Среднего управления доступом (MAC)”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.