exponenta event banner

Моделирование PHY одной несущей с использованием канала TGay с частотой ошибок пакетов 802.11ad

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

Введение

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

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

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

В этом примере моделируется передача PHY DMG 802.11ad. Объект конфигурации формата 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 объект. Как передающий, так и принимающий массивы представляют собой 4 4 однородных прямоугольных массива (URA). Трассировка лучей осуществляется от передающего к приемному массиву для получения двух детерминированных лучей: одного луча 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]. В этом примере для финансового директора считается, что точность синхронизации составляет 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

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

Для каждой точки SNR (дБ) в ячейке snrRanges генерируют, пропускают через канал и демодулируют несколько пакетов для определения частоты ошибок пакетов. Точки SNR для тестирования выбираются из 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

A parfor шлейф может использоваться для параллельной обработки точек SNR, поэтому для каждой точки SNR создается и конфигурируется канал 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

График частоты ошибок пакетов в сравнении с результатами SNR

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');

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

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

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

Приложение

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

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

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

  2. А. Мальцев и др. al, модели каналов для IEEE 802.11ay, IEEE 802.11-15/1150r9, март 2017.