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

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

Введение

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

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

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

802.11ad SC DMG передача 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 объект. Оба передача и получает массивы, 4x4 универсальный прямоугольный массив (URA). Трассировка лучей выполняется от передачи до получить массива, чтобы вывести два детерминированных луча: один луч LOS и другой NLOS излучают с отражением с одним порядком от земли. Случайные лучи и внутрикластерные лучи впоследствии сгенерированы согласно квазидетерминированному (Q-D), моделирующий подход и параметры в [2]. Beamforming выполняется, чтобы установить руководящее направление передающей и приемной антенны вдоль луча с максимальной мощностью. Исчезающие импульсные характеристики канала нормированы так, никакое усиление степени или потеря не введены каналом. Оба сигналы ввода и вывода канала деполяризируются.

% 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;
tgayChan.NormalizeChannelOutputs   = false;

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

showEnvironment(tgayChan);

Ухудшение канала

Максимальный допуск к частоте центра передатчика должен быть в [-20, +20] ppm [1]. В этом примере точность часов 20 страниц в минуту, как рассматривается, выводит CFO. Переданный сигнал задержан 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; % The maximum number of packets at an SNR point

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

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

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

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

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

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

  4. Частота возместила ухудшение, добавляется к каждому пакету.

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

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

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

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

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

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

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

parfor цикл может использоваться, чтобы параллелизировать обработку точек ОСШ. Чтобы включить использование параллельных вычислений для увеличенной скорости комментируют 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);

        % 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 = awgn(chanOut,snr(isnr));

            % 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: 8 192 байта, maxNumErrors: 1000 и maxNumPackets: 10000.

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

Приложение

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

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

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

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