TDD NR основанная на символе оценка результатов деятельности планирования

В этом примере показано, как реализовать основанную на символе схему планирования в режиме дуплекса деления времени (TDD), чтобы присвоить восходящий канал (UL) и нисходящий канал (DL) ресурсы и оценивает производительность сети. Основанное на символе планирование ресурсов позволяет более короткую длительность передачи, охватывающую несколько символов в пазе. Можно также переключиться на находящееся на пазе планирование. В режиме TDD физический восходящий канал совместно использовал канал (PUSCH) и физический нисходящий канал совместно использованный канал (PDSCH), передачи планируются в том же диапазоне частот с разделением во временном интервале. Планирование стратегии, используемой в примере, может быть настроено, чтобы оценить эффективность. Физический слой (PHY) передачи без любой обработки физического уровня используется, который принимает основанный на вероятности подход к пакетным отказам приема модели. Эффективность стратегии планирования оценена в терминах достигнутой пропускной способности и справедливости в разделении ресурсов.

Введение

Пример рассматривает следующие операции в gNB и UEs, которые упрощают UL и передачи DL и приемы.

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

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

  • Конфигурируемый TDD шаблон DL-UL.

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

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

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

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

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

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

  • Одна часть пропускной способности, покрывающая целую пропускную способность поставщика услуг.

Следующие пакеты управления приняты, чтобы быть отправленными из полосы i.e. без потребности ресурсов для передачи и гарантированного безошибочного приема: присвоение UL, присвоение DL, буферный отчет о состоянии (BSR), обратная связь PDSCH и отчет CQI. Эти пакеты управления следуют за TDD DL и синхронизации UL. Например, BSR и обратная связь PDSCH отправляются во время UL, в то время как присвоения ресурса отправляются во время DL.

TDD настройка шаблона DL-UL

NR обеспечивает гибкий способ сконфигурировать DL и ресурсы UL. Параметры, используемые, чтобы задать пользовательскую настройку TDD:

  1. Периодичность передачи DL-UL в мс.

  2. Ссылочный интервал поднесущей, чтобы вычислить количество пазов в шаблоне DL-UL. В этом примере это принято, чтобы быть тем же самым как фактический интервал поднесущей, используемый для передачи.

  3. Количество последовательных всех пазов DL в начале каждого шаблона DL-UL.

  4. Количество последовательных символов DL в начале паза после последнего всего паза DL.

  5. Количество последовательных всех пазов UL в конце каждого шаблона DL-UL.

  6. Количество последовательных символов UL в конце паза, предшествующего первому всему пазу UL.

Пример не демонстрирует гибкие символы, таким образом, символы с незаданным типом символа приняты в течение защитного периода. Вот является пример получившегося TDD шаблоном DL-UL на основе этих параметров. Этот шаблон DL-UL повторяется во временной шкале.

  • reference_scs = 15 кГц (т.е. паз на 1 мс), DLULPeriodicity = 5 мс, numDLSlots = 3, numDLSyms = 7, numULSlots = 1, numULSyms = 5

Количество пазов в периодичности DL-UL относительно ссылочного SCS 15 кГц, NumSlotsDLULPeriodicity = 5

NumberOfGuardSymbols = TotalSymbolsInPattern - TotalSymbolsWithTypeSpecified

= (14 * NumSlotsDLULPeriodicity) - (numDLSlots*14 + numDLSyms + numULSyms + numULSlots*14)

= 2 символа

Планировщик

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

И UL и планировщики DL, запущенные в начале паза, когда первый символ является символом DL. Планировщики запускаются во время DL так, чтобы присвоения (UL и DL) могли быть немедленно отправлены в UEs в направлении DL. Время выполнения алгоритма планировщика, а также задержки распространения принято, чтобы быть нулем. Выход планирования операций является массивом присвоений. Каждое присвоение содержит информационные поля, чтобы полностью задать PUSCH или передачу PDSCH.

  • Планировщик UL

UL планирование операции выполняет эти два шага.

  1. Выберите пазы, которые будут запланированы: критерии, используемые в этом примере, выбирают все предстоящие пазы (включая текущий) содержащий незапланированные символы UL, которые должны быть запланированы теперь. Такие пазы должны быть запланированы теперь, когда они не могут быть запланированы в следующем пазе с символами DL, в зависимости от значения возможности времени для подготовки PUSCH UEs. Это гарантирует, что ресурсы UL планируются максимально близко к фактическому времени передачи.

