Планирование NR PUSCH FDD

Этот пример показывает функциональность планирования слоя среднего управления доступом (MAC) стека New Radio (NR) 5G. Стратегия планирования присваивает физический восходящий канал совместно использованный канал (PUSCH) ресурсы к набору оборудования статического пользователя (UEs), соединенный с gNB. Стратегия планирования управляет разовым частотой разделением ресурсов среди UEs. Пример использует режим дуплекса деления частоты (FDD). Следовательно, восходящий канал (UL) передача использует все пазы. Этот пример также показывает функциональность слоя управления линией радиосвязи (RLC) в неподтвержденном режиме (UM). Пример абстрагирует физический уровень и принимает основанный на вероятности подход при помощи принятых значений качественной характеристики канала (CQI) UL к пакетным отказам приема модели. Производительность стратегии планирования оценена в терминах достигнутой пропускной способности MAC и справедливости в разделении ресурсов.

Введение

В этом примере показано, как стратегия планирования (управляемый gNB) присваивает ресурсы UL среди UEs. Таблица суммирует различные операции в gNB и UEs, смоделированном в этом примере, чтобы упростить передачу UL.

Планировщик запускается каждый p пазы, чтобы присвоить ресурсы UL, где p является сконфигурированной периодичностью планировщика. В каждом запуске количество запланированных пазов равно периодичности запущенного планировщика, p. Первый паз, среди p пазов, которые будут запланированы в запуске, является следующим предстоящим пазом, который удовлетворяет возможности времени для подготовки PUSCH UEs. Например, рисунок показывает способ, которым планировщик выбирает пазы во время двух последовательных запусков. Это принимает периодичность планировщика (p) как 3 паза. Следовательно, планировщик выполняется после каждых 3 пазов и планирует ресурсы для 3 пазов. Возможность времени для подготовки PUSCH всего UEs принята как больше, чем 1 паз (14 символов), но меньше чем 2 паза (28 символов).

  • Запуск 1: Когда планировщик запустится в начале Паза-A, он планирует 3 паза, начинающие с Паза-C, потому что для Паза-A и Вставляют-B UEs, не получают достаточно времени для подготовки PUSCH (UEs получает время 0 символов в начале Паза-A и 14 символов в начале Паза-B). Для Паза-C UEs получают 28 символов для подготовки PUSCH, и это удовлетворяет возможности времени для подготовки PUSCH. Следовательно, Паз-C, D, и E планируются в этом запуске.

  • Запуск 2: Когда планировщик запустится в начале Паза-D, он планирует следующие 3 непрерывных паза, начинающие с Паза-F (Паз-F, G, и H).

Можно выбрать любую из реализованных стратегий планирования: пропорциональная ярмарка (PF), лучший CQI или циклический алгоритм (RR). Различные поддерживаемые входные параметры к планировщику UL перечислены наряду со стратегиями планирования, которые рассматривают их.

Два пакета управления, буферный отчет о состоянии (BSR) и присвоение UL, приняты, чтобы быть отправленными из полосы без потребности ресурсов для передачи.

Сигнал ссылки демодуляции (DM-RS) не моделируется в этом примере. Два символа в пазе сохранены неиспользованными через частотный диапазон выделений ресурса.

Этот пример модели:

  • Паз базирующееся планирование UL. Планировщик UL гарантирует, что UEs получают необходимое время для подготовки PUSCH.

  • Выделение, состоящее из нескольких несмежных участков, ресурсов частотного диапазона в терминах ресурса блокирует группы (RBGs).

  • Конфигурируемый интервал поднесущей (15, 30, 60 кГц) приводящий к различной длительности паза.

  • Асинхронный гибридный автоматический повторный запрос UL (HARQ) механизм.

  • Обнаружение успеха/отказа приема UL UEs, использующим новый индикатор данных (NDI), отмечает существующий в присвоении UL.

  • Несколько логических каналов, чтобы поддержать различные шаблоны трафика приложения.

  • Логическое установление приоритетов канала (LCP) в UE, чтобы распределить полученное присвоение UL среди логических каналов.

  • Периодический шаблон трафика приложения UL.

  • RLC, действующий в режиме UM.

Настройка сценария

Для симуляции, набор эти ключевые параметры конфигурации:

  • Время симуляции

  • Количество UEs

  • Расстояние UEs от gNB (влияет на значения UL CQI для UEs),

  • Шаблон трафика приложения в UEs, чтобы генерировать трафик

  • Настройка RLC для сущностей Tx и Rx в UEs и gNB соответственно

  • Логическая настройка канала UEs и gNB

  • Планирование стратегии: PF, Лучший CQI, RR

  • Периодичность BSRs, отправленного UEs, чтобы сообщить gNB о незаконченной буферной сумме

  • Время для подготовки PUSCH для UEs

  • Пропускная способность PUSCH в терминах количества блоков ресурса (RBS)

  • Интервал поднесущей: 15, 30, 60 (kHz)

  • Тип настройки размера RBG

  • Начальное качество канала UL и его механизм обновления

  • Отношение успешной вероятности приема с качеством канала

rng('default'); % Reset the random number generator
simParameters = []; % Clear the simParameters variable
simParameters.NumFramesSim = 200; % Simulation time in terms of number of 10 ms frames

