В этом примере показано, как измерить пакетный коэффициент ошибок ссылки IEEE® 802.11n™ HT с помощью сквозной симуляции с исчезновением, TGn образовывают канал и аддитивный белый Гауссов шум модели.
В этом примере сквозная симуляция используется, чтобы определить пакетный коэффициент ошибок для 802.11n ссылка HT [1] с исчезающим каналом по выбору точек ОСШ. В каждой точке ОСШ несколько пакетов передаются через канал, демодулируемый и восстановленный PSDUs. PSDUs сравниваются с переданными, чтобы определить количество пакетных ошибок и следовательно пакетного коэффициента ошибок. Пакетное обнаружение, синхронизируя синхронизацию, несущая частота возместила коррекцию, и отслеживание фазы выполняются получателем. Обработка для каждого пакета получена в итоге в следующей схеме.
Этот пример также демонстрирует, как цикл parfor может использоваться вместо цикла for, когда симуляция каждого ОСШ указывает, чтобы ускорить симуляцию. parfor, как часть Parallel Computing Toolbox™, выполняет обработку для каждого ОСШ параллельно, чтобы уменьшать общее время симуляции.
802.11n передача HT симулирована в этом примере. Объект настройки формата HT содержит формат определенная настройка передачи. Объект создается с помощью функции wlanHTConfig. Свойства объекта содержат настройку. В этом примере объект сконфигурирован для пропускной способности канала на 20 МГц, 2 антенн передачи, 2 потоков времени пробела и никакого блочного кодирования времени пробела.
% Create a format configuration object for a 2-by-2 HT transmission cfgHT = wlanHTConfig; cfgHT.ChannelBandwidth = 'CBW20'; % 20 MHz channel bandwidth cfgHT.NumTransmitAntennas = 2; % 2 transmit antennas cfgHT.NumSpaceTimeStreams = 2; % 2 space-time streams cfgHT.PSDULength = 1000; % PSDU length in bytes cfgHT.MCS = 15; % 2 spatial streams, 64-QAM rate-5/6 cfgHT.ChannelCoding = 'BCC'; % BCC channel coding
В этом примере модель канала N-LOS TGn используется с Моделью-B профиля задержки. Для Модели-B, когда расстояние между передатчиком и получателем больше или равно пяти метрам, модель является NLOS. Это описано далее в wlanTGnChannel.
% Create and configure the channel tgnChannel = wlanTGnChannel; tgnChannel.DelayProfile = 'Model-B'; tgnChannel.NumTransmitAntennas = cfgHT.NumTransmitAntennas; tgnChannel.NumReceiveAntennas = 2; tgnChannel.TransmitReceiveDistance = 10; % Distance in meters for NLOS tgnChannel.LargeScaleFadingEffect = 'None';
Поскольку каждый ОСШ указывает в векторном snr
много пакетов генерируются, проходятся канал и демодулируются, чтобы определить пакетный коэффициент ошибок.
snr = 25:10:45;
Количеством пакетов, протестированных в каждой точке ОСШ, управляют два параметра:
maxNumPEs
максимальное количество пакетных ошибок, симулированных в каждой точке ОСШ. Когда количество пакетных ошибок достигает этого предела, симуляция в этой точке ОСШ завершена.
maxNumPackets
максимальное количество пакетов, симулированных в каждой точке ОСШ, и ограничивает продолжительность симуляции, если пакетный предел погрешности не достигнут.
Числа, выбранные в этом примере, приведут к очень короткой симуляции. Для значимых результатов мы рекомендуем увеличить числа.
maxNumPEs = 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(cfgHT); % Get the OFDM info ofdmInfo = wlanHTOFDMInfo('HT-Data',cfgHT); % Set the sampling rate of the channel tgnChannel.SampleRate = fs; % Indices for accessing each field within the time-domain packet ind = wlanFieldIndices(cfgHT);
Поскольку каждый ОСШ указывает, что много пакетов тестируются и пакетный вычисленный коэффициент ошибок.
Для каждого пакета происходят выполняющие шаги обработки:
PSDU создается и кодируется, чтобы создать одну пакетную форму волны.
Форма волны передается посредством различной реализации модели канала TGn.
AWGN добавляется к полученной форме волны, чтобы создать желаемый средний ОСШ на поднесущую после демодуляции OFDM. коммуникация. AWGNChannel сконфигурирован, чтобы обеспечить правильный ОСШ. Настройка составляет нормализацию в канале количеством, получают антенны и шумовую энергию в неиспользованных поднесущих, которые удалены во время демодуляции OFDM.
Пакет обнаруживается.
Крупное смещение несущей частоты оценивается и корректируется.
Прекрасная синхронизация синхронизации устанавливается. L-STF, L-LTF и выборки L-SIG обеспечиваются для прекрасной синхронизации, чтобы допускать пакетное обнаружение в запуске или конце L-STF.
Прекрасное смещение несущей частоты оценивается и корректируется.
HT-LTF извлечен из синхронизируемой полученной формы волны. HT-LTF является демодулируемым OFDM, и оценка канала выполняется.
Поле данных HT извлечено из синхронизируемой полученной формы волны. PSDU восстанавливается с помощью извлеченного поля и оценки канала.
Цикл parfor может использоваться, чтобы параллелизировать обработку точек ОСШ, поэтому для каждой точки ОСШ, что канал AWGN создается и конфигурируется с коммуникацией. AWGNChannel. Чтобы включить использование параллельных вычислений для увеличенной скорости комментируют 'для' оператора и не комментируют '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/tgnChannel.NumReceiveAntennas; % Account for energy in nulls awgnChannel.SNR = snr(i)-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones); % Loop to simulate multiple packets numPacketErrors = 0; n = 1; % Index of packet transmitted while numPacketErrors<=maxNumPEs && n<=maxNumPackets % Generate a packet waveform txPSDU = randi([0 1],cfgHT.PSDULength*8,1); % PSDULength in bytes tx = wlanWaveformGenerator(txPSDU,cfgHT); % Add trailing zeros to allow for channel filter delay tx = [tx; zeros(15,cfgHT.NumTransmitAntennas)]; %#ok<AGROW> % Pass the waveform through the TGn channel model reset(tgnChannel); % Reset channel for different realization rx = tgnChannel(tx); % Add noise rx = awgnChannel(rx); % Packet detect and determine coarse packet offset coarsePktOffset = wlanPacketDetect(rx,cfgHT.ChannelBandwidth); if isempty(coarsePktOffset) % If empty no L-STF detected; packet error numPacketErrors = numPacketErrors+1; n = n+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,cfgHT.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,... cfgHT.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>15 numPacketErrors = numPacketErrors+1; n = n+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,cfgHT.ChannelBandwidth); rx = helperFrequencyOffset(rx,fs,-fineFreqOff); % Extract HT-LTF samples from the waveform, demodulate and perform % channel estimation htltf = rx(pktOffset+(ind.HTLTF(1):ind.HTLTF(2)),:); htltfDemod = wlanHTLTFDemodulate(htltf,cfgHT); chanEst = wlanHTLTFChannelEstimate(htltfDemod,cfgHT); % Extract HT Data samples from the waveform htdata = rx(pktOffset+(ind.HTData(1):ind.HTData(2)),:); % Estimate the noise power in HT data field nVarHT = htNoiseEstimate(htdata,chanEst,cfgHT); % Recover the transmitted PSDU in HT Data rxPSDU = wlanHTDataRecover(htdata,chanEst,nVarHT,cfgHT); % Determine if any bits are in error, i.e. a packet error packetError = any(biterr(txPSDU,rxPSDU)); numPacketErrors = numPacketErrors+packetError; n = n+1; end % Calculate packet error rate (PER) at SNR point packetErrorRate(i) = numPacketErrors/(n-1); disp(['SNR ' num2str(snr(i))... ' completed after ' num2str(n-1) ' packets,'... ' PER: ' num2str(packetErrorRate(i))]); end
SNR 25 completed after 11 packets, PER: 1 SNR 35 completed after 45 packets, PER: 0.24444 SNR 45 completed after 100 packets, PER: 0.01
figure; semilogy(snr,packetErrorRate,'-ob'); grid on; xlabel('SNR [dB]'); ylabel('PER'); title('802.11n 20MHz, MCS15, Direct Mapping, 2x2 Channel Model B-NLOS');
Количеством пакетов, протестированных в каждой точке ОСШ, управляют два параметра; maxNumPEs
и maxNumPackets
. Для значимых результатов рекомендуется, чтобы эти значения были больше, чем представленные в этом примере. Увеличение числа симулированных пакетов позволяет PER согласно различным сценариям быть сравненным. Попытайтесь изменить схему кодирования передачи в LDPC и сравните пакетный коэффициент ошибок. Как пример, фигура ниже была создана путем выполнения примера для maxNumPEs
: 200 и maxNumPackets
: 10000, с четырьмя различными настройками; 1x1 и 2x2 с BCC и кодированием LDPC.
Этот пример использует следующие функции помощника:
Станд. IEEE 802.11™-2012 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации.