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

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

Введение

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

Полный пакет PUSCH передается в первом символе его выделенного набора символов. Приемник обрабатывает пакет в символе сразу после последнего символа в выделенном наборе символов.

Планировщик запускается каждый 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) не моделируется в этом примере. Однако один символ сохранен неиспользованным для него в присвоениях PUSCH.

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

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

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

  • Конфигурируемое расстояние между поднесущими, приводящее к различной длительности паза.

  • Асинхронный гибридный автоматический повторный запрос 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)

  • Расстояние между поднесущими

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

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

rng('default'); % Reset the random number generator
simParameters = []; % Clear the simulation parameters
simParameters.NumFramesSim = 200; % Simulation time in terms of number of 10 ms frames
simParameters.SchedulingType = 0; % Set the value to 0 (slot-based scheduling) or 1 (symbol-based scheduling)

Задайте количество UEs в ячейке, приняв, что UEs имеют последовательную радиосеть временные идентификаторы (RNTIs) от 1 к simParameters.NumUEs. Если вы изменяете количество UEs, гарантируете что количество строк в simParameters.UEPosition параметр равняется значению simParameters.NumUEs; и appDataRate, simParameters.RLCConfig, и simParameters.LCHConfig состоит из количества строк, равных simParameters.NumUEs.

simParameters.NumUEs = 4;
% Assign position to the UEs assuming that the gNB is at (0, 0, 0). N-by-3
% matrix where 'N' is the number of UEs. Each row has (x, y, z) position of
% a UE (in meters)
simParameters.UEPosition = [100 0 0;
                            250 0 0;
                            700 0 0;
                            750 0 0];
% Validate the UE positions
validateattributes(simParameters.UEPosition, {'numeric'}, {'nonempty', 'real', 'nrows', simParameters.NumUEs, 'ncols', 3, 'finite'}, 'simParameters.UEPosition', 'UEPosition');

Количество логических каналов в каждом UE. Если вы изменяете количество логических каналов, гарантируете что симуляция appDataRate, simParameters.RLCConfig, и simParameters.LCHConfig состоит из количества столбцов, равных simParameters.NumLogicalChannels. Логические каналы, сопоставленные к несущим радио данных, используют логические идентификаторы канала (LCIDs), запускающийся от 4. Так, логические каналы приняты, чтобы иметь LCIDs, запускающийся от 4 до simParameters.NumLogicalChannels+3.

simParameters.NumLogicalChannels = 3;

Установите шаблон трафика приложения для UEs. N-by-P матрица представляет данные приложения, сгенерированные UE в каждом логическом канале, где 'N'представляет количество UEs и 'P'представляет количество логических каналов. Элемент матрицы A в положении (i, j) представляет скорость передачи данных в килобитах в секунду (Кбит/с), сгенерированных UE с RNTI 'i'для LCID 'j+3'. Например, значение 3200 в индексе (3, 1) представляет приложение datarate 3 200 Кбит/с, сгенерирован UE-3 для LCID 4

appDataRate = [800 1200 1600;
    200 3200 3200;
    3200 1600 800;
    800 4000 3200]; % Application data rate in kbps
% Validate the application data rate
validateattributes(appDataRate, {'numeric'}, {'nonempty', 'integer', 'nrows', simParameters.NumUEs, 'ncols', simParameters.NumLogicalChannels, 'finite', '>', 0}, 'appDataRate', 'AppDataRate');

Установите настройку RLC. Каждое свойство simParameters.RLCConfig должна быть N-by-P матрица, где 'N'представляет количество UEs и 'P'представляет количество логических каналов. Элемент матрицы A в положении (i, j) соответствует значению свойства UE с RNTI 'i'и LCID 'j+3'.

% Sequence number (SN) 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 number of service data units (SDUs) in the Tx buffer of each logical channel (to model Tx buffer overflow)
simParameters.RLCConfig.MaxTxBufferSDUs = [4 3 11;
    3 5 4;
    6 1 3;
    11 6 26];