% Number of UEs in the simulation. UEs are assumed to have sequential radio
% network temporary identifiers (RNTIs) from 1 to NumUEs. If you change the
% number of UEs, ensure that the simulation parameters
% simParameters.UEDistance and simParameters.PacketPeriodicityUEs are
% array of length equal to NumUEs; and simParameters.PacketSizesUEs,
% properties of simParameters.RLCConfig, and simParameters.LCHConfig
% consists of number of rows equal to numUEs.
simParameters.NumUEs = 4;
% Number of logical channels in each UE. If you change the number of
% logical channels, ensure that the simulation parameters
% simParameters.PacketSizesUEs, properties of simParameters.RLCConfig, and
% simParameters.LCHConfig consists of number of columns equal to
% NumLogicalChannels.
simParameters.NumLogicalChannels = 3;
simParameters.UEDistance = [100; 250; 700; 750]; % Distance of UEs from gNB (in meters)

% Set the application traffic pattern for UEs. For example, the vector
% element value 50 at position 4 represents that for each of the logical
% channels of UE-4, a packet is generated every 50 ms
simParameters.PacketPeriodicityUEs = [50; 60; 60; 50]; % Periodicity at which UEs generate packets in logical channels (in ms)
% The N-by-P matrix represents the size of packet generated by
% the UE in each logical channel, where 'N' represents the number of UEs
% and 'P' represents the number of logical channels. For example, the value
% 1000 at position (4, 1) represents a packet of size 1000 bytes generated by
% UE-4 for logical channel id 1
simParameters.PacketSizesUEs = [3000 4000 100000;
    500  25000 60000;
    2000 80000 4000;
    1000 20000 4000];

% RLC configuration
% Each property of RLCConfig must be an N-by-P matrix, where 'N' represents the number of UEs
% and 'P' represents the number of logical channels. A matrix element at position
% (i, j) corresponds to property value of a UE with RNTI value 'i' and logical channel id 'j'.
% Sequence number field length (in bits) to be used by each UE for their logical channels
simParameters.RLCConfig.SNFieldLength = [6 6 12;
    6 6 12;
    6 12 6;
    6 6 12];
% Reassembly timer to be used by each UE for their logical channels
simParameters.RLCConfig.ReassemblyTimer = [5 10 15;
    5  5 10;
    5  5  5;
    5 10 15];
% Max buffer length of each logical channel (to model Tx buffer overflow)
simParameters.RLCConfig.MaxTxBufferLength = [10240 10240 1024000;
    1024 102400 204800;
    10240 10240 10240;
    10240 102400 102400];

% Logical channel configuration
% Each property of LCHConfig must be an N-by-P matrix, where 'N' represents the number of UEs
% and 'P' represents the number of logical channels. A matrix element at position
% (i, j) corresponds to property value of a UE with RNTI value 'i' and logical channel id 'j'.
% Mapping between logical channel and logical channel group id
simParameters.LCHConfig.LCGID = [1 3 2;
    1 2 2;
    1 2 3;
    5 1 2];
% Priority of each logical channel
simParameters.LCHConfig.Priority = [1 5 8;
    1 1 6;
    4 10 4;
    10 11 13];
% Prioritized bitrate (in kilo bytes per second) of each logical channel
simParameters.LCHConfig.PBR = [8 16 32;
    8 128 32;
    8 16 32;
    8 16 32];
% Bucket size duration (in ms) of each logical channel
simParameters.LCHConfig.BSD = [5 10 50;
    5 20 20;
    5 5 5;
    5 10 20];

% MAC configuration
% Set the scheduler run periodicity in terms of number of slots. Value must be
% less than the number of slots in a 10 ms frame
simParameters.SchedulerPeriodicity = 4;
simParameters.SchedulerStrategy = 'PF'; % Supported scheduling strategies: 'PF', 'RR' and 'BestCQI'
% Moving average weight parameter within the range [0, 1] calculates
% average data rate for a UE. The value is used in the PF scheduling strategy.
% Parameter value closer to 1 implies more weight on the instantaneous
% data rate. Parameter value closer to 0 implies more weight on the past
% data rate
% AverageDataRate = ((1 - MovingAvgDataRateWeight) * PastDataRate) + (MovingAvgDataRateWeight * InstantaneousDataRate)
simParameters.MovingAvgDataRateWeight = 0.5;
simParameters.BSRPeriodicity = 5; % In ms
simParameters.EnableHARQ = true; % Flag to enable or disable HARQ. If disabled, there are no retransmissions
simParameters.NumHARQ = 16; % Number of HARQ processes in each UE
% PUSCH preparation time. gNB ensures that PUSCH assignment is received at
% UEs PUSCHPrepTime ahead of the transmission time
simParameters.PUSCHPrepTime = 200; % In microseconds
% Maximum RBs allotted to a UE in a slot for a PUSCH transmission (limit is
% applicable for new PUSCH assignments and not for the retransmissions)
simParameters.RBAllocationLimitUL = 15;

% Physical layer and channel configuration
% RB count for 5 MHz band with 15 kHz subcarrier spacing (SCS). The complete
% UL bandwidth is assumed to be allotted for PUSCH
simParameters.NumRBs = 25;
simParameters.SCS = 15;
% Set the RBG size configuration to 1 (configuration-1 RBG table) or 2
% (configuration-2 RBG table) as defined in 3GPP TS 38.214 Section
% 5.1.2.2.1
simParameters.RBGSizeConfig = 1;

