Этот пример показывает, как измерить частоту ошибок пакета 802.11ah™ IEEE ® S1G короткой линии преамбулы с помощью сквозной симуляции с затухающей моделью канала TGah в помещении и аддитивным белым Гауссовым шумом.
В этом примере сквозную симуляцию используют, чтобы определить частоту ошибок пакета для короткой ссылки преамбулы 802.11ah [1] S1G с замирающим каналом при выборе точек ОСШ. Для каждой точки ОСШ несколько пакетов передаются через канал, демодулируются и PSDU восстанавливаются. Блоки PSDU сравнивают с переданными для определения количества ошибок пакета и, следовательно, частоты ошибок пакета. Обработка для каждого пакета суммирована в следующей схеме.
Этот пример моделирует формат S1G-Short без коррекции нарушений, кроме оценки канала и эквализации. Принятый сигнал синхронизируется с началом пакета путем компенсации известной задержки и смещения дискретизации символа демодуляции OFDM по умолчанию. Частотная синхронизация не выполняется. Для получения информации о том, как автоматически обнаружить и синхронизироваться с полученным сигналом, смотрите эти примеры для 802.11n™ и 802.11ac™.
Этот пример также демонстрирует, как parfor
цикл может использоваться вместо for
цикл при симуляции каждой точки ОСШ для ускорения симуляции. parfor
как часть Toolbox™ Parallel Computing, выполняет обработку для каждого ОСШ параллельно, чтобы уменьшить общее время симуляции.
В этом примере моделируется передача преамбулы S1G одним пользователем 802.11ah. Объект строения формата S1G содержит специфическую для формата строение передачи. Объект создается с помощью wlanS1GConfig
функция. Свойства объекта содержат строение. В этом примере объект сконфигурирован для полосы пропускания канала 2 МГц, короткой преамбулы, 2 передающих антенны, 2 пространственно-временных потока, полезной нагрузки 256 байт и скорости 64-QAM-5/6 (MCS 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. Для Модели-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 = 25:10:45;
Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами:
maxNumErrors
- максимальное количество ошибок пакета, моделируемых в каждой точке ОСШ. Когда количество ошибок пакета достигает этого предела, симуляция в этой точке ОСШ завершена.
maxNumPackets
является максимальным количеством пакетов, моделируемых в каждой точке ОСШ, и ограничивает длину симуляции, если предел ошибки пакета не достигнут.
Числа, выбранные в этом примере, приведут к очень короткой симуляции. Для значимых результатов рекомендуем увеличить цифры.
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
Для каждой точки ОСШ проверяется количество пакетов и вычисляется вероятность ошибки пакета. В каждой точке ОСШ:
Несколько пакетов данных передаются через канал 2x2 TGah с AWGN.
Каждый пакет синхронизируется по времени при известной задержке.
Поля S1G-LTF1 и S1G-LTF2N демодулируются, и выполняется оценка канала.
Поле S1G-Data извлекается из синхронизированной принятой формы волны и демодулируется OFDM.
Данные, несущие поднесущие, выравниваются с помощью оценок канала.
PSDU восстанавливается с использованием выравниваемых поднесущих данных, оценки отклонений по шуму и информации о состоянии канала (CSI).
Восстановленный PSDU каждого пакета сравнивают с переданным для определения количества ошибок пакета и, следовательно, частоты ошибок пакета.
A parfor
цикл может использоваться для параллелизации обработки точек ОСШ, поэтому для каждой точки ОСШ создается и конфигурируется канал 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)]);
Количество пакетов, протестированных в каждой точке ОСШ, управляется двумя параметрами: maxNumErrors
и maxNumPackets
. Для значимых результатов эти значения должны быть больше, чем значения, представленные в этом примере. В качестве примера рисунок ниже был создан путем выполнения более длительной симуляции с maxNumErrors = 1e3
и maxNumPackets = 1e4
, и область значений ОСШ snr = 20:8:60
.
В этом примере используются следующие вспомогательные функции:
IEEE P802.11ah™ D5.0 Проект стандарта IEEE на информационные технологии - Телекоммуникации и обмен информацией между системами - Локальные и столичные сети - Особые требования - Часть 11: Беспроводное управление доступом к среде локальной сети (MAC) и физический уровень (PHY) Спецификации - Поправка 2: Sub1 GHz Лицензия