802.11ad пакетная симуляция коэффициента ошибок для управления PHY

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

Введение

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

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

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

802.11ad передача управления DMG PHY симулирована в этом примере. Объект настройки формата 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 добавляется к форме волны. comm.AWGNChannel объект сконфигурирован, чтобы обеспечить правильный ОСШ прежде despreading.

  3. Пакет получен с совершенной синхронизацией.

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

  5. Восстановленное поле является de-rotated пи/2 и является de-распространением.

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

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

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

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

  • dmgControlDespread: De-распространение получить сигнал

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