802.11be пакетная симуляция коэффициента ошибок для ЭХТ МУ однопользовательский формат пакета

В этом примере показано, как измерить пакетный коэффициент ошибок IEEE® 802.11be™ Extremely High Throughput, многопользовательского (ЭХТ МУ) ссылка формата пакета с отдельным пользователем.

Введение

Этот пример определяет пакетный коэффициент ошибок для 802.11be [1] однопользовательская (SU) ссылка при помощи сквозной симуляции для выбора точек отношения сигнал-шум (SNR). В каждой точке ОСШ пример симулирует передачу нескольких пакетов через шумный внутренний канал TGax, затем демодулирует полученные пакеты и восстанавливает PSDUs. Пример затем сравнивает переданные и полученные пакеты, чтобы определить пакетный коэффициент ошибок. Эта схема показывает шаги обработки для каждого пакета.

Настройка формы волны

Пакет ЭХТ МУ СУ является передачей полной полосы отдельному пользователю. Сконфигурируйте параметры передачи для формата пакета SU при помощи ehtMUConfig объект. Свойства объекта содержат физический уровень (PHY) настройка.

Создайте объект настройки для передачи ЭХТ МУ, установив полосу пропускания канала 20 МГц, длину APEP 1 000 байтов, две передающих антенны, два пространственно-временных потока и модуляцию и кодируя схему (MCS) значение 13, который задает квадратурную амплитудную (4096-QAM) модуляцию с 4096 точками и уровень кодирования 5/6. Если вы задаете mcs как вектор, пример выполняет симуляцию для каждого значения индекса MCS.

chanBW = 'CBW20';                           % Channel bandwidth
cfgEHT = ehtMUConfig(chanBW);
cfgEHT.User{1}.APEPLength = 1e3;            % APEP length (bytes)
numTx = 2;                                  % Number of transmit antennas
numRx = 2;                                  % Number of receive antennas
cfgEHT.NumTransmitAntennas = numTx;
cfgEHT.User{1}.NumSpaceTimeStreams = numTx; % Number of space-time streams
mcs = 13;                                   % MCS index

Настройка канала

Этот пример использует не угол обзора (NLOS) TGax внутренняя модель канала с Моделью-B профиля задержки. Модель-B рассматривается NLOS, когда расстояние между передатчиком и приемником больше или равно 5 метрам. Для получения дополнительной информации о модели канала TGax, смотрите wlanTGaxChannel.

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

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

Поскольку каждый ОСШ указывает в snrRange, пример генерирует конкретное количество пакетов, передает пакеты через канал, затем демодулирует полученный сигнал определить пакетный коэффициент ошибок. Установите значения ОСШ в snrRange параметр, чтобы симулировать переход от всех пакетов, декодируемых по ошибке ко всем пакетам, декодируемым успешно как повышения стоимости ОСШ для MCS 13. Если вы задаете snrRange как матрица, каждая строка представляет точки ОСШ для соответствующего индекса MCS, заданного в mcs.

snrRange = 37:5:57; % Set the range of SNR values

Эти параметры управляют количеством пакетов, протестированных на каждую точку ОСШ.

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

  2. maxNumPackets: максимальное количество пакетов симулировало для каждой точки ОСШ, которая ограничивает продолжительность симуляции, если симуляция не достигает пакетного предела погрешности.

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

maxNumErrors = 10;
maxNumPackets = 100;

Обработка точек ОСШ

Этот раздел измеряет пакетный коэффициент ошибок для каждой точки ОСШ путем выполнения этих шагов обработки для конкретного количества пакетов.

  1. Создайте PSDU и закодируйте, чтобы сгенерировать форму волны одно пакета.

  2. Передайте форму волны через внутреннюю модель канала TGax, с помощью различной реализации канала для каждого пакета.

  3. Добавьте AWGN в принятую форму волны, чтобы создать желаемый средний ОСШ на поднесущую после демодуляции OFDM. Настройка составляет нормализацию в канале количеством, получают антенны и шумовую энергию в неиспользованных поднесущих. Пример удаляет неиспользованные поднесущие во время демодуляции OFDM.

  4. Обнаружьте пакет

  5. Оцените и откорректируйте крупную несущую частоту возмещена (CFO)

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

  7. Оцените и откорректируйте прекрасный CFO

  8. Извлеките EHT-LTF из синхронизируемой принятой формы волны

  9. OFDM демодулируют EHT-LTF и выполняют оценку канала

  10. Извлеките поле данных из синхронизируемой принятой формы волны и выполните демодуляцию OFDM

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

  12. Выполните шумовую оценку при помощи демодулируемых пилотов поля данных и оценку канала единого потока в пилотных поднесущих

  13. Компенсируйте откорректированные символы фазы OFDM при помощи оценки канала

  14. Восстановите PSDU путем демодуляции и декодирования компенсируемых символов

Этот пример также демонстрирует, как ускорить симуляции при помощи parfor цикл вместо for цикл при симуляции каждой точки ОСШ. parfor функция выполняет обработку для каждого ОСШ параллельно, чтобы уменьшать общее время симуляции. Используйте parfor цикл, чтобы параллелизировать обработку точек ОСШ. Чтобы использовать параллельные вычисления для увеличенной скорости, закомментируйте for оператор и некомментарий parfor оператор в этом коде.