% Configure parameters to update channel conditions for the UEs. Channel
% quality is periodically improved or deteriorated by CQIDelta every
% channelUpdatePeriodicity seconds for all RBs of a UE. Whether channel
% conditions for a particular UE improve or deteriorate is randomly
% determined: RBCQI = RBCQI +/- CQIDelta
simParameters.ChannelUpdatePeriodicity = 0.5; % In sec
simParameters.CQIDelta = 1;
% Mapping between distance from gNB (first column in meters) and maximum
% achievable UL CQI value (second column). For example, if a UE is 700
% meters away from the gNB, it can achieve a maximum CQI value of 10 as the
% distance falls within the [501, 800] meters range, as per the mapping. Set
% the distance in increasing order and the achievable CQI value in decreasing
% order
simParameters.CQIvsDistance = [
    200  15;
    500  12;
    800  10;
    1000  8;
    1200  7];
% Expression to calculate reception success probability of a PUSCH packet
% based on the channel quality. 'x' represents the average CQI of the RBs
% over which the PUSCH packet is received
simParameters.CQISuccessProb = '.4 + (x/20)';

% Logging and visualization configuration
% Flag to enable or disable run time CQI visualization
simParameters.CQIVisualization = true;
% Flag to enable or disable run time visualization of RB assignment. If enabled,
% then for slot based scheduling it updates every frame (10 ms) to show RB
% allocation to the UEs for different slots of the last frame.
simParameters.RBVisualization = true;

% The output metrics plots are updated NumMetricsSteps times during
% simulation
simParameters.NumMetricsSteps = 20;

% MAT-files used for post simulation visualization
simParameters.ParametersLogFile = 'simParameters'; % For logging the simulation parameters
simParameters.SimulationLogFile = 'simulationLogs'; % For logging the simulation logs

hNRULSchedulingValidateConfig(simParameters); % Validate the simulation configuration

Выведенные параметры

На основе первичных параметров конфигурации вычислите выведенные параметры.

% Slot duration for the selected SCS and number of slots in a 10 ms frame
slotDuration = 1/(simParameters.SCS/15); % Slot duration in ms
numSlotsFrame = 10/slotDuration; % Number of slots in 10 ms frame
numSlotsSim = simParameters.NumFramesSim * numSlotsFrame; % Number of slots in the simulation

% Packet periodicities of UEs in terms of number of slots
appPeriodicityUEsSlots = simParameters.PacketPeriodicityUEs ./ slotDuration;

% Maximum RLC SDU length (in bytes)
simParameters.maxRLCSDULength = 9000;

% RLC entity direction. Value 0 represents downlink only, 1
% represents UL only and 2 represents both UL and downlink
% direction. Setting entity direction to have only UL
simParameters.RLCConfig.EntityDir = ones(simParameters.NumUEs, simParameters.NumLogicalChannels);

% Logical channel id
simParameters.LCHConfig.LCID = ones(simParameters.NumUEs, simParameters.NumLogicalChannels) .* (1:simParameters.NumLogicalChannels);

% Construct information for RLC logger
lchInfo = repmat(struct('LCID',[],'EntityDir',[]), [simParameters.NumUEs 1]);
for idx=1:simParameters.NumUEs
    lchInfo(idx).LCID = simParameters.LCHConfig.LCID(idx, :);
    lchInfo(idx).EntityDir = simParameters.RLCConfig.EntityDir(idx, :);
end

% Periodicity of channel update in terms of number of slots
channelUpdatePeriodicitySlots = floor((simParameters.ChannelUpdatePeriodicity * 1000)/...
    slotDuration);
% Find maximum achievable CQI value for UEs based on their distance from
% the gNB
maxUECQIs = zeros(simParameters.NumUEs, 1); % To store the maximum achievable CQI value for UEs
for ueIdx = 1:simParameters.NumUEs
    % Based on the distance of the UE from gNB, find matching row in
    % CQIvsDistance mapping
    matchingRowIdx = find(simParameters.CQIvsDistance(:, 1) > simParameters.UEDistance(ueIdx));
    if isempty(matchingRowIdx)
        maxUECQIs(ueIdx) = simParameters.CQIvsDistance(end, 2);
    else
        maxUECQIs(ueIdx) = simParameters.CQIvsDistance(matchingRowIdx(1), 2);
    end
end

% Interval at which metrics visualization updates in terms of number of
% slots. Make sure that MetricsStepSize is an integer
simParameters.MetricsStepSize = ceil(numSlotsSim / simParameters.NumMetricsSteps);
if mod(numSlotsSim, simParameters.NumMetricsSteps) ~= 0
    % Update the NumMetricsSteps parameter if numSlotsSim is not
    % completely divisible by it
    simParameters.NumMetricsSteps = floor(numSlotsSim / simParameters.MetricsStepSize);
end

gNB и Setup UEs

Создайте gNB и объекты UE, инициализируйте информацию об условии канала UL для UEs в gNB и настройте логические каналы в gNB и UE. Классы помощника hNRGNB.m и hNRUE.m создают gNB и узел UE соответственно, содержа слой RLC и MAC. Для слоя МАКа hNRGNB.m использует класс помощника hNRGNBMAC.m, чтобы реализовать функциональность gNB MAC, и hNRUE.m использует hNRUEMAC.m, чтобы реализовать функциональность УИ МАКА. Планировщик реализован в hNRGNBMACScheduler.m. Для слоя RLC и hNRGNB.m и hNRUE.m используют hNRUMTransmitter.m, чтобы реализовать функциональность передатчика RLC и hNRUMReceiver.m, чтобы реализовать функциональность получателя RLC.

gNB = hNRGNB(simParameters); % Create the gNB node
scheduler = hNRGNBMACScheduler(simParameters); % Create MAC scheduler
addScheduler(gNB, scheduler); % Add scheduler to gNB

