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

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

Спектральная фильтрация используется, чтобы сократить внеполосные спектральные выбросы из-за характеристик спектра распространения переданной формы волны. В этом примере в форму волны проникают повышенный фильтр косинуса и в передатчике и в получателе с помощью коммуникации. RaisedCosineTransmitFilter и коммуникация. 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 добавляется к форме волны. коммуникация. AWGNChannel сконфигурирован, чтобы обеспечить правильный ОСШ прежде despreading.

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

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

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

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

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

Localfunctions

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

  • 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