exponenta event banner

Тест минимальной чувствительности входного сигнала приемника 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)

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

В примере моделируется тест путем выполнения следующих шагов в диапазоне уровней чувствительности:

  • Генерация и масштабирование пакетов до требуемого уровня сигнала

  • Добавление белого гауссова шума для создания уровня шума в приемнике

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

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

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

Параметры испытаний

Настройте передачу для теста с помощью объекта конфигурации 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;

Настройка мощности сигнала

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

Конфигурация шума

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

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 на участке будет двигаться направо к минимальной чувствительности, и запас уменьшится.

Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами: maxNumErrors и maxNumPackets. Для получения значимых результатов следует использовать больше чисел, чем в данном примере.

Приложение

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

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

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

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