% Create and store UE node objects
UEs = cell(simParameters.NumUEs, 1);
for ueIdx=1:simParameters.NumUEs
    UEs{ueIdx} = hNRUE(simParameters, ueIdx);
end

% Define UL channel quality as an N-by-P matrix, where N is the number
% of UEs and P is the number of RBs in the carrier bandwidth. The initial
% value of CQI for each RB, for each UE, is given randomly and is limited
% by the maximum achievable CQI value corresponding to the distance of the
% UE from gNB. Update the defined channel quality information to UEs and
% gNB
uplinkChannelQuality = zeros(simParameters.NumUEs, simParameters.NumRBs); % To store current UL CQI values on the RBs for different UEs
for ueIdx = 1:simParameters.NumUEs
    % Assign random CQI values for the RBs, limited by the maximum achievable CQI value
    uplinkChannelQuality(ueIdx, :) = randi([1 maxUECQIs(ueIdx)], 1, simParameters.NumRBs);
    % Update the UL CQI values at gNB (UL direction is represented as 1)
    updateChannelQualityStatus(gNB, uplinkChannelQuality(ueIdx, :), 1, ueIdx);
end

% Setup logical channels
for ueIdx=1:simParameters.NumUEs
    for lcid = 1:simParameters.NumLogicalChannels
        % Create RLC channel configuration structure
        rlcChannelConfigStruct.LCID = simParameters.LCHConfig.LCID(ueIdx, lcid);
        rlcChannelConfigStruct.SnFieldLength = simParameters.RLCConfig.SNFieldLength(ueIdx, lcid);
        rlcChannelConfigStruct.MaxTxBufferLength = simParameters.RLCConfig.MaxTxBufferLength(ueIdx, lcid);
        rlcChannelConfigStruct.ReassemblyTime = simParameters.RLCConfig.ReassemblyTimer(ueIdx, lcid);
        rlcChannelConfigStruct.EntityDir = simParameters.RLCConfig.EntityDir(ueIdx, lcid);
        rlcChannelConfigStruct.LCGID = simParameters.LCHConfig.LCGID(ueIdx, lcid);
        rlcChannelConfigStruct.Priority = simParameters.LCHConfig.Priority(ueIdx, lcid);
        rlcChannelConfigStruct.PBR = simParameters.LCHConfig.PBR(ueIdx, lcid);
        rlcChannelConfigStruct.BucketSizeDuration = simParameters.LCHConfig.BSD(ueIdx, lcid);
        
        % Setup logical channel at gNB for the UE
        configureLogicalChannel(gNB, ueIdx, rlcChannelConfigStruct);
        % Setup logical channel at UE
        configureLogicalChannel(UEs{ueIdx}, ueIdx, rlcChannelConfigStruct);
    end
end

% Initialize buffers to exchange packets between UEs and gNB
hNRPacketExchangeBuffer(simParameters);

Обработка цикла

Симуляция является пазом запуска пазом. В каждом пазе выполняются эти операции:

  • Условия канала обновления: Обновите значения UL CQI в RBS для каждого UE на основе периодичности обновления канала.

  • Запустите планировщик: Если планировщик собирается запуститься в этом пазе (на основе его сконфигурированной периодичности), присвойте ресурсы UL UEs. В одном запущенном планировщике могут быть запланированы ресурсы нескольких предстоящих пазов. Для каждого запланированного паза, присвоения RBS для повторных передач выполняются сначала, сопровождаются присвоениями для новой передачи (если существует какой-либо покинутый RBS). UE ограничивается максимумом 1 присвоения PUSCH на паз.

  • Управление Tx (gNB): Создайте и отправьте присвоения UL на основе присвоений, сделанных соответствующими планировщиками.

  • Сгенерируйте трафик приложения: Генерируйте трафик UL согласно сконфигурированной периодичности шаблона трафика приложения.

  • Данные Tx (UE): UEs отправляют пакеты УЛА МАКА, придерживающиеся присвоений UL, полученных в более ранних пазах (если любой для этого паза).

  • Управляйте Tx (UE): На основе сконфигурированной периодичности BSR UEs отправляют BSR, чтобы передать незаконченную буферную сумму.

  • Управление Rx (gNB): Получите BSR от UEs и храните информацию, которая используется, когда планировщик запускается затем.

  • Данные Rx (gNB): Получите пакеты УЛА МАКА от UEs, который, как запланировали, передаст в этом пазе. Если прием перестал работать, создайте контекст повторной передачи для конкретного UE, который используется в присвоениях для повторных передач, когда планировщик запускается затем.

  • Управляйте Rx (UE): UEs получают свои соответствующие присвоения UL для предстоящих пазов. UEs обрабатывают присвоение UL и хранят информацию, которая будет использоваться в передаче PUSCH.

  • Логгирование и Визуализация: выход операций в gNB и UEs используется в логгировании и визуализации.

% To store the following UE metrics for each slot: throughput bytes
% transmitted, goodput bytes transmitted, and pending buffer amount bytes.
% The number of goodput bytes is calculated by excluding the retransmissions from the total
% transmissions
UEMetrics = zeros(simParameters.NumUEs, 3);

% To store the RLC statistics for each slot
ueRLCStats = cell(simParameters.NumUEs, 1);
gNBRLCStats = cell(simParameters.NumUEs, 1);

% Create an object for MAC scheduling information visualization and logging (UL direction is represented as 1)
simSchedulingLogger = hNRSchedulingLogger(simParameters, 1);
% Create an object for RLC visualization and logging (UL direction is represented as 1)
simRLCLogger = hNRRLCLogger(simParameters, lchInfo, 1);

symbolNum = 0;
% Run processing loop
for slotNum = 1:numSlotsSim
    
    % Update the UL channel quality for UEs periodically
    if mod(slotNum, channelUpdatePeriodicitySlots) == 0
        for ueIdx = 1:simParameters.NumUEs
            CQIRBs = getChannelQualityStatus(gNB, 1, ueIdx); % Current CQI values
            % Update CQI values for RBs by randomly increasing or
            % decreasing current values by CQIDelta, limited by
            % the minimum and maximum achievable CQI index value. You can
            % customize the updating of CQI values as necessary.
            updateType = [1 -1]; % Improvement/deterioration
            channelQualityChange  = updateType(randi(length(updateType)));
            updatedCQIs = min(max(CQIRBs + simParameters.CQIDelta*channelQualityChange, 1), maxUECQIs(ueIdx));
            % Update the UL channel quality at gNB for the UE (UL direction is represented as 1)
            updateChannelQualityStatus(gNB, updatedCQIs, 1, ueIdx);
        end
    end
    
    % Run the gNB scheduler. Check whether the scheduler is set to run in
    % the slot. If yes, schedule the resources and send the corresponding
    % UL assignments
    resourceAssignments = runULSchedulerFDD(gNB);
    if ~isempty(resourceAssignments)
        controlTx(gNB, resourceAssignments, []);
    end
    
    % Run the UE operations
    HARQProcessStatus = zeros(simParameters.NumUEs, simParameters.NumHARQ); % To store last sent HARQ process NDI flag
    for ueIdx = 1:simParameters.NumUEs % For all UEs
        
        % Generate UL traffic if UL packet generation periodicity is reached for the UE
        if mod(slotNum-1, appPeriodicityUEsSlots(ueIdx)) == 0
            % Receive UL data for the UE from upper layers based on
            % UL application traffic pattern
            for lcid = 1:simParameters.NumLogicalChannels
                % Divide application packet into multiple RLC SDUs if it is
                % bigger than maximum RLC SDU size
                numRLCSDU = floor(simParameters.PacketSizesUEs(ueIdx, lcid) / simParameters.maxRLCSDULength);
                rlcSDU = randi([0 255], simParameters.maxRLCSDULength, 1);
                for i = 1:numRLCSDU % Generate UL packets of max RLC SDU size (if any)
                    receiveRLCSDU(UEs{ueIdx}, ueIdx, lcid , rlcSDU);
                end
                if mod(simParameters.PacketSizesUEs(ueIdx, lcid),simParameters.maxRLCSDULength) ~= 0
                    % Generate UL packet which is smaller than maxRLCSDULength
                    rlcSDU = randi([0 255], mod(simParameters.PacketSizesUEs(ueIdx, lcid),simParameters.maxRLCSDULength), 1);
                    receiveRLCSDU(UEs{ueIdx}, ueIdx, lcid , rlcSDU);
                end
            end
        end
        
        % UE sends the PUSCH packet if it is a Tx slot (as conveyed by gNB in
        % earlier received UL assignments).
        dataTx(UEs{ueIdx});
        
        % UE sends BSR packet, if scheduled to send in this slot
        controlTx(UEs{ueIdx});
        
        % For logging
        % Read throughput and goodput bytes transmitted for this UE in the current TTI
        [UEMetrics(ueIdx, 1), UEMetrics(ueIdx, 2)] = getCurrTTIBytes(UEs{ueIdx});
        % Read pending UL buffer (in bytes) on UE
        UEMetrics(ueIdx, 3) = getBufferStatus(UEs{ueIdx});
        % Read the last received NDI flags for UE HARQ processes (UL direction is represented as 1)
        HARQProcessStatus(ueIdx, :) = getLastNDIFlagHarq(UEs{ueIdx}, 1);
        % Read the UL channel quality at gNB for each of the UEs (UL direction is represented as 1)
        uplinkChannelQuality(ueIdx, :) = getChannelQualityStatus(gNB, 1, ueIdx);
    end
    
    % Run the Rx operation at gNB for simultaneous reception of packets
    controlRx(gNB); % Receive BSRs
    
    % Receive UL MAC packets from UEs that are scheduled to transmit in
    % this slot. Return the information of Rx success/failure
    rxResultUEs = dataRx(gNB);
    
    % Run the Rx operation at UEs for simultaneous reception of packets
    for ueIdx = 1:simParameters.NumUEs % For all UEs
        controlRx(UEs{ueIdx}); % Receive UL assignments, if any sent by gNB
    end
    
    % RLC statistics of each UE
    for ueIdx = 1:simParameters.NumUEs
        ueRLCStats{ueIdx} = getRLCStatistics(UEs{ueIdx}, ueIdx);
        gNBRLCStats{ueIdx} = getRLCStatistics(gNB, ueIdx);
    end
    
    % Update uplink logs based on the current slot run of UEs and gNB. Logs are
    % updated in each slot
    logScheduling(simSchedulingLogger,  symbolNum + 1, resourceAssignments, UEMetrics, uplinkChannelQuality, HARQProcessStatus, rxResultUEs, 1);
    % Update RLC statistics logs
    logRLCStats(simRLCLogger, ueRLCStats, gNBRLCStats);
    
    % If RB Visualization flag is set, update the RB assignment grid at the
    % last slot of each frame
    if simParameters.RBVisualization && mod(slotNum, numSlotsFrame) == 0
        plotRBGrids(simSchedulingLogger);
    end
    
    % If CQI Visualization flag is set, update the CQI grid at the last
    % slot of each frame
    if simParameters.CQIVisualization && mod(slotNum, numSlotsFrame) == 0
        plotCQIRBGrids(simSchedulingLogger);
    end
    
    % Plot MAC scheduling performance, RLC throughput metrics at every metricsStepSize slots
    if mod(slotNum, simParameters.MetricsStepSize) == 0
        plotMetrics(simSchedulingLogger);
        plotMetrics(simRLCLogger);
    end
    
    tickGranularity = 14; % Number of symbols in a slot
    % Advance timer ticks for gNB and UEs by 'tickGranularity' symbols
    advanceTimer(gNB, tickGranularity);
    for ueIdx = 1:simParameters.NumUEs % For all UEs
        advanceTimer(UEs{ueIdx}, tickGranularity);
    end
    
    % Symbol number in the simulation
    symbolNum = symbolNum + tickGranularity;
