В этом примере показано, как выполнить измерения передатчика для сигнала IEEE ® 802.11ac™:
Точность модуляции
Спектрально-эмиссионная маска
Плоскостность спектра
Синфазный и квадратурный (IQ) коэффициент усиления и фазовый дисбаланс
Точность модуляции передатчика, требуемая спектральная маска и требуемая спектральная плоскостность для данной конфигурации указаны в [разделе 21.3.17 из 1]. В этом примере показано, как выполнять эти измерения для формы сигнала. Этот пример также моделирует, измеряет и корректирует усиление IQ и дисбаланс фаз. Создайте сигнал с помощью WLAN Toolbox™ или используйте захваченный сигнал с анализатором спектра.
Пример генерирует 20 пакетов VHT с полосой пропускания канала 80 МГц и промежутком между пакетами 10 микросекунд. Каждый пакет содержит случайные данные и использует 256-QAM модуляцию. Для уменьшения внеполосных излучений и удовлетворения требований к спектральной маске, дискретизируйте и фильтруйте сигнал основной полосы частот. Добавьте коэффициент усиления IQ и фазовый дисбаланс к отфильтрованному сигналу. Используйте модель усилителя высокой мощности (HPA) для введения внутриполосных искажений и расширения спектра. После моделирования усилителя высокой мощности выполните измерение спектральной маски излучения по сигналу с повышенной дискретизацией. Понизить и скорректировать форму сигнала с помощью оцененного IQ усиления и фазового дисбаланса. Измерьте величину вектора ошибки (EVM) поля VHT Data для определения точности модуляции. Дополнительно измерьте спектральную плоскостность. На этой схеме показан рабочий процесс, содержащийся в примере.

В этом примере генерируется сигнал IEEE 802.11ac, состоящий из нескольких пакетов формата VHT. Используйте объект конфигурации формата VHT, wlanVHTConfig, для конфигурирования свойств передачи пакета VHT. В этом примере конфигурируется форма сигнала VHT для полосы пропускания 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
Создайте форму сигнала VHT для указанных битов и конфигурации с помощью wlanWaveformGenerator функция, определяющая требуемый коэффициент избыточной дискретизации, количество пакетов и время простоя между каждым пакетом.
numPackets = 20; % Generate 20 packets idleTime = 10e-6; % 10 microseconds idle time between packets
Создание случайных битов для всех пакетов, dataи передать в качестве аргумента wlanWaveformGenerator вместе с объектом конфигурации пакета VHT cfgVHT. Это настраивает генератор сигнала для синтеза сигнала VHT 802.11ac. Дополнительно, сконфигурируйте генератор формы сигнала, используя пары имя-значение, чтобы генерировать множество пакетов с заданным временем простоя между каждым пакетом.
% 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 Системный объект (TM).
% 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

IQ дисбаланс возникает, когда входной компонент не уважает баланс мощности или ортогональность между I и Q ветвями. Этот пример добавляет IQ усиление и фазовый дисбаланс к передаваемой форме сигнала на основе флага modelIQImbalance. В приемнике оценить коэффициент усиления IQ и фазовый дисбаланс и скорректировать форму сигнала в соответствии со схемой компенсации, указанной в [5].
modelIQImbalance = true; % Set to true to add IQ gain and phase imbalance if modelIQImbalance iqGaindB = 1; % IQ gain imbalance in dB, specify from the range [-1 1] iqPhaseDeg = 1; % IQ phase imbalance in degrees, specify from the range [-2 2] iqGainLin = db2mag(iqGaindB); % Convert gain from dB to linear value txWaveform = real(txWaveform) + 1i*imag(txWaveform)*iqGainLin*exp(1j*iqPhaseDeg*pi/180); % As specified in Equation-1 of [5] end
Усилитель высокой мощности вводит нелинейное поведение в виде внутриполосных искажений и спектрального нарастания. Этот пример моделирует усилители мощности с помощью модели Rapp в 802.11ac [2], которая вводит искажение AM/AM.
Моделирование усилителя с помощью comm.MemorylessNonlinearity объект и сконфигурировать уменьшенное искажение путем указания задержки, hpaBackoff, так что усилитель работает ниже своей точки насыщения. Для уменьшения EVM для более высоких значений MCS можно увеличить отставание.
pSaturation = 25; % Saturation power of a power amplifier in dBm hpaBackoff = 13; % Power amplifier backoff in 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; nonLinearity.OutputSaturationLevel = db2mag(pSaturation-30); % Apply the model to each transmit antenna for i=1:cfgVHT.NumTransmitAntennas txWaveform(:,i) = nonLinearity(txWaveform(:,i)); end
Добавьте тепловой шум к форме сигнала, указав 6 дБ шума приемника [3].
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, спектральной плоскостности и IQ дисбаланса. В рамках повторной дискретизации перед понижающей дискретизацией примените фильтр сглаживания нижних частот. Воздействие фильтра нижних частот видно при измерении спектральной плоскостности. Повторная выборка формы сигнала в основную полосу частот с помощью dsp.FIRDecimator Системный объект (ТМ) с теми же коэффициентами, coeffs, используется для избыточной выборки в разделе «Избыточная выборка и фильтрация».
% Resample the waveform to baseband decimationFilter = dsp.FIRDecimator(osf,'Numerator',coeffs); rxWaveform = decimationFilter(txWaveform);
Этот раздел обнаруживает, синхронизирует и извлекает каждый пакет в rxWaveformзатем измеряет EVM, спектральную плоскостность и дисбаланс IQ. Для каждого пакета в примере выполняются следующие шаги:
Обнаружение начала пакета
Извлечение полей без HT
Оценка и исправление грубого смещения несущей частоты (CFO)
Выполнение точной оценки синхронизации символов с использованием полей без HT, скорректированных по частоте
Извлечение пакета из формы сигнала с использованием точного временного сдвига символа
Исправьте извлеченный пакет с помощью грубой оценки финансового директора
Извлеките L-LTF, затем оцените точного финансового директора и исправьте весь пакет
Извлеките VHT-LTF и выполните оценку канала для каждого из потоков передачи
Измерить IQ дисбаланс из оценки канала и выполнить коррекцию оценки канала
Измерение спектральной плоскостности с помощью оценки канала
Извлечение и демодуляция OFDM поля данных VHT
Выполнение оценки шума с использованием пилот-сигналов демодулированного поля данных и оценки однопоточного канала на пилотных поднесущих
Коррекция фазы и выравнивание поля данных VHT с использованием оценок канала и шума
Корректировать выровненные поднесущие данных с помощью оценки дисбаланса IQ
Для каждой несущей данные поднесущей в каждом пространственном потоке найдите ближайшую точку созвездия и измерьте EVM.
На схеме показана цепочка обработки:

