Включите пользовательский планировщик в симуляции уровня системы

В этом примере показано, как создать пользовательскую стратегию планирования и управлять ею с помощью интерфейсов, предлагаемых планировщиком среднего управления доступом (MAC). Пример также показывает, как интегрировать пользовательскую стратегию планирования в среду симуляции уровня системы 5G и оценить производительность сети.

Интерфейс планировщика

Планировщик предлагает функциональный интерфейс, который позволяет слою MAC управлять планировщиком. Вызовы функции падают в любой из этих двух категорий, аналогичных описанному ниже. Каждый вызов имеет уникальную роль.

Интерфейс, чтобы обновить контекст планировщика

Набор вызовов функции обновляет контекст планировщика. Этот контекст содержит информацию, используемую планировщиком, чтобы принять решения планирования.

Интерфейс, чтобы запустить DL и планировщик UL, чтобы получить присвоения ресурса

Эти интерфейсные вызовы (чтобы запустить 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

Настройка планирование 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 суперклассе.

Реализуйте пользовательское планирование DL

Выполните шаги (похожий на 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 после обновления буферного состояния 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 после обновления буферного состояния 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 после обновления качества канала 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.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте