В этом примере показано, как симулировать тест, чтобы измерить получатель минимальная входная чувствительность, как задано в Разделе 22.3.19.1 из стандарта IEEE® 802.11ac™ [1].
Тест чувствительности минимума получателя гарантирует, что устройство под тестом (DUT) может получить данные с заданным максимальным пакетным коэффициентом ошибок (PER) 10% в заданной минимальной степени сигнала. Минимальная степень сигнала зависит от пропускной способности канала и схемы модуляции и кодирования (MCS), как задано в Таблице 22-25 стандарта IEEE 802.11ac [1]:
Когда тест выполняется с оборудованием, каждый входной порт антенны на DUT соединяется через кабель с одним выходным портом антенны передатчика. Следующие параметры передачи заданы для тестовой формы волны:
Количество пространственных потоков равно количеству передачи портов антенны
Длина PSDU 4 096 байтов
Никакое пространственно-временное блочное кодирование (STBC)
Защитный интервал на 800 нс
Бинарное сверточное кодирование
В этом примере показано, как вышеупомянутый тест может быть создан со сквозной симуляцией с помощью WLAN Toolbox™. В этом примере получатель стимулирован с поступлением пакетов VHT в области значений уровней на входе ниже минимального уровня уязвимости и измеренного PER.
Поскольку каждый уровень уязвимости протестировал пакеты, генерируются и масштабируются к желаемому уровню сигнала. Белый Гауссов шум добавляется, чтобы создать уровень шума в получателе. Шумные пакеты затем демодулируются и восстановленный 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
Количеством пакетов, протестированных в каждой чувствительности, управляют два параметра:
maxNumErrors
максимальное количество пакетных ошибок, симулированных на каждом уровне на входе. Когда количество пакетных ошибок достигает этого предела, симуляция на этом уровне уязвимости завершена.
maxNumPackets
максимальное количество пакетов, симулированных на каждом уровне на входе, и ограничивает продолжительность симуляции, если пакетный предел погрешности не достигнут.
Числа, выбранные в этом примере, приведут к очень короткой симуляции. Для значимых результатов мы рекомендуем увеличить числа.
maxNumErrors = 20; maxNumPackets = 200;
Минимальный тест чувствительности указывает, что максимальный PER для измеренного уровня на входе на получает антенну. В этой симуляции получатель стимулирован с тестовым сигналом с заданным уровнем на входе в dBm. Тестовый сигнал сгенерирован с генератором формы волны, wlanWaveformGenerator. Выход генератора формы волны нормирован внутренне таким образом, что степень для всех антенн суммирует к 0 dBm. Поэтому для этой симуляции выход генератора формы волны должен масштабироваться, чтобы создать желаемый уровень на входе.
Сначала минимальная чувствительность для настройки передачи определяется из Таблицы 22-25 стандарта IEEE 802.11ac [1].
% 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, коммуникация. AWGNChannel, используется, чтобы добавить шум в форму волны.
awgnChannel = comm.AWGNChannel('NoiseMethod','Variance', ... 'Variance',10^(noiseFloor/10));
Для каждого уровня на входе много пакетов тестируются и пакетный вычисленный коэффициент ошибок.
Для каждого пакета происходят выполняющие шаги обработки:
PSDU создается и кодируется, чтобы создать одну пакетную форму волны.
Форма волны масштабируется, чтобы создать желаемый уровень на входе в dBm.
Степень полученной формы волны измеряется.
AWGN добавляется к полученной форме волны, чтобы создать уровень шума.
Полученная форма волны передается посредством автоматического управления усилением, чтобы повысить сигнал до обработки получателя.
Пакет обнаруживается.
Крупное смещение несущей частоты оценивается и корректируется.
Прекрасная синхронизация синхронизации устанавливается. L-STF, L-LTF и выборки L-SIG обеспечиваются для прекрасной синхронизации, чтобы допускать пакетное обнаружение в запуске или конце L-STF.
Прекрасное смещение несущей частоты оценивается и корректируется.
VHT-LTF извлечен из синхронизируемой полученной формы волны. VHT-LTF является демодулируемым OFDM, и оценка канала выполняется.
Поле данных 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
. Для значимых результатов это, рекомендуют, чтобы эти значения были больше, чем представленные в этом примере.
Этот пример использует следующие функции помощника:
Станд. IEEE 802.11ac™-2013 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования - Поправка 4: Улучшения для Очень Высокой Пропускной способности для Операции в Полосах ниже 6 ГГц.
Perahia, Элдэд и Роберт Стейси. Беспроводная связь следующего поколения LANS: 802.11n и 802.11ac. Издательство Кембриджского университета, 2013.