% Validate the RLC configuration
validateattributes(simParameters.RLCConfig.SNFieldLength, {'numeric'}, {'nonempty', 'integer', 'nrows', simParameters.NumUEs, 'ncols', simParameters.NumLogicalChannels}, 'simParameters.RLCConfig.SNFieldLength', 'SNFieldLength');
validateattributes(simParameters.RLCConfig.ReassemblyTimer, {'numeric'}, {'nonempty', 'integer', 'nrows', simParameters.NumUEs, 'ncols', simParameters.NumLogicalChannels}, 'simParameters.RLCConfig.ReassemblyTimer', 'ReassemblyTimer');
validateattributes(simParameters.RLCConfig.MaxTxBufferSDUs, {'numeric'}, {'nonempty', 'integer', 'nrows', simParameters.NumUEs, 'ncols', simParameters.NumLogicalChannels, 'finite', '>', 0}, 'simParameters.RLCConfig.MaxTxBufferSDUs', 'MaxTxBufferSDUs');

Логический канал (LCH) настройка. Каждое свойство simParameters.LCHConfig должна быть N-by-P матрица, где 'N'представляет количество UEs и 'P'представляет количество логических каналов. Элемент матрицы A в положении (i, j) соответствует значению свойства UE с RNTI 'i'и LCID 'j+3'.

% Mapping between logical channel and logical channel group (LCG) 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 bit rate (PBR) of each logical channel (in kilo bytes per second)
simParameters.LCHConfig.PBR = [8 16 32;
    8 128 32;
    8 16 32;
    8 16 32];
% Bucket size duration (BSD) of each logical channel (in ms)
simParameters.LCHConfig.BSD = [5 10 50;
    5 20 20;
    5 5 5;
    5 10 20];

% Validate the logical channel configuration
validateattributes(simParameters.LCHConfig.LCGID, {'numeric'}, {'nonempty', 'integer', 'nrows', simParameters.NumUEs, 'ncols', simParameters.NumLogicalChannels, '>=', 0, '<=', 7}, 'simParameters.LCHConfig.LCGID', 'LCGID');
validateattributes(simParameters.LCHConfig.Priority, {'numeric'}, {'nonempty', 'integer', 'nrows', simParameters.NumUEs, 'ncols', simParameters.NumLogicalChannels, '>=', 1, '<=', 16}, 'simParameters.LCHConfig.Priority', 'Priority');
validateattributes(simParameters.LCHConfig.PBR, {'numeric'}, {'nonempty', 'integer', 'nrows', simParameters.NumUEs, 'ncols', simParameters.NumLogicalChannels}, 'simParameters.LCHConfig.PBR', 'PBR');
validateattributes(simParameters.LCHConfig.BSD, {'numeric'}, {'nonempty', 'integer', 'nrows', simParameters.NumUEs, 'ncols', simParameters.NumLogicalChannels}, 'simParameters.LCHConfig.BSD', 'BSD');

Настройка среднего управления доступом (MAC).

% 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. gNB гарантирует, что присвоение PUSCH получено в UEs, по крайней мере, PUSCHPrepTime перед временем передачи.

simParameters.PUSCHPrepTime = 200; % In microseconds

Максимальный RBS выделил UE в пазе для передачи PUSCH (предел применим для новых присвоений PUSCH а не для повторных передач),

simParameters.RBAllocationLimitUL = 15;

Установите полосу пропускания канала на 5 МГц и расстояние между поднесущими (SCS) к 15 кГц, как задано в 3GPP Раздел TS 38.104 5.3.2. Полная полоса пропускания принята, чтобы быть выделенной для PUSCH.

simParameters.NumRBs = 25;
simParameters.SCS = 15; % kHz
simParameters.ULBandwidth = 5e6; % Hz
simParameters.ULCarrierFreq = 2.515e9; % Hz
% 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;