numSNR = size(snrRange,2); % Number of SNR points
numMCS = numel(mcs); % Number of MCS
packetErrorRate = zeros(numMCS,numSNR);

for imcs = 1:numel(mcs)
    cfgEHT.User{1}.MCS = mcs(imcs);
    ofdmInfo = ehtOFDMInfo('EHT-Data',cfgEHT);
    % SNR points to simulate from MCS
    snr = snrRange(imcs,:);
    ind = ehtFieldIndices(cfgEHT);

    %parfor isnr = 1:numSNR % Use parfor to speed up the simulation
    for isnr = 1:numSNR % Use for to debug the simulation
        % 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);

        % Define the SNR per active subcarrier to account for noise energy
        % in nulls
        snrValue = 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 waveform
            txPSDU = randi([0 1],getPSDULength(cfgEHT)*8,1); % PSDULength (bytes)
            tx = ehtWaveformGenerator(txPSDU,cfgEHT);

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

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

            % Pass waveform through an AWGN channel
            rx = awgn(rx,snrValue);

            % Detect packet 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 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);

            % EHT-LTF demodulation and channel estimation
            rxHELTF = rx(pktOffset+(ind.EHTLTF(1):ind.EHTLTF(2)),:);
            heltfDemod = ehtDemodulate(rxHELTF,'EHT-LTF',cfgEHT);
            [chanEst,pilotEst] = ehtLTFChannelEstimate(heltfDemod,cfgEHT);

            % Demodulate the Data field
            rxData = rx(pktOffset+(ind.EHTData(1):ind.EHTData(2)),:);
            demodSym = ehtDemodulate(rxData,'EHT-Data',cfgEHT);

            % Perform pilot phase tracking
            demodSym = ehtCommonPhaseErrorTracking(demodSym,chanEst,cfgEHT);

            % Estimate noise power in EHT fields
            nVarEst = ehtNoiseEstimate(demodSym(ofdmInfo.PilotIndices,:,:),pilotEst,cfgEHT);

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

            % Equalization
            [eqSym,csi] = ehtEqualizeCombine(demodDataSym,chanEstData,nVarEst,cfgEHT);

            % Recover data field bits
            rxPSDU = ehtDataBitRecover(eqSym,nVarEst,csi,cfgEHT,1,'LDPCDecodingMethod','norm-min-sum');

            % Determine if any bits are in error
            packetError = any(biterr(txPSDU,rxPSDU));
            numPacketErrors = numPacketErrors+packetError;
            numPkt = numPkt+1;
        end

        % Calculate PER at SNR point
        packetErrorRate(imcs,isnr) = numPacketErrors/(numPkt-1);
        disp(['MCS ' num2str(mcs(imcs)) ','...
              ' SNR ' num2str(snr(isnr)) ...
              ' completed after ' num2str(numPkt-1) ' packets,'...
              ' PER:' num2str(packetErrorRate(imcs,isnr))]);
    end
end
MCS 13, SNR 37 completed after 11 packets, PER:1
MCS 13, SNR 42 completed after 11 packets, PER:1
MCS 13, SNR 47 completed after 20 packets, PER:0.55
MCS 13, SNR 52 completed after 63 packets, PER:0.1746
MCS 13, SNR 57 completed after 100 packets, PER:0.01

Постройте пакетный коэффициент ошибок по сравнению с ОСШ

markers = 'ox*sd^v><ph+ox*sd^v><ph+';
color = 'bmcrgbrkymcrbmcrgbrkymcr';
figure;
for imcs = 1:numMCS
    semilogy(snrRange(imcs,:),packetErrorRate(imcs,:).',['-' markers(imcs) color(imcs)]);
    hold on;
end
grid on;
xlabel('SNR (dB)');
ylabel('PER');
dataStr = arrayfun(@(x)sprintf('MCS %d',x),mcs,'UniformOutput',false);
legend(dataStr,'Location','NorthEastOutside');
title(['PER (EHT MU), ' num2str(cfgEHT.ChannelBandwidth) ', Model-B, ' num2str(numTx) '-by-' num2str(numRx)]);

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

maxNumErrors и maxNumPackets параметры управляют количеством пакетов, протестированных на каждую точку ОСШ. Для значимых результатов увеличьте эти значения. Например, этот рисунок показывает результаты для полосы пропускания канала 320 МГц, длины APEP 16 000 байтов, значений MCS 0-13, maxNumErrors значение 100, и maxNumPackets значение 1 000. Соответствующие значения ОСШ для MCS между 0 и 13:

snrRange = [...
     8:1:13; ... % MCS 0
     8:2:18; ... % MCS 1
     16:2:26; ... % MCS 2
     18:2:28; ... % MCS 3
     24:2:34; ... % MCS 4
     26:2:36; ... % MCS 5
     28:2:38; ... % MCS 6
     32:2:42; ... % MCS 7
     34:2:44; ... % MCS 8
     36:2:46; ... % MCS 9
     38:2:48; ... % MCS 10
     42:2:52; ... % MCS 11
     44:2:54; ... % MCS 12
     45:3:60]; ...% MCS 13

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

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