exponenta event banner

Моделирование частоты ошибок пакетов 802.11ad для OFDM PHY

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

Введение

В этом примере используется сквозное моделирование для определения частоты ошибок пакетов для линии связи 802.11ad DMG [1] OFDM с каналом AWGN при выборе точек SNR для определенной схемы модуляции и кодирования (MCS). Для каждой точки SNR несколько пакетов передаются через канал, демодулируются и PSDU восстанавливаются. Блоки PSDU сравниваются с переданными блоками для определения количества ошибок пакета и, следовательно, частоты ошибок пакета. В этом примере предполагается идеальная синхронизация по времени и частоте. Следующая диаграмма суммирует обработку для каждого пакета.

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

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

В этом примере моделируется передача OFDM DMG 802.11ad. Объект конфигурации формата DMG, wlanDMGConfig, содержит специфичную для формата конфигурацию передачи. Свойства объекта содержат конфигурацию. В этом примере объект сконфигурирован для передачи OFDM с MCS 21 и 8192 байтовым PSDU. Если mcs задается как вектор, моделирование выполняется для каждого элемента MCS. MCS определяет используемый тип PHY, поэтому MCS должен находиться в диапазоне 13-24, чтобы использовать OFDM PHY.

% Create a format configuration object for a DMG OFDM transmission
cfgDMG = wlanDMGConfig;
cfgDMG.PSDULength = 8192; % bytes

% For DMG OFDM PHY, the valid range of MCS is 13-24(inclusive)
mcs = 21; % OFDM PHY, 16QAM, rate 13/16

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

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

% SNR ranges to use for AWGN
snrRanges = {...
    -1:0.5:1.5, ...  % MCS 13
    0:0.5:2.5, ...   % MCS 14
    1.5:0.5:4, ...   % MCS 15
    3:0.5:5.5, ...   % MCS 16
    4.5:0.5:7, ...   % MCS 17
    7.5:0.5:10, ...  % MCS 18
    9:0.5:11.5, ...  % MCS 19
    10.5:0.5:13, ... % MCS 20
    12:0.5:14.5, ... % MCS 21
    14.5:0.5:17, ... % MCS 22
    16.5:0.5:19, ... % MCS 23
    17.5:0.5:20, ... % MCS 24
    };

Количество пакетов, протестированных в каждой точке 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

Задайте остальные переменные для моделирования.

% OFDM information
ofdmInfo = wlanDMGOFDMInfo();

% Indices of data and pilot occupied subcarriers
cfgDMG.MCS = mcs(1); % Set OFDM MCS to get subcarrier indices
Nsd = numel(ofdmInfo.DataIndices); % Number of data carrying subcarriers

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

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

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

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

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

  3. Поле DMG-Data извлекается из идеально синхронизированного принятого сигнала и демодулируется OFDM.

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

  5. PSDU восстанавливается из выровненных символов данных.

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

numSNR = numel(snrRanges{1}); % Number of SNR points
numMCS = numel(mcs);          % Number of MCS
packetErrorRate = zeros(numMCS,numSNR);

for imcs = 1:numMCS
    cfgDMG.MCS = mcs(imcs);
    if ~strcmp(phyType(cfgDMG),'OFDM')
        error('This example only supports DMG OFDM PHY simulation');
    end

    % Indices of fields within the packet
    fieldIndices = wlanFieldIndices(cfgDMG);

    % SNR points to simulate from MCS
    snr = snrRanges{cfgDMG.MCS-12};

    %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',0);
        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;
        % Account for noise energy in nulls so the SNR is defined per
        % active subcarrier
        awgnChannel.SNR = 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 a packet waveform
            txPSDU = randi([0 1],cfgDMG.PSDULength*8,1); % PSDULength in bytes
            tx = wlanWaveformGenerator(txPSDU,cfgDMG);

            % Pass the waveform through AWGN channel model
            rx = awgnChannel(tx);

            % Extract data field
            rxData = rx(fieldIndices.DMGData(1):fieldIndices.DMGData(2));

            % OFDM demodulate
            demodSym = wlanDMGOFDMDemodulate(rxData);
            dataSym = demodSym(ofdmInfo.DataIndices,:); % Discard pilots

            % Equalize
            chanSym = ones(Nsd,1); % Set channel gains to 1 as AWGN channel
            nVar = 10^(-snr(isnr)/10); % Noise variance
            [eqSym,csi] = helperSymbolEqualize(dataSym,chanSym,nVar);

            % Recover data
            rxPSDU = wlanDMGDataBitRecover(eqSym,nVar,csi,cfgDMG);

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

        % Calculate packet error rate (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 21, SNR 12 completed after 11 packets, PER:1
MCS 21, SNR 12.5 completed after 12 packets, PER:0.91667
MCS 21, SNR 13 completed after 71 packets, PER:0.15493
MCS 21, SNR 13.5 completed after 100 packets, PER:0.02
MCS 21, SNR 14 completed after 100 packets, PER:0
MCS 21, SNR 14.5 completed after 100 packets, PER:0

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

markers = 'ox*sd^v><ph+';
color = 'bmcrgbrkymcr';
figure;
for imcs = 1:numMCS
    semilogy(snrRanges{mcs(imcs)-12},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);
title('PER for DMG OFDM-PHY with AWGN channel');

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

Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами: maxNumErrors и maxNumPackets. Для получения значимых результатов эти значения должны быть больше значений, представленных в этом примере. Увеличение количества моделируемых пакетов позволяет сравнивать PER при различных сценариях. В качестве примера приведенный ниже рисунок был создан путем более длительного выполнения примера с maxNumErrors = 1e3 и maxNumPackets = 1e4, для mcs = 13:24.

Приложение

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

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

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