Симуляция частоты ошибок пакета формирования сжатого луча 802.11ax

Этот пример показывает, как измерить частоту ошибок пакета формируемого лучом канала формата IEEE ® 802.11ax™ высокой эффективностью для одного пользователя (HE SU) с различными уровнями квантования обратной связи формирования луча.

Введение

Формирование луча передачи фокусирует энергию на приемнике, чтобы улучшить ОСШ ссылки. В этой схеме передатчик называется beamformer, а приемник - beamformee. Матрица управления используется параметром формирования луча, чтобы направить энергию на объект формирования луча. Матрица управления вычисляется с использованием информации о состоянии канала, полученной посредством измерений канала. Эти измерения получаются путем зондирования канала между лучевым форматором и лучевым формеем. Для звукового сигнала канала устройство формирования луча отправляет пакет нулевых данных (NDP) в beamformee. Beamformee измеряет информацию канала во время звучания, чтобы вычислить матрицу обратной связи. Эту матрицу сжимают в виде квантованных углов (phi и psi) и подают обратно в устройство формирования луча. Затем устройство формирования луча может вычислить матрицу обратной связи из квантованных углов, чтобы создать управляющую матрицу и передачи формы луча к блоку формирования луча. Процесс формирования матрицы управления показан в 802.11ac Transmit Beamforming.

В этом примере рассматривается строение MIMO 4x2 между передатчиком и приемником с двумя пространственно-временными потоками, используемыми для каждой передачи пакета данных. Сквозная симуляция используется, чтобы определить частоту ошибок пакета (PER) для канала форматирования [1] одного пользователя (SU) 802.11ax со сжатым квантованием обратной связи формирования луча для различных уровней квантования и выбора точек ОСШ. Генерируется график, показывающий кривую PER по сравнению с ОСШ для каждого разрешения квантования. Этот пример не рассматривает группировку поднесущих (см. Раздел 9.4.1.65 в [1]).

Строение формы волны

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

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

Пакет нулевых данных (NDP) Строения

Передача NDP сконфигурирована таким образом, чтобы иметь длину нуля данных. Поскольку NDP используется для получения информации о состоянии канала, количество пространственно-временных потоков равно количеству передающих антенн. Это приводит к прямому отображению каждого пространственно-временного потока на передающую антенну.

cfgNDP = cfgHEBase;
cfgNDP.APEPLength = 0;                  % NDP has no data
cfgNDP.NumSpaceTimeStreams = NumTxAnts; % For feedback matrix calculation
cfgNDP.SpatialMapping = 'Direct';       % Each TxAnt carries a STS

Строение канала

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

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

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

Этот пример сравнивает эффективность формирования луча с двумя различными разрешениями квантования сжатия и без сжатия. Для каждого разрешения квантования выполняют симуляцию «конец к концу» с различными значениями ОСШ, чтобы определить частоту ошибок пакета. Проект 4.1 802.11ax задает только два набора разрешений квантования для формирования луча одним пользователем (таблица 9-31a в [1]). Значение codeBookSize определяет количество бит, используемых для квантования углов обратной связи формирования луча (phi и psi) в этой симуляции. Когда codeBookSize Inf, сжатие не выполняется. Уровни квантования, выбранные codeBookSize показаны в таблице ниже:

codeBookSize            Compression Configuration
--------------------------------------------------------
    0                   NumBitsphi = 4; NumBitspsi = 2
    1                   NumBitsphi = 6; NumBitspsi = 4
   Inf                  No compression
--------------------------------------------------------
codeBookSize = [0 1 Inf];

Количество пакетов генерируется, передается через канал и демодулируется, чтобы определить вероятность ошибки пакета для каждого строения сжатия при каждом значении ОСШ (дБ) в snr вектор.

snr = 10:2:18;

Количество пакетов, протестированных в каждой точке ОСШ, ограничено maxNumErrors или maxNumPackets:

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

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

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

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

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

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

