exponenta event banner

Моделирование частоты ошибок пакетов 802.11ax для однопользовательского формата

В этом примере показано, как измерить частоту ошибок пакетов в канале IEEE ® 802.11ax™ высоким КПД (HE) однопользовательского формата.

Введение

В этом примере сквозное моделирование используется для определения частоты ошибок пакетов для линии связи в формате 802.11ax [1] одного пользователя для выбора точек SNR. В каждой точке SNR несколько пакетов передаются через шумный канал TGax в помещении, демодулируются и PSDU восстанавливаются. Блоки PSDU сравниваются с переданными блоками для определения частоты ошибок пакетов. Обработка для каждого пакета суммирована на следующей диаграмме.

Конфигурация формы сигнала

Однопользовательский пакет (SU) HE представляет собой полнополосную передачу одному пользователю. Параметры передачи для формата HE SU конфигурируются с использованием wlanHESUConfig объект. Свойства объекта содержат конфигурацию. В этом примере объект настроен для пропускной способности канала на 20 МГц, 2 передают антенны, 2 пространственно-временных потока, никакое космическое блочное кодирование времени и 16-QAM rate-1/2 (МГЦ 3).

cfgHE = wlanHESUConfig;
cfgHE.ChannelBandwidth = 'CBW20';  % Channel bandwidth
cfgHE.NumSpaceTimeStreams = 2;     % Number of space-time streams
cfgHE.NumTransmitAntennas = 2;     % Number of transmit antennas
cfgHE.APEPLength = 1e3;            % Payload length in bytes
cfgHE.ExtendedRange = false;       % Do not use extended range format
cfgHE.Upper106ToneRU = false;      % Do not use upper 106 tone RU
cfgHE.PreHESpatialMapping = false; % Spatial mapping of pre-HE fields
cfgHE.GuardInterval = 0.8;         % Guard interval duration
cfgHE.HELTFType = 4;               % HE-LTF compression mode
cfgHE.ChannelCoding = 'LDPC';      % Channel coding
cfgHE.MCS = 3;                     % Modulation and coding scheme

Конфигурация канала

В этом примере модель внутреннего канала TGax NLOS используется с профилем задержки Model-B. Модель-В считается NLOS, когда расстояние между передатчиком и приемником больше или равно 5 метрам. Это описано далее в wlanTGaxChannel. В этом примере моделируется канал 2x2 MIMO.

% Create and configure the TGax channel
chanBW = cfgHE.ChannelBandwidth;
tgaxChannel = wlanTGaxChannel;
tgaxChannel.DelayProfile = 'Model-B';
tgaxChannel.NumTransmitAntennas = cfgHE.NumTransmitAntennas;
tgaxChannel.NumReceiveAntennas = 2;
tgaxChannel.TransmitReceiveDistance = 5; % Distance in meters for NLOS
tgaxChannel.ChannelBandwidth = chanBW;
tgaxChannel.LargeScaleFadingEffect = 'None';
fs = wlanSampleRate(cfgHE);
tgaxChannel.SampleRate = fs;

Параметры моделирования

Для каждой точки SNR (дБ) в snr генерируют, пропускают через канал и демодулируют вектор, чтобы определить частоту ошибок пакета.

snr = 10:5:35;

Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами:

  1. maxNumErrors - максимальное количество ошибок пакетов, моделируемых в каждой точке SNR. Когда количество ошибок пакетов достигает этого предела, моделирование в этой точке SNR завершается.

  2. maxNumPackets является максимальным количеством пакетов, моделируемых в каждой точке SNR, и ограничивает продолжительность моделирования, если предел ошибок пакета не достигнут.

Выбранные в этом примере числа приведут к очень короткому моделированию. Для статистически значимых результатов мы рекомендуем увеличить эти числа.

maxNumErrors = 10;   % The maximum number of packet errors at an SNR point
maxNumPackets = 100; % The Maximum number of packets at an SNR point

Обработка точек SNR