Сконфигурируйте параметры, чтобы обновить условия канала для UEs. Качество канала периодически улучшается или ухудшается CQIDelta каждый ChannelUpdatePeriodicity секунды для всего RBS UE. Улучшаются ли условия канала для конкретного UE или ухудшаются, случайным образом определяется.

RBCQI = RBCQI +/- CQIDelta

simParameters.ChannelUpdatePeriodicity = 0.5; % In sec
simParameters.CQIDelta = 1;

Сконфигурируйте отображение между расстоянием от gNB (первый столбец в метрах) и максимальным достижимым значением UL CQI (второй столбец). Например, если UE на расстоянии в 700 метров от gNB, он может достигнуть максимального значения CQI 10, когда расстояние находится в пределах [501, 800] область значений метров, согласно отображению. Установите расстояние в увеличивающемся порядке и максимальном достижимом значении CQI в порядке убывания. Это отображение только применимо, когда передача PHY используется.

simParameters.CQIvsDistance = [
    200  15;
    500  12;
    800  10;
    1000  8;
    1200  7];

Логгирование и настройка визуализации

CQIVisualization и RBVisualization параметры управляют отображением визуализации CQI и визуализации присвоения RB соответственно. Чтобы включить график визуализации RB, установите RBVisualization поле к true.

simParameters.CQIVisualization = true;
simParameters.RBVisualization = true;

Установите enableTraces как true регистрировать трассировки. Если enableTraces установлен в false, затем CQIVisualization и RBVisualization отключены автоматически, и трассировки не зарегистрированы симуляция. Чтобы ускорить симуляцию, установите enableTraces к false.

enableTraces = true;

Пример периодически обновляет метрические графики. Определите номер обновлений во время симуляции.

simParameters.NumMetricsSteps = 20;

Запишите журналы в MAT-файлы. Пример использует эти журналы для анализа методом моделирования сообщения и визуализации.

parametersLogFile = 'simParameters'; % For logging the simulation parameters
simulationLogFile = 'simulationLogs'; % For logging the simulation traces
simulationMetricsFile = 'simulationMetrics'; % For logging the simulation metrics

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

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

simParameters.NCellID = 1; % Physical cell ID
simParameters.DLCarrierFreq = 2.635e9; % Hz
simParameters.DLBandwidth = 10e6; % Hz
simParameters.GNBPosition = [0 0 0]; % Position of gNB in (x,y,z) coordinates
% 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

% Specify the RLC entity type in the range [0, 2]. The values 0, 1, and 2
% indicate RLC UM unidirectional DL entity, RLC UM unidirectional UL
% entity, and RLC UM bidirectional entity, respectively.
simParameters.RLCConfig.EntityType = ones(simParameters.NumUEs, simParameters.NumLogicalChannels);

% LCID (LCID of data radio bearers starts from 4) 
simParameters.LCHConfig.LCID = ones(simParameters.NumUEs, simParameters.NumLogicalChannels) .* (4:4+simParameters.NumLogicalChannels-1);

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

% 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
    ueDistance = norm(simParameters.UEPosition(ueIdx, :) - simParameters.GNBPosition);
    matchingRowIdx = find(simParameters.CQIvsDistance(:, 1) > ueDistance);
    if isempty(matchingRowIdx)
        maxUECQIs(ueIdx) = simParameters.CQIvsDistance(end, 2);
    else
        maxUECQIs(ueIdx) = simParameters.CQIvsDistance(matchingRowIdx(1), 2);
    end
end

% Define initial 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
simParameters.InitialChannelQualityUL = 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
    simParameters.InitialChannelQualityUL(ueIdx, :) = randi([1 maxUECQIs(ueIdx)], 1, simParameters.NumRBs);
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

