exponenta event banner

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

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

Введение

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

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

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

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

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

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

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

snrVec = -13.5:0.5:-10.5;

Количество пакетов, протестированных в каждой точке 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. AWGN добавляется к форме сигнала. comm.AWGNChannel объект сконфигурирован для обеспечения правильного SNR перед сжатием.

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

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

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

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

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

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

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

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

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