802.11ax PHY-фокусируемая симуляция уровня системы

Этот пример показывает, как выполнить PHY-фокусируемую симуляцию уровня системы для IEEE® 802.11ax™. Часть (A) подтверждает сценарий симуляции, радио-характеристики и крупномасштабную исчезающую модель путем сравнения с опубликованными калибровочными результатами. Часть (B) оценивает пакетный коэффициент ошибок 802.11ax сеть путем симуляции отдельных ссылок между активными узлами в соответствии с основной ясной схемой оценки канала.

Введение

В этом примере производительность 802.11ax [1] сеть в жилом многоквартирном доме оценена с помощью PHY-фокусируемой симуляции уровня системы.

Жилой сценарий симуляции многоквартирного дома задан в [2]. Это состоит из создания с пятью этажами и квартирами на двадцать 10 м x 10 м x 3 м на пол. Каждая квартира имеет точку доступа (AP) и одну или несколько станций (STAs), помещенный в случайные xy-местоположения, процесс, называемый 'понижающимися' узлами. Это создает основную услугу установлена (BSS) на квартиру, которая случайным образом присвоена один из трех каналов. Сценарий симуляции задает крупномасштабную потерю пути, основанную на модели на расстоянии между узлами и количестве стен и пересеченных этажей.

Методология [3] оценки TGax для 'Системной симуляции PHY' сопровождается для этого примера:

  1. APS и STAs случайным образом 'пропущены' в рамках сценария.

  2. Для каждой пары узлов вычисляется крупномасштабная потеря пути.

  3. Выполняются одно или несколько 'событий передачи'. Каждое событие передачи состоит из выбора активного APS и STAs на основе правил доступа к каналу и определения производительности каждой ссылки.

Этот пример состоит из двух частей:

Частично (A), 'калибровочный' этап, сигнал к интерференции плюс шумовое отношение (SINR) вычисляется для нескольких 'отбрасываний', принимая нисходящий канал, вмешивающийся передачи. SINR получает долгосрочные радио-характеристики. Кумулятивная функция распределения (CDF) SINR по сравнению с опубликованными результатами Исследовательской группы TGax [4].

Частично (B), 'этап' симуляции уровня системы PHY, для каждого события передачи слой PHY моделируется для отдельных ссылок. Основная схема ясной оценки канала (CCA) используется, чтобы управлять, какой APS активны. Формы волны для сигнала интереса и интерференции, которой повреждают путем исчезновения моделей канала, сгенерированы и объединены. Результирующие пакеты обрабатываются получателем, чтобы восстановить пакет интереса. Средний пакетный коэффициент ошибок для сети вычисляется.

Две части этого примера могут быть отключены с помощью параметров calibrate и systemLevelSimulation. Фигура, отображающая сценарии симуляции, узлы, активные ссылки и интерференцию, отображена, когда showScenarioPlot верен.

calibrate = true;             % To execute Part A calibration test
systemLevelSimulation = true; % To execute Part B system-level simulation
showScenarioPlot = true;      % To show dynamic simulation plotting updates

Параметры симуляции

Главные параметры симуляции заданы или как принадлежащий Физическому уровню (PHY), Средний Слой Управления доступом (MAC), сценарий, или как симуляции. В этом примере PHY и параметры MAC приняты, чтобы быть тем же самым для всех узлов.

PHYParameters = struct;
PHYParameters.TxPower = 20;      % Transmitter power in dBm
PHYParameters.TxGain = 0;        % Transmitter antenna gain in dBi
PHYParameters.RxGain = -2;       % Receiver antenna gain in dBi
PHYParameters.NoiseFigure = 7;   % Receiver noise figure in dB
PHYParameters.NumTxAntennas = 1; % Number of transmitter antennas
PHYParameters.NumRxAntennas = 1; % Number of receiver antennas
PHYParameters.ChannelBandwidth = 'CBW80'; % Bandwidth of system
PHYParameters.TransmitterFrequency = 5e9; % Transmitter frequency in Hz

MACParameters = struct;
MACParameters.NumChannels = 3; % Number of non-overlapping channels
MACParameters.CCALevel = -70;  % Transmission threshold in CCA algorithm (dBm)

Параметры сценария задают размер и размещение жилого создания согласно [3].

