Симуляция частоты пакетных ошибок 802.11n для канала 2x2 TGn

Этот пример показывает, как измерить частоту ошибок пакета ссылки IEEE ® 802.11n™ HT с помощью сквозной симуляции с затухающей моделью канала TGn и аддитивным белым Гауссовым шумом.

Введение

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

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

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

В этом примере моделируется передача HT 802.11n. Объект строения формата HT, wlanHTConfig, содержит формат специфическое строение передачи. Свойства объекта содержат строение. В этом примере объект сконфигурирован для полосы пропускания канала 20 МГц, 2 передающих антенны, 2 пространственных временных потока и отсутствия пространственного временного блочного кодирования.

% Create a format configuration object for a 2-by-2 HT transmission
cfgHT = wlanHTConfig;
cfgHT.ChannelBandwidth = 'CBW20'; % 20 MHz channel bandwidth
cfgHT.NumTransmitAntennas = 2;    % 2 transmit antennas
cfgHT.NumSpaceTimeStreams = 2;    % 2 space-time streams
cfgHT.PSDULength = 1000;          % PSDU length in bytes
cfgHT.MCS = 15;                   % 2 spatial streams, 64-QAM rate-5/6
cfgHT.ChannelCoding = 'BCC';      % BCC channel coding

Строение канала

В этом примере модель канала N-LOS TGn используется с профилем задержки Model-B. Для Модели-B, когда расстояние между передатчиком и приемником больше или равно пяти метрам, модель является NLOS. Это описано далее в wlanTGnChannel.

% Create and configure the channel
tgnChannel = wlanTGnChannel;
tgnChannel.DelayProfile = 'Model-B';
tgnChannel.NumTransmitAntennas = cfgHT.NumTransmitAntennas;
tgnChannel.NumReceiveAntennas = 2;
tgnChannel.TransmitReceiveDistance = 10; % Distance in meters for NLOS
tgnChannel.LargeScaleFadingEffect = 'None';

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

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

snr = 25:10:45;

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

  1. maxNumPEs - максимальное количество ошибок пакета, моделируемых в каждой точке ОСШ. Когда количество ошибок пакета достигает этого предела, симуляция в этой точке ОСШ завершена.

  2. maxNumPackets является максимальным количеством пакетов, моделируемых в каждой точке ОСШ, и ограничивает длину симуляции, если предел ошибки пакета не достигнут.

Числа, выбранные в этом примере, приведут к очень короткой симуляции. Для значимых результатов рекомендуем увеличить цифры.

maxNumPEs = 10; % The maximum number of packet errors at an SNR point
maxNumPackets = 100; % Maximum number of packets at an SNR point

Установите оставшиеся переменные для симуляции.

% Get the baseband sampling rate
fs = wlanSampleRate(cfgHT);

% Get the OFDM info
ofdmInfo = wlanHTOFDMInfo('HT-Data',cfgHT);

% Set the sampling rate of the channel
tgnChannel.SampleRate = fs;

% Indices for accessing each field within the time-domain packet
ind = wlanFieldIndices(cfgHT);

Обработка точек ОСШ

Для каждой точки ОСШ проверяется количество пакетов и вычисляется вероятность ошибки пакета.

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

  1. PSDU создается и кодируется, чтобы создать одну форму волны пакета.

  2. Форма волны передается через другую реализацию модели канала TGn.

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

  4. Пакет обнаружен.

  5. Грубое смещение несущей частоты оценивают и корректируют.

  6. Установлена точная временная синхронизация. Выборки L-STF, L-LTF и L-SIG предусмотрены для точной синхронизации, чтобы обеспечить обнаружение пакетов в начале или конце L-STF.

  7. Хорошее смещение частоты несущей оценивается и корректируется.

  8. HT-LTF извлекается из синхронизированной принятой формы волны. HT-LTF является демодулированным OFDM, и выполняется оценка канала.

  9. Поле HT Data извлекается из синхронизированной принятой формы волны. PSDU восстанавливается с использованием извлеченного поля и оценки канала.

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