if ~isfield(simParameters, 'SchedulingType') || simParameters.SchedulingType == 0 % If no scheduling type is specified or slot-based scheduling is specified
    tickGranularity = 14;
    simParameters.PUSCHMappingType = 'A';
    simParameters.PDSCHMappingType = 'A';
else % Symbol-based scheduling
    tickGranularity = 1;
    simParameters.PUSCHMappingType = 'B';
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, чтобы реализовать функциональность УИ МАКА. Планировщики реализованы в hNRSchedulerRoundRobin.m (Циклический алгоритм), hNRSchedulerProportionalFair.m (Пропорциональная ярмарка), hNRSchedulerBestCQI.m (Лучший CQI). Все планировщики наследовались базовому классу hNRScheduler.m, который содержит базовую функциональность планирования. Для слоя RLC и hNRGNB.m и hNRUE.m используют hNRUMEntity.m, чтобы реализовать функциональность передатчика RLC и приемника. Слой Passthrough PHY для UE и gNB реализован в hNRUEPassThroughPhy.m и hNRGNBPassThroughPhy.m, соответственно.

simParameters.Position = simParameters.GNBPosition;
gNB = hNRGNB(simParameters); % Create gNB node
% Create and add scheduler
switch(simParameters.SchedulerStrategy)
    case 'RR' % Round robin scheduler
        scheduler = hNRSchedulerRoundRobin(simParameters);
    case 'PF' % Proportional fair scheduler
        scheduler = hNRSchedulerProportionalFair(simParameters);
    case 'BestCQI' % Best CQI scheduler
        scheduler = hNRSchedulerBestCQI(simParameters);
    otherwise
        error('Invalid scheduler strategy "%s"', simParameters.SchedulerStrategy);
end
addScheduler(gNB, scheduler); % Add scheduler to gNB

gNB.PhyEntity = hNRGNBPassThroughPhy(simParameters); % Create passthrough PHY
configurePhy(gNB, simParameters);
setPhyInterface(gNB); % Set the interface to PHY layer

% Create the set of UE nodes
UEs = cell(simParameters.NumUEs, 1);
for ueIdx = 1:simParameters.NumUEs
    simParameters.Position = simParameters.UEPosition(ueIdx, :); % Position of UE
    UEs{ueIdx} = hNRUE(simParameters, ueIdx);
    simParameters.InitialChannelQualityDL = simParameters.InitialChannelQualityUL;
    UEs{ueIdx}.PhyEntity = hNRUEPassThroughPhy(simParameters, ueIdx); % Add passthrough PHY
    configurePhy(UEs{ueIdx}, simParameters);
    setPhyInterface(UEs{ueIdx}); % Set the interface to PHY layer
    
    % Initialize the UL CQI values at gNB
    channelQualityInfo = struct('RNTI', ueIdx, 'CQI', simParameters.InitialChannelQualityUL(ueIdx, :));
    updateChannelQualityUL(gNB.MACEntity.Scheduler, channelQualityInfo);

    % Setup logical channels
    for lcIdx = 1:simParameters.NumLogicalChannels
        % Create RLC channel configuration structure
        rlcChannelConfigStruct.EntityType = simParameters.RLCConfig.EntityType(ueIdx, lcIdx);
        rlcChannelConfigStruct.LogicalChannelID = simParameters.LCHConfig.LCID(ueIdx, lcIdx);
        rlcChannelConfigStruct.SeqNumFieldLength = simParameters.RLCConfig.SNFieldLength(ueIdx, lcIdx);
        rlcChannelConfigStruct.MaxTxBufferSDUs = simParameters.RLCConfig.MaxTxBufferSDUs(ueIdx, lcIdx);
        rlcChannelConfigStruct.ReassemblyTimer = simParameters.RLCConfig.ReassemblyTimer(ueIdx, lcIdx);
        rlcChannelConfigStruct.LCGID = simParameters.LCHConfig.LCGID(ueIdx, lcIdx);
        rlcChannelConfigStruct.Priority = simParameters.LCHConfig.Priority(ueIdx, lcIdx);
        rlcChannelConfigStruct.PBR = simParameters.LCHConfig.PBR(ueIdx, lcIdx);
        rlcChannelConfigStruct.BSD = simParameters.LCHConfig.BSD(ueIdx, lcIdx);
        
        % Setup logical channel at gNB for the UE
        configureLogicalChannel(gNB, ueIdx, rlcChannelConfigStruct);
        % Setup logical channel at UE
        configureLogicalChannel(UEs{ueIdx}, ueIdx, rlcChannelConfigStruct);
        
        % Add data traffic pattern generators to UE nodes. Application data
        % is pumped to RLC layer as per the installed traffic pattern
        % Limit the size of the generated application packet to the maximum
        % RLC SDU size. The maximum supported RLC SDU size is 9000 bytes
        packetSize = 9000;
 
        % Create an object for On-Off network traffic pattern and add it to the
        % specified UE. This object generates the uplink (UL) data traffic on the UE
        app = networkTrafficOnOff('PacketSize', packetSize, 'GeneratePacket', true, ...
            'OnTime', simParameters.NumFramesSim/100, 'OffTime', 0, 'DataRate', appDataRate(ueIdx, lcIdx));
        UEs{ueIdx}.addApplication(ueIdx, simParameters.LCHConfig.LCID(ueIdx, lcIdx), app);
    end
