Этот пример показывает, как измерить пакетный коэффициент ошибок одного поставщика услуг (SC) IEEE® 802.11ad™ DMG ссылка PHY с помощью сквозной симуляции.
В этом примере сквозная симуляция используется, чтобы определить пакетный коэффициент ошибок для 802.11ad ссылка SC [1] с каналом волны миллиметром TGay [2] по выбору точек ОСШ. В каждой точке ОСШ несколько пакетов передаются через исчезающий канал, синхронизируемый, демодулируемый и восстановленный PSDUs. Смещение несущей частоты и задержка также моделируются. PSDUs сравниваются с переданными, чтобы определить количество пакетных ошибок и следовательно пакетного коэффициента ошибок. Обработка для каждого пакета получена в итоге в следующей схеме.
Этот пример также демонстрирует, как цикл parfor
может использоваться вместо цикла for
, когда симуляция каждого ОСШ указывает, чтобы ускорить симуляцию. parfor
, как часть Parallel Computing Toolbox™, выполняет обработку для каждого ОСШ параллельно, чтобы уменьшать общее время симуляции.
802.11ad SC DMG передача 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
. Оба передача и получает массивы, 4x4 универсальный прямоугольный массив (URA). Трассировка лучей выполняется от передачи до получить массива, чтобы вывести два детерминированных луча: один луч LOS и другой NLOS излучают с отражением с одним порядком от земли. Случайные лучи и внутрикластерные лучи впоследствии сгенерированы согласно квазидетерминированному (Q-D), моделирующий подход и параметры в [2]. Beamforming выполняется, чтобы установить передачу и получить руководящее направление антенны вдоль луча с максимальной мощностью. Исчезающие импульсные ответы канала нормированы так, никакое усиление степени или потеря не введены каналом. Оба сигналы ввода и вывода канала деполяризируются.
% 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]. В этом примере точность часов 20 страниц в минуту, как рассматривается, выводит CFO. Переданный сигнал задержан 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.
Цикл 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
: 8 192 байта, maxNumErrors
: 1000 и maxNumPackets
: 10000.
Исследуйте настройки канала TGay путем изменения среды ('уличная горячая точка каньона' или 'Лобби большого отеля'), пользовательские настройки, тип поляризации, конфигурации массивов, beamforming метод и так далее. В уличном сценарии каньона объект вычисляет детерминированные лучи до отражения с 1 порядком от земли и стен. В сценарии вестибюля отеля детерминированные лучи до отражения с 2 порядками от земли, потолка и/или стен. Из-за дополнительного отражения лучей, результаты PER обычно лучше, чем вышеупомянутое, полученное из открытого сценария области.
Этот пример использует следующие функции помощника и объекты:
Станд. IEEE 802.11ad™-2012 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации. Поправка 3: Улучшения для Очень Высокой Пропускной способности в Полосе на 60 ГГц.
А. Малцев и и. al, Модели Канала для IEEE 802.11ay, IEEE 802.11-15/1150r9, март 2017.