end

Визуализация симуляции

Четыре типа показанной визуализации во время выполнения:

  • Отображение значений CQI для UEs по пропускной способности PUSCH: Для получения дополнительной информации смотрите 'Качественную фигуру' Визуализации Канала для получения дополнительной информации.

  • Отображение присвоения сетки ресурса на UEs: 2D сетка частоты времени обновляет каждые 10 мс (длина системы координат) и показывает выделение RB UEs в предыдущей системе координат. Процесс HARQ для присвоений PUSCH также показывают рядом с RNTI UEs. Новые передачи отображают черным цветом, и повторные передачи показывают в синем использовании ID процесса HARQ каждого UE, присвоение повторной передачи может быть сопоставлено со своей ранее не пройдено передачей. Для получения дополнительной информации смотрите 'фигуру' Выделения Сетки Ресурса для получения дополнительной информации.

  • Отображение восходящих метрических графиков: 'Восходящая фигура' показателей производительности Планировщика включает графики: пропускная способность UL (на UE и ячейку), полезная пропускная способность UL (на UE и ячейку), процент доли ресурса среди UEs (из общих ресурсов UL), чтобы передать справедливость планирования и ожидания, которое UL буферизуют состояние UEs, чтобы показать, получают ли UEs достаточные ресурсы. Показатели производительности строят обновление для каждого metricsStepSize пазы.

  • Отображение метрического графика RLC: 'фигура' визуализации пропускной способности RLC представляет пропускную способность слоя RLC (на логический канал) для выбранного UE. Метрики RLC строят обновление для каждого metricsStepSize пазы.

Журналы симуляции

Параметры, используемые в журналах симуляции и симуляции, сохранены в файлах MAT для постанализа методом моделирования и визуализации. Параметры симуляции сохранены в файле MAT с именем файла как значение параметра конфигурации simParameters.ParametersLogFile. На журналы временного шага, планируя журналы присвоения и журналы RLC сохранены в файле MAT simParameters.SimulationLogFile. После симуляции откройте файл, чтобы загрузить timeStepLogs, schedulingAssignmentLogs и rlcLogs в рабочей области.

Журналы временного шага: таблица показывает запись шага шага расчета. Каждая строка таблицы представляет паз.

Каждая строка таблицы представляет паз и содержит следующую информацию:

  • Система координат: Структурируйте номер.

  • Паз: Номер слота в системе координат.

  • Битовый массив Выделения RBG: N-by-P побитово отображают матрицу, где N является количеством UEs, и P является количеством RBGs. Если RBG присвоен конкретному UE, соответствующий бит установлен в 1. Например, [0 0 1 1 0 1 0 1 0 1 0 0 0; 1 1 0 0 0 0 0 0 0 0 1 0 0; 0 0 0 0 1 0 1 0 1 0 0 1 1; 0 0 0 0 0 0 0 0 0 0 0 0 0] средние значения, что пропускная способность UL имеет 13 RBGs и UE-1, присвоены индексы RBG: 2, 3, 5, 7 и 9; UE-2 присвоен индексы 0, 1 и 10 RBG; UE-3 присвоен, индексы 4, 6, 8, 11 и 12 и UE-4 RBG не присвоены никакой RBG.

  • MCS: Вектор-строка из длины N, где N является количеством UEs. Каждое значение соответствует схеме модуляции и кодирования (MCS) индекс для передачи PUSCH. Например, [10 12 8 - 1] означает, что только UE-1, UE-2 и UE-3 присвоены ресурсы UL для этого паза и используют значения MCS 10, 12, и 8, соответственно.

  • Процесс HARQ: Вектор-строка из длины N, где N является количеством UEs. Значение является ID процесса HARQ, используемым UE в передаче PUSCH. Например, [0 3 6 - 1] означает, что только UE-1, UE-2 и UE-3 присвоены ресурсы UL для этого паза и используют идентификаторы процесса HARQ 0, 3, и 6, соответственно.

  • NDI: Вектор-строка из длины N, где N является количеством UEs. Значение является флаговым значением NDI в присвоении UL для передачи PUSCH. Например, [0 0 1 - 1] означает, что только UE-1, UE-2 и UE-3 присвоены ресурсы UL для этого паза и используют флаговые значения NDI (которые определяют, используются ли новая передача или повторная передача), 0, 0, и 1, соответственно.

  • Тип Tx: Тип Tx задает тип передачи (новая передача или повторная передача). Вектор-строка из длины N, где N является количеством UEs. Возможными значениями является любой 'newTx', 'reTx', или 'noTx'. 'noTx'средние значения, что UE не выделен ресурсы PUSCH. Например, ['newTx''newTx''reTx''noTx'] означает, что только UE-1, UE-2 и UE-3 присвоены ресурсы UL для этого паза. UE-1 и UE-2 передают новый пакет от заданного процесса HARQ, в то время как UE-3 ретранслирует пакет в буфере заданного процесса HARQ.

  • CQI для UEs: матрица N-by-P, где N является количеством UEs и P, является количеством RBS в пропускной способности. Элемент матрицы A в положении (i, j) соответствует значению UL CQI для UE с RNTI i в RB j.

  • Состояние HARQ NDI: матрица N-by-P, где N является количеством UEs и P, является количеством процессов HARQ на UEs. Элементом матрицы A в положении (i, j) является последний полученный флаг NDI в UE i для ID процесса HARQ j. Для новых передач должны переключиться это значение и флаг NDI в присвоении PUSCH. Например, в пазе 1 системы координат 5 описанных в журнале планирования, UE-1 использует ID HARQ 0, и последнее флаговое значение NDI для ID HARQ 0 в UE-1 равняется 1. Чтобы указать на новую передачу, флаговые значения NDI превращаются на 0 в присвоении PUSCH.

  • Байты пропускной способности: Вектор-строка из длины N, где N является количеством UEs. Значения представляют байты MAC, переданные UEs в этом пазе.

  • Байты полезной пропускной способности: Вектор-строка из длины N, где N является количеством UEs. Значения представляют новые байты MAC передачи, переданные UEs в этом пазе.

  • Буферное Состояние UEs: Вектор-строка из длины N, где N является количеством UEs. Значения представляют сумму незаконченных буферов в UEs.

  • Успех/Отказ Rx: Вектор-строка из длины N, где N является количеством UEs. Возможными значениями является любой 'RxSuccess', 'RxFailure', или 'noRx'. 'noRx'средние значения, что gNB не ожидает Rx от UE. Например, ['RxSuccess''RxSuccess''RxFailure''noRx'] означает, что пакеты от UE-1 и UE-2 получены успешно, в то время как пакет от UE-3 не был или получен или был поврежден. UE-4 не был запланирован для этого паза.