% Number of Rooms in [x,y,z] directions
ScenarioParameters = struct;
ScenarioParameters.BuildingLayout = [10 2 5];

% Size of each room in meters [x,y,z]
ScenarioParameters.RoomSize = [10 10 3];

% Number of receivers per room. Note that only one receiver (STA) can be
% active at any given time.
ScenarioParameters.NumRxPerRoom = 1;

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

'Отбрасывание' случайным образом помещает передатчики и получатели в рамках сценария и выбирает канал для BSS. Событие 'передачи' случайным образом выбирает передатчики и получатели для передач согласно основным правилам доступа к каналу.

SimParameters = struct;
SimParameters.NumDrops = 3;
SimParameters.NumTxEventsPerDrop = 2;

Сгенерируйте ретрансляторы

Перед основной частью симуляции ретранслятор возражает, что txsite сгенерирован и присвоенные имена помещения формы 'Room#' для простоты ссылки. Один передатчик (AP) на комнату принят. Каждый передатчик принят, чтобы быть изотропным.

% Total number of transmitters, assuming one transmitter (tx) per room
numTx = prod(ScenarioParameters.BuildingLayout);

% Create transmitter sites with and isotropic antenna element
roomNames = strings(1,numTx);
for siteInd = 1:numTx
    roomNames(siteInd) = "Room " + siteInd;
end
txs = txsite('Name',roomNames,...
    'TransmitterFrequency',PHYParameters.TransmitterFrequency, ...
    'TransmitterPower',10.^((PHYParameters.TxPower+PHYParameters.TxGain-30)/10),...
    'Antenna',phased.IsotropicAntennaElement);

Сгенерируйте сайты получателя

Получить сайт возражает, что rxsite сгенерирован и присвоенные имена формы 'Room#-STA#' для простоты ссылки. NumRxPerRoom параметра Сценария используется, чтобы задать, сколько получателей (STAs) присутствует в каждой комнате. Каждый получатель принят, чтобы быть изотропным.

% Total number of receivers, assuming one transmitter (tx) per room
numRx = numTx*ScenarioParameters.NumRxPerRoom;

% Create receiver sites
roomNames = strings(1,numRx);
for siteInd = 1:numRx
    roomNames(siteInd) = "Room " + (mod(siteInd-1,numTx)+1) + "-" + ceil(siteInd/numTx);
end
rxs = rxsite('Name',roomNames,'Antenna',phased.IsotropicAntennaElement);

% Receiver noise power in dBm
T = 290; % Temperature (Kelvin)
k = physconst('Boltzmann'); % Boltzmann constant
% Sample rate (Hz)
fs = wlanSampleRate(wlanHESUConfig('ChannelBandwidth',PHYParameters.ChannelBandwidth));
rxNoisePower = 10*log10(k*T*fs)+30+PHYParameters.NoiseFigure;

Часть A - выравнивает долгосрочные радио-характеристики

В этом разделе сценарий симуляции, радио-характеристики и крупномасштабная исчезающая модель проверяются путем выполнения Теста Поля 1 Методологии Оценки TGax 2 Нисходящих канала Только калибровочный тест [3]. Этот тест вычисляет SINR во всех получателях (STAs), принимающий, что все передатчики (APS) активны. Несколько отбрасываний передатчиков и получателей выполняются как часть симуляции. Один активный получатель выбран на отбрасывание.

SINR для каждого получателя вычислен и агрегирован по всем отбрасываниям, моделируемым, чтобы сгенерировать кривую CDF. Эта кривая по сравнению с калибровочными результатами, обеспеченными в [4].

График, показывающий положения узла, активные ссылки и вмешивающиеся ссылки, сгенерирован на отбрасывание. Отдельные каналы могут быть скрыты и показаны в графике путем нажатия на соответствующую запись легенды.

seed = rng(6); % Seed random number generator and store state

if showScenarioPlot
    hGrid = tgaxBuildResidentialGrid(ScenarioParameters.RoomSize,ScenarioParameters.BuildingLayout, ...
        numTx,numRx,MACParameters.NumChannels);
end

if calibrate

fprintf('Running calibration ...\n');

