Пакетная симуляция коэффициента ошибок 802.11ac для 8x8 канал TGac

Этот пример показывает, как измерить пакетный коэффициент ошибок ссылки IEEE® 802.11ac™ VHT с помощью сквозной симуляции с исчезновением модель канала TGac и аддитивный белый Гауссов шум.

Введение

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

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

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

802.11ac передача VHT моделируется в этом примере. Объект настройки формата VHT содержит формат определенная настройка передачи. Объект создается с помощью функции wlanVHTConfig. Свойства объекта содержат настройку. В этом примере объект сконфигурирован для пропускной способности канала на 80 МГц, 8 антенн передачи, 8 пространственно-временных потоков, никакого блочного кодирования времени пробела и 256-QAM rate-5/6 (MCS 9).

% Create a format configuration object for a 8-by-8 VHT transmission
cfgVHT = wlanVHTConfig;
cfgVHT.ChannelBandwidth = 'CBW80'; % 80 MHz channel bandwidth
cfgVHT.NumTransmitAntennas = 8;    % 8 transmit antennas
cfgVHT.NumSpaceTimeStreams = 8;    % 8 space-time streams
cfgVHT.APEPLength = 3000;          % APEP length in bytes
cfgVHT.MCS = 9;                    % 256-QAM rate-5/6

Настройка канала

В этом примере модель канала N-LOS TGac используется с Моделью-D профиля задержки. Для Модели-D, когда расстояние между передатчиком и получателем больше, чем или равно 10 метрам, модель является NLOS. Это описано далее в wlanTGacChannel. 8x8 канал MIMO моделируется в этом примере поэтому 8, получают антенны, заданы.

% Create and configure the channel
tgacChannel = wlanTGacChannel;
tgacChannel.DelayProfile = 'Model-D';
tgacChannel.NumReceiveAntennas = 8;
tgacChannel.TransmitReceiveDistance = 10; % Distance in meters for NLOS
tgacChannel.ChannelBandwidth = cfgVHT.ChannelBandwidth;
tgacChannel.NumTransmitAntennas = cfgVHT.NumTransmitAntennas;
tgacChannel.LargeScaleFadingEffect = 'None';

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

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

snr = 40:5:50;

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

  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

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

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

% Get the OFDM info
ofdmInfo = wlanVHTOFDMInfo('VHT-Data',cfgVHT);

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

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

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

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

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

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

  2. Форма волны передается посредством различной реализации модели канала TGac.

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

  4. Пакет обнаруживается.

  5. Крупное смещение несущей частоты оценивается и исправляется.

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

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

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

  9. Поле данных VHT извлечено от синхронизируемой полученной формы волны. PSDU восстанавливается с помощью извлеченного поля и оценки канала.

Цикл parfor может использоваться, чтобы параллелизировать обработку точек ОСШ, поэтому для каждой точки ОСШ, что канал AWGN создается и конфигурируется с коммуникацией. AWGNChannel. Чтобы включить использование параллельных вычислений для увеличенной скорости комментируют 'для' оператора и не комментируют '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/tgacChannel.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 waveform
        txPSDU = randi([0 1],cfgVHT.PSDULength*8,1); % PSDULength in bytes
        tx = wlanWaveformGenerator(txPSDU,cfgVHT);

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

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

        % Add noise
        rx = awgnChannel(rx);

        % Packet detect and determine coarse packet offset
        coarsePktOffset = wlanPacketDetect(rx,cfgVHT.ChannelBandwidth);
        if isempty(coarsePktOffset) % If empty no L-STF detected; packet error
            numPacketErrors = numPacketErrors+1;
            numPkt = numPkt+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,cfgVHT.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,...
                    cfgVHT.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>50
            numPacketErrors = numPacketErrors+1;
            numPkt = numPkt+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,cfgVHT.ChannelBandwidth);
        rx = helperFrequencyOffset(rx,fs,-fineFreqOff);

        % Extract VHT-LTF samples from the waveform, demodulate and perform
        % channel estimation
        vhtltf = rx(pktOffset+(ind.VHTLTF(1):ind.VHTLTF(2)),:);
        vhtltfDemod = wlanVHTLTFDemodulate(vhtltf,cfgVHT);

        % Get single stream channel estimate
        chanEstSSPilots = vhtSingleStreamChannelEstimate(vhtltfDemod,cfgVHT);

        % Channel estimate
        chanEst = wlanVHTLTFChannelEstimate(vhtltfDemod,cfgVHT);

        % Extract VHT Data samples from the waveform
        vhtdata = rx(pktOffset+(ind.VHTData(1):ind.VHTData(2)),:);

        % Estimate the noise power in VHT data field
        nVarVHT = vhtNoiseEstimate(vhtdata,chanEstSSPilots,cfgVHT);

        % Recover the transmitted PSDU in VHT Data
        rxPSDU = wlanVHTDataRecover(vhtdata,chanEst,nVarVHT,cfgVHT);

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

    % Calculate packet error rate (PER) at SNR point
    packetErrorRate(i) = numPacketErrors/(numPkt-1);
    disp(['SNR ' num2str(snr(i)) ' completed after ' ...
        num2str(numPkt-1) ' packets, PER: ' ...
        num2str(packetErrorRate(i))]);
end
SNR 40 completed after 11 packets, PER: 1
SNR 45 completed after 15 packets, PER: 0.73333
SNR 50 completed after 100 packets, PER: 0.04

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

figure
semilogy(snr,packetErrorRate,'-ob');
grid on;
xlabel('SNR (dB)');
ylabel('PER');
title('802.11ac 80MHz, MCS9, Direct Mapping, 8x8 Channel Model D-NLOS');

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

Количеством пакетов, протестированных в каждой точке ОСШ, управляют два параметра; maxNumErrors и maxNumPackets. Для значимых результатов это, рекомендуют, чтобы эти значения были больше, чем представленные в этом примере. Увеличение числа моделируемых пакетов позволяет PER согласно различным сценариям быть сравненным. Попытайтесь изменить передачу и настройки приема и сравните пакетный коэффициент ошибок. Как пример, фигура ниже была создана путем выполнения примера для maxNumErrors: 1000 и maxNumPackets: 10000.

Приложение

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

Выбранная библиография

  1. Станд. IEEE 802.11ac™-2013 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации - Поправка 4: Улучшения для Очень Высокой Пропускной способности для Операции в Полосах ниже 6 ГГц.