Ниже 2 примера, чтобы объяснить, как пазы UL выбраны в этом примере для планирования, на основе времени для подготовки PUSCH.

(i) Предположение, что UEs требуют времени для подготовки PUSCH, эквивалентного 10 символам, когда планировщик UL запускается в Пазе-A, он не выбирает паза для планирования. Поскольку планирование в следующем пазе (i.e. Паз-B), обеспечивает достаточно времени для подготовки PUSCH (14 символов) для передачи UL в Пазе-C. Позже, когда планировщик UL запускается в Пазе-B, он выбирает Slot-C и Slot-D для планирования. Паз-D планируется в самом Пазе-B (а не в Пазе-C), потому что Паз-C является всем пазом UL и следовательно не имеет никаких символов DL для отправки присвоений в направлении DL.

(ii) Предположение, что UEs требуют времени для подготовки PUSCH, эквивалентного 16 символам, Паз-C планируется в самом Пазе-A. Поскольку планирование в Пазе-B только обеспечило бы 14 символов времени для подготовки PUSCH, чтобы запустить передачу в Пазе-C. Паз-D планируется в Пазе-B.

2. Планирование ресурса: Если какие-либо пазы выбраны в первом шаге, присваивают ресурсы UL тех пазов к UEs.

  • Планировщик DL

Планировщик DL запускается в каждом пазе, начинающемся с символа DL и ресурсов присвоения первого предстоящего паза, содержащего символы DL. Так, когда планировщик DL запустится в начале Паза-A, он планирует ресурсы DL Паза-B.

Основанное на символе планирование

NR позволяет TTI запускаться в любом положении символа в пазе и с гранулярностью TTI в символах. Рисунок показывает способ, которым планировщик UL действует в этом примере, чтобы запланировать символы UL паза с гранулярностью TTI двух символов. Показанный паз содержит шесть символов UL. Планировщик завершает итерацию символов UL в трех итерациях с каждой итерацией, распределяющей ресурсы частоты двух символов. Планировщик DL также следует за аналогичным подходом для планирования DL.

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

Установите параметры для симуляции.

rng('default'); % Reset the random number generator
simParameters = []; % Clear simParameters variable
simParameters.NumFramesSim = 100; % 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 following simulation parameters are array
% of length equal to NumUEs: simParameters.UEDistance,
% simParameters.ULPacketPeriodicityUEs, simParameters.ULPacketSizesUEs,
% simParameters.DLPacketPeriodicityUEs, simParameters.DLPacketSizesUEs
simParameters.NumUEs = 4;
simParameters.UEDistance = [100; 150; 300; 400]; % Distance of UEs from gNB (in meters)

% Set the value of scheduling type to 0 (slot based scheduling) or 1
% (symbol based scheduling). If value is not set, the default value is 0
simParameters.SchedulingType = 1;

% Set the minimum time-domain assignment in terms of symbol duration.
% Applicable only for symbol based scheduling. For slot based scheduling,
% it is always full slot (14 symbols)
simParameters.TTIGranularity = 4;

% Define the TDD DL-UL pattern. The reference subcarrier spacing used for
% calculating slot duration for the pattern is assumed to be same as actual
% subcarrier spacing used for transmission as defined by simParameters.SCS.
% Keep only the symbols intended for guard period during DLULPeriodicity
% with type (DL or UL) unspecified
simParameters.DLULPeriodicity = 5; % Duration of the DL-UL pattern in ms
simParameters.NumDLSlots = 2; % Number of consecutive full DL slots at the beginning of each DL-UL pattern
% Define the number of consecutive DL symbols following the full DL slots
% and the number of consecutive UL symbols preceding the full UL slots. In
% the case of slot based scheduling, only simParameters.NumDLSyms is
% applicable and it defines the number of DL symbols at the start of the
% slot, while the remaining symbols of the slot are assumed to be allotted
% for guard period
simParameters.NumDLSyms = 8; % Number of consecutive DL symbols in the beginning of the slot following the last full DL slot
simParameters.NumULSyms = 4; % Number of consecutive UL symbols in the end of the slot preceding the first full UL slot
simParameters.NumULSlots = 2; % Number of consecutive full UL slots at the end of each DL-UL pattern

