Тест минимальной входной чувствительности приемника 802.11ac

Этот пример показывает, как измерить минимальную входную чувствительность приемника, как указано в разделе 22.3.19.1 стандарта IEEE ® 802.11ac™ [1].

Введение

Тест минимальной чувствительности приемника обеспечивает получение тестируемым устройством (DUT) данных с заданной максимальной частотой ошибок пакета (PER) 10% при заданной минимальной степени сигнала. Минимальная степень сигнала зависит от ширины полосы пропускания канала и схемы модуляции и кодирования (MCS), как указано в таблице 22-25 стандарта IEEE 802.11ac [1]:

Когда тест выполняется с оборудование, каждый входной порт антенны на DUT соединяется через кабель с одним выходным портом антенны передатчика. Чтобы выполнить тест, задайте следующие параметры для тестовой формы волны:

  • Количество пространственных потоков - равно количеству передающих антенн

  • Длина PSDU, в байтах - 4096

  • Пространственно-временное блочное кодирование (STBC) - отключено

  • Защитный интервал, в наносекундах - 800

  • Канальное кодирование - двоичное сверточное кодирование (BCC)

В этом примере показано, как симулировать тест при помощи WLAN Toolbox™. Пакеты VHT стимулируют приемник на область значений входа уровней ниже минимального уровня чувствительности. Затем в примере измеряется частота ошибок пакета для каждого уровня чувствительности.

Пример моделирует тест, выполняя эти шаги в области значений уровней чувствительности:

  • Сгенерируйте и масштабируйте пакеты до желаемого уровня сигнала

  • Добавьте белый Гауссов шум, чтобы создать шумовой пол в приемнике

  • Демодулируйте шумные пакеты для восстановления блоков PSDU.

  • Сравните восстановленные PSDU с переданными для определения количества ошибок пакета и, следовательно, частоты ошибок пакета.

Автоматическое управление усилением (AGC), обнаружение пакетов, временная синхронизация, коррекция смещения несущей частоты, оценка шума и отслеживание фазы выполняются приемником примера. Эта схема демонстрирует обработку для каждого пакета:

Параметры тестирования

Сконфигурируйте передачу для теста с помощью объекта строения VHT. Этот пример измеряет минимальную чувствительность для передачи 160 МГц со скоростью 64-QAM 5/6 модуляции и кодирования. Моделируемый DUT имеет 2 приемные антенны. Тестируйте различные строения путем изменения этих параметров.

cfgVHT = wlanVHTConfig;             % Create VHT transmission configuration
cfgVHT.ChannelBandwidth = 'CBW160'; % Bandwidth
cfgVHT.MCS = 7;                     % 64-QAM, rate 5/6
NumReceiveAntennas = 2;             % Number of receive antennas

Тест требует этих фиксированных параметров передачи.

cfgVHT.APEPLength = 4096; % Bytes
cfgVHT.STBC = false;
cfgVHT.NumTransmitAntennas = NumReceiveAntennas;
cfgVHT.NumSpaceTimeStreams = NumReceiveAntennas;
cfgVHT.SpatialMapping = 'Direct';
cfgVHT.GuardInterval = 'Long';

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

Приемник обрабатывает пакеты VHT на область значений входа уровней ниже минимального уровня чувствительности входа. Задайте область значений смещений для тестирования в векторе testInputLevelOffsets.

testInputLevelOffsets = [-10 -9 -8 -7]; % dB

Управляйте количеством пакетов, протестированных при каждой чувствительности, путем определения этих параметров:

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

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

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

maxNumErrors = 20;
maxNumPackets = 200;

Сигнальная Степень Setup

Тест минимальной чувствительности задает максимальный PER для измеренного входного уровня на приемную антенну. В этой симуляции приемник обрабатывает тестовый сигнал с заданным входным уровнем в дБм. Сгенерируйте тестовый сигнал, используя wlanWaveformGenerator функция. The wlanWaveformGenerator функция нормирует форму волны таким образом, чтобы степень для всех антенн равнялась 0 дБм. Поэтому масштабируйте выход генератора формы волны, чтобы создать требуемый входной уровень.

% Receiver minimum input level sensitivity for 20 MHz, Table 22-25. The
% sensitivity increases by 3dB for double the bandwidth.
rxMinSensitivityTable = [-82 -79 -77 -74 -70 -66 -65 -64 -59 -57]; % dBm

% Get minimum input sensitivity given MCS and bandwidth
fs = wlanSampleRate(cfgVHT);  % Baseband sampling rate (Hz)
B = floor(10*log10((fs/20e6))); % Scalar for bandwidth
rxMinSensitivity = rxMinSensitivityTable(cfgVHT.MCS+1)+B; % dBm
disp(['Minimum sensitivity for MCS' num2str(cfgVHT.MCS) ', ' ...
    num2str(fs/1e6) ' MHz: ' num2str(rxMinSensitivity,'%2.1f') ' dBm'])
Minimum sensitivity for MCS7, 160 MHz: -55.0 dBm

Определите область значений уровней входа ниже минимального уровня для тестирования с помощью testInputLevels.

testInputLevels = rxMinSensitivity+testInputLevelOffsets; % dBm

Вычислите скаляр напряжения, A, чтобы масштабировать сгенерированную форму волны для каждого тестового уровня. Значение степени на каждый порт приемной антенны измеряется во время симуляции, чтобы подтвердить правильность входного сигнала.

A = 10.^((testInputLevels-30)/20);      % Voltage gain (attenuation)
A = A*sqrt(cfgVHT.NumTransmitAntennas); % Account for generator scaling

Шумовые Строения

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

