Тест минимальной входной чувствительности приемника 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 стимулируют приемник в области значений уровней на входе ниже минимального уровня уязвимости. Пример затем измеряет пакетный коэффициент ошибок для каждого уровня уязвимости.

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

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

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

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

  • Сравните восстановленный PSDUs с переданными, чтобы определить количество пакетных ошибок и следовательно пакетного коэффициента ошибок.

Автоматическое управление усилением (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 для измеренного уровня на входе на получает антенну. В этой симуляции приемник обрабатывает тестовый сигнал с заданным уровнем на входе в dBm. Сгенерируйте тестовый сигнал с помощью wlanWaveformGenerator функция. wlanWaveformGenerator функция нормирует форму волны, таким образом, что степень для всех антенн суммирует к 0 dBm. Поэтому масштабируйте выход генератора формы волны, чтобы создать желаемый уровень на входе.

% 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. Создайте желаемый уровень на входе в dBm путем масштабирования формы волны.

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

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

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

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

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

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

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

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

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

  2. Perahia, Элдэд и Роберт Стейси. Беспроводная связь следующего поколения LANS: 802.11n и 802.11ac. Издательство Кембриджского университета, 2013.