Симуляция PHY одной несущей с частотой ошибок пакета 802.11ad с каналом TGay

В этом примере показано, как измерить частоту ошибок пакета линии PHY IEEE 802.11ad™ DMG с одной несущей (SC) с помощью сквозной симуляции.

Введение

В этом примере сквозная симуляция используется, чтобы определить вероятность пакетной ошибки для ссылки SC [1] 802.11ad с каналом миллиметровой волны TGay [2] при выборе точек ОСШ. В каждой точке ОСШ несколько пакетов передаются через канал с замираниями, синхронизируются, демодулируются и PSDU восстанавливаются. Смещение несущей частоты и временная задержка также моделируются. Блоки PSDU сравнивают с переданными для определения количества ошибок пакета и, следовательно, частоты ошибок пакета. Обработка для каждого пакета суммирована в следующей схеме.

Этот пример также демонстрирует, как parfor цикл может использоваться вместо for цикл при симуляции каждой точки ОСШ для ускорения симуляции. parforВ рамках Parallel Computing Toolbox™ выполняет обработку для каждого ОСШ параллельно, чтобы уменьшить общее время симуляции.

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

В этом примере моделируется передача 802.11ad DMG SC PHY. Объект строения формата DMG содержит строение передачи в определенном формате. Объект создается с помощью wlanDMGConfig функция. Свойства объекта содержат строение переданного пакета. В этом примере объект сконфигурирован, чтобы сгенерировать одну форму волны несущей MCS «9». MCS определяет используемый тип PHY и в этом примере должен быть строкой в области значений 1-12 или одной из {9.1 12.1 12.2 12.3 12.4 12.5 12.6}, чтобы симулировать SC PHY.

% Create a format configuration object
cfgDMG = wlanDMGConfig;
mcs = "9"; % MCS specified as a string scalar or string vector
cfgDMG.PSDULength = 4096; % PSDULength in bytes

Замирающее строение канала

В этом примере мы моделируем модель канала TGay для сценария открытой точки доступа, используя wlanTGayChannel объект. И передающая, и приёмная массивов являются однородным прямоугольным массивом (URA) 4x4. Лучевая трассировка выполняется от передачи к приёмному массиву, чтобы вывести два детерминированных луча: один LOS-луч и другой NLOS-луч с отражением одного порядка от земли. Случайные лучи и внутрикластерные лучи впоследствии генерируются в соответствии с квазидетерминированным (Q-D) подходом моделирования и параметрами в [2]. Формирование луча осуществляется, чтобы задать направление рулевого управления передающей и приемной антенны вдоль луча с максимальной степенью. Импульсные характеристики затухающего канала нормированы, поэтому канал не вводит коэффициент усиления или потерь степени. Как сигналы входа канала, так и выхода являются неполяризированными.

% Get sampling rate and specify carrier frequency
fs = wlanSampleRate(cfgDMG);
fc = 60e9;

% Create a TGay channel object
tgayChan = wlanTGayChannel;
tgayChan.SampleRate                = fs;
tgayChan.CarrierFrequency          = fc;
tgayChan.Environment               = 'Open area hotspot';
tgayChan.TransmitArray.Size        = [4 4];
tgayChan.TransmitArrayPosition     = [0; 0; 6];     % Meters
tgayChan.TransmitArrayOrientation  = [0; 270; 0];   % Degrees
tgayChan.ReceiveArray.Size         = [4 4];
tgayChan.ReceiveArrayPosition      = [6; 6; 1.5];   % Meters
tgayChan.ReceiveArrayOrientation   = [90; 0; 0];    % Degrees
tgayChan.BeamformingMethod         = 'Maximum power ray';
tgayChan.NormalizeImpulseResponses = true;

Учитывая строение объекта канала, мы отображаем карту 3D, чтобы показать окружение и настройки антенной решетки. Два детерминированных луча из трассировки лучей также показаны на рисунке.

showEnvironment(tgayChan);

Обесценение канала

Максимальный допуск для центральной частоты передатчика должно быть в пределах [-20, + 20] ppm [1]. В этом примере для вывода CFO рассматривается точность синхроимпульса 20 ppm. Переданный сигнал задерживается на 500 выборки и также добавляется на 100 нулевые выборки в конце, чтобы учесть задержки от фильтрации канала TGay.

ppm = 20;                 % Clock accuracy to drive the CFO (ppm)
freqOffset = ppm*1e-6*fc; % Carrier frequency offset (Hz)
delay = 500;              % Sample to delay the waveform
zeroPadding = 100;        % Add trailing zeros to allow for channel delay

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

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

