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