Beamformer получает управляющую матрицу путем передачи NDP, который обрабатывается beamformee, чтобы создать матрицу обратной связи:

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

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

  3. Пакет обнаруживается в beamformee.

  4. Грубое смещение несущей частоты оценивают и корректируют.

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

  6. Хорошее смещение частоты несущей оценивается и корректируется.

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

  8. В оцененном канале осуществляют сингулярное разложение и вычисляют матрицу V обратной связи формирования луча.

  9. Если сжатия нет, эта матрица обратной связи V будет использоваться в качестве управляющей матрицы beamformer.

  10. Если используется сжатие, матрица V обратной связи будет сжата и квантована, чтобы создать набор углов, заданных в стандарте.

Устройство формирования луча передает пакет данных, используя восстановленную матрицу управления, и устройство декодирования луча декодирует передачу данных, сформированных лучом, для восстановления PSDU:

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

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

  3. Форма волны передается через ту же внутреннюю реализацию канала TGax, что и передача NDP.

  4. AWGN добавляется к принятой форме волны.

  5. Как и в случае NDP, выполняют синхронизацию и оценку канала HE.

  6. Поле данных извлекается из синхронизированной принятой формы волны и демодулируется OFDM.

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

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

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

  10. Уравненные символы демодулируются и декодируются, чтобы восстановить PSDU.

A parfor цикл может использоваться, чтобы параллелизировать обработку точек ОСШ. Чтобы обеспечить возможность использования параллельных вычислений для повышения скорости, закомментируйте оператора 'for' и раскомментируйте оператора 'parfor' ниже.

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

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

% Indices to extract fields from the PPDU
ind = wlanFieldIndices(cfgHEBase);
indSound = wlanFieldIndices(cfgNDP);