Символы VHT-LTF включают в себя пилот-символы для обеспечения возможности отслеживания фазы, но этот пример не выполняет отслеживание фазы.
Проверьте спектральную плоскостность для каждого пакета путем измерения отклонения величины отдельных поднесущих в оценке канала от среднего значения [1]. Постройте график этих отклонений для каждого пакета с помощью вспомогательной функции vhtTxSpectralFlatnessMeasurement. Постройте график среднего EVM на несущую данные поднесущую и выровненные символы для каждого пакета.
Демодулировать, выравнивать и декодировать символы данных VHT с помощью wlanVHTDataRecover функция. Параметризовать эту функцию для выполнения отслеживания фазы пилот-сигнала и выравнивания нулевого давления в соответствии с требованиями стандарта. В этом примере измеряется точность модуляции из выровненных символов.
В этом примере выполняется два различных измерения EVM с использованием двух экземпляров comm.EVM.
RMS EVM на пакет, который содержит усреднение EVM по поднесущим, символам OFDM и пространственным потокам.
RMS EVM на поднесущую на пространственный поток для пакета. Поскольку эта конфигурация отображает пространственные потоки непосредственно на антенны, это измерение может помочь обнаружить частотно-зависимые нарушения, которые могут по-разному влиять на отдельные радиочастотные цепи. Это измерение усредняет EVM только по символам OFDM.
% Setup EVM measurements
[EVMPerPkt,EVMPerSC] = vhtEVMSetup(cfgVHT);
Этот код настраивает объекты и переменные для обработки.
% Get indices for accessing each field within the time-domain packet ind = wlanFieldIndices(cfgVHT); rxWaveformLength = size(rxWaveform,1); pktLength = double(ind.VHTData(2)); % Define the 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
обнаружение и обработка пакетов в пределах принятого сигнала; rxWaveform используя цикл while, который выполняет эти шаги.
Обнаружение пакета путем индексирования в rxWaveform со смещением образца, searchOffset
Обнаружение и обработка первого пакета в пределах rxWaveform
Обнаружение и обработка следующего пакета путем увеличения смещения индекса выборки. searchOffset
Повторять до тех пор, пока дальнейшие пакеты не будут обнаружены
pktNum = 0; searchOffset = 0; % Start at first sample (no offset) while (searchOffset+minPktLen)<=rxWaveformLength % Packet detect pktOffset = wlanPacketDetect(rxWaveform,cfgVHT.ChannelBandwidth); % 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); % Perform IQ gain and phase imbalance estimation [gainEst,phaseEst,alphaEst,betaEst,gamma,dataRot] = ... helperIQImbalanceEstimate(chanEst,cfgVHT); fprintf(' Measured IQ gain & phase imbalance: %2.2f dB, %2.2f deg\n',gainEst,phaseEst); % Perform IQ gain and phase imbalance correction on channel % estimates chanEst = chanEst./(alphaEst + betaEst.*gamma); % As specified in Equation-29 of [5] % 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,... 'EqualizationMethod','ZF','PilotPhaseTracking','PreEQ'); % Use zero forcing algorithm for equalization % Perform IQ gain and phase imbalance correction on VHT data eqSym = eqSym.*dataRot; % Carrier rotation on data subcarriers eqSym = ((conj(alphaEst)*eqSym)-(betaEst*conj(eqSym(end:-1:1,:,:))))/((abs(alphaEst)^2)-(abs(betaEst)^2)); % As specified in Equation-30 of [5] % 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
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.38%, -29.43dB
Packet 2 at index: 9801
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.14%, -30.05dB
Packet 3 at index: 19561
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 2.96%, -30.56dB
Packet 4 at index: 29321
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.09%, -30.20dB
Packet 5 at index: 39081
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.03%, -30.36dB
Packet 6 at index: 48841
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 2.73%, -31.27dB
Packet 7 at index: 58601
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.00%, -30.46dB
Packet 8 at index: 68361
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 2.89%, -30.79dB
Packet 9 at index: 78121
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.02%, -30.39dB
Packet 10 at index: 87881
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 2.79%, -31.09dB
Packet 11 at index: 97641
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 2.98%, -30.52dB
Packet 12 at index: 107401
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.00%, -30.47dB
Packet 13 at index: 117161
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 2.88%, -30.80dB
Packet 14 at index: 126921
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 2.96%, -30.59dB
Packet 15 at index: 136681
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.17%, -29.98dB
Packet 16 at index: 146441
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 2.69%, -31.42dB
Packet 17 at index: 156201
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.03%, -30.36dB
Packet 18 at index: 165961
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.26%, -29.75dB
Packet 19 at index: 175721
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.29%, -29.65dB
Packet 20 at index: 185481
Measured IQ gain & phase imbalance: 0.98 dB, 0.96 deg
Spectral flatness passed
RMS EVM: 3.27%, -29.72dB
Average EVM for 20 packets: 3.03%, -30.38dB



