Этот пример показывает, как измерить пакетный коэффициент ошибок IEEE® 802.11ah™ S1G короткая ссылка преамбулы с помощью сквозной симуляции с исчезновением TGah внутренняя модель канала и аддитивный белый Гауссов шум.
В этом примере сквозная симуляция используется, чтобы определить пакетный коэффициент ошибок для 802.11ah [1] короткая ссылка преамбулы S1G с исчезающим каналом по выбору точек ОСШ. Поскольку каждый ОСШ указывает, что несколько пакетов передаются через канал, демодулируемый и восстановленный PSDUs. PSDUs сравниваются с переданными, чтобы определить количество пакетных ошибок и следовательно пакетного коэффициента ошибок. Обработка для каждого пакета получена в итоге в следующей схеме.
Этот пример моделирует S1G-формат-short без исправления нарушения кроме оценки канала и коррекции. Полученный сигнал синхронизируется с запуском пакета путем компенсации известной задержки и смещения выборки символа демодуляции OFDM по умолчанию. Никакая синхронизация частоты не выполняется. Для получения информации о том, как автоматически обнаружить и синхронизироваться с полученным сигналом, видит следующие примеры для 802.11n™ и 802.11ac™:
Этот пример также демонстрирует, как цикл parfor
может использоваться вместо цикла for
, когда симуляция каждого ОСШ указывает, чтобы ускорить симуляцию. parfor
как часть Parallel Computing Toolbox™, выполняет обработку для каждого ОСШ параллельно, чтобы уменьшать общее время симуляции.
Однопользовательское 802.11ah S1G короткая передача преамбулы моделируется в этом примере. Объект настройки формата S1G содержит формат определенная настройка передачи. Объект создается с помощью функции wlanS1GConfig
. Свойства объекта содержат настройку. В этом примере объект сконфигурирован для пропускной способности канала на 2 МГц, короткой преамбулы, 2 антенн передачи, 2 пространственно-временных потоков, 256-байтовой полезной нагрузки, и 64-QAM rate-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
В этом примере N-LOS TGah внутренняя модель канала используется с Моделью-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-поле-данных извлечено от синхронизируемой полученной формы волны и демодулируемого OFDM.
Поднесущие переноса данных компенсируются с помощью оценок канала.
PSDU восстанавливается с помощью компенсируемых поднесущих данных, шумовой оценки отклонения и информации о состоянии канала (CSI).
Восстановленный PSDU каждого пакета сравнивается с переданными, чтобы определить количество пакетных ошибок и следовательно пакетного коэффициента ошибок.
Цикл 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) LAN и Физический уровень (PHY) Спецификации - Поправка 2: Лицензия Sub 1 ГГц Освобожденная Операция.