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

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

Введение

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

Этот пример моделирует формат S1G-Short без коррекции нарушений, кроме оценки канала и эквализации. Принятый сигнал синхронизируется с началом пакета путем компенсации известной задержки и смещения дискретизации символа демодуляции OFDM по умолчанию. Частотная синхронизация не выполняется. Для получения информации о том, как автоматически обнаружить и синхронизироваться с полученным сигналом, смотрите эти примеры для 802.11n™ и 802.11ac™.

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

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

В этом примере моделируется передача преамбулы S1G одним пользователем 802.11ah. Объект строения формата S1G содержит специфическую для формата строение передачи. Объект создается с помощью wlanS1GConfig функция. Свойства объекта содержат строение. В этом примере объект сконфигурирован для полосы пропускания канала 2 МГц, короткой преамбулы, 2 передающих антенны, 2 пространственно-временных потока, полезной нагрузки 256 байт и скорости 64-QAM-5/6 (MCS 7).

% Create S1G configuration object for single user S1G short preamble
% transmission with 2 transmit antennas and 2 space-time streams
cfgS1G = wlanS1GConfig;
cfgS1G.ChannelBandwidth = 'CBW2'; % 2 MHz channel bandwidth
cfgS1G.Preamble = 'Short';        % Short preamble
cfgS1G.NumTransmitAntennas = 2;   % 2 transmit antennas
cfgS1G.NumSpaceTimeStreams = 2;   % 2 space-time streams
cfgS1G.APEPLength = 256;          % APEP length in bytes
cfgS1G.MCS = 7;                   % 64-QAM rate-5/6

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

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

% Create and configure the TGah channel
tgahChannel = wlanTGahChannel;
tgahChannel.DelayProfile = 'Model-B';
tgahChannel.NumTransmitAntennas = cfgS1G.NumTransmitAntennas;
tgahChannel.NumReceiveAntennas = 2;
tgahChannel.TransmitReceiveDistance = 5; % Distance in meters for NLOS
tgahChannel.ChannelBandwidth = cfgS1G.ChannelBandwidth;
tgahChannel.LargeScaleFadingEffect = 'None';

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

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

snr = 25:10:45;

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

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

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

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

maxNumErrors = 1e2;  % The maximum number of packet errors at an SNR point
maxNumPackets = 1e3; % Maximum number of packets at an SNR point

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

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

% OFDM information
ofdmInfo = wlanS1GOFDMInfo('S1G-Data',cfgS1G);

% Set the sampling rate of the channel
tgahChannel.SampleRate = wlanSampleRate(cfgS1G);

if ~strcmp(packetFormat(cfgS1G),'S1G-Short')
    error('This example only supports the S1G-Short packet format');
end

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

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

  1. Несколько пакетов данных передаются через канал 2x2 TGah с AWGN.

  2. Каждый пакет синхронизируется по времени при известной задержке.

  3. Поля S1G-LTF1 и S1G-LTF2N демодулируются, и выполняется оценка канала.

  4. Поле S1G-Data извлекается из синхронизированной принятой формы волны и демодулируется OFDM.

  5. Данные, несущие поднесущие, выравниваются с помощью оценок канала.

  6. PSDU восстанавливается с использованием выравниваемых поднесущих данных, оценки отклонений по шуму и информации о состоянии канала (CSI).

  7. Восстановленный PSDU каждого пакета сравнивают с переданным для определения количества ошибок пакета и, следовательно, частоты ошибок пакета.

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