Для каждой точки SNR тестируется количество пакетов и вычисляется частота ошибок пакетов. Преамбула pre-HE стандарта 802.11ax обратно совместима с 802.11ac™, поэтому в этом примере компоненты входной синхронизации для сигнала VHT используются для синхронизации сигнала HE в приемнике. Для каждого пакета выполняются следующие шаги обработки:

  1. PSDU создается и кодируется для создания сигнала одного пакета.

  2. Сигнал пропускают через внутреннюю модель канала TGax. Различные реализации канала моделируются для различных пакетов.

  3. AWGN добавляется к принятой форме сигнала для создания требуемого среднего SNR на поднесущую после демодуляции OFDM. comm.AWGNChannel объект сконфигурирован для обеспечения правильного SNR. Конфигурация учитывает нормализацию в канале по количеству приемных антенн и энергии шума в неиспользуемых поднесущих, которые удаляются во время демодуляции OFDM.

  4. Пакет обнаружен.

  5. Грубый сдвиг несущей частоты оценивается и корректируется.

  6. Устанавливается точная синхронизация по времени. Выборки L-STF, L-LTF и L-SIG предусмотрены для точной синхронизации, чтобы обеспечить возможность обнаружения пакетов в начале или конце L-STF.

  7. Оценивают и корректируют точный сдвиг несущей частоты.

  8. HE-LTF извлекается из синхронизированного принятого сигнала. HE-LTF демодулируется OFDM и выполняется оценка канала.

  9. Поле данных извлекают из синхронизированного принятого сигнала и демодулируют OFDM.

  10. Отслеживание пилот-сигнала с общей фазовой ошибкой выполняется для отслеживания любого остаточного сдвига несущей частоты.

  11. Оценка шума выполняется с использованием пилот-сигналов демодулированного поля данных и оценки однопоточного канала на пилотных поднесущих.

  12. Скорректированные по фазе символы OFDM выравниваются с оценкой канала.

  13. Выровненные символы демодулируются и декодируются для восстановления PSDU.

A parfor шлейф может использоваться для параллельной обработки точек SNR, поэтому для каждой точки SNR создается и конфигурируется канал AWGN с помощью comm.AWGNChannel объект. Чтобы разрешить использование параллельных вычислений для увеличения скорости комментировать оператор «for» и раскомментировать оператор «parfor» ниже.

numSNR = numel(snr); % Number of SNR points
packetErrorRate = zeros(1,numSNR);

% Get occupied subcarrier indices and OFDM parameters
ofdmInfo = wlanHEOFDMInfo('HE-Data',cfgHE);

% Indices to extract fields from the PPDU
ind = wlanFieldIndices(cfgHE);