end

% Setup the UL and DL packet distribution mechanism
simParameters.MaxReceivers = simParameters.NumUEs + 1; % Number of nodes
% Create packet distribution object
packetDistributionObj = hNRPacketDistribution(simParameters);
hNRSetUpPacketDistribution(simParameters, gNB, UEs, packetDistributionObj);

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

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

  • Запустите слои MAC и PHY gNB

  • Запустите слои MAC и PHY UEs

  • Слой определенное логгирование и визуализация

  • Усовершенствуйте таймер для узлов. Каждый 1 мс это также отправляет триггер в слои RLC и приложение. Прикладной уровень и слой RLC выполняют их запланированные операции на основе триггера таймера на 1 мс.

Создайте объекты регистрировать и визуализировать трассировки MAC и RLC.

linkDir = 1; % UL direction is represented as 1
if enableTraces
    % Create an object for RLC traces logging
    simRLCLogger = hNRRLCLogger(simParameters, lchInfo);
    % Create an object for MAC traces logging
    simSchedulingLogger = hNRSchedulingLogger(simParameters, linkDir);
    % Create an object for CQI and RB grid visualization
    if simParameters.CQIVisualization || simParameters.RBVisualization
        gridVisualizer = hNRGridVisualizer(simParameters, 'MACLogger', simSchedulingLogger, 'VisualizationFlag', linkDir);
    end
end

Создайте объект для RLC и метрической визуализации MAC.

nodes = struct('UEs', {UEs}, 'GNB', gNB);
metricsVisualizer = hNRMetricsVisualizer(simParameters, 'Nodes', nodes, 'EnableSchedulerMetricsPlots', true, 'EnableRLCMetricsPlots', true, 'LCHInfo', lchInfo, 'VisualizationFlag', linkDir);

Запустите цикл обработки.

slotNum = 0;
numSymbolsSim = numSlotsSim * 14; % Simulation time in units of symbol duration (assuming normal cyclic prefix)