snrRanges = {-2.0:0.5:0.5, ...  % MCS 1
             0.0:1.0:5.0, ...   % MCS 2
             1.0:1.2:7.0, ...   % MCS 3
             2.0:1.2:8.0, ...   % MCS 4
             2.0:1.3:8.5, ...   % MCS 5
             2.5:1.3:9.0, ...   % MCS 6
             4.0:1.3:10.5, ...  % MCS 7
             5.0:1.5:12.5,...   % MCS 8
             5.5:1.5:13.0, ...  % MCS 9
             7.0:1.5:14.5, ...  % MCS 9.1
             8.0:1.8:17.0, ...  % MCS 10
             10.0:2.0:20.0, ... % MCS 11
             12.0:2.0:22.0, ... % MCS 12
             12.0:2.0:22.0, ... % MCS 12.1
             14.0:2.0:24.0, ... % MCS 12.2
             16.0:2.5:28.5, ... % MCS 12.3
             17.0:2.5:29.5, ... % MCS 12.4
             17.0:2.5:29.5, ... % MCS 12.5
             20.0:2.5:32.5};    % MCS 12.6

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

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

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

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

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

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

Для каждой точки ОСШ проверяется количество пакетов и вычисляется вероятность ошибки пакета.

Для каждого пакета выполняются следующие шаги обработки:

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

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

  3. AWGN добавляется к принятой форме волны. comm.AWGNChannel сконфигурировано для предоставления правильного ОСШ.

  4. К каждому пакету добавляется ослабление смещения частоты.

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

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

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

  8. Поля STF и CE извлекаются из синхронизированной принятой формы волны. Шум и оценка канала выполняются на восстановленных полях соответственно.

  9. Поле данных, исключающее первый защитный интервал, извлекается и изменяется в блоки. Полученные символы в поле данных выравниваются.

  10. Принятые символы отслеживаются и корректируются на фазы ошибки, вызванные любым остаточным смещением частоты несущей.

  11. Поле данных декодируется, чтобы восстановить биты PSDU.

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

numSNR = numel(snrRanges{1}); % Number of SNR points
if ~isstring(mcs)
    error('MCS must be specified as a string scalar or string vector');
end
numMCS = numel(mcs);          % Number of MCS
packetErrorRate = zeros(numMCS,numSNR);
Ngi = 64; % Fixed GI length defined in the standard (20.6.3.2.5)
validMCS = string(sort([1:12 9.1 12.1:0.1:12.6]));

for imcs = 1:numMCS
    cfgDMG.MCS = mcs(imcs);
    if ~strcmp(phyType(cfgDMG),'SC')
        error('This example only supports DMG SC PHY simulation');
    end
    ind = wlanFieldIndices(cfgDMG);
    snr = snrRanges{mcs(imcs)==validMCS}; % SNR points to simulate from MCS

    % 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',10);
        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.SNR = snr(isnr);

        % Set simulation parameters
        numPacketErrors = 0;
        numPkt = 1; % Index of the transmitted packet

        while numPacketErrors<=maxNumErrors && numPkt<=maxNumPackets
            % Generate a packet waveform
            psdu = randi([0 1],cfgDMG.PSDULength*8,1);
            txWaveform = wlanWaveformGenerator(psdu,cfgDMG);

            % Add delay and trailing zeros
            tx = [zeros(delay,1); txWaveform; zeros(zeroPadding,1)];

            % Transmit through a TGay channel. Reset the channel for a
            % different realization per packet.
            reset(tgayChan);
            chanOut = tgayChan(tx);

            % Add noise
            rx = awgnChannel(chanOut);

            % Add CFO
            rx = helperFrequencyOffset(rx,fs,freqOffset);

            % Packet detection
            threshold = 0.03; % Good for low SNRs
            pktStartOffset = dmgPacketDetect(rx,0,threshold);
            if isempty(pktStartOffset) % If empty no STF detected; packet error
                numPacketErrors = numPacketErrors+1;
                numPkt = numPkt+1;
                continue; % Go to next loop iteration
            end

            % Frequency offset estimation and correction
            stf = rx(pktStartOffset+(ind.DMGSTF(1):ind.DMGSTF(2)));
            fOffsetEst = dmgCFOEstimate(stf);
            rx = helperFrequencyOffset(rx,fs,-fOffsetEst);

            % Symbol timing and channel estimate
            preamblefield = rx(pktStartOffset+1:pktStartOffset+ind.DMGHeader(2),:);
            [symbolTimingOffset,chanEst] = dmgTimingAndChannelEstimate(preamblefield);
            startOffset = pktStartOffset+symbolTimingOffset;

            % If not enough samples to decode detected data field start,
            % then assume synchronization error and packet error
            if (startOffset+ind.DMGData(2))>size(rx,1)
                numPacketErrors = numPacketErrors+1;
                numPkt = numPkt+1;
                continue; % Go to next loop iteration
            end

            % Noise estimation using the STF as repeating sequence
            stf = rx(pktStartOffset+(ind.DMGSTF(1):ind.DMGSTF(2)));
            nVarEst = dmgSTFNoiseEstimate(stf);

            % Extract data field (ignore first GI)
            rxData = rx(startOffset+((ind.DMGData(1)+Ngi):ind.DMGData(2)));

            % Linear frequency domain equalization
            rxEqDataBlks = dmgSingleCarrierFDE(rxData,chanEst,nVarEst);

            % Unique word phase tracking
            rxEqDataBlks = dmgUniqueWordPhaseTracking(rxEqDataBlks);

            % Discard GI from all blocks
            rxDataSym = rxEqDataBlks(1:end-Ngi,:);

            % Recover the transmitted PSDU from DMG Data field
            dataDecode = wlanDMGDataBitRecover(rxDataSym,nVarEst,cfgDMG);

            % Determine if any bits are in error, i.e. a packet error
            packetError = any(biterr(psdu,dataDecode));
            numPacketErrors = numPacketErrors+packetError;
            numPkt = numPkt+1;
        end

        % Calculate packet error rate (PER) at SNR point
        packetErrorRate(imcs,isnr) = numPacketErrors/(numPkt-1);
        disp(join(["     MCS:" cfgDMG.MCS ", SNR " ...
            num2str(snr(isnr)) " completed after " ...
            num2str(numPkt-1) " packets, PER: " ...
            num2str(packetErrorRate(imcs,isnr))],""));
    end