В этом разделе измеряется спектральная маска отфильтрованного и поврежденного сигнала после моделирования усилителя высокой мощности.
Тест [4] спектральной маски передатчика использует стробируемое по времени спектральное измерение поля VHT Data. В примере извлекается поле VHT Data каждого пакета из сигнала с избыточной выборкой. 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(:),:);
Стандарт 802.11ac определяет спектральную маску относительно спектральной плотности пиковой мощности. Вспомогательная функция helperSpectralMaskTest генерирует график, который накладывает требуемую маску на измеренный PSD.
if pktNum>0 helperSpectralMaskTest(gatedVHTData,fs,osf); end
Spectrum mask passed

В этом примере показаны четыре результата: спектральная плоскостность, среднеквадратичное EVM на поднесущую, выровненное созвездие и спектральная маска.
Модель усилителя высокой мощности вносит значительные внутриполосные искажения и спектральный рост, который виден в результатах EVM, шумное созвездие и внеполосные излучения на графике спектральной маски. Попробуйте увеличить откат усилителя высокой мощности и обратите внимание на улучшение EVM, созвездие и снижение внеполосных выбросов.
Попробуйте использовать другие значения для iqGaindB и iqPhaseDeg и обратите внимание на воздействие на EVM и созвездие.
Спектральная фильтрация и понижающая дискретизация (чтобы довести форму сигнала до основной полосы частот для обработки) включают в себя фильтрацию. Эти отклики фильтра влияют на измерение спектральной плоскостности. Пульсация при измерении спектральной плоскостности обусловлена главным образом понижением дискретизации до основной полосы частот. Попробуйте использовать различные фильтры или длины фильтров и обратите внимание на влияние на спектральную плоскостность.
Стандарт IEEE Std 802.11™-2016 IEEE для информационных технологий - Телекоммуникации и обмен информацией между системами - Локальные и городские сети - Особые требования - Часть 11: Спецификации управления доступом к среде беспроводной локальной сети (MAC) и физического уровня (PHY).
Лок и Чхон. IEEE P802.11 беспроводные локальные сети. Функциональные требования TGac и методология оценки, Ред. 16. 2011-01-19.
Перахия, Э. и Р. Стейси. Беспроводные локальные сети следующего поколения: 802.11n и 802.11ac. 2-е издание. Великобритания: Cambridge University Press, 2013.
Аршамбо, Джерри и Шраван Суринени. «Спектральные измерения IEEE 802.11 с использованием анализаторов векторных сигналов». Проект РФ 27.6 (2004): 38-49.
М. Джанасвами, Н. К. Чавали и С. Батабьяль, «Измерение параметров IQ передатчика в системах беспроводной ЛВС HT и VHT», Международная конференция по обработке сигналов и связи (SPCOM) 2016 года, Бангалор.