Этот пример показывает влияние на эффективность сети из-за интерференции между межкамерами нисходящего канала (DL), вызванной ближайшими камерами. Пример моделирует 5G сеть New Radio (NR) из нескольких камер, работающих в одной полосе частот. Каждая камера имеет gNB, расположенную в центре камеры, которая обслуживает набор пользовательских аппаратов (UE). NR-стек на узлах включает в себя управление ссылки (RLC), управление доступом к среде (MAC) и физические (PHY) слои.
Пример рассматривает следующие операции в пределах gNB и UE, которые облегчают передачи и приемы DL.
Полный пакет PDSCH передается в первом символе выделенного набора символов. Приемник обрабатывает пакет в символе сразу после последнего символа в выделенном наборе символов.
Этот пример моделирует:
Взаимные межкамеры помехи.
Основанное на пазе и основанное на символе DL планирование ресурсов PDSCH.
Конфигурируемый интервал между поднесущими, приводящий к различным длительности паза.
Несмежное распределение ресурсов частотного диапазона в терминах групп ресурсных блоков (RBG).
Опорный сигнал демодуляции PDSCH (DM-RS).
Измерение качества канала DL по UE на основе CSI-RS, полученного от gNB. По умолчанию ресурсный элемент CSI-RS передается в каждом пазе для каждого ресурсного блока (RB) в полосе пропускания DL для всех UE. То же строение CSI-RS применимо ко всем UE в камере.
Потери при распространении в свободном пространстве (FSPL) и аддитивный белый Гауссовы шум (AWGN).
Один вход один выход (SISO) антенны строения.
Одна часть полосы пропускания по всей несущей.
Управляющие пакеты, такие как назначение DL, обратная связь PDSCH и отчет индикатора качества канала (CQI), принимаются за пределы полосы, то есть без необходимости в ресурсах для передачи и гарантированного безошибочного приема.
В сотовых системах каждая камера работает на конкретной несущей частоте. Камеры, работающие на той же несущей частоте, называются совместными камерами. Соканальные камеры могут вмешиваться в передачи между ними.
Рассмотрим эту выборку топологии сети, состоящей из 3 камер. Камеры -1 и камера -3 работают на одной и той же частотной полосе. Камера -2 работает на другой частотной полосе и не препятствует камера -1 или камера -3.
Узел (gNB или UE) состоит из приложений, генерирующих трафик, в дополнение к RLC, среднему управлению доступом (MAC) и PHY. Классы helper hNRGNB.m и hNRUE.m создают узлы gNB и UE соответственно, содержащие слои RLC, MAC и PHY. Для получения дополнительной информации о каждом слое см. раздел 'NR Protocol Stack' в примере оценки эффективности камер NR с интегрированием на физическом уровне.
Для симуляции установите следующие ключевые параметры конфигурации.
Время симуляции
Количество камер
Радиус камеры (все UE, соединенные с gNB, находятся в пределах этого расстояния)
Положения gNBs
Количество UE в каждой камере
Отношение сигнал/помеха и шум (SINR) к таблице отображения CQI для 0,1 блоков частоты ошибок (BLER). Интерполяционная таблица для отображения полученного индекса SINR на CQI для 0,1 BLER. Интерполяционная таблица соответствует таблице CQI согласно 3GPP TS 38.214 таблица 5.2.2.1-3. Для получения дополнительной информации о процессе генерации этой интерполяционной таблицы смотрите 5G пример создания отчетов CSI NR Nownlink.
Передайте степень gNB
Пропускная способность несущей DL с точки зрения количества ресурсных блоков (RB)
Несущая частота DL
Интервал между поднесущими
Модель трафика приложения DL
rng('default'); % Reset the random number generator simParameters = []; % Clear the simParameters variable simParameters.NumFramesSim = 20; % 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)
Количество камер в симуляции. Предполагается, что камеры имеют последовательные идентификаторы камер (NCellIDs) от 0
на NumCells-1
. Если вы измените количество камер, убедитесь, что количество строк в simParameters.GNBPosition
равно NumCells
.
simParameters.NumCells = 3; % Number of cells simParameters.CellRadius = 500; % Radius of each cell (in meters)
The N-by-2
матрица представляет положение gNBs в координатах (X, Y), где 'N'- количество камер в симуляции. Номер строки 'P
'представляет координаты X и Y gNB в ячейке, имеющей идентификатор камеры'
P-1
'. Для примера значение [3000, 600] во 2-й строке представляет координаты (X, Y) gNB в камере, имеющей камеру ID 1.
simParameters.GNBPosition = [1700 600; 3000 600; 2500 2000]; % Number of UEs in a cell. Each cell contains same number of UEs simParameters.NumUEsCell = 4; simParameters.GNBTxPower = 32; % Tx power for gNB (in dBm) % Set the channel bandwidth to 10 MHz and subcarrier spacing (SCS) to 30 kHz % as defined in 3GPP TS 38.104 Section 5.3.2. simParameters.NumRBs = 24; simParameters.SCS = 30; % kHz simParameters.DLCarrierFreq = 2.635e9; % Hz simParameters.DLBandwidth = 10e6; % Hz % SINR to CQI mapping table for 0.1 BLER simParameters.SINR90pc = [-5.46 -0.46 4.54 9.05 11.54 14.04 15.54 18.04 ... 20.04 22.43 24.93 25.43 27.43 30.43 33.43]; % Maximum limit on the RBs allotted for PDSCH. Transmission limit is % applicable for new PDSCH assignments and not for the retransmissions simParameters.RBAllocationLimitDL = 15; % For PDSCH
Логирование и строение визуализации.
% Specify the ID of cell of interest. All the visualizations and metrics are shown for this cell simParameters.CellOfInterest = 2; % Set a value from 0 to NumCells-1 % The parameters CQIVisualization and RBVisualization control the display % of these visualizations: (i) CQI visualization of RBs (ii) RB assignment % visualization. By default, the 'RBVisualization' plot is disabled. You % can enable it by setting to 'true' simParameters.CQIVisualization = true; 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
Строение трафика приложений.
% Set the periodic DL application traffic model for UEs. The following % configuration applies for each cell simParameters.DLPacketPeriodicityUEs = 10; % Periodicity (in ms) at which the DL packets are generated for UEs at gNB simParameters.DLPacketSizesUEs = 2e4; % Size of the DL packets generated (in bytes) for UEs at gNB % Validate the simulation configuration hNRIntercellInterferenceValidateConfig(simParameters);
На основе первичных параметров конфигурации вычислите выведенные параметры. Кроме того, установите некоторые конкретные константы примера.
simParameters.DuplexMode = 0; % FDD simParameters.ULBandwidth = 10e6; % Hz simParameters.ULCarrierFreq = 2.515e9; % Hz simParameters.NumUEs = simParameters.NumUEsCell; % Number of UEs in a cell simParameters.NCellIDList = 0:simParameters.NumCells-1; % List of physical cell IDs % CSI-RS resource configuration. All UEs are assumed to measure channel quality on same CSI-RS resource simParameters.CSIRSRowNumber = 2; % Possible row numbers for single transmit antenna case are 1 and 2 simParameters.SubbandSize = 8; % Size of sub-band for CQI reporting in terms of number of RBs % Set the BSRPeriodicity to 'inf' as there is no UL traffic simParameters.BSRPeriodicity = inf; % In ms % Slot duration for the selected SCS and number of slots in a 10 ms frame slotDuration = 1/(simParameters.SCS/15); % In ms numSlotsFrame = 10/slotDuration; % Number of slots in a 10 ms frame numSlotsSim = simParameters.NumFramesSim * numSlotsFrame; % Number of slots in the simulation % Interval at which metrics visualization updates in terms of number of % slots. As one slot is the finest time-granularity of the simulation, 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 numLogicalChannels = 1; % Only 1 logical channel is assumed in each UE in this example % Logical channel configuration applies for all the nodes (UEs and gNBs) in the simulation simParameters.LCHConfig.LCID = 4; % 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 = 0; % Create RLC channel configuration structure rlcChannelConfigStruct.LCGID = 1; % Mapping between logical channel and logical channel group ID rlcChannelConfigStruct.Priority = 1; % Priority of each logical channel rlcChannelConfigStruct.PBR = 8; % Prioritized bitrate (PBR), in kilobytes per second, of each logical channel rlcChannelConfigStruct.BSD = 10; % Bucket size duration (BSD), in ms, of each logical channel rlcChannelConfigStruct.EntityType = simParameters.RLCConfig.EntityDir; rlcChannelConfigStruct.LogicalChannelID = simParameters.LCHConfig.LCID; % Maximum RLC service data unit (SDU) length (in bytes) as per 3GPP TS 38.323 simParameters.maxRLCSDULength = 9000; % Generate the positions of UEs in each cell simParameters.UEPosition = generateUEPositions(simParameters); % Total number of UEs in the simulation simParameters.MaxReceivers = simParameters.NumCells * simParameters.NumUEsCell; if ~isfield(simParameters, 'SchedulingType') || simParameters.SchedulingType == 0 % If no scheduling type is specified or slot based scheduling is specified rbAssignmentPlotPeriodicity = numSlotsFrame; % Update RB assignment visualization every frame (10 ms) tickGranularity = 14; simParameters.PUSCHMappingType = 'A'; simParameters.PDSCHMappingType = 'A'; else % Symbol based scheduling rbAssignmentPlotPeriodicity = 1; % Update RB assignment visualization every slot tickGranularity = 1; simParameters.PUSCHMappingType = 'B'; simParameters.PDSCHMappingType = 'B'; end
Настройте камеры с отдельной камерой, состоящей из одного gNB и нескольких UE. Для каждой камеры создайте объекты gNB и UE, инициализируйте информацию о качестве канала для UE и настройте логический канал в gNB и UE. Классы helper hNRGNB.m и hNRUE.m создают узлы gNB и UE соответственно, содержащие слои RLC, MAC и PHY.
gNB = cell(simParameters.NumCells, 1); UEs = cell(simParameters.NumCells, simParameters.NumUEsCell); % Create DL packet distribution object dlPacketDistributionObj = hNRPacketDistribution(simParameters, 0); % 0 for DL % Create UL packet distribution object ulPacketDistributionObj = hNRPacketDistribution(simParameters, 1); % 1 for UL for cellIdx = 1:simParameters.NumCells % For each cell simParameters.NCellID = simParameters.NCellIDList(cellIdx); % Cell ID simParameters.Position = [simParameters.GNBPosition(cellIdx, :) 0]; % gNB position in (x,y,z) coordinates gNB{cellIdx} = hNRGNB(simParameters); % Create gNB node scheduler = hNRSchedulerProportionalFair(simParameters); % Create proportional fair scheduler addScheduler(gNB{cellIdx}, scheduler); % Add scheduler to gNB gNB{cellIdx}.PhyEntity = hNRGNBPhy(simParameters); % Create the PHY layer instance configurePhy(gNB{cellIdx}, simParameters); % Configure the PHY layer setPhyInterface(gNB{cellIdx}); % Set up the interface to PHY layer % For each cell, create the set of UE nodes and place them randomly within the cell radius for ueIdx = 1:simParameters.NumUEsCell simParameters.Position = [simParameters.UEPosition{cellIdx}(ueIdx, :) 0]; % Position of UE in (x,y,z) coordinates UEs{cellIdx, ueIdx} = hNRUE(simParameters, ueIdx); UEs{cellIdx, ueIdx}.PhyEntity = hNRUEPhy(simParameters, ueIdx); % Create the PHY layer instance configurePhy(UEs{cellIdx, ueIdx}, simParameters); % Configure the PHY layer setPhyInterface(UEs{cellIdx, ueIdx}); % Set up the interface to PHY % Setup logical channel at gNB for the UE configureLogicalChannel(gNB{cellIdx}, ueIdx, rlcChannelConfigStruct); % Setup logical channel at UE configureLogicalChannel(UEs{cellIdx, ueIdx}, ueIdx, rlcChannelConfigStruct); % Add data traffic pattern generators to gNB node packetSize = simParameters.DLPacketSizesUEs; % Calculate the data rate (in kbps) of On-Off traffic pattern using % packet size (in bytes) and packet interval (in ms) dataRate = ceil(1000/simParameters.DLPacketPeriodicityUEs) * packetSize * 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 packetSize > simParameters.maxRLCSDULength packetSize = 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 data % traffic on the gNB for the UE app = networkTrafficOnOff('PacketSize', packetSize, 'GeneratePacket', true, ... 'OnTime', simParameters.NumFramesSim/100, 'OffTime', 0, 'DataRate', dataRate); gNB{cellIdx}.addApplication(ueIdx, simParameters.LCHConfig.LCID, app); end % Setup the UL and DL packet distribution mechanism hNRSetUpPacketDistribution(simParameters, gNB{cellIdx}, UEs(cellIdx, :), dlPacketDistributionObj, ulPacketDistributionObj); end
Симуляция запуска паза по пазу. Для каждой камеры в каждом пазе выполняются следующие операции:
Запуск слоев MAC и PHY gNB
Запуск слоев MAC и PHY UE
Layer-specific логгирование и визуализация
Продвигайте таймер для узлов. Каждые 1 мс он также отправляет триггер в слои приложения и RLC. Прикладные слои и RLC слоя выполнять свои запланированные операции на основе триггера таймера 1 мс.
% Display network topology
plotNetwork(simParameters);
simSchedulingLogger = cell(simParameters.NumCells, 1); simPhyLogger = cell(simParameters.NumCells, 1); for cellIdx = 1:simParameters.NumCells % Create an object for MAC DL scheduling information visualization and logging simParameters.NCellID = simParameters.NCellIDList(cellIdx); simSchedulingLogger{cellIdx} = hNRSchedulingLogger(simParameters, 0); % 0 for DL % Create an object for PHY layer metrics logging simPhyLogger{cellIdx} = hNRPhyLogger(simParameters, 0); % 0 for DL end % Store the index of cell ID of interest cellOfInterestIdx = find(simParameters.CellOfInterest == simParameters.NCellIDList); % Create metrics visualization object for MAC and PHY metrics (DL direction is represented as 0) visualizer = hNRMetricsVisualizer(simParameters, 'MACLogger', simSchedulingLogger{cellOfInterestIdx}, 'PhyLogger', simPhyLogger{cellOfInterestIdx}, 'VisualizationFlag', 0); % Run processing loop slotNum = 0; numSymbolsSim = numSlotsSim * 14; % Simulation time in units of symbol duration % Execute all the symbols in the simulation for symbolNum = 1 : tickGranularity : numSymbolsSim if mod(symbolNum - 1, 14) == 0 slotNum = slotNum + 1; end % All the cells operating on same SCS hence slot durations are same for cellIdx = 1:simParameters.NumCells % For each cell % Run MAC and PHY layers of gNB run(gNB{cellIdx}); % Run MAC and PHY layers of UEs for ueIdx = 1:simParameters.NumUEsCell run(UEs{cellIdx, ueIdx}); end % MAC logging logCellSchedulingStats(simSchedulingLogger{cellIdx}, symbolNum, gNB{cellIdx}, UEs(cellIdx, :), 0); % 0 for DL % PHY logging logCellPhyStats(simPhyLogger{cellIdx}, symbolNum, gNB{cellIdx}, UEs(cellIdx, :)); end % Visualization % Check slot boundary if symbolNum > 1 && ((simParameters.SchedulingType == 1 && mod(symbolNum, 14) == 0) || (simParameters.SchedulingType == 0 && mod(symbolNum-1, 14) == 0)) % RB assignment visualization (if enabled) if simParameters.RBVisualization if mod(slotNum, rbAssignmentPlotPeriodicity) == 0 % Plot at slot boundary, if the update periodicity is reached plotRBGrids(simSchedulingLogger{cellOfInterestIdx}); end end % CQI grid visualization (if enabled) if simParameters.CQIVisualization if mod(slotNum, numSlotsFrame) == 0 % Plot at frame boundary plotCQIRBGrids(simSchedulingLogger{cellOfInterestIdx}); end end % If the update periodicity is reached, plot scheduler metrics and PHY metrics visualization % at slot boundary if mod(slotNum, simParameters.MetricsStepSize) == 0 plotMetrics(visualizer, slotNum); end end for cellIdx = 1:simParameters.NumCells % Advance timer ticks for gNB and UEs by the number of symbols per slot advanceTimer(gNB{cellIdx}, tickGranularity); for ueIdx = 1:simParameters.NumUEsCell advanceTimer(UEs{cellIdx, ueIdx}, tickGranularity); end end end
Показаны пять типов визуализации во время выполнения:
Отображение сетевой топологии: рисунок показывает сконфигурированную топологию камер. Для каждой камеры это показывает положение gNB и подключенных UE.
Отображение значений CQI для UE по ширине полосы PDSCH: Для получения дополнительной информации смотрите описание рисунка «Визуализация качества канала» в примере планирования NR PUSCH FDD.
Отображение назначения ресурсной сетки для UE: 2D частотно-временная сетка показывает распределение ресурсов для UE. Эту визуализацию можно включить в разделе Logging and Visualization Configuration. Для получения дополнительной информации см. описание рисунка «Распределение ресурсной сетки» в примере планирования FDD PUSCH NR.
Отображение графиков метрик планирования DL: Для получения дополнительной информации смотрите описание фигуры 'Nowlink Scheduler Performance Metrics' в примере NR FDD Scheduling Performance Evaluation.
Отображение частоты ошибок блоков DL: Для получения дополнительной информации смотрите описание 'Block Error Rate (BLER) Visualization рисунка в Камеру NR Эффективности Evaluation with Physical Слоя Интегрирования пример.
Параметры, используемые для симуляции и журналов симуляции, сохраняются в MAT-файлах для постсимуляционного анализа и визуализации. Параметры симуляции сохраняются в MAT-файле с именем файла в качестве значения параметра конфигурации simParameters.ParametersLogFile
. Журналы каждого временного шага, журналы назначения расписания и журналы BLER регистрируются для каждой камеры в симуляции и сохраняются в MAT-файле simParameters.SimulationLogFile
. После симуляции откройте файл для загрузки NCellID
, DLTimeStepLogs
, SchedulingAssignmentLogs
, и BLERLogs
в рабочей области.
NCellID: Это сохраняет идентификатор камеры и представляет камерам, к которым относятся журналы симуляции.
Журналы Временного шага DL: Сохраняет журналы по пазу симуляции с каждым пазом как одну строку в симуляции. Для получения дополнительной информации о формате журнала смотрите раздел 'Simulation Logs' в примере планирования FDD NR PUSCH.
Журналы назначения расписания: Информация обо всех назначениях расписания и связанной информации регистрируется в этом файле. Для получения дополнительной информации о формате журнала смотрите раздел 'Simulation Logs' в примере оценки эффективности планирования NR FDD.
Block Error журналы: Информация обо всех назначениях расписания и связанной информации регистрируется в этом файле. Для получения дополнительной информации о формате журнала смотрите раздел «Журналы симуляции» в примере оценки производительности ячеек NR с интеграцией на физическом уровне.
Можно запустить скрипт NRPostSimVisualization, чтобы получить постсимуляционную визуализацию журналов. Для получения дополнительной информации об опциях запуска этого скрипта смотрите пример оценки эффективности планирования FDD NR.
dlStats = getPerformanceIndicators(simSchedulingLogger{simParameters.CellOfInterest + 1});
[~, avgBLERLogs] = getBLERLogs(simPhyLogger{simParameters.CellOfInterest + 1});
fprintf('\nPeak DL throughput: %0.2f Mbps. Achieved average DL Throughput: %0.2f Mbps', dlStats(1, 1), dlStats(2, 1));
Peak DL throughput: 59.72 Mbps. Achieved average DL Throughput: 9.07 Mbps
fprintf('\nAchieved average DL Goodput: %0.2f Mbps', dlStats(5, 1));
Achieved average DL Goodput: 8.98 Mbps
fprintf('\nPeak DL spectral efficiency: %0.2f bits/s/Hz. Achieved average DL spectral efficiency: %0.2f bits/s/Hz', dlStats(3, 1), dlStats(4, 1));
Peak DL spectral efficiency: 5.97 bits/s/Hz. Achieved average DL spectral efficiency: 0.91 bits/s/Hz
disp(['Block error rate for each UE in the downlink direction: [' num2str(round(avgBLERLogs(:, 1)', 2)) ']']);
Block error rate for each UE in the downlink direction: [0.01 0 0.04 0.03]
% Get the logs if(simParameters.DuplexMode == 0) % FDD logInfo = struct('NCellID', [], 'DLTimeStepLogs', [], 'SchedulingAssignmentLogs', [], 'BLERLogs', [], 'AvgBLERLogs', []); else logInfo = struct('NCellID', [], 'TimeStepLogs', [], 'SchedulingAssignmentLogs', [], 'BLERLogs', [], 'AvgBLERLogs', []); end simulationLogs = cell(simParameters.NumCells, 1); for cellIdx = 1:simParameters.NumCells logInfo.NCellID = simParameters.NCellIDList(cellIdx); if(simParameters.DuplexMode == 0) % FDD logInfo.DLTimeStepLogs = getSchedulingLogs(simSchedulingLogger{cellIdx}); else % TDD logInfo.TimeStepLogs = getSchedulingLogs(simSchedulingLogger{cellIdx}); end logInfo.SchedulingAssignmentLogs = getGrantLogs(simSchedulingLogger{cellIdx}); % Scheduling assignments log logInfo.BLERLogs = getBLERLogs(simPhyLogger{cellIdx}); % Block error rate logs simulationLogs{cellIdx, 1} = logInfo; end save(simParameters.ParametersLogFile, 'simParameters'); % Save simulation parameters in a MAT-file save(simParameters.SimulationLogFile, 'simulationLogs'); % Save simulation logs in a MAT-file
Можно использовать этот пример для дальнейшего изучения этих опций.
Моделируйте помехи восходящей линии связи между узлами путем конфигурирования связанной с восходящей линией связи строения. Для получения дополнительной информации смотрите пример оценки эффективности камер NR с интегрированием физического слоя.
Моделируйте сценарии Агрессор-Жертва: Агрессор является источником вмешательства, и жертва страдает из-за вмешательства. Рассмотрим сценарий DL на следующем рисунке. Макрос UE находится далеко от макро-базовой станции (BS) и близко к малой камере. BS малой камеры мешает передаче BS макроса для UE макроса в DL. Из-за этого макроса UE страдает от помех со стороны малой камеры B. Малая камера BS называется агрессором, а макрос UE называется жертвой.
Чтобы смоделировать несколько кластеров, где каждый кластер состоит из камер, работающих на разных частотах, и проанализировать влияние интерференции на пользователей ребра камеры.
Основываясь на описанных параметрах симуляции, пример оценивает эффективность системы, измеренную в терминах различных метрик. Различные визуализации показывают эффективность запуска системы. Более тщательный анализ после симуляции при помощи сохранённых журналов дает подробную картину операций, происходящих на основе паза.
В примере используются эти вспомогательные функции и классы:
hWirelessNode.m: Базовый класс беспроводного узла
hNRNode.m: базовый класс узла NR как для gNB, так и для UE
hNRGNB.m: функциональность узла gNB
hNRUE.m: функциональность узла UE
helperApplication.m: функциональность слоя
hNRRLCEntity.m: Базовый класс для сущностей RLC UM и AM
hNRUMEntity.m: функциональность RLC UM
hNRAMEntity.m: функциональность RLC AM
hNRRLCDataPDUInfo.m: Создает информационный объект PDU RLC
hNRRLCBufferStatus.m: Генерирует объект информации о состоянии буфера RLC
hNRRLCDataReassembly.m: создайте информационный объект повторной сборки RLC SDU
hNRMAC.m: функциональность базового класса NR MAC
hNRGNBMAC.m: функциональность gNB MAC
hNRUEMAC.m: функциональность UE MAC
hNRScheduler.m: функциональность планировщика Core MAC
hNRSchedulerBestCQI.m: Реализует лучшую стратегию планирования CQI
hNRSchedulerProportionalFair.m: Реализует пропорциональную стратегию справедливого планирования
hNRSchedulerRoundRobin.m: Реализует стратегию кругового планирования
hNRMACBSR.m: Генерирует отчет о состоянии буфера
hNRMACBSRParser.m: Анализ отчета о состоянии буфера
hNRMACSubPDU.m: генерирует MAC subPDU
hNRMACPaddiningSubPDU.m: генерирует MAC subPDU с заполнением
hNRMACMultiplex.m: генерирует MAC PDU
hNRMACPDUParser.m: Анализирует MAC PDU
hNewHARQProcesses.m: Создает новый процесс HARQ
hUpdateHARQProcess.m: обновляет процесс HARQ
hNRPhyInterface.m: функциональность базового класса NR PHY
hNRGNBPhy.m: функциональность gNB PHY
hNRUEPhy.m: Функциональность UE PHY
hNRPUSCHInfo.m: информационная структура PUSCH передана MAC на слой PHY
hNRPDSCHInfo.m: информационная структура PDSCH передана MAC на слой PHY
hNRRxIndicationInfo.m: Информационная структура передана слоем PHY на MAC вместе с MAC PDU
hNRUplinkGrantFormat.m: Формат гранта UL
hNRDownlinkGrantFormat.m: Формат гранта DL
hNRPacketDistribution.m: Создает объект распределения пакетов
hNRPhyRxBuffer.m: Создает объект приема сигнала PHY
hSkipWeakTimingOffset.m: Пропустить оценки смещения времени со слабой корреляцией
hNRRLCLogger.m: Реализует функции логгирования и визуализации статистики RLC
hNRSchedulingLogger.m: Реализует функции логгирования и визуализации информации о планировании
hNRPhyLogger.m: Реализует функции логгирования ошибок восходящего и нисходящего блоков и визуализации
hNRIntercellInterferenceValidateConfig.m: Проверяет строение симуляции
hNRSetUpPacketDistribution.m: Настройка функциональности распределения пакетов
hNRPacketWriter.m: Захватывает пакеты MAC
hNRPacketInfo.m: Формат метаданных для захвата MAC-пакетов
hNRMetricsVisualizer.m: Реализует функциональность визуализации метрик
NRPostSimVisualization.m: Визуализация после симуляции скрипта
function plotNetwork(simParameters) % Create the figure figure('Name', 'Network Topology Visualization', 'units', 'normalized', 'outerposition', [0 0 1 1], 'Visible', "on"); title('Network Topology Visualization'); hold on; for cellIdx = 1:simParameters.NumCells % Plot the circle th = 0:pi/60:2*pi; xunit = simParameters.CellRadius * cos(th) + simParameters.GNBPosition(cellIdx, 1); yunit = simParameters.CellRadius * sin(th) + simParameters.GNBPosition(cellIdx, 2); if simParameters.CellOfInterest == simParameters.NCellIDList(cellIdx) h1 = plot(xunit, yunit, 'Color', 'green'); % Cell of interest else h2 = plot(xunit, yunit, 'Color', 'red'); end xlabel('X-Position (meters)') ylabel('Y-Position (meters)') % Add tool tip data for gNBs s1 = scatter(simParameters.GNBPosition(cellIdx, 1), simParameters.GNBPosition(cellIdx, 2), '^','MarkerEdgeColor', 'magenta'); cellIdRow = dataTipTextRow('Cell - ',{num2str(simParameters.NCellIDList(cellIdx))}); s1.DataTipTemplate.DataTipRows(1) = cellIdRow; posRow = dataTipTextRow('Position[X, Y]: ',{['[' num2str(simParameters.GNBPosition(cellIdx, :)) ']']}); s1.DataTipTemplate.DataTipRows(2) = posRow; % Add tool tip data for UEs uePosition = simParameters.UEPosition{cellIdx}; for ueIdx = 1:size(uePosition, 1) s2 = scatter(uePosition(ueIdx, 1), uePosition(ueIdx, 2), '.','MarkerEdgeColor', 'blue'); ueIdRow = dataTipTextRow('UE - ',{num2str(ueIdx)}); s2.DataTipTemplate.DataTipRows(1) = ueIdRow; posRow = dataTipTextRow('Position[X, Y]: ',{['[' num2str(uePosition(ueIdx, :)) ']']}); s2.DataTipTemplate.DataTipRows(2) = posRow; end end % Create the legend if simParameters.NumCells > 1 legend([h1 h2 s1 s2], 'Cell of interest', 'Interfering cells', 'gNodeB', 'UE', 'Location', 'northeastoutside') else legend([h1 s1 s2], 'Cell of interest', 'gNodeB', 'UE', 'Location', 'northeastoutside') end axis([0 4000 0 3000]); % Set axis limits hold off; daspect([1000,1000,1]); % Set data aspect ratio end function uePositions = generateUEPositions(simParameters) % Return the position of UEs in each cell uePositions = cell(simParameters.NumCells, 1); for cellIdx=1:simParameters.NumCells gnbXCo = simParameters.GNBPosition(cellIdx, 1); % gNB X-coordinate gnbYCo = simParameters.GNBPosition(cellIdx, 2); % gNB Y-coordinate theta = rand(simParameters.NumUEsCell, 1)*(2*pi); % Expression to calculate position of UEs with in the cell. By default, % it will place the UEs randomly with in the cell r = sqrt(rand(simParameters.NumUEsCell, 1))*simParameters.CellRadius; x = round(gnbXCo + r.*cos(theta)); y = round(gnbYCo + r.*sin(theta)); uePositions{cellIdx} = [x y]; end end
[1] 3GPP TS 38.104. "NR; радиопередача и прием базовой станции (BS). "3-ья Генерация партнерский проект; Группа технических спецификаций Радиосеть доступ.
[2] 3GPP TS 38.214. "NR; Процедуры физического слоя данных ". 3-ья Генерация проект Партнерства; Группа технических спецификаций Радиосеть доступ.
[3] 3GPP TS 38.321. "NR; Спецификация протокола управления средним доступом (MAC). "3rd Генерация Partnership Project; Группа технических спецификаций Радиосеть доступ.
[4] 3GPP TS 38.322. "NR; Спецификация протокола Radio Ссылки Control (RLC). "3rd Генерация Partnership Project; Группа технических спецификаций Радиосеть доступ.
[5] 3GPP TS 38.323. "NR; Спецификация протокола сходимости пакетных данных (PDCP). "3-ья Генерация проект партнерства; Группа технических спецификаций Радиосеть доступ.
[6] 3GPP TS 38.331. "NR; Спецификация протокола управления радиоресурсами (RRC). "3rd Генерация Partnership Project; Группа технических спецификаций Радиосеть доступ.
[7] 3GPP TR 37,910. «Исследование по самооценке к IMT-2020 представлению». Третья Генерация проект партнерства; Группа технических спецификаций Радиосеть доступ.