В этом примере показано, как измериться, пакетный коэффициент ошибок IEEE® 802.11ad™ DMG управляют ссылкой PHY AWGN с помощью сквозной симуляции.
В этом примере сквозная симуляция используется, чтобы определить пакетный коэффициент ошибок для 802.11ad [1] управление ссылка PHY с каналом AWGN по выбору точек ОСШ. В каждой точке ОСШ несколько пакетов передаются через шумный канал, de-распространение и восстановленный PSDUs. PSDUs сравниваются с переданными, чтобы определить количество пакетных ошибок и следовательно пакетного коэффициента ошибок. Получатель принимает совершенную синхронизацию при восстановлении битов данных с полученного сигнала. Следующая схема обобщает обработку для каждого пакета.
Этот пример также демонстрирует, как цикл parfor может использоваться вместо цикла for, когда симуляция каждого ОСШ указывает, чтобы ускорить симуляцию. parfor, как часть Parallel Computing Toolbox™, выполняет обработку для каждого ОСШ параллельно, чтобы уменьшать общее время симуляции.
802.11ad передача управления DMG PHY симулирована в этом примере. Объект настройки формата 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
Спектральная фильтрация используется, чтобы сократить внеполосные спектральные выбросы из-за характеристик спектра распространения переданной формы волны. В этом примере в форму волны проникают повышенный фильтр косинуса и в передатчике и в получателе с помощью коммуникации. RaisedCosineTransmitFilter и коммуникация. 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 добавляется к форме волны. коммуникация. AWGNChannel сконфигурирован, чтобы обеспечить правильный ОСШ прежде despreading.
Пакет получен с совершенной синхронизацией.
Заголовок и поля данных извлечены из полученной формы волны и обрабатываются вместе.
Восстановленное поле является de-rotated пи/2 и является de-распространением.
PSDU восстанавливается с извлеченного поля.
Цикл parfor может использоваться, чтобы параллелизировать обработку точек ОСШ, поэтому для каждой точки ОСШ, что канал AWGN создается и конфигурируется с коммуникацией. AWGNChannel. Чтобы включить использование параллельных вычислений для увеличенной скорости комментируют для оператора и не комментируют 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 802.11ad™-2012 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования. Поправка 3: Улучшения для Очень Высокой Пропускной способности в Полосе на 60 ГГц.
Следующая локальная функция используется в этом примере:
dmgControlDespread
: De-распространение получить сигнал
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