end
     MCS:9, SNR 5.5 completed after 11 packets, PER: 1
     MCS:9, SNR 7 completed after 14 packets, PER: 0.78571
     MCS:9, SNR 8.5 completed after 20 packets, PER: 0.55
     MCS:9, SNR 10 completed after 35 packets, PER: 0.31429
     MCS:9, SNR 11.5 completed after 70 packets, PER: 0.15714
     MCS:9, SNR 13 completed after 100 packets, PER: 0.08

Постройте график частоты ошибок пакета по сравнению с результатами ОСШ

markers = 'ox*sd^v><ph+ox*sd^v';
color = 'bmcrgbrkymcrgbrkymc';
figure;
for imcs = 1:numMCS
    semilogy(snrRanges{mcs(imcs)==validMCS},packetErrorRate(imcs,:).',['-' markers(imcs) color(imcs)]);
    hold on;
end
grid on;
xlabel('SNR (dB)');
ylabel('PER');
dataStr = arrayfun(@(x)sprintf('MCS %s',x),mcs,'UniformOutput',false);
legend(dataStr);
title('PER for DMG SC-PHY, TGay channel');

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

Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами; maxNumErrors и maxNumPackets. Для значимых результатов рекомендуется, чтобы эти значения были больше, чем те, которые представлены в этом примере. Увеличение количества моделируемых пакетов позволяет сравнивать PER в различных сценариях. Попробуйте изменить значение MCS и сравните частоту ошибок пакета. В качестве примера рисунок ниже был создан путем запуска примера для всех MCS с одной несущей с PSDULength: 8192 байта, maxNumErrors: 1000 и maxNumPackets: 10000.

Исследуйте настройки канала TGay путем изменения окружения ('Street canyon hotspot' или 'Large hotel lobby'), пользовательских строений, типа поляризации, строений массива, метода формирования луча и так далее. В сценарии уличного каньона объект вычисляет детерминированные лучи до 1 порядка отражения от земли и стенок. В сценарии лобби отеля детерминированные лучи имеют отражение до 2 порядков от земли, потолка и/или стенок. Из-за дополнительного отражения лучей результаты PER обычно лучше, чем выше, полученные из сценария открытой зоны.

Приложение

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

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

  1. Стандарт IEEE Std 802.11ad™-2012 IEEE на информационные технологии - Телекоммуникации и обмен информацией между системами - Локальные и столичные сети - Особые требования - Часть 11: Беспроводное управление доступом к среде локальной сети (MAC) и физический слой (PHY) Спецификации. Поправка 3: Улучшения для очень высокой пропускной способности в полосе 60 ГГц.

  2. А. Мальцев и др. al, Channel Models for IEEE 802.11ay, IEEE 802.11-15/1150r9, Mar. 2017.