% 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 8 as the
% distance falls within the [501, 1000] meters range, as per the mapping.
% Set the distance in increasing order and the maximum achievable CQI value
% in decreasing order
simParameters.CQIvsDistance = [
    200  15;
    300  12;
    500  10;
    1000  8;
    1200  7];

% Set the periodic UL and DL application traffic pattern for UEs
simParameters.ULPacketPeriodicityUEs = [20; 30; 20; 30]; % Periodicity (in ms) at which the UL packets are generated by UEs
simParameters.ULPacketSizesUEs = [4000; 6000; 5500; 4000]; % Size of the UL packets (in bytes) generated by UEs
simParameters.DLPacketPeriodicityUEs = [20; 15; 15; 20]; % Periodicity (in ms) at which the DL packets are generated for UEs at gNB
simParameters.DLPacketSizesUEs = [6000; 5000; 10000; 8000]; % Size of the DL packets generated (in bytes) for UEs at gNB

% Medium access control (MAC) configuration
simParameters.SchedulerStrategy = 'PF'; % Supported scheduling strategies: 'PF', 'RR' and 'BestCQI'
% 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 for PUSCH and PDSCH transmissions (limit is
% applicable for new transmission assignments and not for the retransmissions)
simParameters.RBAllocationLimitUL = 15; % For PUSCH
simParameters.RBAllocationLimitDL = 15; % For PDSCH
simParameters.BSRPeriodicity = 1; % Buffer status report transmission periodicity (in ms)

% PHY layer and channel configuration
% RB count for 5 MHz band with 15 kHz subcarrier spacing (SCS). The complete
% bandwidth is assumed to be allotted for PUSCH or PDSCH
simParameters.NumRBs = 25;
simParameters.SCS = 15; % kHz
simParameters.DLBandwidth = 5e6; % Hz
simParameters.ULBandwidth = 5e6; % Hz
simParameters.DLCarrierFreq = 2.595e9; % Hz
simParameters.ULCarrierFreq = 2.595e9; % Hz

% 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: RB_CQI = RB_CQI +/- CQIDelta
simParameters.ChannelUpdatePeriodicity = 0.2; % In sec
simParameters.CQIDelta = 1;

% Logging and visualization configuration
% Flag to enable or disable runtime 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. For
% symbol based scheduling, it updates every slot to show RB allocation to
% the UEs over different symbols of the last slot
simParameters.RBVisualization = false;
% The output metrics plots are updated periodically NumMetricsSteps times within the
% simulation duration
simParameters.NumMetricsSteps = 20;
% MAT-files to write the logs into. They are used for post simulation analysis and visualization
simParameters.ParametersLogFile = 'simParameters'; % For logging the simulation parameters
simParameters.SimulationLogFile = 'simulationLogs'; % For logging the simulation logs

hNRSchedulingTDDValidateConfig(simParameters); % Validate the simulation configuration

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

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

simParameters.DuplexMode = 1; % TDD (example specific constant)
simParameters.NCellID = 1; % Physical cell ID
simParameters.GNBPosition = [0 0 0]; % Position of gNB in (x,y,z) coordinates
simParameters.NumLogicalChannels = 1; % Only 1 logical channel is assumed in each UE (Example specific constant)
slotDuration = 1/(simParameters.SCS/15); % Slot duration in ms
numSlotsFrame = 10/slotDuration; % Number of slots in 10 ms frame
numSlotsSim = simParameters.NumFramesSim * numSlotsFrame; % Simulation time in units of slot duration
numSymbolsSim = numSlotsSim * 14; % Simulation time in units of symbol duration
% 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

% DL and UL packet periodicities for UEs in terms of number of slots
appPeriodicityUEsSlotsUL = simParameters.ULPacketPeriodicityUEs ./ slotDuration;
appPeriodicityUEsSlotsDL = simParameters.DLPacketPeriodicityUEs ./ slotDuration;

% Mapping between logical channel and logical channel group identifier (LCGID)
simParameters.LCHConfig.LCGID = ones(simParameters.NumUEs, simParameters.NumLogicalChannels);
% Priority of each logical channel
simParameters.LCHConfig.Priority = ones(simParameters.NumUEs, simParameters.NumLogicalChannels);
% Prioritized bitrate (PBR) of each logical channel (in kilo bytes per second)
simParameters.LCHConfig.PBR = 8*ones(simParameters.NumUEs, simParameters.NumLogicalChannels);
% Bucket size duration (BSD) of each logical channel (in ms). However, the priority,
% PBR and BSD for logical channel is not relevant with single logical
% channel assumed in this example
simParameters.LCHConfig.BSD = 10*ones(simParameters.NumUEs, simParameters.NumLogicalChannels);
% Logical channel id (logical channel ID of data radio bearers starts from 4) 
simParameters.LCHConfig.LCID = ones(simParameters.NumUEs, simParameters.NumLogicalChannels) .* (4:4+simParameters.NumLogicalChannels-1);