%parfor isnr = 1:numSNR % Use 'parfor' to speed up the simulation
for isnr = 1:numSNR
    % Set random substream index per iteration to ensure that each
    % iteration uses a repeatable set of random numbers
    stream = RandStream('combRecursive','Seed',99);
    stream.Substream = isnr;
    RandStream.setGlobalStream(stream);

    % Create an instance of the AWGN channel per SNR point simulated
    awgnChannel = comm.AWGNChannel;
    awgnChannel.NoiseMethod = 'Signal to noise ratio (SNR)';
    awgnChannel.SignalPower = 1/tgaxChannel.NumReceiveAntennas;
    % Account for noise energy in nulls so the SNR is defined per
    % active subcarrier
    awgnChannel.SNR = snr(isnr)-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);

    % Loop to simulate multiple packets
    numPacketErrors = 0;
    numPkt = 1; % Index of packet transmitted
    while numPacketErrors<=maxNumErrors && numPkt<=maxNumPackets
        % Generate a packet with random PSDU
        psduLength = getPSDULength(cfgHE); % PSDU length in bytes
        txPSDU = randi([0 1],psduLength*8,1);
        tx = wlanWaveformGenerator(txPSDU,cfgHE);

        % Add trailing zeros to allow for channel delay
        txPad = [tx; zeros(50,cfgHE.NumTransmitAntennas)];

        % Pass through a fading indoor TGax channel
        reset(tgaxChannel); % Reset channel for different realization
        rx = tgaxChannel(txPad);

        % Pass the waveform through AWGN channel
        rx = awgnChannel(rx);

        % Packet detect and determine coarse packet offset
        coarsePktOffset = wlanPacketDetect(rx,chanBW);
        if isempty(coarsePktOffset) % If empty no L-STF detected; packet error
            numPacketErrors = numPacketErrors+1;
            numPkt = numPkt+1;
            continue; % Go to next loop iteration
        end

        % Extract L-STF and perform coarse frequency offset correction
        lstf = rx(coarsePktOffset+(ind.LSTF(1):ind.LSTF(2)),:);
        coarseFreqOff = wlanCoarseCFOEstimate(lstf,chanBW);
        rx = helperFrequencyOffset(rx,fs,-coarseFreqOff);

        % Extract the non-HT fields and determine fine packet offset
        nonhtfields = rx(coarsePktOffset+(ind.LSTF(1):ind.LSIG(2)),:);
        finePktOffset = wlanSymbolTimingEstimate(nonhtfields,chanBW);

        % Determine final packet offset
        pktOffset = coarsePktOffset+finePktOffset;

        % If packet detected outwith the range of expected delays from
        % the channel modeling; packet error
        if pktOffset>50
            numPacketErrors = numPacketErrors+1;
            numPkt = numPkt+1;
            continue; % Go to next loop iteration
        end

        % Extract L-LTF and perform fine frequency offset correction
        rxLLTF = rx(pktOffset+(ind.LLTF(1):ind.LLTF(2)),:);
        fineFreqOff = wlanFineCFOEstimate(rxLLTF,chanBW);
        rx = helperFrequencyOffset(rx,fs,-fineFreqOff);

        % HE-LTF demodulation and channel estimation
        rxHELTF = rx(pktOffset+(ind.HELTF(1):ind.HELTF(2)),:);
        heltfDemod = wlanHEDemodulate(rxHELTF,'HE-LTF',cfgHE);
        [chanEst,pilotEst] = heLTFChannelEstimate(heltfDemod,cfgHE);

        % Data demodulate
        rxData = rx(pktOffset+(ind.HEData(1):ind.HEData(2)),:);
        demodSym = wlanHEDemodulate(rxData,'HE-Data',cfgHE);

        % Pilot phase tracking
        demodSym = heCommonPhaseErrorTracking(demodSym,chanEst,cfgHE);

        % Estimate noise power in HE fields
        nVarEst = heNoiseEstimate(demodSym(ofdmInfo.PilotIndices,:,:),pilotEst,cfgHE);

        % Extract data subcarriers from demodulated symbols and channel
        % estimate
        demodDataSym = demodSym(ofdmInfo.DataIndices,:,:);
        chanEstData = chanEst(ofdmInfo.DataIndices,:,:);

        % Equalization and STBC combining
        [eqDataSym,csi] = heEqualizeCombine(demodDataSym,chanEstData,nVarEst,cfgHE);

        % Recover data
        rxPSDU = wlanHEDataBitRecover(eqDataSym,nVarEst,csi,cfgHE,'LDPCDecodingMethod','layered-bp');

        % Determine if any bits are in error, i.e. a packet error
        packetError = ~isequal(txPSDU,rxPSDU);
        numPacketErrors = numPacketErrors+packetError;
        numPkt = numPkt+1;
    end

    % Calculate packet error rate (PER) at SNR point
    packetErrorRate(isnr) = numPacketErrors/(numPkt-1);
    disp(['MCS ' num2str(cfgHE.MCS) ','...
          ' SNR ' num2str(snr(isnr)) ...
          ' completed after ' num2str(numPkt-1) ' packets,'...
          ' PER:' num2str(packetErrorRate(isnr))]);
end
MCS 3, SNR 10 completed after 11 packets, PER:1
MCS 3, SNR 15 completed after 17 packets, PER:0.64706
MCS 3, SNR 20 completed after 52 packets, PER:0.21154
MCS 3, SNR 25 completed after 100 packets, PER:0.02
MCS 3, SNR 30 completed after 100 packets, PER:0
MCS 3, SNR 35 completed after 100 packets, PER:0

Зависимость частоты ошибок пакетов от SNR

figure;
semilogy(snr,packetErrorRate,'-*');
hold on;
grid on;
xlabel('SNR (dB)');
ylabel('PER');
dataStr = arrayfun(@(x)sprintf('MCS %d',x),cfgHE.MCS,'UniformOutput',false);
legend(dataStr);
title(sprintf('PER for HE Channel %s, %s, %s, PSDULength: %d',tgaxChannel.DelayProfile,cfgHE.ChannelBandwidth,cfgHE.ChannelCoding,cfgHE.APEPLength));

Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами: maxNumErrors и maxNumPackets. Для получения значимых результатов эти значения должны быть больше значений, представленных в этом примере. В качестве примера приведенный ниже рисунок был создан путем выполнения более длительного моделирования с помощью maxNumErrors: 1e3 иmaxNumPackets:1e4.

Приложение

В этом примере используются следующие вспомогательные функции:

Избранная библиография

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