В этом примере показано, как измерить частоту ошибок пакета линии PHY IEEE 802.11ad™ DMG с одной несущей (SC) с помощью сквозной симуляции.
В этом примере сквозная симуляция используется, чтобы определить вероятность пакетной ошибки для ссылки SC [1] 802.11ad с каналом миллиметровой волны TGay [2] при выборе точек ОСШ. В каждой точке ОСШ несколько пакетов передаются через канал с замираниями, синхронизируются, демодулируются и PSDU восстанавливаются. Смещение несущей частоты и временная задержка также моделируются. Блоки PSDU сравнивают с переданными для определения количества ошибок пакета и, следовательно, частоты ошибок пакета. Обработка для каждого пакета суммирована в следующей схеме.
Этот пример также демонстрирует, как parfor
цикл может использоваться вместо for
цикл при симуляции каждой точки ОСШ для ускорения симуляции. parfor
В рамках Parallel Computing Toolbox™ выполняет обработку для каждого ОСШ параллельно, чтобы уменьшить общее время симуляции.
В этом примере моделируется передача 802.11ad DMG SC PHY. Объект строения формата DMG содержит строение передачи в определенном формате. Объект создается с помощью wlanDMGConfig
функция. Свойства объекта содержат строение переданного пакета. В этом примере объект сконфигурирован, чтобы сгенерировать одну форму волны несущей MCS «9». MCS определяет используемый тип PHY и в этом примере должен быть строкой в области значений 1-12 или одной из {9.1 12.1 12.2 12.3 12.4 12.5 12.6}, чтобы симулировать SC PHY.
% Create a format configuration object cfgDMG = wlanDMGConfig; mcs = "9"; % MCS specified as a string scalar or string vector cfgDMG.PSDULength = 4096; % PSDULength in bytes
В этом примере мы моделируем модель канала TGay для сценария открытой точки доступа, используя wlanTGayChannel
объект. И передающая, и приёмная массивов являются однородным прямоугольным массивом (URA) 4x4. Лучевая трассировка выполняется от передачи к приёмному массиву, чтобы вывести два детерминированных луча: один LOS-луч и другой NLOS-луч с отражением одного порядка от земли. Случайные лучи и внутрикластерные лучи впоследствии генерируются в соответствии с квазидетерминированным (Q-D) подходом моделирования и параметрами в [2]. Формирование луча осуществляется, чтобы задать направление рулевого управления передающей и приемной антенны вдоль луча с максимальной степенью. Импульсные характеристики затухающего канала нормированы, поэтому канал не вводит коэффициент усиления или потерь степени. Как сигналы входа канала, так и выхода являются неполяризированными.
% Get sampling rate and specify carrier frequency fs = wlanSampleRate(cfgDMG); fc = 60e9; % Create a TGay channel object tgayChan = wlanTGayChannel; tgayChan.SampleRate = fs; tgayChan.CarrierFrequency = fc; tgayChan.Environment = 'Open area hotspot'; tgayChan.TransmitArray.Size = [4 4]; tgayChan.TransmitArrayPosition = [0; 0; 6]; % Meters tgayChan.TransmitArrayOrientation = [0; 270; 0]; % Degrees tgayChan.ReceiveArray.Size = [4 4]; tgayChan.ReceiveArrayPosition = [6; 6; 1.5]; % Meters tgayChan.ReceiveArrayOrientation = [90; 0; 0]; % Degrees tgayChan.BeamformingMethod = 'Maximum power ray'; tgayChan.NormalizeImpulseResponses = true;
Учитывая строение объекта канала, мы отображаем карту 3D, чтобы показать окружение и настройки антенной решетки. Два детерминированных луча из трассировки лучей также показаны на рисунке.
showEnvironment(tgayChan);
Максимальный допуск для центральной частоты передатчика должно быть в пределах [-20, + 20] ppm [1]. В этом примере для вывода CFO рассматривается точность синхроимпульса 20 ppm. Переданный сигнал задерживается на 500 выборки и также добавляется на 100 нулевые выборки в конце, чтобы учесть задержки от фильтрации канала TGay.
ppm = 20; % Clock accuracy to drive the CFO (ppm) freqOffset = ppm*1e-6*fc; % Carrier frequency offset (Hz) delay = 500; % Sample to delay the waveform zeroPadding = 100; % Add trailing zeros to allow for channel delay
Для каждой точки ОСШ (дБ) в камеру snrRanges
генерируют несколько пакетов, передают через канал и демодулируют для определения частоты ошибок пакета. Точки ОСШ для тестирования выбираются из snrRanges
на основе моделируемой MCS.
snrRanges = {-2.0:0.5:0.5, ... % MCS 1 0.0:1.0:5.0, ... % MCS 2 1.0:1.2:7.0, ... % MCS 3 2.0:1.2:8.0, ... % MCS 4 2.0:1.3:8.5, ... % MCS 5 2.5:1.3:9.0, ... % MCS 6 4.0:1.3:10.5, ... % MCS 7 5.0:1.5:12.5,... % MCS 8 5.5:1.5:13.0, ... % MCS 9 7.0:1.5:14.5, ... % MCS 9.1 8.0:1.8:17.0, ... % MCS 10 10.0:2.0:20.0, ... % MCS 11 12.0:2.0:22.0, ... % MCS 12 12.0:2.0:22.0, ... % MCS 12.1 14.0:2.0:24.0, ... % MCS 12.2 16.0:2.5:28.5, ... % MCS 12.3 17.0:2.5:29.5, ... % MCS 12.4 17.0:2.5:29.5, ... % MCS 12.5 20.0:2.5:32.5}; % MCS 12.6
Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами:
maxNumErrors
- максимальное количество ошибок пакета, моделируемых в каждой точке ОСШ. Когда количество ошибок пакета достигает этого предела, симуляция в этой точке ОСШ завершена.
maxNumPackets
является максимальным количеством пакетов, моделируемых в каждой точке ОСШ, и ограничивает длину симуляции, если предел ошибки пакета не достигнут.
Числа, выбранные в этом примере, приведут к очень короткой симуляции. Для значимых результатов рекомендуем увеличить цифры.
maxNumErrors = 10; % The maximum number of packet errors at an SNR point maxNumPackets = 100; % Maximum number of packets at an SNR point
Для каждой точки ОСШ проверяется количество пакетов и вычисляется вероятность ошибки пакета.
Для каждого пакета выполняются следующие шаги обработки:
PSDU создается и кодируется, чтобы создать одну форму волны пакета.
Форма волны передается через модель канала TGay. Различные реализации канала моделируются для различных пакетов.
AWGN добавляется к принятой форме волны. comm.AWGNChannel
сконфигурировано для предоставления правильного ОСШ.
К каждому пакету добавляется ослабление смещения частоты.
Пакет обнаружен.
Смещение несущей частоты оценивается и корректируется.
Установлена точная временная синхронизация. Выборки поля CE предусмотрены для точной синхронизации, чтобы обеспечить обнаружение пакета в начале STF.
Поля STF и CE извлекаются из синхронизированной принятой формы волны. Шум и оценка канала выполняются на восстановленных полях соответственно.
Поле данных, исключающее первый защитный интервал, извлекается и изменяется в блоки. Полученные символы в поле данных выравниваются.
Принятые символы отслеживаются и корректируются на фазы ошибки, вызванные любым остаточным смещением частоты несущей.
Поле данных декодируется, чтобы восстановить биты PSDU.
A parfor
цикл может использоваться для параллелизации обработки точек ОСШ, поэтому для каждой точки ОСШ создается и конфигурируется канал AWGN comm.AWGNChannel
. Чтобы включить использование параллельных вычислений для повышения скорости, закомментируйте for
оператор и разъединение parfor
оператор ниже.
numSNR = numel(snrRanges{1}); % Number of SNR points if ~isstring(mcs) error('MCS must be specified as a string scalar or string vector'); end numMCS = numel(mcs); % Number of MCS packetErrorRate = zeros(numMCS,numSNR); Ngi = 64; % Fixed GI length defined in the standard (20.6.3.2.5) validMCS = string(sort([1:12 9.1 12.1:0.1:12.6])); for imcs = 1:numMCS cfgDMG.MCS = mcs(imcs); if ~strcmp(phyType(cfgDMG),'SC') error('This example only supports DMG SC PHY simulation'); end ind = wlanFieldIndices(cfgDMG); snr = snrRanges{mcs(imcs)==validMCS}; % SNR points to simulate from MCS % parfor isnr = 1:numSNR % Use 'parfor' to speed up the simulation for isnr = 1:numSNR % Use 'for' to debug the simulation % Set random substream index per iteration to ensure that each % iteration uses a repeatable set of random numbers stream = RandStream('combRecursive','Seed',10); stream.Substream = isnr; RandStream.setGlobalStream(stream); % Create an instance of the AWGN channel per SNR point simulated awgnChannel = comm.AWGNChannel; awgnChannel.NoiseMethod = 'Signal to noise ratio (SNR)'; awgnChannel.SNR = snr(isnr); % Set simulation parameters numPacketErrors = 0; numPkt = 1; % Index of the transmitted packet while numPacketErrors<=maxNumErrors && numPkt<=maxNumPackets % Generate a packet waveform psdu = randi([0 1],cfgDMG.PSDULength*8,1); txWaveform = wlanWaveformGenerator(psdu,cfgDMG); % Add delay and trailing zeros tx = [zeros(delay,1); txWaveform; zeros(zeroPadding,1)]; % Transmit through a TGay channel. Reset the channel for a % different realization per packet. reset(tgayChan); chanOut = tgayChan(tx); % Add noise rx = awgnChannel(chanOut); % Add CFO rx = helperFrequencyOffset(rx,fs,freqOffset); % Packet detection threshold = 0.03; % Good for low SNRs pktStartOffset = dmgPacketDetect(rx,0,threshold); if isempty(pktStartOffset) % If empty no STF detected; packet error numPacketErrors = numPacketErrors+1; numPkt = numPkt+1; continue; % Go to next loop iteration end % Frequency offset estimation and correction stf = rx(pktStartOffset+(ind.DMGSTF(1):ind.DMGSTF(2))); fOffsetEst = dmgCFOEstimate(stf); rx = helperFrequencyOffset(rx,fs,-fOffsetEst); % Symbol timing and channel estimate preamblefield = rx(pktStartOffset+1:pktStartOffset+ind.DMGHeader(2),:); [symbolTimingOffset,chanEst] = dmgTimingAndChannelEstimate(preamblefield); startOffset = pktStartOffset+symbolTimingOffset; % If not enough samples to decode detected data field start, % then assume synchronization error and packet error if (startOffset+ind.DMGData(2))>size(rx,1) numPacketErrors = numPacketErrors+1; numPkt = numPkt+1; continue; % Go to next loop iteration end % Noise estimation using the STF as repeating sequence stf = rx(pktStartOffset+(ind.DMGSTF(1):ind.DMGSTF(2))); nVarEst = dmgSTFNoiseEstimate(stf); % Extract data field (ignore first GI) rxData = rx(startOffset+((ind.DMGData(1)+Ngi):ind.DMGData(2))); % Linear frequency domain equalization rxEqDataBlks = dmgSingleCarrierFDE(rxData,chanEst,nVarEst); % Unique word phase tracking rxEqDataBlks = dmgUniqueWordPhaseTracking(rxEqDataBlks); % Discard GI from all blocks rxDataSym = rxEqDataBlks(1:end-Ngi,:); % Recover the transmitted PSDU from DMG Data field dataDecode = wlanDMGDataBitRecover(rxDataSym,nVarEst,cfgDMG); % Determine if any bits are in error, i.e. a packet error packetError = any(biterr(psdu,dataDecode)); numPacketErrors = numPacketErrors+packetError; numPkt = numPkt+1; end % Calculate packet error rate (PER) at SNR point packetErrorRate(imcs,isnr) = numPacketErrors/(numPkt-1); disp(join([" MCS:" cfgDMG.MCS ", SNR " ... num2str(snr(isnr)) " completed after " ... num2str(numPkt-1) " packets, PER: " ... num2str(packetErrorRate(imcs,isnr))],"")); end end
MCS:9, SNR 5.5 completed after 11 packets, PER: 1 MCS:9, SNR 7 completed after 14 packets, PER: 0.78571 MCS:9, SNR 8.5 completed after 20 packets, PER: 0.55 MCS:9, SNR 10 completed after 35 packets, PER: 0.31429 MCS:9, SNR 11.5 completed after 70 packets, PER: 0.15714 MCS:9, SNR 13 completed after 100 packets, PER: 0.08
markers = 'ox*sd^v><ph+ox*sd^v'; color = 'bmcrgbrkymcrgbrkymc'; figure; for imcs = 1:numMCS semilogy(snrRanges{mcs(imcs)==validMCS},packetErrorRate(imcs,:).',['-' markers(imcs) color(imcs)]); hold on; end grid on; xlabel('SNR (dB)'); ylabel('PER'); dataStr = arrayfun(@(x)sprintf('MCS %s',x),mcs,'UniformOutput',false); legend(dataStr); title('PER for DMG SC-PHY, TGay channel');
Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами; maxNumErrors
и maxNumPackets
. Для значимых результатов рекомендуется, чтобы эти значения были больше, чем те, которые представлены в этом примере. Увеличение количества моделируемых пакетов позволяет сравнивать PER в различных сценариях. Попробуйте изменить значение MCS и сравните частоту ошибок пакета. В качестве примера рисунок ниже был создан путем запуска примера для всех MCS с одной несущей с PSDULength
: 8192 байта, maxNumErrors
: 1000 и maxNumPackets
: 10000.
Исследуйте настройки канала TGay путем изменения окружения ('Street canyon hotspot' или 'Large hotel lobby'), пользовательских строений, типа поляризации, строений массива, метода формирования луча и так далее. В сценарии уличного каньона объект вычисляет детерминированные лучи до 1 порядка отражения от земли и стенок. В сценарии лобби отеля детерминированные лучи имеют отражение до 2 порядков от земли, потолка и/или стенок. Из-за дополнительного отражения лучей результаты PER обычно лучше, чем выше, полученные из сценария открытой зоны.
В этом примере используются следующие вспомогательные функции и объекты:
Стандарт IEEE Std 802.11ad™-2012 IEEE на информационные технологии - Телекоммуникации и обмен информацией между системами - Локальные и столичные сети - Особые требования - Часть 11: Беспроводное управление доступом к среде локальной сети (MAC) и физический слой (PHY) Спецификации. Поправка 3: Улучшения для очень высокой пропускной способности в полосе 60 ГГц.
А. Мальцев и др. al, Channel Models for IEEE 802.11ay, IEEE 802.11-15/1150r9, Mar. 2017.