% Pre-allocate output
output = struct;
output.sinr = zeros(SimParameters.NumDrops,numTx); % for storing SINR values
for drop = 1:SimParameters.NumDrops
    % Drop receivers in each room
    [association,txChannels,rxChannels,txPositions,rxPositions] = tgaxDropNodes( ...
        txs,rxs,ScenarioParameters,MACParameters.NumChannels);

    % All transmitters active
    activeTx = true(numTx,1);

    % Only pick one receiver per Room
    rxAlloc = randi([1 ScenarioParameters.NumRxPerRoom],numTx,1);
    activeRx = reshape(rxAlloc==1:ScenarioParameters.NumRxPerRoom,[],1);

    % Generate propagation model
    propModel = TGaxResidential('roomSize',ScenarioParameters.RoomSize);

    % Get the index of the transmitter for each receiver
    tnum = repmat((1:numTx),1,numRx/numTx);

    % SINR calculation - loop over each non-overlapping channel
    numChannels = numel(unique(txChannels));
    for k = 1:numChannels
        % Use kth non-overlapping channel
        tind = txChannels == k;
        rind = false(size(activeRx));
        rind(activeRx) = rxChannels(activeRx) == k;
        % Get the index of the transmitter of interest for each active receiver
        tsigind = tnum(rind);

        % Calculate SNR
        output.sinr(drop,tind) = sinr(rxs(rind),txs(tind),...
            'ReceiverGain',PHYParameters.RxGain,...
            'ReceiverNoisePower',rxNoisePower,...
            'PropagationModel',propModel,...
            'SignalSource',txs(tsigind), ...
            'Map','none');
    end

    % Plot nodes and links
    if showScenarioPlot % update plot data
        mask = txChannels==rxChannels';
        tgaxUpdatePlot(hGrid,txPositions,rxPositions,activeTx,activeRx,mask,txChannels,rxChannels, ...
            sprintf('Box 1 Test 2 "downlink only" calibration, drop #%d/%d',drop,SimParameters.NumDrops));
    end
end

% Plot the CDF of SINR and compare with calibration curves
tgaxPlotCalibrationCDF(output.sinr);

fprintf('Calibration complete \n')

end
Running calibration ...
Calibration complete 

Этот пример моделирует небольшое количество отбрасываний. Поэтому для более значимого сравнения число моделируемых отбрасываний должно быть увеличено. Калибровочный результат для 100 отбрасываний показывают ниже:

Часть B - PHY-фокусируемая симуляция уровня системы

В этом разделе сценарий и модель потери пути, калиброванная частично A, используются, чтобы выполнить PHY-фокусируемую симуляцию уровня системы и определить пакетный коэффициент ошибок для сети. Эта симуляция описана, как PHY-фокусируется, когда PHY не абстрагирован, и MAC упрощен. Каждая активная ссылка моделируется с помощью основополосной обработки передатчика и получателя. Очень простой MAC принимает в каждом событии передачи все передатчики (APS) желание передать, и один получатель (STA) на BSS является получателем. Простой алгоритм CCA используется, чтобы управлять доступом к каналу между передатчиками, как задано в рисунке 4 [3]. Алгоритм CCA включает случайные передатчики, если степень сигнала, полученная от передатчиков, которые были уже активированы, не превышает порог CCA, MACParameters.CCAThreshold.

Полученная степень сигнала от всех возможных вмешивающихся передатчиков вычисляется в каждом активном получателе. Если полученная степень от вмешивающегося передатчика выше уровня шума получателя, то ссылка моделируется с полной основополосной обработкой передатчика и получателя. Для каждой смоделированной ссылки HE однопользовательский пакет сгенерирован и проходится Образцовый-D NLOS TGax стационарная внутренняя модель канала. В получателе формы волны от передатчика интереса и всех вмешивающихся передатчиков масштабируются ожидаемой потерей пути и объединяются, чтобы создать форму волны, содержащую сигнал интереса плюс интерференция. Все формы волны являются выровненным временем. Получатель выполняет синхронизацию, демодуляцию, и декодирующий, чтобы попытаться восстановить полезную нагрузку. Декодируемая полезная нагрузка сравнивается с PSDU, переданным в BSS, чтобы определить, был ли пакет восстановлен успешно.

В этом примере передача и параметры канала приняты, чтобы быть тем же самым для всех узлов. Настройка передачи для всех пакетов является одним пространственно-временным потоком, никаким пространственно-временным блочным кодированием и 16-QAM rate-1/2 (MCS 3).

