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

В этом примере также показано, как ускорить моделирование с помощью parfor цикл вместо for шлейф при моделировании каждой точки SNR. parfor функция, как часть Toolbox™ параллельных вычислений, выполняет обработку для каждого SNR параллельно, чтобы уменьшить общее время моделирования.
В этом примере моделируется передача OFDM DMG 802.11ad. Объект конфигурации формата DMG, wlanDMGConfig, содержит специфичную для формата конфигурацию передачи. Свойства объекта содержат конфигурацию. В этом примере объект сконфигурирован для передачи OFDM с MCS 21 и 8192 байтовым PSDU. Если mcs задается как вектор, моделирование выполняется для каждого элемента MCS. MCS определяет используемый тип PHY, поэтому MCS должен находиться в диапазоне 13-24, чтобы использовать OFDM PHY.
% Create a format configuration object for a DMG OFDM transmission cfgDMG = wlanDMGConfig; cfgDMG.PSDULength = 8192; % bytes % For DMG OFDM PHY, the valid range of MCS is 13-24(inclusive) mcs = 21; % OFDM PHY, 16QAM, rate 13/16
Для каждой точки SNR генерируется количество пакетов, которые передаются по каналу и демодулируются для определения частоты ошибок пакета. Точки SNR для моделирования выбираются из snrRanges на основе имитируемой MCS. Диапазон SNR для каждого MCS выбирается для того, чтобы смоделировать переход от всех пакетов, декодируемых с ошибкой, ко всем пакетам, декодируемым успешно по мере увеличения SNR.
% SNR ranges to use for AWGN snrRanges = {... -1:0.5:1.5, ... % MCS 13 0:0.5:2.5, ... % MCS 14 1.5:0.5:4, ... % MCS 15 3:0.5:5.5, ... % MCS 16 4.5:0.5:7, ... % MCS 17 7.5:0.5:10, ... % MCS 18 9:0.5:11.5, ... % MCS 19 10.5:0.5:13, ... % MCS 20 12:0.5:14.5, ... % MCS 21 14.5:0.5:17, ... % MCS 22 16.5:0.5:19, ... % MCS 23 17.5:0.5:20, ... % MCS 24 };
Количество пакетов, протестированных в каждой точке 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
Задайте остальные переменные для моделирования.
% OFDM information ofdmInfo = wlanDMGOFDMInfo(); % Indices of data and pilot occupied subcarriers cfgDMG.MCS = mcs(1); % Set OFDM MCS to get subcarrier indices Nsd = numel(ofdmInfo.DataIndices); % Number of data carrying subcarriers
Для каждой точки SNR тестируется количество пакетов и вычисляется частота ошибок пакетов.
Для каждого пакета выполняются следующие шаги обработки:
PSDU создается и кодируется для создания сигнала одного пакета.
AWGN добавляется к форме сигнала для создания требуемого среднего SNR на поднесущую после демодуляции OFDM. comm.AWGNChannel объект сконфигурирован для обеспечения правильного SNR. Конфигурация учитывает энергию шума в неиспользуемых поднесущих, которые удаляются во время демодуляции OFDM.
Поле DMG-Data извлекается из идеально синхронизированного принятого сигнала и демодулируется OFDM.
Пилот-сигналы отбрасываются, а остальные демодулированные символы OFDM выравниваются с использованием известного отклика канала. Поскольку в этом примере используется линия связи AWGN, предполагается, что комплексный коэффициент усиления канала равен единице для каждой поднесущей.
PSDU восстанавливается из выровненных символов данных.
A parfor шлейф может использоваться для параллельной обработки точек SNR, поэтому для каждой точки SNR создается и конфигурируется канал AWGN с помощью comm.AWGNChannel объект. Чтобы использовать параллельные вычисления для увеличения скорости, прокомментируйте for заявление и раскомментировать parfor оператор в этом коде.
numSNR = numel(snrRanges{1}); % Number of SNR points
numMCS = numel(mcs); % Number of MCS
packetErrorRate = zeros(numMCS,numSNR);
for imcs = 1:numMCS
cfgDMG.MCS = mcs(imcs);
if ~strcmp(phyType(cfgDMG),'OFDM')
error('This example only supports DMG OFDM PHY simulation');
end
% Indices of fields within the packet
fieldIndices = wlanFieldIndices(cfgDMG);
% SNR points to simulate from MCS
snr = snrRanges{cfgDMG.MCS-12};
%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',0);
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.SignalPower = 1;
% Account for noise energy in nulls so the SNR is defined per
% active subcarrier
awgnChannel.SNR = snr(isnr)-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);
% Loop to simulate multiple packets
numPacketErrors = 0;
numPkt = 1; % Index of packet transmitted
while numPacketErrors<=maxNumErrors && numPkt<=maxNumPackets
% Generate a packet waveform
txPSDU = randi([0 1],cfgDMG.PSDULength*8,1); % PSDULength in bytes
tx = wlanWaveformGenerator(txPSDU,cfgDMG);
% Pass the waveform through AWGN channel model
rx = awgnChannel(tx);
% Extract data field
rxData = rx(fieldIndices.DMGData(1):fieldIndices.DMGData(2));
% OFDM demodulate
demodSym = wlanDMGOFDMDemodulate(rxData);
dataSym = demodSym(ofdmInfo.DataIndices,:); % Discard pilots
% Equalize
chanSym = ones(Nsd,1); % Set channel gains to 1 as AWGN channel
nVar = 10^(-snr(isnr)/10); % Noise variance
[eqSym,csi] = helperSymbolEqualize(dataSym,chanSym,nVar);
% Recover data
rxPSDU = wlanDMGDataBitRecover(eqSym,nVar,csi,cfgDMG);
% 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 SNR point
packetErrorRate(imcs,isnr) = numPacketErrors/(numPkt-1);
disp(['MCS ' num2str(mcs(imcs)) ','...
' SNR ' num2str(snr(isnr)) ...
' completed after ' num2str(numPkt-1) ' packets,'...
' PER:' num2str(packetErrorRate(imcs,isnr))]);
end
end
MCS 21, SNR 12 completed after 11 packets, PER:1 MCS 21, SNR 12.5 completed after 12 packets, PER:0.91667 MCS 21, SNR 13 completed after 71 packets, PER:0.15493 MCS 21, SNR 13.5 completed after 100 packets, PER:0.02 MCS 21, SNR 14 completed after 100 packets, PER:0 MCS 21, SNR 14.5 completed after 100 packets, PER:0
markers = 'ox*sd^v><ph+'; color = 'bmcrgbrkymcr'; figure; for imcs = 1:numMCS semilogy(snrRanges{mcs(imcs)-12},packetErrorRate(imcs,:).',['-' markers(imcs) color(imcs)]); hold on; end grid on; xlabel('SNR (dB)'); ylabel('PER'); dataStr = arrayfun(@(x)sprintf('MCS %d',x),mcs,'UniformOutput',false); legend(dataStr); title('PER for DMG OFDM-PHY with AWGN channel');

Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами: maxNumErrors и maxNumPackets. Для получения значимых результатов эти значения должны быть больше значений, представленных в этом примере. Увеличение количества моделируемых пакетов позволяет сравнивать PER при различных сценариях. В качестве примера приведенный ниже рисунок был создан путем более длительного выполнения примера с maxNumErrors = 1e3 и maxNumPackets = 1e4, для mcs = 13:24.

В этом примере используется следующая вспомогательная функция:
Стандарт IEEE Std 802.11ad™-2012 IEEE для информационных технологий - Телекоммуникации и обмен информацией между системами - Локальные и городские сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (PHY). Поправка 3: Усовершенствования для очень высокой пропускной способности в диапазоне 60 ГГц.