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

В этом примере моделируется формат S1G-Short без коррекции ухудшения, кроме оценки и выравнивания канала. Принятый сигнал синхронизируется с началом пакета путем компенсации известной задержки и смещения выборки символа демодуляции OFDM по умолчанию. Частотная синхронизация не выполняется. Для получения информации о том, как автоматически обнаруживать и синхронизировать принятый сигнал, см. следующие примеры для 802.11n™ и 802.11ac™.
В этом примере также показано, как parfor может использоваться вместо for цикл при моделировании каждой точки SNR для ускорения моделирования. parfor в рамках Toolbox™ параллельных вычислений выполняет обработку для каждого SNR параллельно, чтобы уменьшить общее время моделирования.
В этом примере моделируется однопользовательская передача S1G короткой преамбулы 802.11ah. Объект конфигурации формата S1G содержит специфичную для формата конфигурацию передачи. Объект создается с помощью wlanS1GConfig функция. Свойства объекта содержат конфигурацию. В этом примере объект настроен для пропускной способности канала на 2 МГц, короткой преамбулы, 2 передают антенны, 2 пространственно-временных потока, 256-байтовый полезный груз, и 64-QAM rate-5/6 (МГЦ 7).
% Create S1G configuration object for single user S1G short preamble % transmission with 2 transmit antennas and 2 space-time streams cfgS1G = wlanS1GConfig; cfgS1G.ChannelBandwidth = 'CBW2'; % 2 MHz channel bandwidth cfgS1G.Preamble = 'Short'; % Short preamble cfgS1G.NumTransmitAntennas = 2; % 2 transmit antennas cfgS1G.NumSpaceTimeStreams = 2; % 2 space-time streams cfgS1G.APEPLength = 256; % APEP length in bytes cfgS1G.MCS = 7; % 64-QAM rate-5/6
В этом примере модель внутреннего канала TGah N-LOS используется с профилем задержки Model-B. Для Model-B, когда расстояние между передатчиком и приемником больше или равно 5 метрам, моделью является NLOS. Это описано далее в wlanTGahChannel. В этом примере моделируется канал 2x2 MIMO, поэтому задаются 2 приемные антенны.
% Create and configure the TGah channel tgahChannel = wlanTGahChannel; tgahChannel.DelayProfile = 'Model-B'; tgahChannel.NumTransmitAntennas = cfgS1G.NumTransmitAntennas; tgahChannel.NumReceiveAntennas = 2; tgahChannel.TransmitReceiveDistance = 5; % Distance in meters for NLOS tgahChannel.ChannelBandwidth = cfgS1G.ChannelBandwidth; tgahChannel.LargeScaleFadingEffect = 'None';
Для каждой точки SNR в векторе snr генерируют, пропускают через канал и демодулируют несколько пакетов для определения частоты ошибок пакетов.
snr = 25:10:45;
Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами:
maxNumErrors - максимальное количество ошибок пакетов, моделируемых в каждой точке SNR. Когда количество ошибок пакетов достигает этого предела, моделирование в этой точке SNR завершается.
maxNumPackets является максимальным количеством пакетов, моделируемых в каждой точке SNR, и ограничивает продолжительность моделирования, если предел ошибок пакета не достигнут.
Выбранные в этом примере числа приведут к очень короткому моделированию. Для получения значимых результатов рекомендуется увеличить число.
maxNumErrors = 1e2; % The maximum number of packet errors at an SNR point maxNumPackets = 1e3; % Maximum number of packets at an SNR point
Задайте остальные переменные для моделирования.
% Indices for accessing each field within the time-domain packet fieldInd = wlanFieldIndices(cfgS1G); % OFDM information ofdmInfo = wlanS1GOFDMInfo('S1G-Data',cfgS1G); % Set the sampling rate of the channel tgahChannel.SampleRate = wlanSampleRate(cfgS1G); if ~strcmp(packetFormat(cfgS1G),'S1G-Short') error('This example only supports the S1G-Short packet format'); end
Для каждой точки SNR тестируется количество пакетов и вычисляется частота ошибок пакетов. В каждой точке SNR:
Несколько пакетов данных передаются по каналу 2x2 TGah с AWGN.
Каждый пакет синхронизирован по времени с известной задержкой.
Демодулируют S1G-LTF1 и S1G-LTF2N поля и выполняют оценку канала.
Поле S1G-Data извлекают из синхронизированного принятого сигнала и демодулируют OFDM.
Несущие данные поднесущие выравниваются с использованием оценок канала.
PSDU восстанавливается с использованием выровненных поднесущих данных, оценки дисперсии шума и информации о состоянии канала (CSI).
Восстановленный PSDU каждого пакета сравнивается с переданными для определения количества ошибок пакета и, следовательно, частоты ошибок пакета.
A parfor шлейф может использоваться для параллельной обработки точек SNR, поэтому для каждой точки SNR создается и конфигурируется канал AWGN comm.AWGNChannel.
packetErrorRate = zeros(numel(snr),1); %parfor i = 1:numel(snr) % Use 'parfor' to speed up the simulation for i = 1:numel(snr) % 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/tgahChannel.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 for 802.11ah short preamble txPSDU = randi([0 1],cfgS1G.PSDULength*8,1); txWaveform = wlanWaveformGenerator(txPSDU,cfgS1G); % Add trailing zeros to allow for channel delay tx = [txWaveform; zeros(50,cfgS1G.NumTransmitAntennas)]; % Pass through fading indoor TGah channel reset(tgahChannel); % Reset channel for different realization rx = tgahChannel(tx); % Add noise rx = awgnChannel(rx); % Synchronize % The received signal is synchronized to the start of the packet by % compensating for a known delay and the default OFDM demodulation % symbol sampling offset. delay = 4; rxSync = rx(delay+1:end,:); % LTF demodulation and channel estimation % Demodulate S1G-LTF1 rxLTF1 = rxSync(fieldInd.S1GLTF1(1):fieldInd.S1GLTF1(2),:); demodLTF1 = wlanS1GDemodulate(rxLTF1,'S1G-LTF1',cfgS1G); % If required, demodulate S1G-LTF2N, and perform channel estimation if cfgS1G.NumSpaceTimeStreams>1 % Use S1G-LTF1 and S1G-LTF2N for channel estimation rxLTF2N = rxSync(fieldInd.S1GLTF2N(1):fieldInd.S1GLTF2N(2),:); demodLTF2N = wlanS1GDemodulate(rxLTF2N,'S1G-LTF2N',cfgS1G); chanEst = s1gLTFChannelEstimate([demodLTF1 demodLTF2N],cfgS1G); else % Use only S1G-LTF1 for channel estimation chanEst = s1gLTFChannelEstimate(demodLTF1,cfgS1G); end % Noise variance estimate from S1G-LTF1 demodulated symbols noiseVarEst = helperNoiseEstimate(demodLTF1); % Extract S1G-Data field rxData = rxSync(fieldInd.S1GData(1):fieldInd.S1GData(2),:); % OFDM demodulation demodSym = wlanS1GDemodulate(rxData,'S1G-Data',cfgS1G); % Extract data subcarriers from demodulated symbols and channel % estimate demodDataSym = demodSym(ofdmInfo.DataIndices,:,:); chanEstData = chanEst(ofdmInfo.DataIndices,:,:); % MMSE frequency domain equalization [eqDataSym,csi] = helperSymbolEqualize(demodDataSym,chanEstData,noiseVarEst); % Recover PSDU bits rxPSDU = s1gDataBitRecover(eqDataSym,noiseVarEst,csi,cfgS1G); % Determine if any bits are in error, i.e. a packet error packetError = any(biterr(txPSDU,rxPSDU)); numPacketErrors = numPacketErrors+packetError; numPkt = numPkt+1; end % Compute PER for this SNR point packetErrorRate(i) = numPacketErrors/(numPkt-1); disp(['SNR ' num2str(snr(i))... ' completed after ' num2str(numPkt-1) ' packets,'... ' PER: ' num2str(packetErrorRate(i))]); end
SNR 25 completed after 123 packets, PER: 0.82114 SNR 35 completed after 922 packets, PER: 0.10954 SNR 45 completed after 1000 packets, PER: 0.013
figure; semilogy(snr,packetErrorRate,'-ob'); grid on; xlabel('SNR (dB)'); ylabel('PER'); title(['802.11ah ' cfgS1G.Preamble ', ' num2str(cfgS1G.ChannelBandwidth(4:end)) ... 'MHz, MCS' num2str(cfgS1G.MCS) ', ' ... num2str(tgahChannel.NumTransmitAntennas) 'x' num2str(tgahChannel.NumReceiveAntennas) ... ' TGah Channel ' num2str(tgahChannel.DelayProfile)]);

Количество пакетов, протестированных в каждой точке SNR, контролируется двумя параметрами: maxNumErrors и maxNumPackets. Для получения значимых результатов эти значения должны быть больше значений, представленных в этом примере. В качестве примера приведенный ниже рисунок был создан путем выполнения более длительного моделирования с помощью maxNumErrors = 1e3 и maxNumPackets = 1e4и диапазон SNR snr = 20:8:60.

В этом примере используются следующие вспомогательные функции:
IEEE P802.11ah™ D5.0 Проект стандарта IEEE для информационных технологий - Телекоммуникации и обмен информацией между системами - Локальные и столичные сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (PHY) - Поправка 2: Освобождение от действия лицензии на суб1 ГГц.