% RLC entity direction. Value 0 represents DL only, 1
% represents UL only and 2 represents both UL and DL
% directions. Setting entity direction to have both UL and DL
simParameters.RLCConfig.EntityDir = 2*ones(simParameters.NumUEs, 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

% Maximum RLC SDU length (in bytes) as per 3GPP TS 38.323
simParameters.maxRLCSDULength = 9000;

% Calculate maximum achievable CQI value for the 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

% Define initial UL and DL 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
simParameters.InitialChannelQualityDL = zeros(simParameters.NumUEs, simParameters.NumRBs); % To store current DL 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);
    % Initially, DL and UL CQI values are assumed to be equal
    simParameters.InitialChannelQualityDL(ueIdx, :) = simParameters.InitialChannelQualityUL(ueIdx, :);
end

% Update periodicity of RB assignment visualization in terms of number of slots
if ~isfield(simParameters, 'SchedulingType') || simParameters.SchedulingType == 0 % If no scheduling type is specified or slot based scheduling is specified
    rbAssignmentPlotPeriodicity = numSlotsFrame; % Update every frame (10 ms)
else % Symbol based scheduling
    rbAssignmentPlotPeriodicity = 1; % Update every slot
end

gNB и Setup UEs

Создайте gNB и объекты UE, инициализируйте информацию о качестве канала для UEs и настройте логический канал в gNB и UE. Классы помощника hNRGNB.m и hNRUE.m создают gNB и узел UE соответственно, содержа слой RLC и MAC. Для слоя МАКа hNRGNB.m использует класс помощника hNRGNBMAC.m, чтобы реализовать функциональность gNB MAC, и hNRUE.m использует hNRUEMAC.m, чтобы реализовать функциональность УИ МАКА. Планировщики реализованы в hNRSchedulerRoundRobin.m (RR), hNRSchedulerProportionalFair.m (PF), hNRSchedulerBestCQI.m (Лучший CQI). Все планировщики наследовались базовому классу hNRScheduler.m, который содержит базовую функциональность планирования. Для слоя RLC и hNRGNB.m и hNRUE.m используют hNRUMTransmitter.m, чтобы реализовать функциональность передатчика RLC и hNRUMReceiver.m, чтобы реализовать функциональность приемника RLC. Слой Passthrough PHY для UE и gNB реализован в hNRUEPassThroughPhy.m и hNRGNBPassThroughPhy.m, соответственно.

simParameters.Position = simParameters.GNBPosition;
gNB = hNRGNB(simParameters); % Create the 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);
end
addScheduler(gNB, scheduler); % Add scheduler to gNB