Планирование журналов присвоения: информация всех присвоений планирования и сопутствующей информации зарегистрирована этот файл. Таблица показывает демонстрационные записи в журнале.

Журналы RLC: Каждая строка в журналах RLC представляет паз и содержит эту информацию:

  • Система координат: Структурируйте номер.

  • Паз: Номер слота в системе координат.

  • Статистика UE RLC: ячейка N-by-P, где N является продуктом количества UEs и количества логических каналов и P, является количеством собранных статистических данных. Каждая строка представляет статистику логического канала в UE.

  • статистика gNB RLC: ячейка N-by-P, где N является продуктом количества UEs и количества логических каналов и P, является количеством собранных статистических данных. Каждая строка представляет статистику логического канала UE в gNB.

Последняя строка содержит совокупную статистику RLC целой симуляции.

Таблица показывает демонстрационную запись в статистике UE RLC. Подобные журналы доступны в статистике gNB RLC.

Каждая строка таблицы представляет логический канал UE и содержит:

  • RNTI: Радиосеть временный идентификатор UE.

  • LCID: Логический идентификатор канала.

  • TxPDCPPDU: Количество PDUs, отправленного пакетным протоколом сходимости данных (PDCP) в слой RLC.

  • TxPDCPPDUBytes: Количество байтов, отправленных PDCP в слой RLC.

  • TxRLCSDUDiscarded: Количество RLC SDUs, отброшенного слоем RLC из-за переполнения буфера Tx.

  • TxRLCSDUDiscardedBytes: Количество отброшенных байтов слоем RLC из-за переполнения буфера Tx.

  • TxRLCPDU: Количество PDUs, отправленного RLC в слой MAC.

  • TxRLCPDUBytes: Количество байтов, отправленных RLC в слой MAC.

  • RxPDCPPDU: Количество PDUs получено PDCP от слоя RLC.

  • RxPDCPPDUBytes: Количество байтов получено PDCP от слоя RLC.

  • RxRLCPDU: Количество PDUs получено RLC от слоя MAC.

  • RxRLCPDUBytes: Количество байтов получено RLC от слоя MAC.

  • RxRLCPDUDuplicate: Количество дублирующегося PDUs получено RLC от слоя MAC.

  • RxRLCPDUDuplicateBytes: Количество дублирующихся байтов получено RLC от слоя MAC.

  • RxRLCPDUDropped: Количество полученного PDUs, исключенного RLC из слоя MAC.

  • RxRLCPDUDroppedBytes: Количество пропущенных байтов RLC получено от слоя MAC.

  • TimerReassemblyTimedOut: Число раз таймер повторной сборки истекло.

Можно запустить скрипт NewRadioPUSCHSchedulingLogVisualization.m получить визуализацию симуляции сообщения журналов. В скрипте симуляции сообщения вы получаете переменную isLogReplay, который предоставляет эти возможности визуализировать 'Выделение Сетки Ресурса' и 'Качественные фигуры' Визуализации Канала.

  • Установите isLogReplay к true для воспроизведения журналов симуляции.

  • Установите isLogReplay к false анализировать журналы симуляции и вводить номер системы координат, чтобы визуализировать информацию о планировании конкретной системы координат.

