Симуляция частоты пакетных ошибок 802.11ad для управления PHY

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

Введение

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

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

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

В этом примере моделируется 802.11ad передача PHY управления DMG. Объект строения формата DMG, wlanDMGConfig, содержит специфичную для формата строение передачи. Свойства объекта содержат строение переданного пакета. В этом примере объект сконфигурирован, чтобы сгенерировать сигнал PHY управления. MCS определяет используемый тип PHY, поэтому MCS должна быть установлена на 0, чтобы использовать управление PHY.

% Create a format configuration object
cfgDMG = wlanDMGConfig;
cfgDMG.MCS = 0; % MCS 0 represents Control PHY
cfgDMG.PSDULength = 256; % PSDULength in bytes

Спектральная фильтрация

Спектральная фильтрация используется для уменьшения внеполосных спектральных выбросов из-за характеристик расширенного спектра передаваемой формы волны. В этом примере форма волны фильтруется через фильтр приподнятого косинуса как в передатчике, так и в приемнике, используя comm.RaisedCosineTransmitFilter и comm.RaisedCosineReceiveFilter объекты, соответственно. Чтобы удовлетворить требованиям спектральной маски, фильтр приподнятого косинуса обрезается до длительности восьми символов, и коэффициент отката устанавливается равным 0,5.

% Define the pulse shaping filter characteristics
pulseShaping = true; % Enable pulse shaping
Nsym = 8;            % Filter span in symbol durations
alpha = 0.5;         % Roll-off factor
osps = 4;            % Output samples per symbol

% Transmit pulse shaping filter
txFilter = comm.RaisedCosineTransmitFilter;
txFilter.RolloffFactor = alpha;
txFilter.FilterSpanInSymbols = Nsym;
txFilter.OutputSamplesPerSymbol = osps;
txFilter.Shape = 'Normal';

% Receive pulse shaping filter
rxFilter = comm.RaisedCosineReceiveFilter;
rxFilter.RolloffFactor = alpha;
rxFilter.DecimationFactor = osps;
rxFilter.InputSamplesPerSymbol = osps;
rxFilter.FilterSpanInSymbols = Nsym;
rxFilter.Shape = 'Normal';

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

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

snrVec = -13.5:0.5:-10.5;

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

  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. AWGN добавляется к форме волны. The comm.AWGNChannel объект сконфигурирован для предоставления правильного ОСШ перед сжатием.

  3. Пакет принимается с идеальной синхронизацией.

  4. Заголовок и поля данных извлекаются из принятой формы волны и обрабатываются вместе.

  5. Восстановленное поле отменяется вращением pi/2 и уменьшается.

  6. Блок PSDU извлекается из извлеченного поля.

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

numSNR = numel(snrVec); % Number of SNR points
packetErrorRate = zeros(numSNR,1);
indices = wlanFieldIndices(cfgDMG);

if ~strcmp(phyType(cfgDMG),'Control')
    error('This example only supports DMG Control PHY simulation');
end

%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.SNR = snrVec(isnr);

    % Noise power
    nVar = 10^(-snrVec(isnr)/10);
    numPacketErrors = 0;
    numPkt = 1; % Index of packet transmitted

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

        % Transmitter filtering
        if pulseShaping
            % Append zero to compensate for filter group delay
            tx = txFilter([tx; zeros(Nsym,1)]);
            reset(txFilter);
        end

        % Add noise
        rx = awgnChannel(tx);

        % Receiver filtering
        if pulseShaping
            rx = rxFilter(rx);
            reset(rxFilter);
        end

        % Synchronize
        % The received signal is synchronized to the start of the packet by
        % compensating for a known delay due the spectral shaping filters
        if pulseShaping
            offset = Nsym;
        else
            offset = 0; %#ok<UNRCH>
        end

        % Process header and data field together
        rxHeaderDataField = rx(offset+(indices.DMGHeader(1):indices.DMGData(2)));

        % Apply pi/2 de-rotation and de-spread the received signal
        [rxSym,SF] = dmgControlDespread(rxHeaderDataField);

        % Recover the transmitted PSDU from DMG Data field. Scale the noise
        % power by the spreading factor
        dataDecode = wlanDMGDataBitRecover(rxSym,nVar/SF,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(isnr) = numPacketErrors/(numPkt-1);
    disp(['SNR ' num2str(snrVec(isnr))...
          ' completed after ' num2str(numPkt-1) ' packets,'...
          ' PER: ' num2str(packetErrorRate(isnr))]);
end

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

figure;
semilogy(snrVec,packetErrorRate,'-o');
grid on;
xlabel('SNR (dB)');
ylabel('PER');
legend('MCS 0');
title('PER for DMG Control-PHY, AWGN channel');

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

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

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

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

Локальные функции

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

  • dmgControlDespread: Отменить распространение сигнала приема

function [y,SF] = dmgControlDespread(rx)
    SF = 32; % Spreading factor
    dataField = rx.*exp(-1i*pi/2*(0:size(rx,1)-1).'); % De-rotate symbols
    Ga = wlanGolaySequence(SF); % Generate Golay sequence
    y = (reshape(dataField,SF,length(dataField)/SF)'*Ga)/SF;
end
SNR -13.5 completed after 11 packets, PER: 1
SNR -13 completed after 12 packets, PER: 0.91667
SNR -12.5 completed after 53 packets, PER: 0.20755
SNR -12 completed after 100 packets, PER: 0.04
SNR -11.5 completed after 100 packets, PER: 0
SNR -11 completed after 100 packets, PER: 0
SNR -10.5 completed after 100 packets, PER: 0