В этом примере показано, как выполнить точность модуляции передатчика и маску эмиссии спектра и измерения плоскости на форме волны IEEE® 802.11ac™.
Точность модуляции передатчика, требуемая маска спектра и требуемая спектральная плоскость для данных настроек заданы в Разделе 22.3.18 из стандарта 802.11ac [1]. В этом примере показано, как эти измерения могут быть выполнены на форме волны. Форма волны сгенерирована с WLAN Toolbox™, но форма волны, полученная со спектром анализатор, могла использоваться.
Форма волны, состоящая из 20 пакетов VHT на 80 МГц, каждый разделенный разрывами 10 микросекунд сгенерирован. Случайные данные используются в каждом пакете и 256QAM, модуляция используется. Основополосная форма волны сверхдискретизирована и отфильтрована, чтобы уменьшать из эмиссии полосы, чтобы удовлетворить спектральное требование маски. Модель мощного усилителя (HPA) используется, который вводит внутриполосное искажение и спектральный перерост. Спектральное измерение маски эмиссии выполняется на сверхдискретизированной форме волны после мощного моделирования усилителя. Форма волны прорежена, и величина вектора ошибок (EVM) Поля данных VHT измеряется, чтобы определить точность модуляции. Спектральная плоскость дополнительно измеряется. Пример проиллюстрирован в следующей схеме:
В этом примере сгенерирована форма волны IEEE 802.11ac, состоящая из нескольких пакетов формата VHT. Формат определенная настройка формы волны VHT описан с помощью объекта настройки формата VHT. Объект создается с помощью функции wlanVHTConfig. Свойства объекта содержат настройку. В этом примере объект сконфигурирован для пропускной способности на 80 МГц. Один пространственный поток передается на антенну, чтобы позволить точности модуляции быть измеренной на пространственный поток, поэтому никакое блочное кодирование времени пробела не используется.
cfgVHT = wlanVHTConfig; % Create packet configuration cfgVHT.ChannelBandwidth = 'CBW80'; % 80 MHz cfgVHT.NumTransmitAntennas = 1; % One transmit antenna cfgVHT.NumSpaceTimeStreams = 1; % One space-time stream cfgVHT.STBC = false; % No STBC so one spatial stream cfgVHT.MCS = 8; % Modulation: 256 QAM cfgVHT.APEPLength = 3000; % A-MPDU length pre-EOF padding in bytes
Генератор формы волны wlanWaveformGenerator может быть сконфигурирован, чтобы сгенерировать один или несколько пакетов и добавить время простоя между каждым пакетом. В этом примере будут созданы 20 пакетов с периодами неактивности 10 микросекунд.
numPackets = 20; % Generate 20 packets idleTime = 10e-6; % 10 microseconds idle time between packets
Случайные биты для всех пакетов, data
, создаются и передаются в качестве аргумента wlanWaveformGenerator наряду с пакетным объектом cfgVHT
настройки VHT. Это конфигурирует генератор формы волны, чтобы синтезировать 802.11ac форма волны VHT. Генератор формы волны дополнительно сконфигурирован с помощью пар "имя-значение", чтобы сгенерировать несколько пакетов с заданным временем простоя между каждым пакетом.
% Create random data; PSDULength is in bytes savedState = rng(0); % Set random state data = randi([0 1],cfgVHT.PSDULength*8*numPackets,1); % Generate a multi-packet waveform txWaveform = wlanWaveformGenerator(data,cfgVHT, ... 'NumPackets',numPackets,'IdleTime',idleTime); % Get the sampling rate of the waveform fs = wlanSampleRate(cfgVHT); disp(['Baseband sampling rate: ' num2str(fs/1e6) ' Msps']);
Baseband sampling rate: 80 Msps
Спектральная фильтрация используется, чтобы сократить из полосы спектральные выбросы вследствие неявного формирования меандра в модуляции OFDM и спектральном переросте, вызванном мощной моделью усилителя. Чтобы смоделировать эффект мощного усилителя на форме волны и просмотреть из полосы спектральную эмиссию, форма волны должна быть сверхдискретизирована. Сверхдискретизация требует, чтобы фильтр интерполяции удалил спектральные изображения, вызванные путем повышающей дискретизации. В этом примере форма волны сверхдискретизирована с фильтром интерполяции, который также действует как спектральный фильтр. Это позволяет форме волны удовлетворять спектральные требования маски. Форма волны сверхдискретизирована и отфильтровала использование dsp. FIRInterpolator.
% Oversample the waveform osf = 3; % Oversampling factor filterLen = 120; % Filter length beta = 0.5; % Design parameter for Kaiser window % Generate filter coefficients coeffs = osf.*firnyquist(filterLen,osf,kaiser(filterLen+1,beta)); coeffs = coeffs(1:end-1); % Remove trailing zero interpolationFilter = dsp.FIRInterpolator(osf,'Numerator',coeffs); txWaveform = interpolationFilter(txWaveform); % Plot the magnitude and phase response of the filter applied after % oversampling h = fvtool(interpolationFilter); h.Analysis = 'freq'; % Plot magnitude and phase responses h.FS = osf*fs; % Set sampling rate h.NormalizedFrequency = 'off'; % Plot responses against frequency
Мощный усилитель вводит нелинейное поведение в форме внутриполосного искажения и спектрального перероста. Модель Rapp используется, чтобы симулировать усилители мощности в 802.11ac [2]. Модель Rapp вызывает искажение AM и моделируется с коммуникацией. MemorylessNonlinearity. Мощный усилитель поддерживается - прочь, чтобы действовать ниже точки насыщения, чтобы уменьшать искажение. Возвратом управляет переменная hpaBackoff
.
hpaBackoff = 8; % dB % Create and configure a memoryless nonlinearity to model the amplifier nonLinearity = comm.MemorylessNonlinearity; nonLinearity.Method = 'Rapp model'; nonLinearity.Smoothness = 3; % p parameter nonLinearity.LinearGain = -hpaBackoff; % Apply the model to each transmit antenna for i=1:cfgVHT.NumTransmitAntennas txWaveform(:,i) = nonLinearity(txWaveform(:,i)); end
Тепловой шум добавляется к форме волны с шумовой фигурой [3] на 6 дБ.
NF = 6; % Noise figure (dB) BW = fs*osf; % Bandwidth (Hz) k = 1.3806e-23; % Boltzman constant (J/K) T = 290; % Ambient temperature (K) noisePower = 10*log10(k*T*BW)+NF; awgnChannel = comm.AWGNChannel('NoiseMethod','Variance', ... 'Variance',10^(noisePower/10)); txWaveform = awgnChannel(txWaveform);
Сверхдискретизированная форма волны передискретизируется вниз к основной полосе для обработки физического уровня и EVM и спектральных измерений плоскости. Когда часть передискретизации фильтра сглаживания lowpass применяется перед субдискретизацией. Удар фильтра lowpass отобразится в спектральном измерении плоскости. Форма волны передискретизируется к основной полосе с помощью dsp. FIRDecimator с теми же коэффициентами, используемыми в сверхдискретизации ранее в примере.
% Resample to baseband decimationFilter = dsp.FIRDecimator(osf,'Numerator',coeffs); rxWaveform = decimationFilter(txWaveform);
Каждый пакет в rxWaveform
обнаруживается, синхронизируется и извлекается. EVM и спектральные измерения плоскости сделаны для каждого пакета. Следующие шаги выполняются для каждого пакета:
Запуск пакета обнаруживается
Поля non-HT извлечены, и крупная оценка несущей частоты возмещена (CFO) и коррекция выполняются
Откорректированные поля частоты non-HT используются, чтобы оценить прекрасную синхронизацию символа
Пакет извлечен из формы волны с помощью прекрасного смещения синхронизации символа
Извлеченный пакет корректируется крупной оценкой CFO
L-LTF извлекается и используется, чтобы оценить прекрасный CFO. Смещение корректируется для целого пакета
VHT-LTF извлечен, и оценка канала выполняется для каждого из потоков передачи
Оценка канала используется, чтобы измерить спектральную плоскость
Поле данных VHT извлечено, и OFDM демодулируется
Шумовая оценка выполняется с помощью демодулируемых пилотов поля данных и оценки канала единого потока в экспериментальных поднесущих
Поле данных VHT является фазой откорректированное и компенсируемое использование канала и шумовых оценок
Для каждой несущей данные поднесущей в каждом пространственном потоке найдена самая близкая точка созвездия, и EVM вычисляется
Цепь обработки показывают в схеме ниже:
Обратите внимание, что символы VHT-LTF включают экспериментальные символы, чтобы позволить, чтобы фаза отследила, но это не сделано в этом примере.
Спектральная плоскость тестируется на каждый пакет путем измерения отклонения в величине отдельных поднесущих в оценке канала против среднего значения [1]. Эти отклонения построены для каждого пакета с помощью функции помощника vhtTxSpectralFlatnessMeasurement. Средний EVM на несущую данные поднесущую и компенсируемые символы построены для каждого пакета.
Функция wlanVHTDataRecover используется, чтобы демодулировать, компенсировать и декодировать символы Данных VHT. Компенсируемые символы используются в этом примере, чтобы измерить точность модуляции. Эта функция параметризована с помощью объекта wlanRecoveryConfig. Объект параметризован, чтобы выполнить отслеживание экспериментального этапа и нулевую эквализацию принуждения как требуется по стандарту.
% Configure VHT Data symbol recovery cfgRec = wlanRecoveryConfig; cfgRec.EqualizationMethod = 'ZF'; % Use zero forcing algorithm cfgRec.PilotPhaseTracking = 'PreEQ'; % Use pilot phase tracking
Два различных измерения EVM сделаны в этом примере с помощью двух экземпляров коммуникации. EVM. Первое измерение является RMS EVM на пакет. Для этого измерения EVM усреднен по поднесущим, символам OFDM и пространственным потокам.
EVMPerPkt = comm.EVM; EVMPerPkt.AveragingDimensions = [1 2 3]; % Nst-by-Nsym-by-Nss EVMPerPkt.Normalization = 'Average constellation power'; EVMPerPkt.ReferenceSignalSource = 'Estimated from reference constellation'; EVMPerPkt.ReferenceConstellation = wlanReferenceSymbols(cfgVHT);
Второе измерение является RMS EVM на поднесущую на пространственный поток для пакета. Когда пространственные потоки сопоставлены непосредственно с антеннами в этой настройке, это измерение может помочь обнаружить зависимые нарушения частоты, которые могут влиять на отдельные цепи РФ по-другому. Для этого измерения EVM только усреднен по символам OFDM.
% Measure average EVM over symbols EVMPerSC = comm.EVM; EVMPerSC.AveragingDimensions = 2; % Nst-by-Nsym-by-Nss EVMPerSC.Normalization = 'Average constellation power'; EVMPerSC.ReferenceSignalSource = 'Estimated from reference constellation'; EVMPerSC.ReferenceConstellation = wlanReferenceSymbols(cfgVHT);
Следующий код конфигурирует объекты и переменные для обработки.
% Indices for accessing each field within the time-domain packet ind = wlanFieldIndices(cfgVHT); rxWaveformLength = size(rxWaveform,1); pktLength = double(ind.VHTData(2)); % Minimum length of data we can detect; length of the L-STF in samples minPktLen = double(ind.LSTF(2)-ind.LSTF(1))+1; % Setup the measurement plots [hSF,hCon,hEVM] = vhtTxSetupPlots(cfgVHT); rmsEVM = zeros(numPackets,1); pktOffsetStore = zeros(numPackets,1); rng(savedState); % Restore random state
Некоторое время цикл используется, чтобы обнаружить и обработать пакеты в полученной форме волны. Выборка возместила searchOffset
используется, чтобы индексировать в rxWaveform
обнаружить пакет. Первый пакет в rxWaveform
обнаруживается и обрабатывается. Демонстрационный индекс возместил searchOffset
затем постепенно увеличивается, чтобы переместиться вне обработанного пакета в rxWaveform
и следующий пакет обнаруживается и обрабатывается, пока никакие дальнейшие пакеты не обнаруживаются.
pktNum = 0; searchOffset = 0; % Start at first sample (no offset) while (searchOffset+minPktLen)<=rxWaveformLength % Packet detect pktOffset = wlanPacketDetect(rxWaveform,cfgVHT.ChannelBandwidth, ... searchOffset,0.9); % Packet offset from start of waveform pktOffset = searchOffset+pktOffset; % If no packet detected or offset outwith bounds of waveform then stop if isempty(pktOffset) || (pktOffset<0) || ... ((pktOffset+ind.LSIG(2))>rxWaveformLength) break; end % Extract non-HT fields and perform coarse frequency offset correction % to allow for reliable symbol timing nonht = rxWaveform(pktOffset+(ind.LSTF(1):ind.LSIG(2)),:); coarsefreqOff = wlanCoarseCFOEstimate(nonht,cfgVHT.ChannelBandwidth); nonht = helperFrequencyOffset(nonht,fs,-coarsefreqOff); % Determine offset between the expected start of L-LTF and actual start % of L-LTF lltfOffset = wlanSymbolTimingEstimate(nonht,cfgVHT.ChannelBandwidth); % Determine packet offset pktOffset = pktOffset+lltfOffset; % If offset is without bounds of waveform skip samples and continue % searching within remainder of the waveform if (pktOffset<0) || ((pktOffset+pktLength)>rxWaveformLength) searchOffset = pktOffset+double(ind.LSTF(2))+1; continue; end % Timing synchronization complete; extract the detected packet rxPacket = rxWaveform(pktOffset+(1:pktLength),:); pktNum = pktNum+1; disp([' Packet ' num2str(pktNum) ' at index: ' num2str(pktOffset+1)]); % Apply coarse frequency correction to the extracted packet rxPacket = helperFrequencyOffset(rxPacket,fs,-coarsefreqOff); % Perform fine frequency offset correction on the extracted packet lltf = rxPacket(ind.LLTF(1):ind.LLTF(2),:); % Extract L-LTF fineFreqOff = wlanFineCFOEstimate(lltf,cfgVHT.ChannelBandwidth); rxPacket = helperFrequencyOffset(rxPacket,fs,-fineFreqOff); % Extract VHT-LTF samples, demodulate and perform channel estimation vhtltf = rxPacket(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); % Spectral flatness measurement vhtTxSpectralFlatnessMeasurement(chanEst,cfgVHT,pktNum,hSF); % Extract VHT Data samples from the waveform vhtdata = rxPacket(ind.VHTData(1):ind.VHTData(2),:); % Estimate the noise power in VHT data field noiseVarVHT = vhtNoiseEstimate(vhtdata,chanEstSSPilots,cfgVHT); % Extract VHT Data samples and perform OFDM demodulation, equalization % and phase tracking [~,~,eqSym] = wlanVHTDataRecover(vhtdata,chanEst,noiseVarVHT,cfgVHT,cfgRec); % Compute RMS EVM over all spatial streams for packet rmsEVM(pktNum) = EVMPerPkt(eqSym); fprintf(' RMS EVM: %2.2f%%, %2.2fdB\n',rmsEVM(pktNum),20*log10(rmsEVM(pktNum)/100)); % Compute RMS EVM per subcarrier and spatial stream for the packet evmPerSC = EVMPerSC(eqSym); % Nst-by-1-by-Nss % Plot RMS EVM per subcarrier and equalized constellation vhtTxEVMConstellationPlots(eqSym,evmPerSC,cfgVHT,pktNum,hCon,hEVM); % Store the offset of each packet within the waveform pktOffsetStore(pktNum) = pktOffset; % Increment waveform offset and search remaining waveform for a packet searchOffset = pktOffset+pktLength+minPktLen; end if pktNum>0 fprintf('Average EVM for %d packets: %2.2f%%, %2.2fdB\n', ... pktNum,mean(rmsEVM(1:pktNum)),20*log10(mean(rmsEVM(1:pktNum))/100)); else disp('No complete packet detected'); end
Packet 1 at index: 41 Spectral flatness passed RMS EVM: 2.36%, -32.55dB Packet 2 at index: 9801 Spectral flatness passed RMS EVM: 2.32%, -32.70dB Packet 3 at index: 19561 Spectral flatness passed RMS EVM: 2.16%, -33.29dB Packet 4 at index: 29321 Spectral flatness passed RMS EVM: 2.16%, -33.31dB Packet 5 at index: 39081 Spectral flatness passed RMS EVM: 2.27%, -32.88dB Packet 6 at index: 48841 Spectral flatness passed RMS EVM: 1.93%, -34.29dB Packet 7 at index: 58601 Spectral flatness passed RMS EVM: 2.19%, -33.21dB Packet 8 at index: 68361 Spectral flatness passed RMS EVM: 2.06%, -33.70dB Packet 9 at index: 78121 Spectral flatness passed RMS EVM: 2.12%, -33.47dB Packet 10 at index: 87881 Spectral flatness passed RMS EVM: 2.01%, -33.95dB Packet 11 at index: 97641 Spectral flatness passed RMS EVM: 2.10%, -33.54dB Packet 12 at index: 107401 Spectral flatness passed RMS EVM: 2.20%, -33.14dB Packet 13 at index: 117161 Spectral flatness passed RMS EVM: 2.00%, -33.97dB Packet 14 at index: 126921 Spectral flatness passed RMS EVM: 2.11%, -33.52dB Packet 15 at index: 136681 Spectral flatness passed RMS EVM: 2.19%, -33.21dB Packet 16 at index: 146441 Spectral flatness passed RMS EVM: 1.88%, -34.52dB Packet 17 at index: 156201 Spectral flatness passed RMS EVM: 2.03%, -33.84dB Packet 18 at index: 165961 Spectral flatness passed RMS EVM: 2.43%, -32.28dB Packet 19 at index: 175721 Spectral flatness passed RMS EVM: 2.39%, -32.43dB Packet 20 at index: 185481 Spectral flatness passed RMS EVM: 2.63%, -31.60dB Average EVM for 20 packets: 2.18%, -33.24dB
В этом примере маска эмиссии спектра отфильтрованной и формы волны, которой повреждают после того, как измеряется мощное моделирование усилителя.
Пропущенное спектральное измерение времени Поля данных VHT используется в тесте маски эмиссии спектра передатчика [4]. Когда часть основной полосы, обрабатывающей индекс запуска каждого пакета в основополосной форме волны, хранилась. Эти индексы используются, чтобы извлечь Поле данных VHT каждого пакета от сверхдискретизированного txWaveform
. Любая задержка, введенная в основополосной цепи обработки, используемой, чтобы определить пакетные индексы, должна составляться при пропускании поля данных VHT в txWaveform
. Извлеченные Поля данных VHT конкатенированы при подготовке к измерению.
startIdx = osf*(ind.VHTData(1)-1)+1; % Upsampled start of VHT Data endIdx = osf*ind.VHTData(2); % Upsampled end of VHT Data delay = grpdelay(decimationFilter,1); % Group delay of downsampling filter idx = zeros(endIdx-startIdx+1,pktNum); for i = 1:pktNum % Start of packet in txWaveform pktOffset = osf*pktOffsetStore(i)-delay; % Indices of VHT Data in txWaveform idx(:,i) = (pktOffset+(startIdx:endIdx)); end gatedVHTData = txWaveform(idx(:),:);
Спектральная маска задана стандартом относительно пиковой мощности спектральная плотность. График, сгенерированный функцией помощника helperSpectralMaskTest, накладывает необходимую маску с измеренным PSD.
helperSpectralMaskTest(gatedVHTData,fs,osf);
Spectrum mask passed
Четыре результата построены по этому примеру; спектральная плоскость, RMS EVM на поднесущую, компенсировала созвездие и спектральную маску.
Мощная модель усилителя вводит значительное внутриполосное искажение и спектральный перерост, который отображается в результатах EVM, шумном созвездии и внеполосной эмиссии в спектральном графике маски. Попытайтесь увеличить мощный возврат усилителя и отметьте улучшенный EVM, созвездие и понизьте внеполосную эмиссию.
Спектральная фильтрация и субдискретизация (чтобы принести форму волны к основной полосе для обработки) этапы включают фильтрацию. Эти ответы фильтра влияют на спектральное измерение плоскости. Пульсация в спектральном измерении плоскости происходит в основном из-за субдискретизации к основной полосе. Попытайтесь использовать различные фильтры или отфильтруйте длины и отметьте удар на спектральную плоскость.
Этот пример использует следующие функции помощника:
Станд. IEEE 802.11ac™-2013 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации - Поправка 4: Улучшения для Очень Высокой Пропускной способности для Операции в Полосах ниже 6 ГГц.
Loc и Cheong. IEEE P802.11 Беспроводная LAN. Функциональные требования TGac и версия методологии оценки. 16. 2011-01-19.
Perahia, E. и Р. Стейси. Беспроводная LAN следующего поколения: 802.11n и 802.11ac. 2-й выпуск. Соединенное Королевство: Издательство Кембриджского университета, 2013.
Archambault, Джерри и Шрэвэн Суринени. "IEEE 802.11 спектральные измерения с помощью вектора сигнализирует об анализаторах". Проект 27.6 (2004) РФ: 38-49.