В этом примере показано, как измерить частоту пакетных ошибок канала PHY одиночной несущей (SC) IEEE ® 802.11ad™ DMG с помощью сквозного моделирования.
В этом примере сквозное моделирование используется для определения частоты ошибок пакетов для линии связи 802.11ad SC [1] с каналом миллиметровой волны TGay [2] в выбранных точках SNR. В каждой точке SNR несколько пакетов передаются через канал замирания, синхронизируются, демодулируются и PSDU восстанавливаются. Также моделируются смещение несущей частоты и временная задержка. Блоки PSDU сравниваются с переданными блоками для определения количества ошибок пакета и, следовательно, частоты ошибок пакета. Обработка для каждого пакета суммирована на следующей диаграмме.

В этом примере также показано, как parfor может использоваться вместо for цикл при моделировании каждой точки SNR для ускорения моделирования. parfor, как часть Toolbox™ параллельных вычислений, выполняет обработку для каждого SNR параллельно, чтобы уменьшить общее время моделирования.
В этом примере моделируется передача PHY DMG 802.11ad. Объект конфигурации формата 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 объект. Как передающий, так и принимающий массивы представляют собой 4 4 однородных прямоугольных массива (URA). Трассировка лучей осуществляется от передающего к приемному массиву для получения двух детерминированных лучей: одного луча 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]. В этом примере для финансового директора считается, что точность синхронизации составляет 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
Для каждой точки SNR (дБ) в ячейке snrRanges генерируют, пропускают через канал и демодулируют несколько пакетов для определения частоты ошибок пакетов. Точки SNR для тестирования выбираются из 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
Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами:
maxNumErrors - максимальное количество ошибок пакетов, моделируемых в каждой точке SNR. Когда количество ошибок пакетов достигает этого предела, моделирование в этой точке SNR завершается.
maxNumPackets является максимальным количеством пакетов, моделируемых в каждой точке SNR, и ограничивает продолжительность моделирования, если предел ошибок пакета не достигнут.
Выбранные в этом примере числа приведут к очень короткому моделированию. Для получения значимых результатов рекомендуется увеличить число.
maxNumErrors = 10; % The maximum number of packet errors at an SNR point maxNumPackets = 100; % Maximum number of packets at an SNR point
Для каждой точки SNR тестируется количество пакетов и вычисляется частота ошибок пакетов.
Для каждого пакета выполняются следующие шаги обработки:
PSDU создается и кодируется для создания сигнала одного пакета.
Сигнал пропускают через модель канала TGay. Различные реализации канала моделируются для различных пакетов.
AWGN добавляется к принятой форме сигнала. comm.AWGNChannel сконфигурирован для обеспечения правильного SNR.
Ухудшение смещения частоты добавляется к каждому пакету.
Пакет обнаружен.
Оценивают и корректируют смещение несущей частоты.
Устанавливается точная синхронизация по времени. Выборки поля СЕ предусмотрены для точной синхронизации, чтобы обеспечить возможность обнаружения пакетов в начале STF.
Поля STF и CE извлекаются из синхронизированного принятого сигнала. Оценка шума и канала выполняется на восстановленных полях соответственно.
Поле данных, исключая первый защитный интервал, извлекается и преобразуется в блоки. Принятые символы в поле данных выравниваются.
Принятые символы отслеживаются и корректируются на фазовые ошибки, вызванные любым остаточным смещением несущей частоты.
Поле данных декодируется для восстановления битов PSDU.
A parfor шлейф может использоваться для параллельной обработки точек SNR, поэтому для каждой точки SNR создается и конфигурируется канал 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');

Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами: maxNumErrors и maxNumPackets. Для получения значимых результатов рекомендуется, чтобы эти значения были больше значений, представленных в этом примере. Увеличение количества моделируемых пакетов позволяет сравнивать PER при различных сценариях. Попробуйте изменить значение MCS и сравнить частоту ошибок пакетов. В качестве примера приведенный ниже рисунок был создан путем выполнения примера для всех MCS с одной несущей с PSDULength: 8192 байт, maxNumErrors: 1000 и maxNumPackets: 10000.

Изучите параметры канала TGay, изменив среду (горячую точку уличного каньона или лобби большого отеля), пользовательские конфигурации, тип поляризации, конфигурации массива, метод формирования диаграммы направленности и т. д. В сценарии уличного каньона объект вычисляет детерминированные лучи до 1-порядка отражения от земли и стен. В сценарии вестибюля отеля детерминированные лучи до 2-х порядкового отражения от земли, потолка и/или стен. Благодаря дополнительному отражению лучей результаты PER обычно лучше, чем результаты, полученные из сценария открытой области.
В этом примере используются следующие вспомогательные функции и объекты:
Стандарт IEEE Std 802.11ad™-2012 IEEE для информационных технологий - Телекоммуникации и обмен информацией между системами - Локальные и городские сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (PHY). Поправка 3: Усовершенствования для очень высокой пропускной способности в диапазоне 60 ГГц.
А. Мальцев и др. al, модели каналов для IEEE 802.11ay, IEEE 802.11-15/1150r9, март 2017.