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

В этом примере также показано, как parfor может использоваться вместо for цикл при моделировании каждой точки SNR для ускорения моделирования. parfor функция, как часть Toolbox™ параллельных вычислений, выполняет обработку для каждого SNR параллельно, чтобы уменьшить общее время моделирования.
В этом примере моделируется передача PHY управления DMG 802.11ad. Объект конфигурации формата DMG, wlanDMGConfig, содержит специфичную для формата конфигурацию передачи. Свойства объекта содержат конфигурацию передаваемого пакета. В этом примере объект сконфигурирован для генерации управляющего сигнала PHY. MCS определяет используемый тип PHY, поэтому для использования управляющего PHY для MCS необходимо установить значение 0.
% 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';
Для каждой точки SNR в векторе snrVec генерируют, пропускают через канал AWGN и демодулируют для определения частоты ошибок пакета.
snrVec = -13.5:0.5:-10.5;
Количество пакетов, протестированных в каждой точке 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
Для каждой точки SNR тестируется количество пакетов и вычисляется частота ошибок пакетов.
Для каждого пакета выполняются следующие шаги обработки:
PSDU создается и кодируется для создания сигнала одного пакета.
AWGN добавляется к форме сигнала. comm.AWGNChannel объект сконфигурирован для обеспечения правильного SNR перед сжатием.
Пакет принимается с идеальной синхронизацией.
Поля заголовка и данных извлекаются из принятого сигнала и обрабатываются вместе.
Восстановленное поле девращается на pi/2 и дерасширенно.
PSDU восстанавливается из извлеченного поля.
A parfor шлейф может использоваться для параллельной обработки точек SNR, поэтому для каждой точки SNR создается и конфигурируется канал 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');

Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами: 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