В этом примере показано, как измерить частоту ошибок пакета линии 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.