В этом примере показано, как измерить пакетный коэффициент ошибок ссылки IEEE® 802.11ad™ DMG OFDM PHY с помощью сквозной симуляции с каналом AWGN.
В этом примере сквозная симуляция используется, чтобы определить пакетный коэффициент ошибок для 802.11ad ссылка DMG [1] OFDM с каналом AWGN по выбору точек ОСШ для заданной схемы модуляции и кодирования (MCS). Для каждой точки ОСШ несколько пакетов передаются через канал, демодулируемый и восстановленный PSDUs. PSDUs сравниваются с переданными, чтобы определить количество пакетных ошибок и следовательно пакетного коэффициента ошибок. Совершенная синхронизация времени и частоты принята в этом примере. Следующая схема обобщает обработку для каждого пакета.
Этот пример также демонстрирует, как ускоряют симуляции при помощи parfor
цикл вместо for
цикл при симуляции каждой точки ОСШ. parfor
функция, как часть Parallel Computing Toolbox™, выполняет обработку для каждого ОСШ параллельно, чтобы уменьшать общее время симуляции.
802.11ad передача DMG OFDM симулирована в этом примере. Объект настройки формата DMG, wlanDMGConfig
, содержит формат определенная настройка передачи. Свойства объекта содержат настройку. В этом примере объект сконфигурирован для передачи OFDM с MCS 21 и 8 192-байтовым 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; % The 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.
DMG-поле-данных извлечено из отлично синхронизируемой принятой формы волны и демодулируемого OFDM.
Пилоты отбрасываются, и демодулируемые символы остающегося OFDM компенсируются с помощью известного ответа канала. Когда ссылка AWGN используется в этом примере, комплексное усиление канала принято, чтобы быть один для каждой поднесущей.
PSDU восстанавливается с компенсируемых символов данных.
parfor
цикл может использоваться, чтобы параллелизировать обработку точек ОСШ. Чтобы использовать параллельные вычисления для увеличенной скорости, закомментируйте 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); % Account for noise energy in nulls so the SNR is defined per % active subcarrier packetSNR = 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 = awgn(tx,packetSNR); % 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 802.11ad™-2012 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования. Поправка 3: Улучшения для Очень Высокой Пропускной способности в Полосе на 60 ГГц.