В этом примере показано, как измерить минимальную входную чувствительность приемника, как указано в разделе 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
Управление количеством пакетов, проверенных при каждой чувствительности, осуществляется путем указания следующих параметров:
maxNumErrors - максимальное количество ошибок пакетов, моделируемых на каждом уровне ввода. Когда количество ошибок пакета достигает этого предела, моделирование на этом уровне чувствительности завершается.
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));
Вычислите частоту ошибок пакетов для каждого входного уровня путем моделирования нескольких пакетов.
Для каждого пакета выполните следующие шаги обработки:
Создайте и закодируйте блок PSDU для создания одного пакетного сигнала.
Создайте требуемый входной уровень в дБм путем масштабирования формы сигнала.
Измерьте мощность принятого сигнала.
Добавьте AWGN к принятому сигналу.
Перед обработкой повысьте уровень сигнала, пройдя автоматическую регулировку усиления.
Определите пакет.
Оценка и исправление грубого смещения несущей частоты.
Установление точной синхронизации по времени.
Оценка и исправление точного смещения несущей частоты.
Извлечение и OFDM демодулируют VHT-LTF и выполняют оценку канала.
Извлеките поле 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. Для получения значимых результатов следует использовать больше чисел, чем в данном примере.
В этом примере используются следующие вспомогательные функции:
Стандарт IEEE Std 802.11ac™-2013 IEEE для информационных технологий - Связь и обмен информацией между системами - Локальные и городские сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (PHY) - Поправка 4: Улучшения для очень высокой пропускной способности для работы в диапазонах ниже 6 GY
Перахия, Эльдад и Роберт Стейси. Беспроводные LANS следующего поколения: 802.11n и 802.11ac. Издательство Кембриджского университета, 2013 год.