if systemLevelSimulation

% Pre-allocate outputs
output.numPkts = zeros(numRx,1);
output.numPktErrors = zeros(numRx,1);
output.sinrMeas = nan(numRx,SimParameters.NumTxEventsPerDrop,SimParameters.NumDrops);
output.sinrEst = nan(numRx,SimParameters.NumTxEventsPerDrop,SimParameters.NumDrops);
output.pktErrorRate = 0;

% For each possible transmitter create a waveform configuration. In this
% example the link and radio parameters are the same for all nodes.
cfgHEBase = wlanHESUConfig;
cfgHEBase.ChannelBandwidth = PHYParameters.ChannelBandwidth; % Channel bandwidth
cfgHEBase.NumTransmitAntennas = PHYParameters.NumTxAntennas; % Number of transmit antennas
cfgHEBase.SpatialMapping = 'Fourier';  % Spatial mapping matrix
cfgHEBase.NumSpaceTimeStreams = 1;     % Number of space-time streams
cfgHEBase.GuardInterval = 0.8;         % Guard interval duration
cfgHEBase.HELTFType = 4;               % HE-LTF compression mode
cfgHEBase.APEPLength = 1e3;            % Payload length in bytes
cfgHEBase.ChannelCoding = 'LDPC';      % Channel coding
cfgHEBase.MCS = 3;                     % Modulation and coding scheme
cfgHE = cell(numTx,1);
for txidx = 1:numTx
    cfgHE{txidx} = cfgHEBase;
end