for ibf = 1:numQuant
    switch codeBookSize(ibf) % See P802.11ax/D4.1 Section 9.4.1.64
        case 0
            NumBitsPsi = 2; % Number of bits for psi
            NumBitsPhi = 4; % Number of bits for phi
            disp('End-to-End simulation with compressed beamforming quantization with');
            disp(['Number of Bits for phi = ' num2str(NumBitsPhi) ...
                ' and Number of Bits for psi = ' num2str(NumBitsPsi)]);
        case 1
            NumBitsPsi = 4; % Number of bits for psi
            NumBitsPhi = 6; % Number of bits for phi
            disp('End-to-End simulation with compressed beamforming quantization with');
            disp(['Number of Bits for phi = ' num2str(NumBitsPhi) ...
                ' and Number of Bits for psi = ' num2str(NumBitsPsi)]);
        otherwise
            disp('End-to-End simulation with non-compressed beamforming');
    end

    %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',100);
        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);

        % Create an instance of the HE configuration object per SNR point
        % simulated. This will enable to use parfor
        cfgHE = cfgHEBase;

        % Loop to simulate multiple packets
        numPacketErrors = 0;
        numPkt = 1; % Index of packet transmitted
        while numPacketErrors<=maxNumErrors && numPkt<=maxNumPackets
            % Null data packet transmission
            tx = wlanWaveformGenerator([],cfgNDP);

            % Add trailing zeros to allow for channel delay
            txPad = [tx; zeros(50,cfgNDP.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);

            % Calculate the steering matrix at the beamformee
            V = heUserBeamformingFeedback(rx,cfgNDP,true);

            if isempty(V)
                % User feedback failed, packet error
                numPacketErrors = numPacketErrors+1;
                numPkt = numPkt+1;
                continue; % Go to next loop iteration
            end

            if ~isinf(codeBookSize(ibf))
                % Find quantized angles of the beamforming feedback matrix
                angidx = bfCompressQuantize(V(:,1:NumSTS,:),NumBitsPhi,NumBitsPsi);

                % Calculate steering matrix from the quantized angles at
                % beamformer:
                % Assuming zero delay in transmitting the quantized angles
                % from beamformee to beamformer, the steering matrix is
                % calculated from the quantized angles and is used in the
                % data transmission of beamformer.

                [~,Nc,Nr] = size(V(1,1:NumSTS,:));
                V = bfDecompress(angidx,Nr,Nc,NumBitsPhi,NumBitsPsi);
            end

            steeringMat = V(:,1:NumSTS,:);

            % Beamformed data transmission
            psduLength = getPSDULength(cfgHE); % PSDU length in bytes
            txPSDU = randi([0 1],psduLength*8,1); % Generate random PSDU
            cfgHE.SpatialMappingMatrix = steeringMat;
            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
            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
            % Average single-stream pilot estimates over symbols (2nd dimension)
            pilotEstTrack = mean(pilotEst,2);
            demodSym = heCommonPhaseErrorTracking(demodSym,pilotEstTrack,cfgHE);

            % Estimate noise power in HE fields
            nVarEst = heNoiseEstimate(demodSym(ofdmInfo.PilotIndices,:,:),pilotEstTrack,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(ibf,isnr) = numPacketErrors/(numPkt-1);
        disp(['MCS ' num2str(cfgHE.MCS) ','...
            ' SNR ' num2str(snr(isnr)) ...
            ' completed after ' num2str(numPkt-1) ' packets,'...
            ' PER:' num2str(packetErrorRate(ibf,isnr))]);
    end
    disp(newline);
end
End-to-End simulation with compressed beamforming quantization with
Number of Bits for phi = 4 and Number of Bits for psi = 2
MCS 3, SNR 10 completed after 13 packets, PER:0.84615
MCS 3, SNR 12 completed after 54 packets, PER:0.2037
MCS 3, SNR 14 completed after 100 packets, PER:0.07
MCS 3, SNR 16 completed after 100 packets, PER:0
MCS 3, SNR 18 completed after 100 packets, PER:0


End-to-End simulation with compressed beamforming quantization with
Number of Bits for phi = 6 and Number of Bits for psi = 4
MCS 3, SNR 10 completed after 13 packets, PER:0.84615
MCS 3, SNR 12 completed after 54 packets, PER:0.2037
MCS 3, SNR 14 completed after 100 packets, PER:0.06
MCS 3, SNR 16 completed after 100 packets, PER:0
MCS 3, SNR 18 completed after 100 packets, PER:0


End-to-End simulation with non-compressed beamforming
MCS 3, SNR 10 completed after 13 packets, PER:0.84615
MCS 3, SNR 12 completed after 59 packets, PER:0.18644
MCS 3, SNR 14 completed after 100 packets, PER:0.06
MCS 3, SNR 16 completed after 100 packets, PER:0
MCS 3, SNR 18 completed after 100 packets, PER:0


Постройте график зависимости частоты ошибок пакета от отношения сигнал/шум

figure;
lineTypes = ["k-o" "b-s" "r-*"];
semilogy(snr,packetErrorRate(1,:),lineTypes(1));
hold on;
grid on;
xlabel('SNR (dB)');
ylabel('PER');
for ibf = 2:numQuant
    semilogy(snr,packetErrorRate(ibf,:),lineTypes(ibf));
end
dataStr = [string(['Compressed Beamforming, ' newline ...
                   'NumBitsPhi = 4, NumBitsPsi = 2' newline])...
           string(['Compressed Beamforming, ' newline ...
                   'NumBitsPhi = 6, NumBitsPsi = 4' newline]) ...
                   "Non-Compressed Beamforming"];
legend(dataStr);
title(sprintf('802.11ax Beamforming PER for Channel %s, %s, %s',tgaxChannel.DelayProfile,cfgHEBase.ChannelBandwidth,cfgHEBase.ChannelCoding));

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

Приложение

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

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

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

Для просмотра документации необходимо авторизоваться на сайте