S = numel(snr);
packetErrorRate = zeros(S,1);
%parfor i = 1:S % Use 'parfor' to speed up the simulation
for i = 1:S % 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 = i;
    RandStream.setGlobalStream(stream);

    % Create an instance of the AWGN channel per SNR point simulated
    awgnChannel = comm.AWGNChannel;
    awgnChannel.NoiseMethod = 'Signal to noise ratio (SNR)';
    % Normalization
    awgnChannel.SignalPower = 1/tgnChannel.NumReceiveAntennas;
    % Account for energy in nulls
    awgnChannel.SNR = snr(i)-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);

    % Loop to simulate multiple packets
    numPacketErrors = 0;
    n = 1; % Index of packet transmitted
    while numPacketErrors<=maxNumPEs && n<=maxNumPackets
        % Generate a packet waveform
        txPSDU = randi([0 1],cfgHT.PSDULength*8,1); % PSDULength in bytes
        tx = wlanWaveformGenerator(txPSDU,cfgHT);

        % Add trailing zeros to allow for channel filter delay
        tx = [tx; zeros(15,cfgHT.NumTransmitAntennas)]; %#ok<AGROW>

        % Pass the waveform through the TGn channel model
        reset(tgnChannel); % Reset channel for different realization
        rx = tgnChannel(tx);

        % Add noise
        rx = awgnChannel(rx);

        % Packet detect and determine coarse packet offset
        coarsePktOffset = wlanPacketDetect(rx,cfgHT.ChannelBandwidth);
        if isempty(coarsePktOffset) % If empty no L-STF detected; packet error
            numPacketErrors = numPacketErrors+1;
            n = n+1;
            continue; % Go to next loop iteration
        end

        % Extract L-STF and perform coarse frequency offset correction
        lstf = rx(coarsePktOffset+(ind.LSTF(1):ind.LSTF(2)),:);
        coarseFreqOff = wlanCoarseCFOEstimate(lstf,cfgHT.ChannelBandwidth);
        rx = helperFrequencyOffset(rx,fs,-coarseFreqOff);

        % Extract the non-HT fields and determine fine packet offset
        nonhtfields = rx(coarsePktOffset+(ind.LSTF(1):ind.LSIG(2)),:);
        finePktOffset = wlanSymbolTimingEstimate(nonhtfields,...
            cfgHT.ChannelBandwidth);

        % Determine final packet offset
        pktOffset = coarsePktOffset+finePktOffset;

        % If packet detected outwith the range of expected delays from the
        % channel modeling; packet error
        if pktOffset>15
            numPacketErrors = numPacketErrors+1;
            n = n+1;
            continue; % Go to next loop iteration
        end

        % Extract L-LTF and perform fine frequency offset correction
        lltf = rx(pktOffset+(ind.LLTF(1):ind.LLTF(2)),:);
        fineFreqOff = wlanFineCFOEstimate(lltf,cfgHT.ChannelBandwidth);
        rx = helperFrequencyOffset(rx,fs,-fineFreqOff);

        % Extract HT-LTF samples from the waveform, demodulate and perform
        % channel estimation
        htltf = rx(pktOffset+(ind.HTLTF(1):ind.HTLTF(2)),:);
        htltfDemod = wlanHTLTFDemodulate(htltf,cfgHT);
        chanEst = wlanHTLTFChannelEstimate(htltfDemod,cfgHT);

        % Extract HT Data samples from the waveform
        htdata = rx(pktOffset+(ind.HTData(1):ind.HTData(2)),:);

        % Estimate the noise power in HT data field
        nVarHT = htNoiseEstimate(htdata,chanEst,cfgHT);

        % Recover the transmitted PSDU in HT Data
        rxPSDU = wlanHTDataRecover(htdata,chanEst,nVarHT,cfgHT);

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

    % Calculate packet error rate (PER) at SNR point
    packetErrorRate(i) = numPacketErrors/(n-1);
    disp(['SNR ' num2str(snr(i))...
          ' completed after '  num2str(n-1) ' packets,'...
          ' PER: ' num2str(packetErrorRate(i))]);
end
SNR 25 completed after 11 packets, PER: 1
SNR 35 completed after 45 packets, PER: 0.24444
SNR 45 completed after 100 packets, PER: 0.01

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

figure;
semilogy(snr,packetErrorRate,'-ob');
grid on;
xlabel('SNR [dB]');
ylabel('PER');
title('802.11n 20MHz, MCS15, Direct Mapping, 2x2 Channel Model B-NLOS');

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

Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами; maxNumPEs и maxNumPackets. Для значимых результатов рекомендуется, чтобы эти значения были больше, чем те, которые представлены в этом примере. Увеличение количества моделируемых пакетов позволяет сравнивать PER в различных сценариях. Попробуйте изменить схему кодирования передачи на LDPC и сравните частоту ошибок пакета. Как пример, рисунок ниже был создан путем запуска примера для maxNumPEs: 200 и maxNumPackets: 10000, с четырьмя различными строениями; 1x1 и 2x2 с кодировкой BCC и LDPC.

Приложение

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

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

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