NF = 6;         % Noise figure (dB)
T = 290;        % Ambient temperature (K)
BW = fs;        % Bandwidth (Hz)
k = 1.3806e-23; % Boltzmann constant (J/K)
noiseFloor = 10*log10(k*T*BW)+NF; % dB
disp(['Receiver noise floor: ' num2str(noiseFloor+30,'%2.1f') ' dBm'])
Receiver noise floor: -85.9 dBm

Добавьте шум к форме волны с помощью канала AWGN, comm.AWGNChannel.

awgnChannel = comm.AWGNChannel('NoiseMethod','Variance', ...
    'Variance',10^(noiseFloor/10));

Симуляция чувствительности входного уровня

Вычислите частоту ошибок пакета для каждого входного уровня путем симуляции нескольких пакетов.

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

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

  2. Создайте требуемый входной уровень в дБм путем масштабирования формы волны.

  3. Измерьте степень принятой формы волны.

  4. Добавьте AWGN к полученной форме волны.

  5. Увеличьте сигнал перед обработкой, пройдя через автоматическое управление усилением.

  6. Обнаружите пакет.

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

  8. Установите точную временную синхронизацию.

  9. Оцените и исправьте мелкое смещение частоты несущей.

  10. Извлечение и OFDM демодулируют VHT-LTF и выполняют оценку канала.

  11. Извлеките поле VHT Data и восстановите PSDU.

ind = wlanFieldIndices(cfgVHT); % For accessing fields within the packet
chanBW = cfgVHT.ChannelBandwidth;
rng(0);  % Set random state for repeatability

agc = comm.AGC; % Automatic gain control

S = numel(testInputLevels);
packetErrorRate = zeros(S,1);
rxAntennaPower = zeros(S,1);
for i=1:S
    disp(['Simulating ' num2str(testInputLevels(i),'%2.1f') ...
        ' dBm input level...']);

    % Loop to simulate multiple packets
    numPacketErrors = 0;
    measuredPower = zeros(maxNumPackets,1); % Average power per antenna
    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);

        % Scale input signal to desired level
        rx = tx.*A(i);

        % Measure the average power at the antenna connector in Watts
        measuredPower(numPkt) = mean(mean(rx.*conj(rx)));

        % Add noise floor at receiver
        rx = awgnChannel(rx);

        % Pass each channel through AGC
        for ic = 1:size(rx,2)
            rx(:,ic) = agc(rx(:,ic));
            reset(agc);
        end

        % Packet detect and determine coarse packet offset
        coarsePktOffset = wlanPacketDetect(rx,chanBW);
        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,chanBW);
        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,chanBW);

        % Determine final packet offset
        pktOffset = coarsePktOffset+finePktOffset;
        % if packet detected out of a reasonable range (>50 samples);
        % 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,chanBW);
        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);
        chanEst = wlanVHTLTFChannelEstimate(vhtltfDemod,cfgVHT);

        % Get single stream channel estimate
        chanEstSSPilots = vhtSingleStreamChannelEstimate(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
        nEstVHT = vhtNoiseEstimate(vhtdata,chanEstSSPilots,cfgVHT);

        % Recover the transmitted PSDU in VHT Data
        rxPSDU = wlanVHTDataRecover(vhtdata,chanEst,nEstVHT,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 input level point
    packetErrorRate(i) = numPacketErrors/(numPkt-1);
    disp(['  Completed after ' ...
        num2str(numPkt-1) ' packets, PER: ' ...
        num2str(packetErrorRate(i))]);

    % Calculate average input power per antenna
    rxAntennaPower(i) = 10*log10(mean(measuredPower(1:(numPkt-1))))+30;
    disp(['  Measured antenna connector power: ' ...
        num2str(rxAntennaPower(i),'%2.1f') ' dBm']);
end
Simulating -65.0 dBm input level...
  Completed after 21 packets, PER: 1
  Measured antenna connector power: -65.0 dBm
Simulating -64.0 dBm input level...
  Completed after 26 packets, PER: 0.80769
  Measured antenna connector power: -64.0 dBm
Simulating -63.0 dBm input level...
  Completed after 130 packets, PER: 0.16154
  Measured antenna connector power: -63.0 dBm
Simulating -62.0 dBm input level...
  Completed after 200 packets, PER: 0.02
  Measured antenna connector power: -62.0 dBm

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

Постройте график PER для протестированных уровней входного сигнала с максимальным PER при минимальной чувствительности.

figure
semilogy(rxAntennaPower,packetErrorRate,'o-')
hold on
semilogy(rxMinSensitivity,0.1,'rx')
currentxlim = xlim(gca);
xlim([currentxlim(1) currentxlim(2)+1])
grid on
xlabel('Measured power per antenna connector (dBm)');
ylabel('PER');
legend('Simulated PER performance','Maximum PER at minimum sensitivity');
title(sprintf(['Minimum Input Sensitivity Test: MCS%d, %d MHz, ' ...
    '%d Antennas'],cfgVHT.MCS,fs/1e6,cfgVHT.NumTransmitAntennas))

График показывает, что моделируемый 10% PER чуть менее 8 дБ ниже минимальной чувствительности, заданной тестом. Это различие связано с запасом реализации, допустимым тестом. Запас реализации допускает алгоритмическое ухудшение из-за ухудшений и рисунок шума приемника по сравнению с идеальной эффективностью AWGN [2]. В этом примере только AWGN добавляется как обесценение. Поэтому только алгоритмическая эффективность фронтэнд-синхронизации, оценки канала и отслеживания фазы в присутствии AWGN использует запас реализации. Если в симуляция включено больше ослаблений, водопад PER на графике будет двигаться прямо к минимальной чувствительности, и запас уменьшится.

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

Приложение

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

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

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

  2. Перахия, Элдад и Роберт Стейси. Беспроводные LANS следующей генерации: 802.11n и 802.11ac. Cambridge University Press, 2013.