В этом примере показано, как измерить частоту ошибок пакетов канала IEEE ® 802.11ac™ VHT с помощью сквозного моделирования с использованием модели канала TGac с замиранием и аддитивного белого гауссова шума.
В этом примере сквозное моделирование используется для определения частоты ошибок пакетов для линии связи 802.11ac [1] VHT с каналом замирания в выбранных точках SNR. В каждой точке SNR несколько пакетов передаются через канал, демодулируются и PSDU восстанавливаются. Блоки PSDU сравниваются с переданными блоками для определения количества ошибок пакета и, следовательно, частоты ошибок пакета. Обнаружение пакетов, синхронизация синхронизации, коррекция смещения несущей частоты и отслеживание фазы выполняются приемником. Обработка для каждого пакета сводится к следующему

В этом примере также показано, как parfor может использоваться вместо for цикл при моделировании каждой точки SNR для ускорения моделирования. parfor функция, как часть Toolbox™ параллельных вычислений, выполняет обработку для каждого SNR параллельно, чтобы уменьшить общее время моделирования.
В этом примере моделируется передача VHT 802.11ac. Объект конфигурации формата VHT, wlanVHTConfig, содержит специфичную для формата конфигурацию передачи. Свойства объекта содержат конфигурацию. В этом примере объект конфигурируется для полосы пропускания канала 80 МГц, 8 передающих антенн, 8 пространственно-временных потоков, без пространственно-временного блочного кодирования и скорости передачи 256-QAM-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 с профилем задержки Model-D. Для модели-D, когда расстояние между передатчиком и приемником больше или равно 10 метрам, используется модель NLOS. Это описано далее в wlanTGacChannel. В этом примере моделируется канал MIMO 8x8, поэтому задаются 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';
Для каждой точки SNR в векторе snr генерируют, пропускают через канал и демодулируют несколько пакетов для определения частоты ошибок пакетов.
snr = 40:5:50;
Количество пакетов, протестированных в каждой точке 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
Задайте остальные переменные для моделирования.
% 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);
Для каждой точки SNR тестируется количество пакетов и вычисляется частота ошибок пакетов.
Для каждого пакета выполняются следующие шаги обработки:
PSDU создается и кодируется для создания сигнала одного пакета.
Сигнал пропускается через другую реализацию модели канала TGac.
AWGN добавляется к принятой форме сигнала для создания требуемого среднего SNR на поднесущую после демодуляции OFDM. comm.AWGNChannel объект сконфигурирован для обеспечения правильного SNR. Конфигурация учитывает нормализацию в канале по количеству приемных антенн и энергии шума в неиспользуемых поднесущих, которые удаляются во время демодуляции OFDM.
Пакет обнаружен.
Грубый сдвиг несущей частоты оценивается и корректируется.
Устанавливается точная синхронизация по времени. Выборки L-STF, L-LTF и L-SIG предусмотрены для точной синхронизации, чтобы обеспечить возможность обнаружения пакетов в начале или конце L-STF.
Оценивают и корректируют точный сдвиг несущей частоты.
VHT-LTF извлекается из синхронизированного принятого сигнала. VHT-LTF демодулируется OFDM и выполняется оценка канала.
Поле VHT Data извлекается из синхронизированного принятого сигнала. PSDU восстанавливается с использованием выделенного поля и оценки канала.
A parfor шлейф может использоваться для параллельной обработки точек SNR, поэтому для каждой точки SNR создается и конфигурируется канал AWGN с помощью comm.AWGNChannel объект. Чтобы разрешить использование параллельных вычислений для увеличения скорости комментирования 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); % Create an instance of the AWGN channel per SNR point simulated awgnChannel = comm.AWGNChannel; awgnChannel.NoiseMethod = 'Signal to noise ratio (SNR)'; % Normalization awgnChannel.SignalPower = 1/tgacChannel.NumReceiveAntennas; % Account for energy in nulls awgnChannel.SNR = 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 = awgnChannel(rx); % 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');

Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами: maxNumErrors и maxNumPackets. Для получения значимых результатов рекомендуется, чтобы эти значения были больше значений, представленных в этом примере. Увеличение количества моделируемых пакетов позволяет сравнивать PER при различных сценариях. Попробуйте изменить конфигурации передачи и приема и сравнить частоту ошибок пакетов. В качестве примера приведенный ниже рисунок был создан путем выполнения примера для maxNumErrors: 1000 и maxNumPackets: 10000.

В этом примере используются следующие вспомогательные функции:
Стандарт IEEE Std 802.11ac™-2013 IEEE для информационных технологий - Связь и обмен информацией между системами - Локальные и городские сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (PHY) - Поправка 4: Улучшения для очень высокой пропускной способности для работы в диапазонах ниже 6 GY