В этом примере показано, как измерить частоту ошибок пакета канала IEEE ® 802.11ad™ DMG управления PHY AWGN с помощью сквозной симуляции.
В этом примере сквозная симуляция используется, чтобы определить частоту ошибок пакета для ссылки PHY управления 802.11ad [1] с каналом AWGN при выборе точек ОСШ. В каждой точке ОСШ несколько пакетов передаются через шумный канал, без расширения и PSDU восстанавливаются. Блоки PSDU сравнивают с переданными для определения количества ошибок пакета и, следовательно, частоты ошибок пакета. Приемник принимает идеальную синхронизацию при восстановлении бит данных из принятого сигнала. Следующая схема суммирует обработку для каждого пакета.
Этот пример также демонстрирует, как parfor
цикл может использоваться вместо for
цикл при симуляции каждой точки ОСШ для ускорения симуляции. The parfor
функция, как часть Toolbox™ Parallel Computing, выполняет обработку для каждого ОСШ параллельно, чтобы уменьшить общее время симуляции.
В этом примере моделируется 802.11ad передача PHY управления DMG. Объект строения формата DMG, wlanDMGConfig
, содержит специфичную для формата строение передачи. Свойства объекта содержат строение переданного пакета. В этом примере объект сконфигурирован, чтобы сгенерировать сигнал PHY управления. MCS определяет используемый тип PHY, поэтому MCS должна быть установлена на 0, чтобы использовать управление PHY.
% Create a format configuration object cfgDMG = wlanDMGConfig; cfgDMG.MCS = 0; % MCS 0 represents Control PHY cfgDMG.PSDULength = 256; % PSDULength in bytes
Спектральная фильтрация используется для уменьшения внеполосных спектральных выбросов из-за характеристик расширенного спектра передаваемой формы волны. В этом примере форма волны фильтруется через фильтр приподнятого косинуса как в передатчике, так и в приемнике, используя comm.RaisedCosineTransmitFilter
и comm.RaisedCosineReceiveFilter
объекты, соответственно. Чтобы удовлетворить требованиям спектральной маски, фильтр приподнятого косинуса обрезается до длительности восьми символов, и коэффициент отката устанавливается равным 0,5.
% Define the pulse shaping filter characteristics pulseShaping = true; % Enable pulse shaping Nsym = 8; % Filter span in symbol durations alpha = 0.5; % Roll-off factor osps = 4; % Output samples per symbol % Transmit pulse shaping filter txFilter = comm.RaisedCosineTransmitFilter; txFilter.RolloffFactor = alpha; txFilter.FilterSpanInSymbols = Nsym; txFilter.OutputSamplesPerSymbol = osps; txFilter.Shape = 'Normal'; % Receive pulse shaping filter rxFilter = comm.RaisedCosineReceiveFilter; rxFilter.RolloffFactor = alpha; rxFilter.DecimationFactor = osps; rxFilter.InputSamplesPerSymbol = osps; rxFilter.FilterSpanInSymbols = Nsym; rxFilter.Shape = 'Normal';
Для каждой точки ОСШ в вектор snrVec
генерируют несколько пакетов, передают через канал AWGN и демодулируют, чтобы определить частоту ошибок пакета.
snrVec = -13.5:0.5:-10.5;
Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами:
maxNumErrors
- максимальное количество ошибок пакета, моделируемых в каждой точке ОСШ. Когда количество ошибок пакета достигает этого предела, симуляция в этой точке ОСШ завершена.
maxNumPackets
является максимальным количеством пакетов, моделируемых в каждой точке ОСШ, и ограничивает длину симуляции, если предел ошибки пакета не достигнут.
Числа, выбранные в этом примере, приведут к очень короткой симуляции. Для значимых результатов мы рекомендуем увеличить эти цифры.
maxNumErrors = 10; % The maximum number of packet errors at an SNR point maxNumPackets = 100; % Maximum number of packets at an SNR point
Для каждой точки ОСШ проверяется количество пакетов и вычисляется вероятность ошибки пакета.
Для каждого пакета выполняются следующие шаги обработки:
PSDU создается и кодируется, чтобы создать одну форму волны пакета.
AWGN добавляется к форме волны. The comm.AWGNChannel
объект сконфигурирован для предоставления правильного ОСШ перед сжатием.
Пакет принимается с идеальной синхронизацией.
Заголовок и поля данных извлекаются из принятой формы волны и обрабатываются вместе.
Восстановленное поле отменяется вращением pi/2 и уменьшается.
Блок PSDU извлекается из извлеченного поля.
A parfor
цикл может использоваться для параллелизации обработки точек ОСШ, поэтому для каждой точки ОСШ создается и конфигурируется канал AWGN с comm.AWGNChannel
объект. Чтобы включить использование параллельных вычислений для повышения скорости, закомментируйте for
оператор и разъединение parfor
оператор ниже.
numSNR = numel(snrVec); % Number of SNR points packetErrorRate = zeros(numSNR,1); indices = wlanFieldIndices(cfgDMG); if ~strcmp(phyType(cfgDMG),'Control') error('This example only supports DMG Control PHY simulation'); end %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.SNR = snrVec(isnr); % Noise power nVar = 10^(-snrVec(isnr)/10); numPacketErrors = 0; numPkt = 1; % Index of packet transmitted while numPacketErrors<=maxNumErrors && numPkt<=maxNumPackets % Generate a packet waveform psdu = randi([0 1],cfgDMG.PSDULength*8,1); % PSDULength in bytes tx = wlanWaveformGenerator(psdu,cfgDMG); % Transmitter filtering if pulseShaping % Append zero to compensate for filter group delay tx = txFilter([tx; zeros(Nsym,1)]); reset(txFilter); end % Add noise rx = awgnChannel(tx); % Receiver filtering if pulseShaping rx = rxFilter(rx); reset(rxFilter); end % Synchronize % The received signal is synchronized to the start of the packet by % compensating for a known delay due the spectral shaping filters if pulseShaping offset = Nsym; else offset = 0; %#ok<UNRCH> end % Process header and data field together rxHeaderDataField = rx(offset+(indices.DMGHeader(1):indices.DMGData(2))); % Apply pi/2 de-rotation and de-spread the received signal [rxSym,SF] = dmgControlDespread(rxHeaderDataField); % Recover the transmitted PSDU from DMG Data field. Scale the noise % power by the spreading factor dataDecode = wlanDMGDataBitRecover(rxSym,nVar/SF,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(isnr) = numPacketErrors/(numPkt-1); disp(['SNR ' num2str(snrVec(isnr))... ' completed after ' num2str(numPkt-1) ' packets,'... ' PER: ' num2str(packetErrorRate(isnr))]); end
figure; semilogy(snrVec,packetErrorRate,'-o'); grid on; xlabel('SNR (dB)'); ylabel('PER'); legend('MCS 0'); title('PER for DMG Control-PHY, AWGN channel');
Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами: maxNumErrors
и maxNumPackets
. Для значимых результатов рекомендуется, чтобы эти значения были больше, чем те, которые представлены в этом примере. Увеличение количества моделируемых пакетов позволяет сравнивать PER в различных сценариях. Как пример, рисунок ниже был создан путем запуска примера для PSDULength
256 байт, maxNumErrors
: 1000 и maxNumPackets
: 100000.
Стандарт IEEE Std 802.11ad™-2012 IEEE на информационные технологии - Телекоммуникации и обмен информацией между системами - Локальные и столичные сети - Особые требования - Часть 11: Беспроводное управление доступом к среде локальной сети (MAC) и физический слой (PHY) Спецификации. Поправка 3: Улучшения для очень высокой пропускной способности в полосе 60 ГГц.
В этом примере используется следующая локальная функция:
dmgControlDespread
: Отменить распространение сигнала приема
function [y,SF] = dmgControlDespread(rx) SF = 32; % Spreading factor dataField = rx.*exp(-1i*pi/2*(0:size(rx,1)-1).'); % De-rotate symbols Ga = wlanGolaySequence(SF); % Generate Golay sequence y = (reshape(dataField,SF,length(dataField)/SF)'*Ga)/SF; end
SNR -13.5 completed after 11 packets, PER: 1 SNR -13 completed after 12 packets, PER: 0.91667 SNR -12.5 completed after 53 packets, PER: 0.20755 SNR -12 completed after 100 packets, PER: 0.04 SNR -11.5 completed after 100 packets, PER: 0 SNR -11 completed after 100 packets, PER: 0 SNR -10.5 completed after 100 packets, PER: 0