gNB.PhyEntity = hNRGNBPassThroughPhy(simParameters); % Add 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.UEDistance(ueIdx) 0 0]; % Position of UE
    UEs{ueIdx} = hNRUE(simParameters, ueIdx);
    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
    updateChannelQuality(gNB, simParameters.InitialChannelQualityUL(ueIdx, :), 1, ueIdx); % 1 for UL
    % Initialize the DL CQI values at gNB and UE. The DL CQI values
    % help gNB in scheduling, and UE in packet error probability estimation
    updateChannelQuality(gNB, simParameters.InitialChannelQualityDL(ueIdx, :), 0, ueIdx); % 0 for DL
    updateChannelQuality(UEs{ueIdx}, simParameters.InitialChannelQualityDL(ueIdx, :));
    
    % Setup the logical channel and add application traffic
    for lcIdx = 1:simParameters.NumLogicalChannels
        % Create RLC channel configuration structure
        rlcChannelConfigStruct.EntityType = simParameters.RLCConfig.EntityDir(ueIdx, lcIdx);
        rlcChannelConfigStruct.LogicalChannelID = simParameters.LCHConfig.LCID(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 gNB and UE nodes
        ulPacketSize = simParameters.ULPacketSizesUEs(ueIdx);
        % Calculate the data rate (in kbps) of On-Off traffic pattern using
        % packet size (in bytes) and packet interval (in ms)
        ulDataRate = ceil(1000/simParameters.ULPacketPeriodicityUEs(ueIdx)) * ulPacketSize * 8e-3;
        % Limit the size of the generated application packet to the maximum RLC
        % SDU size. The maximum supported RLC SDU size is 9000 bytes
        if ulPacketSize > simParameters.maxRLCSDULength
            ulPacketSize = simParameters.maxRLCSDULength;
        end
        % 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
        ulApp = networkTrafficOnOff('PacketSize', ulPacketSize, 'GeneratePacket', true, ...
            'OnTime', simParameters.NumFramesSim/100, 'OffTime', 0, 'DataRate', ulDataRate);
        UEs{ueIdx}.addApplication(ueIdx, simParameters.LCHConfig.LCID(ueIdx, lcIdx), ulApp);
        
        dlPacketSize = simParameters.DLPacketSizesUEs(ueIdx);
        dlDataRate = ceil(1000/simParameters.DLPacketPeriodicityUEs(ueIdx)) * dlPacketSize * 8e-3;
        if dlPacketSize > simParameters.maxRLCSDULength
            dlPacketSize = simParameters.maxRLCSDULength;
        end
        % Create an object for On-Off network traffic pattern for the specified
        % UE and add it to the gNB. This object generates the downlink (DL) data
        % traffic on the gNB for the UE
        dlApp = networkTrafficOnOff('PacketSize', dlPacketSize, 'GeneratePacket', true, ...
            'OnTime', simParameters.NumFramesSim/100, 'OffTime', 0, 'DataRate', dlDataRate);
        gNB.addApplication(ueIdx, simParameters.LCHConfig.LCID(ueIdx, lcIdx), dlApp);
    end
end

% Setup the UL and DL packet distribution mechanism
simParameters.MaxReceivers = simParameters.NumUEs;
% Create DL packet distribution object
dlPacketDistributionObj = hNRPacketDistribution(simParameters, 0); % 0 for DL
% Create UL packet distribution object
ulPacketDistributionObj = hNRPacketDistribution(simParameters, 1); % 1 for UL
hNRSetUpPacketDistribution(simParameters, gNB, UEs, dlPacketDistributionObj, ulPacketDistributionObj);

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

Симуляция является символом запуска символом, чтобы выполнить соответствующие операции. Если находящееся на пазе планирование выбрано, выполнение спрыгивает с текущего контура паза к следующему контуру паза. Выполняемые операции:

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

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

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

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

% To store the following UE metrics for each symbol: throughput bytes
% transmitted, goodput bytes transmitted, and pending buffer amount bytes
% (for logging purpose). The number of goodput bytes is calculated by
% excluding the retransmissions from the total transmissions. The complete
% transmission is assumed to be done in the first symbol of transmission.
% Metrics are for DL direction if symbol type is DL (likewise, for UL
% symbol)
UEMetrics = zeros(simParameters.NumUEs, 3);

% To store current CQI values on the RBs for the UEs for logging
channelQuality = zeros(simParameters.NumUEs, simParameters.NumRBs);

% To store the current value of last received NDI flag for HARQ processes
% of UEs for logging. NDI values are for DL HARQ processes, if symbol type is DL
% (likewise, for UL symbol)
HARQProcessStatus = zeros(simParameters.NumUEs, 16);

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

% Create logging and visualization objects for MAC scheduling and RLC
simSchedulingLogger = hNRSchedulingLogger(simParameters);
simRLCLogger = hNRRLCLogger(simParameters, lchInfo);
if ~isfield(simParameters, 'SchedulingType') || simParameters.SchedulingType == 0 % If no scheduling type is specified or slot based scheduling is specified
    tickGranularity = 14; % Operations are only at slot boundary. Simulation jumps from one slot boundary to next
else % Symbol based scheduling
    tickGranularity = 1; % Operations can be at symbol boundary. Simulation moves symbol-by-symbol
end

slotNum = 0;
% Execute all the symbols in the simulation
for symbolNum = 1 : tickGranularity : numSymbolsSim
    UEMetrics(:) = 0;
    HARQProcessStatus(:) = 0;
    symbolType = currentSymbolType(gNB); % Get current symbol type: DL/UL/Guard
    if mod(symbolNum - 1, 14) == 0
        slotNum = slotNum + 1;
    end
    
    % Run MAC and PHY layers of gNB
    run(gNB.MACEntity);
    run(gNB.PhyEntity);
    
    % Run MAC and PHY layers of UEs
    for ueIdx = 1:simParameters.NumUEs
        % Read the last received NDI flags for HARQ processes for
        % logging (Reading it before it gets overwritten by run function of MAC)
        if symbolType == 0 % DL
            HARQProcessStatus(ueIdx, :) = getLastNDIFlagHarq(UEs{ueIdx}.MACEntity, 0); % 0 for DL
        else
            HARQProcessStatus(ueIdx, :) = getLastNDIFlagHarq(UEs{ueIdx}.MACEntity, 1); % 1 for UL
        end
        run(UEs{ueIdx}.MACEntity);
        run(UEs{ueIdx}.PhyEntity);
    end
    
    % RLC logging (only at slot boundary)
    if mod(symbolNum - 1, 14) == 0 %
        for ueIdx = 1:simParameters.NumUEs % For all UEs
            % Get RLC statistics
            ueRLCStats{ueIdx} = getRLCStatistics(UEs{ueIdx}, ueIdx);
            gNBRLCStats{ueIdx} = getRLCStatistics(gNB, ueIdx);
        end
        logRLCStats(simRLCLogger, ueRLCStats, gNBRLCStats); % Update RLC statistics logs
    end
    
    % MAC logging
    % Read UL and DL assignments done by gNB MAC scheduler
    % at current time. Resource assignments returned by a scheduler (either
    % UL or DL) is empty, if either scheduler was not scheduled to run at
    % the current time or no resources got scheduled
    [resourceAssignmentsUL, resourceAssignmentsDL] = getCurrentSchedulingAssignments(gNB.MACEntity);
    % Read throughput and goodput bytes sent for each UE
    if symbolType == 0 % DL
        [UEMetrics(:, 1), UEMetrics(:, 2)] = getTTIBytes(gNB);
        UEMetrics(:, 3) = getBufferStatus(gNB); % Read pending buffer (in bytes) on gNB, for all the UEs
    end
    for ueIdx = 1:simParameters.NumUEs
        if symbolType == 0 % DL
            % Read the DL channel quality for the UE
            channelQuality(ueIdx,:) = getChannelQuality(gNB, 0, ueIdx); % 0 for DL
        else
            % Read the UL channel quality for the UE
            channelQuality(ueIdx,:) = getChannelQuality(gNB, 1, ueIdx); % 1 for UL
            % Read throughput and goodput bytes transmitted by the UE in the current TTI
            [UEMetrics(ueIdx, 1), UEMetrics(ueIdx, 2)] = getTTIBytes(UEs{ueIdx});
            UEMetrics(ueIdx, 3) = getBufferStatus(UEs{ueIdx}); % Read pending buffer (in bytes) on UE
        end
    end
    % Update logs based on the current symbol run of UEs and gNB
    logScheduling(simSchedulingLogger, symbolNum, [resourceAssignmentsUL resourceAssignmentsDL], UEMetrics, channelQuality, HARQProcessStatus, symbolType);
    
    % Visualization
    % RB assignment visualization (if enabled)
    if simParameters.RBVisualization
        if symbolNum > 1 && (simParameters.SchedulingType == 1 && (mod(symbolNum, 14) == 0)) || (simParameters.SchedulingType == 0 && (mod(slotNum, rbAssignmentPlotPeriodicity) == 0))
            % Plot at slot boundary, if the update periodicity is
            % reached
            plotRBGrids(simSchedulingLogger);
        end
    end
    % CQI grid visualization (if enabled)
    if simParameters.CQIVisualization
        if symbolNum > 1 && mod(symbolNum-1, 14) == 0 && mod(slotNum, numSlotsFrame) == 0 % Plot at frame boundary
            plotCQIRBGrids(simSchedulingLogger);
        end
    end
    % Plot scheduler metrics and RLC metrics visualization at slot
    % boundary, if the update periodicity is reached
    if symbolNum > 1 && mod(symbolNum-1, 14) == 0 && mod(slotNum, simParameters.MetricsStepSize) == 0
        plotMetrics(simSchedulingLogger);
        plotMetrics(simRLCLogger);
    end
    
    % 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
end

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

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

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

  • Отображение присвоения сетки ресурса на UEs: 2D сетка частоты времени показывает распределение ресурсов UEs. Для находящегося на пазе планирования это обновляет каждые 10 мс (длина системы координат) и показывает выделение RB UEs в предыдущей системе координат. Для основанного на символе планирования это обновляет каждый паз и показывает выделение RB символов предыдущего паза. Для получения дополнительной информации смотрите 'фигуру' Выделения Сетки Ресурса.

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

  • Отображение DL планирование метрических графиков: Как восходящие метрические графики, 'Нисходящие показатели производительности Планировщика' отображают соответствующие подграфики для направления DL. Графики показателей производительности обновляют каждый metricsStepSize пазы

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

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

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

Журналы временного шага: таблица показывает запись шага шага расчета. Каждая строка таблицы представляет символ или паз, на основе выбранного типа планирования (базирующийся символ или базирующийся паз). Информация подряд для DL, если типом символа (или паз) является DL. Аналогично, для UL символ (или паз).

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

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

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

  • Symbol: Номер символа в пазе (Только для основанного на символе планирования).

  • Type: Символ (или Паз) вводит как 'DL', 'UL' или 'охрана'. Для находящегося на пазе планирования тип может только быть DL/UL. Когда паз, содержащий защитные символы, принят, чтобы быть пазом DL с защитными символами в конце паза.

  • Битовый массив Выделения 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] средние значения, что пропускная способность имеет 13 RBGs и UE-1, присвоены индексы 2, 3, 5, 7 RBG, и 9; UE-2 присвоен индексы RBG: 0, 1, и 10; UE-3 присвоен индексы RBG: 4, 6, 8, 11, и 12; и UE-4 не присвоен никакой RBG.

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

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

  • NDI: Вектор-строка из длины N, где N является количеством UEs. Значение является флаговым значением NDI в присвоении для PUSCH или передачи PDSCH. Например, [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 или ресурсы PDSCH. Например: ['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) соответствует значению CQI для UE с RNTI i в RB j.

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

  • Байты пропускной способности: Вектор-строка из длины N, где N является количеством UEs. Значения представляют UL или байты ДЛ МАКА, переданные или для UEs в этом символе. Обратите внимание на то, что общие байты пропускной способности для полного PUSCH или передачи PDSCH показывают в строке, соответствующей первому символу передачи.

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

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

Планирование журналов присвоения: информация всех присвоений планирования и сопутствующей информации зарегистрирована эта таблица. Каждая строка является одним UL или присвоением DL. Для получения дополнительной информации формата журнала, смотрите раздел 'Simulation Logs' NR FDD, Планируя пример Оценки результатов деятельности.

Журналы RLC: Для получения дополнительной информации о формате журнала RLC смотрите, что NR PUSCH FDD Планирует.

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

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

  • Установите isLogReplay к false анализировать детали конкретной системы координат или конкретного паза системы координат. В окне 'Resource Grid Allocation', вводит номер системы координат и номер слота, чтобы визуализировать присвоение ресурса конкретного паза, если планирование типа является базирующимся символом. Для находящегося на пазе планирования введите номер системы координат, чтобы визуализировать присвоение ресурса для целой системы координат. Номер системы координат, введенный здесь, управляет номером системы координат для 'Качественной Визуализации Канала', фигурируют также.

% Read the logs and write them to MAT-files
% Get the logs
simulationLogs = cell(1,1);
logInfo = struct('TimeStepLogs',[], 'SchedulingAssignmentLogs',[] ,'RLCLogs',[]);
[logInfo.TimeStepLogs] = getSchedulingLogs(simSchedulingLogger);
logInfo.SchedulingAssignmentLogs = getGrantLogs(simSchedulingLogger); % Scheduling assignments log
logInfo.RLCLogs = getRLCLogs(simRLCLogger); % RLC statistics logs
simulationLogs{1} = logInfo;

save(simParameters.SimulationLogFile, 'simulationLogs'); % Save simulation logs in a MAT-file
save(simParameters.ParametersLogFile, 'simParameters'); % Save simulation parameters in a MAT-file

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

Можно использовать этот пример, чтобы далее исследовать эти опции.

Пользовательское планирование

Можно изменить существующую стратегию планирования реализовать пользовательскую. Обратитесь к разделу 'Further Exploration' NR FDD, Планируя пример Оценки результатов деятельности, чтобы видеть включенные шаги.

Используйте физический уровень 5G Toolbox™

Можно также переключиться от слоя PHY передачи до обработки физического уровня 5G Toolbox™ путем создания объектов PHY с помощью hNRGNBPhy.m и hNRUEPhy.m. Для получения дополнительной информации см. раздел 'gNB and UEs Setup' Оценки результатов деятельности Ячейки NR с Интегрированием Физического уровня. Установите параметр симуляции simParameters.SchedulingType к 0, когда hNRGNBPhy.m и hNRUEPhy.m только поддерживают находящееся на пазе планирование.

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

Используйте RLC AM

Можно также переключить рабочий режим сущности RLC от UM до подтвержденного режима (AM) путем изменения входных полей EntityType структуры и SeqNumFieldLength в configureLogicalChannel функция hNRNode.m. Для получения дополнительной информации см. раздел 'Further Exploration' NR FDD, Планируя Оценку результатов деятельности.

Приложение

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

  • hNRNode.m: базовый класс узла NR

  • hNRGNB.m: функциональность узла gNB

  • hNRUE.m: функциональность узла UE

  • hNRRLCEntity.m: Базовый класс для RLC UM и сущностей AM

  • hNRUMEntity.m: функциональность RLC UM

  • hNRAMEntity.m: функциональность RLC AM

  • hNRRLCDataPDUInfo.m: Создает информационный объект PDU RLC

  • hNRRLCBufferStatus.m: Генерирует буферный объект информации о статусе RLC

  • hNRRLCDataReassembly.m: Создайте информационный объект повторной сборки SDU RLC

  • hNRMAC.m: функциональность базового класса MAC NR

  • hNRGNBMAC.m: функциональность gNB MAC

  • hNRUEMAC.m: функциональность УИ МАКА

  • hNRScheduler.m: Базовая функциональность планировщика MAC

  • hNRSchedulerBestCQI.m: Реализации лучший CQI планирование стратегии

  • hNRSchedulerProportionalFair.m: Реализует пропорциональную справедливую стратегию планирования

  • hNRSchedulerRoundRobin.m: циклический алгоритм Реализаций планирование стратегии

  • hNRMACBSR.m: Генерирует буферный отчет о состоянии

  • hNRMACBSRParser.m: Синтаксические анализы буферизуют отчет о состоянии

  • hNRMACSubPDU.m: Генерирует MAC subPDU

  • hNRMACPaddingSubPDU.m: Генерирует MAC subPDU с дополнением

  • hNRMACMultiplex.m: Генерирует PDU MAC

  • hNRMACPDUParser.m: PDU MAC Синтаксических анализов

  • hNewHARQProcesses.m: Создает новый процесс HARQ

  • hUpdateHARQProcess.m: Обновления процесс HARQ

  • hNRPhyInterface.m: слой PHY соединяет интерфейсом с классом

  • hNRGNBPassthroughPhy.m: слой PHY передачи gNB

  • hNRUEPassthroughPhy.m: слой PHY передачи UE

  • hNRGNBPhy.m: функциональность gNB PHY

  • hNRUEPhy.m: функциональность UE PHY

  • hNRPUSCHInfo.m: информационная структура PUSCH, переданная MAC слою PHY

  • hNRPDSCHInfo.m: информационная структура PDSCH, переданная MAC слою PHY

  • hNRRxIndicationInfo.m: Информационная структура, переданная слоем PHY MAC наряду с PDU MAC

  • hNRUplinkGrantFormat.m: формат присвоения UL

  • hNRDownlinkGrantFormat.m: формат присвоения DL

  • hNRPacketDistribution.m: Создает пакетный объект распределения

  • hNRPhyRxBuffer.m: Создает буферный объект приема сигнала PHY

  • hSkipWeakTimingOffset.m: Пропустите оценки смещения синхронизации со слабой корреляцией

  • hNRRLCLogger.m: Реализации логгирование статистики RLC и функциональность визуализации

  • hNRSchedulingLogger.m: Реализации планируя информационную функциональность логгирования и визуализации

  • hNRPhyLogger.m: Реализации восходящая и нисходящая функциональность логгирования и визуализации частоты появления ошибочных блоков

  • hNRSchedulingTDDValidateConfig.m: Подтверждает настройку симуляции

  • hNRSetUpPacketDistribution.m: Настройте пакетную функциональность распределения

  • hNRPacketWriter.m: пакеты MAC Получений

  • hNRPacketInfo.m: формат Метаданных для получения пакетов MAC

  • NRPostSimVisualization.m: Отправьте скрипт визуализации симуляции

Ссылки

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

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

Похожие темы

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