% Read the logs and write them to MAT-files
[~, ulTimeStepLogs] = getSchedulingLogs(simSchedulingLogger); % UL time step scheduling logs
schedulingGrantLogs = getGrantLogs(simSchedulingLogger); % DCI message log
% RLC statistics logs
rlcLogs = getRLCLogs(simRLCLogger);
save(simParameters.SimulationLogFile, 'ulTimeStepLogs', 'schedulingGrantLogs', 'rlcLogs'); % Save simulation logs in a MAT-file
save(simParameters.ParametersLogFile, 'simParameters'); % Save simulation parameters in a MAT-file

Дальнейшее исследование

Можно изменить существующий UL планирование функциональности, чтобы запланировать ресурсы паза. Планирование ресурсов UL паза реализовано в scheduleULResourcesSlot функция hNRGNBMACScheduler. Заполните выход uplinkGrants из этой функции с массивом допустимого UL планирование присвоений. Каждым элементом в этом массиве структур является присвоение PUSCH для UE. Структура присвоения PUSCH имеет эти поля:

  • RNTI: Присвоение для этого UE. Это поле не является частью фактического пакета присвоения, отправленного в UEs.

  • Type: Является ли присвоение для новой передачи ('newTx'), повторная передача ('reTx') или никакое присвоение ('noTx'). Это поле не является частью фактического пакета присвоения, отправленного в UEs, когда поле NDI достаточно, чтобы передать это.

  • HARQIndex: Выбрал ID процесса UL UE HARQ.

  • RBGAllocationBitmap: Присвоение ресурса частотного диапазона. Битовый массив групп блока ресурса пропускной способности PUSCH. Значение 1 указывает, что RBG присвоен UE.

  • StartSymbol: Начальный символ ресурсов присвоения PUSCH. Сохраните в 0.

  • NumSymbols: Количество символов в присвоении PUSCH. Сохраните в 14.

  • SlotOffset: Смещение паза присвоений PUSCH относительно текущего паза.

  • MCS: Выбранная схема модуляции и кодирования.

  • NDI: Новый флаг индикатора данных.

  • RV: Версия сокращения.

Рисунок показывает ресурсы UL паза, распределяемого в четырех присвоениях PUSCH. Это также показывает содержимое первого присвоения.

Установка свойства scheduleULResourcesSlot включает you управлять присвоением всего RBGs паза целиком. Можно также управлять присвоением каждого RBG TTI. Для ссылки вы видите, что существующее планирует стратегии, существующие в функциях помощника hNRSchedulingStrategyBestCQI.m, hNRSchedulingStrategyPF.m, и hNRSchedulingStrategyRR.m. Функция стратегии планирования вызвана однажды для каждого из остающихся RBGs, после того, как присвоения для повторных передач будут завершены. Функция берет структуру в качестве входа и возвращает выбранный UE, которому RBG присвоен и соответствующий индекс MCS. Чтобы записать пользовательскую стратегию планирования, используйте информацию во входной структуре, чтобы установить выход. Входная структура содержит эти поля:

  • eligibleUEs: RNTI имеющего право UEs, борющегося за RBG.

  • slotNum: Номер слота в системе координат, которая будет запланирована.

  • RBGIndex: RBG индексируют в slotNum быть запланированным.

  • RBGSize: Размер RBG в терминах количества RBS.

  • cqiRBG: Качество канала UL RBG. Матрица N-by-P со значениями UL CQI для имеющего право UEs на различном RBS RBG. N является количеством имеющего право UEs, и P является RBGSize.

  • pastDataRate: Вектор-строка из длины N содержащий историческую достигнутую скорость передачи данных UEs. N является количеством имеющего право UEs.

  • bufferStatus Вектор-строка из длины N содержащий ожидающий буферное состояние для UEs. N является количеством имеющего право UEs.

  • mcsRBG: Матрица N-2, содержащая индекс MCS и соответствующий КПД (подходящий согласно значениям CQI на RBS RBG). N является количеством имеющего право UEs. КПД является битами/символом, учитывая и схему модуляции и кодируя уровень.

  • ttiDur: Длительность TTI в мс.

  • UEs: RNTI всего UEs.

  • lastSelectedUE: RNTI UE, который был присвоен последнее, запланировал RBG.

Стратегия планирования может использовать подмножество предыдущих полей, чтобы принять решение. Чтобы реализовать пользовательскую стратегию планирования, создайте файл функции NewStrategy.m и в настройке сценария, установленной параметр simParameters.SchedulerStrategy к 'NewStrategy'. Следуйте за шаблоном существующих стратегий функциональной подписи.

На основе выбранной стратегии планирования этот пример показывает присвоение ресурсов UL к нескольким UEs gNB. Физический уровень абстрагирован в примере. Отображение визуализации во время выполнения сетки ресурса дает подробную информацию о RBS, выделенном каждому UE в различных пазах системы координат и ID процесса HARQ, присвоенного для передачи. Планирование производительности анализируется на основе графиков во время выполнения пропускной способности MAC, полезной пропускной способности MAC, справедливости доли ресурса и незаконченного буферного состояния UEs. Более полный постанализ методом моделирования при помощи сохраненных журналов дает подробное изображение операций, происходящих на основе на паз.

Приложение

Пример использует эти функции помощника и классы:

Ссылки

[1] 3GPP TS 38.214. “NR; процедуры Физического уровня для данных”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

[2] 3GPP TS 38.321. “NR; спецификация протокола Среднего управления доступом (MAC)”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

[3] 3GPP TS 38.322. “NR; спецификация протокола Управления линией радиосвязи (RLC)”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

Похожие темы