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