exponenta event banner

Моделирование на уровне PHY 802.11ax

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

Введение

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

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

Для этого примера используется методология оценки TGax [3] для моделирования системы PHY:

  1. Точки доступа и STA случайным образом «отбрасываются» в рамках сценария.

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

  3. Выполняется одно или несколько «событий передачи». Каждое событие передачи состоит из выбора активных AP и STA на основе правил доступа к каналу и определения рабочих характеристик каждой линии связи.

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

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

В части (B), стадии «моделирования на уровне системы PHY», для каждого события передачи PHY-уровень моделируется для отдельных линий связи. Базовая схема оценки свободного канала (CCA) используется для управления тем, какие AP являются активными. Генерируются и объединяются формы сигналов для интересующего сигнала и помех, нарушенных моделями канала замирания. Результирующие пакеты обрабатываются приемником для восстановления интересующего пакета. Вычисляется средняя частота ошибок пакетов для сети.

Две части этого примера можно отключить с помощью параметров 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('cartesian','Name',roomNames,...
    'TransmitterFrequency',PHYParameters.TransmitterFrequency, ...
    'TransmitterPower',10.^((PHYParameters.TxPower+PHYParameters.TxGain-30)/10),...
    'Antenna','isotropic');

Создание месторасположений-получателей

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

% 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('cartesian','Name',roomNames,'Antenna','isotropic');

% 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 - Согласование долгосрочных характеристик радиосвязи

В этом разделе сценарий моделирования, характеристики радиосвязи и крупномасштабная модель замирания проверяются путем выполнения калибровочного теста TGax Evaluation Methody Box 1 Test 2 Downlink Only [3]. Этот тест вычисляет SINR на всех приемниках (STA), предполагая, что все передатчики (AP) активны. В рамках моделирования выполняется многократное отбрасывание передатчиков и приемников. Один активный приемник выбирается на отбрасывание.

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));
    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
tgaxCalibrationCDF(output.sinr,'SS1Box1Test2','Long-term Radio Characteristics');

fprintf('Calibration complete \n')

end
Running calibration ...
Calibration complete 

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

Часть B - Моделирование на уровне системы, ориентированное на PHY

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

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

В этом примере предполагается, что параметры передачи и канала одинаковы для всех узлов. Конфигурация передачи для всех пакетов - один пространственно-временной поток, никакое пространственно-временное блочное кодирование и 16-QAM rate-1/2 (МГЦ 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); % 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™/D4.1 Проект стандарта для информационных технологий - Телекоммуникации и обмен информацией между системами - Локальные и городские сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (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.