packetErrorRate = zeros(numel(snr),1);
%parfor i = 1:numel(snr) % Use 'parfor' to speed up the simulation
for i = 1:numel(snr) % 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/tgahChannel.NumReceiveAntennas;
    % Account for energy in nulls
    awgnChannel.SNR = snr(i)-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);

    % Loop to simulate multiple packets
    numPacketErrors = 0;
    numPkt = 1; % Index of packet transmitted
    while numPacketErrors<=maxNumErrors && numPkt<=maxNumPackets
        % Generate a packet for 802.11ah short preamble
        txPSDU = randi([0 1],cfgS1G.PSDULength*8,1);
        txWaveform = wlanWaveformGenerator(txPSDU,cfgS1G);

        % Add trailing zeros to allow for channel delay
        tx = [txWaveform; zeros(50,cfgS1G.NumTransmitAntennas)];

        % Pass through fading indoor TGah channel
        reset(tgahChannel); % Reset channel for different realization
        rx = tgahChannel(tx);

        % Add noise
        rx = awgnChannel(rx);

        % Synchronize
        % The received signal is synchronized to the start of the packet by
        % compensating for a known delay and the default OFDM demodulation
        % symbol sampling offset.
        delay = 4;
        rxSync = rx(delay+1:end,:);

        % LTF demodulation and channel estimation
        % Demodulate S1G-LTF1
        rxLTF1 = rxSync(fieldInd.S1GLTF1(1):fieldInd.S1GLTF1(2),:);
        demodLTF1 = wlanS1GDemodulate(rxLTF1,'S1G-LTF1',cfgS1G);

        % If required, demodulate S1G-LTF2N, and perform channel estimation
        if cfgS1G.NumSpaceTimeStreams>1
            % Use S1G-LTF1 and S1G-LTF2N for channel estimation
            rxLTF2N = rxSync(fieldInd.S1GLTF2N(1):fieldInd.S1GLTF2N(2),:);
            demodLTF2N = wlanS1GDemodulate(rxLTF2N,'S1G-LTF2N',cfgS1G);
            chanEst = s1gLTFChannelEstimate([demodLTF1 demodLTF2N],cfgS1G);
        else
            % Use only S1G-LTF1 for channel estimation
            chanEst = s1gLTFChannelEstimate(demodLTF1,cfgS1G);
        end

        % Noise variance estimate from S1G-LTF1 demodulated symbols
        noiseVarEst = helperNoiseEstimate(demodLTF1);

        % Extract S1G-Data field
        rxData = rxSync(fieldInd.S1GData(1):fieldInd.S1GData(2),:);

        % OFDM demodulation
        demodSym = wlanS1GDemodulate(rxData,'S1G-Data',cfgS1G);

        % Extract data subcarriers from demodulated symbols and channel
        % estimate
        demodDataSym = demodSym(ofdmInfo.DataIndices,:,:);
        chanEstData = chanEst(ofdmInfo.DataIndices,:,:);

        % MMSE frequency domain equalization
        [eqDataSym,csi] = helperSymbolEqualize(demodDataSym,chanEstData,noiseVarEst);

        % Recover PSDU bits
        rxPSDU = s1gDataBitRecover(eqDataSym,noiseVarEst,csi,cfgS1G);

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

    % Compute PER for this SNR point
    packetErrorRate(i) = numPacketErrors/(numPkt-1);
    disp(['SNR ' num2str(snr(i))...
          ' completed after ' num2str(numPkt-1) ' packets,'...
          ' PER: ' num2str(packetErrorRate(i))]);
end
SNR 25 completed after 123 packets, PER: 0.82114
SNR 35 completed after 922 packets, PER: 0.10954
SNR 45 completed after 1000 packets, PER: 0.013

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

figure;
semilogy(snr,packetErrorRate,'-ob');
grid on;
xlabel('SNR (dB)');
ylabel('PER');
title(['802.11ah ' cfgS1G.Preamble ', ' num2str(cfgS1G.ChannelBandwidth(4:end)) ...
    'MHz, MCS' num2str(cfgS1G.MCS) ', ' ...
    num2str(tgahChannel.NumTransmitAntennas) 'x' num2str(tgahChannel.NumReceiveAntennas) ...
    ' TGah Channel ' num2str(tgahChannel.DelayProfile)]);

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

Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами: maxNumErrors и maxNumPackets. Для значимых результатов эти значения должны быть больше, чем значения, представленные в этом примере. В качестве примера рисунок ниже был создан путем выполнения более длительной симуляции с maxNumErrors = 1e3 и maxNumPackets = 1e4, и область значений ОСШ snr = 20:8:60.

Приложение

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

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

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