% Execute all the symbols in the simulation
for symbolNum = 1 : tickGranularity : numSymbolsSim
    if mod(symbolNum - 1, 14) == 0
        slotNum = slotNum + 1;
    end
    
    % Run MAC and PHY of gNB
    run(gNB);
    
    % Run MAC and PHY layers of UEs
    for ueIdx = 1:simParameters.NumUEs
        run(UEs{ueIdx}); 
    end
    
    if enableTraces
        % RLC logging (only at slot boundary)
        if (simParameters.SchedulingType == 1 && mod(symbolNum, 14) == 0) || (simParameters.SchedulingType == 0 && mod(symbolNum-1, 14) == 0)
            logCellRLCStats(simRLCLogger, gNB, UEs); % Update RLC statistics logs
        end

        % MAC logging
        logCellSchedulingStats(simSchedulingLogger, symbolNum, gNB, UEs, linkDir);
    end
    
    % Visualization    
    % Check slot boundary
    if symbolNum > 1 && ((simParameters.SchedulingType == 1 && mod(symbolNum, 14) == 0) || (simParameters.SchedulingType == 0 && mod(symbolNum-1, 14) == 0))
        if mod(slotNum, simParameters.MetricsStepSize) == 0
            % If the update periodicity is reached, plot RLC metrics and scheduler metrics at slot boundary
            plotLiveMetrics(metricsVisualizer);
        end
    end
    
    % Advance timer ticks for gNB and UEs by 14 symbols
    advanceTimer(gNB, tickGranularity);
    for ueIdx = 1:simParameters.NumUEs
        advanceTimer(UEs{ueIdx}, tickGranularity);
    end
end

Figure Channel Quality Visualization contains objects of type heatmap, uigridlayout. The chart of type heatmap has title Channel Quality Visualization for Cell ID - 1.

Figure Resource Grid Allocation contains an axes object and another object of type uigridlayout. The axes object contains 232 objects of type text, line.

Получите метрики симуляции и сохраните его в MAT-файле. Метрики симуляции сохранены в MAT-файле с именем файла как simulationMetricsFile.

metrics = getMetrics(metricsVisualizer);
save(simulationMetricsFile, 'metrics'); % Save simulation metrics in a MAT-file

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

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

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

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

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

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

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

Параметры, используемые для журналов симуляции и симуляции, сохранены в файлах MAT для анализа методом моделирования сообщения и визуализации. Параметры симуляции сохранены в файле MAT с именем файла как значение параметра конфигурации parametersLogFile. На журналы временного шага, планируя журналы присвоения и журналы RLC сохранены в файле MAT simulationLogFile. После симуляции откройте файл, чтобы загрузить ULTimeStepLogs, 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.

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

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

  • Метка времени: Метка времени (в миллисекундах)

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

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

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

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

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

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

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

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

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

  • ReTxDataPDU: Количество данных PDUs, ретранслируемый RLC к слою MAC.

  • ReTxDataBytes: Количество байтов данных, ретранслируемых RLC к слою MAC.

  • TxControlPDU: Количество управления PDUs, отправленный RLC в слой MAC.

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

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

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

  • TimerPollRetransmitTimedOut: Число раз опрос ретранслирует таймер, истекло.

  • RxDataPDU: Количество данных PDUs получено RLC от слоя MAC.

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

  • RxDataPDUDropped: Количество принятых данных PDUs от MAC, которые пропущены слоем RLC.

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

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

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

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

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

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

  • TimerStatusProhibitTimedOut: Число раз состояние запрещает таймер, истекло.

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

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

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

if enableTraces
    % Read the logs and save them in MAT-files
    simulationLogs = cell(1, 1);
    simulationLogs{1} = struct('ULTimeStepLogs',[], 'SchedulingAssignmentLogs',[] ,'RLCLogs',[]);
    [~, simulationLogs{1}.ULTimeStepLogs] = getSchedulingLogs(simSchedulingLogger); % UL time step scheduling logs
    simulationLogs{1}.SchedulingAssignmentLogs = getGrantLogs(simSchedulingLogger); % Scheduling assignments log
    simulationLogs{1}.RLCLogs = getRLCLogs(simRLCLogger); % RLC statistics logs
    save(simulationLogFile, 'simulationLogs'); % Save simulation logs in a MAT-file
    save(parametersLogFile, 'simParameters'); % Save simulation parameters in a MAT-file
end

Ссылки

[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.

Похожие темы