fprintf('Running System Level Simulation ...\n')
for drop = 1:SimParameters.NumDrops
    fprintf('  Running drop #%d/%d ...\n',drop,SimParameters.NumDrops);

    % Drop receivers in each room
    [association,txChannels,rxChannels,txPositions,rxPositions] = tgaxDropNodes( ...
        txs,rxs,ScenarioParameters,MACParameters.NumChannels);

    % Generate propagation model
    propModel = TGaxResidential('roomSize',ScenarioParameters.RoomSize);

    % Calculate signal strength for all links
    signalStrength = sigstrength(rxs,txs,propModel,'Type','power',...
        'ReceiverGain',PHYParameters.RxGain,'Map','none'); % all signal strengths in dBm

    % Threshold signals below noise level to reduce simulation time
    signalStrength(signalStrength < rxNoisePower) = -Inf;

    % Threshold signals that are not on same non-overlapping channel
    signalStrength(~(txChannels == rxChannels')) = -Inf;

    % Mask the transmitter-receiver links that are non-negligible to
    % simulate and get the linear indices
    nonnegligibleMask = signalStrength > -Inf;

    % Reset the non-negligible channels to create a new realization for the
    % current drop
    nonnegligibleIdx = find(nonnegligibleMask)';

    % For each possible active link in a drop create a channel
    % configuration. In this example the link and radio parameters are the
    % same for all nodes.
    tgaxChan = cell(numel(nonnegligibleIdx),1);
    for i = 1:numel(nonnegligibleIdx)
        % Index of transmitter for a given link
        txIdx = mod(nonnegligibleIdx(i)-1,numTx)+1;
        % Channel configuration. The channel realization for each link is
        % different as the global random stream is used.
        tgaxChanBase = wlanTGaxChannel;
        tgaxChanBase.DelayProfile = 'Model-D';
        tgaxChanBase.NumTransmitAntennas = cfgHE{txIdx}.NumTransmitAntennas;
        tgaxChanBase.NumReceiveAntennas = PHYParameters.NumRxAntennas;
        tgaxChanBase.TransmitReceiveDistance = 10; % Distance in meters for NLOS
        tgaxChanBase.ChannelBandwidth = cfgHE{txIdx}.ChannelBandwidth;
        tgaxChanBase.LargeScaleFadingEffect = 'None';
        tgaxChanBase.EnvironmentalSpeed = 0; % m/s, stationary
        tgaxChanBase.SampleRate = fs;
        tgaxChanBase.NormalizeChannelOutputs = false;

        % Store in cell array and reset the channel to generate a new
        % response
        tgaxChan{i} = tgaxChanBase;
        reset(tgaxChan{i});
    end

    for txevent = 1:SimParameters.NumTxEventsPerDrop
        fprintf('    Running transmission event #%d/%d ...\n',txevent,SimParameters.NumTxEventsPerDrop);

        % Determine active transmitters and receivers with Clear Channel Assessment
        [activeTx,activeRx] = tgaxCCA(signalStrength,MACParameters.CCALevel);

        % Plot scenario and links
        if showScenarioPlot
            tgaxUpdatePlot(hGrid,txPositions,rxPositions,activeTx,activeRx,nonnegligibleMask,txChannels,rxChannels, ...
                sprintf('PHY System-Level Simulation, Drop #%d/%d, Transmission Event #%d/%d', ...
                drop,SimParameters.NumDrops,txevent,SimParameters.NumTxEventsPerDrop));
        end

        % Extract elements for active links using activeTx and activeRx
        cfgHEActive = cfgHE(activeTx);
        associationActive = association(activeTx,activeRx);
        nonnegligibleMaskActive = nonnegligibleMask(activeTx,activeRx);
        signalStrengthActive = signalStrength(activeTx,activeRx);

        % Create array containing active channels
        tgaxChanActive = cell(size(associationActive));
        matchIdx = nonnegligibleIdx==find(activeTx&activeRx');
        tgaxChanActive(nonnegligibleMaskActive) = tgaxChan(any(matchIdx,1));

        % Generate a waveform for each non-negligible active link and
        % combine waveforms for each receiver
        [rxWavs,txPSDUActive,signalPower,interfPower] = tgaxGenerateRxWaveforms( ...
            cfgHEActive,tgaxChanActive,nonnegligibleMaskActive,signalStrengthActive,associationActive);

        % Run PHY link simulation for each link and determine if the packet
        % has been decoded successfully. The estimated interference power
        % is passed to the receiver in the place of an interference power
        % measurement algorithm.
        numActiveRxs = sum(activeRx);
        pktError = false(numActiveRxs,1);
        sinrMeas = nan(numActiveRxs,1);
        for rxIdx = 1:numActiveRxs
            [pktError(rxIdx),sinrMeas(rxIdx)] = tgaxModelPHYLink( ...
                rxWavs{rxIdx},cfgHEActive{rxIdx},rxNoisePower,interfPower(rxIdx),txPSDUActive{rxIdx});
        end

        % Store output for active receivers
        output.numPktErrors(activeRx) = output.numPktErrors(activeRx)+pktError;
        output.numPkts(activeRx) = output.numPkts(activeRx) + 1;
        output.sinrMeas(activeRx,txevent,drop) = sinrMeas;

        % Calculate the expected SINR at each receiver
        sinrEst = 10*log10(signalPower./(interfPower+10^((rxNoisePower-30)/10)));
        output.sinrEst(activeRx,txevent,drop) = sinrEst;
    end
end

% Calculate average packet error rate
output.pktErrorRate = sum(output.numPktErrors)/sum(output.numPkts);

disp('Simulation complete')
disp(['Average packet error rate for transmitters: ' num2str(output.pktErrorRate)]);

end

rng(seed); % Restore random state
Running System Level Simulation ...
  Running drop #1/3 ...
    Running transmission event #1/2 ...
    Running transmission event #2/2 ...
  Running drop #2/3 ...
    Running transmission event #1/2 ...
    Running transmission event #2/2 ...
  Running drop #3/3 ...
    Running transmission event #1/2 ...
    Running transmission event #2/2 ...
Simulation complete
Average packet error rate for transmitters: 0.054152

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

PHY-фокусируемая симуляция уровня системы, продемонстрированная в этом примере, может использоваться, чтобы исследовать влияние параметров PHY-уровня на производительности системы. Например, график ниже показов сетевой средний пакетный коэффициент ошибок для различных значений порога CCA для 50 отбрасываний и 2 событий передачи на отбрасывание.

Приложение

Этот пример использует следующие функции помощника:

Выбранная библиография

  1. Черновой Стандарт IEEE P802.11ax™/D3.1 для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации - Поправка 6: Улучшения для Высокой эффективности WLAN.

  2. IEEE 802.11-14/0980r16 - Сценарии Симуляции TGax.

  3. IEEE 802.11-14/0571r12 - 11ax Методология Оценки.

  4. IEEE 802.11-14/0800r30 - Поле 1 и Калибровочные Результаты Поля 2.