В этом примере показано, как измерить пакетный коэффициент ошибок ссылки IEEE® 802.11ac™ VHT с помощью сквозной симуляции с исчезновением, TGac образовывают канал и аддитивный белый Гауссов шум модели.
В этом примере сквозная симуляция используется, чтобы определить пакетный коэффициент ошибок для 802.11ac [1] ссылка VHT с исчезающим каналом по выбору точек ОСШ. В каждой точке ОСШ несколько пакетов передаются через канал, демодулируемый и восстановленный PSDUs. PSDUs сравниваются с переданными, чтобы определить количество пакетных ошибок и следовательно пакетного коэффициента ошибок. Пакетное обнаружение, временная синхронизация, несущая частота возместила коррекцию, и отслеживание фазы выполняются приемником. Обработка для каждого пакета получена в итоге в следующем
Этот пример также демонстрирует как parfor
цикл может использоваться вместо for
цикл при симуляции каждого ОСШ указывает, чтобы ускорить симуляцию. parfor
функция, как часть Parallel Computing Toolbox™, выполняет обработку для каждого ОСШ параллельно, чтобы уменьшать общее время симуляции.
802.11ac передача VHT симулирован в этом примере. Объект настройки формата VHT, wlanVHTConfig
, содержит специфичную для формата настройку передачи. Свойства объекта содержат настройку. В этом примере объект сконфигурирован для полосы пропускания канала на 80 МГц, 8 передающих антенн, 8 пространственно-временных потоков, никакого блочного кодирования времени пробела и 256-QAM rate-5/6 (MCS 9).
% Create a format configuration object for a 8-by-8 VHT transmission cfgVHT = wlanVHTConfig; cfgVHT.ChannelBandwidth = 'CBW80'; % 80 MHz channel bandwidth cfgVHT.NumTransmitAntennas = 8; % 8 transmit antennas cfgVHT.NumSpaceTimeStreams = 8; % 8 space-time streams cfgVHT.APEPLength = 3000; % APEP length in bytes cfgVHT.MCS = 9; % 256-QAM rate-5/6
В этом примере модель канала N-LOS TGac используется с Моделью-D профиля задержки. Для Модели-D, когда расстояние между передатчиком и приемником больше или равно 10 метрам, модель является NLOS. Это описано далее в wlanTGacChannel
. 8x8 канал MIMO симулирован в этом примере поэтому 8, получают антенны, заданы.
% Create and configure the channel tgacChannel = wlanTGacChannel; tgacChannel.DelayProfile = 'Model-D'; tgacChannel.NumReceiveAntennas = 8; tgacChannel.TransmitReceiveDistance = 10; % Distance in meters for NLOS tgacChannel.ChannelBandwidth = cfgVHT.ChannelBandwidth; tgacChannel.NumTransmitAntennas = cfgVHT.NumTransmitAntennas; tgacChannel.LargeScaleFadingEffect = 'None'; tgacChannel.NormalizeChannelOutputs = false;
Поскольку каждый ОСШ указывает в векторном snr
много пакетов генерируются, проходятся канал и демодулируются, чтобы определить пакетный коэффициент ошибок.
snr = 40:5:50;
Количеством пакетов, протестированных в каждой точке ОСШ, управляют два параметра:
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
Установите остающиеся переменные для симуляции.
% Get the baseband sampling rate fs = wlanSampleRate(cfgVHT); % Get the OFDM info ofdmInfo = wlanVHTOFDMInfo('VHT-Data',cfgVHT); % Set the sampling rate of the channel tgacChannel.SampleRate = fs; % Indices for accessing each field within the time-domain packet ind = wlanFieldIndices(cfgVHT);
Поскольку каждый ОСШ указывает, что много пакетов тестируются и пакетный вычисленный коэффициент ошибок.
Для каждого пакета происходят выполняющие шаги обработки:
PSDU создается и кодируется, чтобы создать одну пакетную форму волны.
Форма волны передается посредством различной реализации модели канала TGac.
AWGN добавляется к принятой форме волны, чтобы создать желаемый средний ОСШ на активную поднесущую после демодуляции OFDM.
Пакет обнаруживается.
Крупное смещение несущей частоты оценивается и корректируется.
Прекрасная временная синхронизация устанавливается. L-STF, L-LTF и выборки L-SIG обеспечиваются для прекрасной синхронизации, чтобы допускать пакетное обнаружение в запуске или конце L-STF.
Прекрасное смещение несущей частоты оценивается и корректируется.
VHT-LTF извлечен из синхронизируемой принятой формы волны. VHT-LTF является демодулируемым OFDM, и оценка канала выполняется.
Поле данных VHT извлечено из синхронизируемой принятой формы волны. PSDU восстанавливается с помощью извлеченного поля и оценки канала.
parfor
цикл может использоваться, чтобы параллелизировать обработку точек ОСШ. Чтобы включить использование параллельных вычислений для увеличенной скорости комментируют for
оператор и некомментарий parfor
оператор ниже.
S = numel(snr); packetErrorRate = zeros(S,1); %parfor i = 1:S % Use 'parfor' to speed up the simulation for i = 1:S % 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 = i; RandStream.setGlobalStream(stream); % Account for noise energy in nulls so the SNR is defined per % active subcarrier packetSNR = snr(i)-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],cfgVHT.PSDULength*8,1); % PSDULength in bytes tx = wlanWaveformGenerator(txPSDU,cfgVHT); % Add trailing zeros to allow for channel delay tx = [tx; zeros(50,cfgVHT.NumTransmitAntennas)]; %#ok<AGROW> % Pass the waveform through the fading channel model reset(tgacChannel); % Reset channel for different realization rx = tgacChannel(tx); % Add noise rx = awgn(rx,packetSNR); % Packet detect and determine coarse packet offset coarsePktOffset = wlanPacketDetect(rx,cfgVHT.ChannelBandwidth); if isempty(coarsePktOffset) % If empty no L-STF detected; packet error numPacketErrors = numPacketErrors+1; numPkt = numPkt+1; continue; % Go to next loop iteration end % Extract L-STF and perform coarse frequency offset correction lstf = rx(coarsePktOffset+(ind.LSTF(1):ind.LSTF(2)),:); coarseFreqOff = wlanCoarseCFOEstimate(lstf,cfgVHT.ChannelBandwidth); rx = helperFrequencyOffset(rx,fs,-coarseFreqOff); % Extract the non-HT fields and determine fine packet offset nonhtfields = rx(coarsePktOffset+(ind.LSTF(1):ind.LSIG(2)),:); finePktOffset = wlanSymbolTimingEstimate(nonhtfields,... cfgVHT.ChannelBandwidth); % Determine final packet offset pktOffset = coarsePktOffset+finePktOffset; % If packet detected outwith the range of expected delays from the % channel modeling; packet error if pktOffset>50 numPacketErrors = numPacketErrors+1; numPkt = numPkt+1; continue; % Go to next loop iteration end % Extract L-LTF and perform fine frequency offset correction lltf = rx(pktOffset+(ind.LLTF(1):ind.LLTF(2)),:); fineFreqOff = wlanFineCFOEstimate(lltf,cfgVHT.ChannelBandwidth); rx = helperFrequencyOffset(rx,fs,-fineFreqOff); % Extract VHT-LTF samples from the waveform, demodulate and perform % channel estimation vhtltf = rx(pktOffset+(ind.VHTLTF(1):ind.VHTLTF(2)),:); vhtltfDemod = wlanVHTLTFDemodulate(vhtltf,cfgVHT); % Get single stream channel estimate chanEstSSPilots = vhtSingleStreamChannelEstimate(vhtltfDemod,cfgVHT); % Channel estimate chanEst = wlanVHTLTFChannelEstimate(vhtltfDemod,cfgVHT); % Extract VHT Data samples from the waveform vhtdata = rx(pktOffset+(ind.VHTData(1):ind.VHTData(2)),:); % Estimate the noise power in VHT data field nVarVHT = vhtNoiseEstimate(vhtdata,chanEstSSPilots,cfgVHT); % Recover the transmitted PSDU in VHT Data rxPSDU = wlanVHTDataRecover(vhtdata,chanEst,nVarVHT,cfgVHT); % 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(i) = numPacketErrors/(numPkt-1); disp(['SNR ' num2str(snr(i)) ' completed after ' ... num2str(numPkt-1) ' packets, PER: ' ... num2str(packetErrorRate(i))]); end
SNR 40 completed after 11 packets, PER: 1 SNR 45 completed after 15 packets, PER: 0.73333 SNR 50 completed after 100 packets, PER: 0.04
figure semilogy(snr,packetErrorRate,'-ob'); grid on; xlabel('SNR (dB)'); ylabel('PER'); title('802.11ac 80MHz, MCS9, Direct Mapping, 8x8 Channel Model D-NLOS');
Количеством пакетов, протестированных в каждой точке ОСШ, управляют два параметра; maxNumErrors
и maxNumPackets
. Для значимых результатов это, рекомендуют, чтобы эти значения были больше, чем представленные в этом примере. Увеличение числа симулированных пакетов позволяет PER согласно различным сценариям быть сравненным. Попытайтесь изменить передачу и настройки приема и сравните пакетный коэффициент ошибок. Как пример, рисунок ниже был создан путем выполнения примера для maxNumErrors
: 1000 и maxNumPackets
: 10000.
Этот пример использует следующие функции помощника:
Станд. IEEE 802.11ac™-2013 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования - Поправка 4: Улучшения для Очень Высокой Пропускной способности для Операции в Полосах ниже 6 ГГц.