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

Этот пример также демонстрирует, как ускорить симуляции с помощью parfor цикл вместо for цикл при симуляции каждой точки ОСШ. The parfor функция, как часть Toolbox™ Parallel Computing, выполняет обработку для каждого ОСШ параллельно, чтобы уменьшить общее время симуляции.
В этом примере моделируется передача OFDM 802.11ad DMG. Объект строения формата 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
Для каждой точки ОСШ генерируется количество пакетов, которые передаются через канал и демодулируются для определения частоты ошибок пакета. Точки ОСШ для моделирования выбираются из snrRanges на основе MCS для моделирования. Область значений ОСШ для каждого MCS выбирается в порядок, чтобы моделировать переход от всех пакетов, декодируемых с ошибкой, ко всем пакетам, которые декодируются успешно, когда ОСШ увеличивается.
% 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 };
Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами:
maxNumErrors - максимальное количество ошибок пакета, моделируемых в каждой точке ОСШ. Когда количество ошибок пакета достигает этого предела, симуляция в этой точке ОСШ завершена.
maxNumPackets является максимальным количеством пакетов, моделируемых в каждой точке ОСШ, и ограничивает длину симуляции, если предел ошибки пакета не достигнут.
Числа, выбранные в этом примере, приведут к очень короткой симуляции. Для значимых результатов мы рекомендуем увеличить эти цифры.
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
Для каждой точки ОСШ проверяется количество пакетов и вычисляется вероятность ошибки пакета.
Для каждого пакета выполняются следующие шаги обработки:
PSDU создается и кодируется, чтобы создать одну форму волны пакета.
AWGN добавляют к форме волны, чтобы создать желаемый средний ОСШ на поднесущую после демодуляции OFDM. The comm.AWGNChannel объект сконфигурирован для предоставления правильного ОСШ. Строение учитывает энергию шума в неиспользованных поднесущих, которые удаляются во время демодуляции OFDM.
Поле DMG-Data извлекается из полностью синхронизированной принятой формы волны и демодулированного OFDM.
Пилот-сигналы отбрасываются, и оставшиеся демодулированные OFDM символы выравниваются с использованием известного отклика канала. Когда в этом примере используется ссылка AWGN, коэффициент усиления комплексного канала принимается равным единице для каждой поднесущей.
Блок PSDU восстанавливается из уравненных символов данных.
A parfor цикл может использоваться для параллелизации обработки точек ОСШ, поэтому для каждой точки ОСШ создается и конфигурируется канал 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');

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

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