Этот пример показывает, как выполнить эти измерения передатчика на 802.11ac™ сигнале IEEE ®:
Точность модуляции
Спектральная эмиссионная маска
Плоскостность спектра
Синфазный и квадратурный (IQ) коэффициент усиления и разбаланса фазы
Точность модуляции передатчика, необходимая маска спектра и необходимая спектральная плоскостность для заданного строения указаны в [разделе 21.3.17 из 1]. Этот пример показывает, как выполнить эти измерения на форме волны. Этот пример также моделей, измеряет и корректирует коэффициент усиления и разбаланса фазы IQ. Сгенерируйте форму волны с помощью WLAN Toolbox™ или используйте захваченную форму волны с спектром анализатором.
Пример генерирует 20 пакетов VHT с пропускной способностью канала 80 МГц и 10 микросекундной погрешностью между пакетами. Каждый пакет содержит случайные данные и использует 256-QAM модуляцию. Чтобы уменьшить внеполосные эммиссии и удовлетворить требованиям спектральной маски, улучшайте и фильтруйте форму волны основной полосы. Добавьте коэффициент усиления и разбаланса фазы Q к отфильтрованной форме волны. Используйте модель усилителя высокой мощности (HPA), чтобы ввести внутриполосное искажение и спектральное возрождение. Выполните измерение спектральной эмиссионной маски на усиленной форме волны после моделирования усилителя высокой мощности. Понижайте и корректируйте форму волны с помощью расчетных коэффициентов усиления и разбаланса фазы. Измерьте величину вектора ошибок (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 System object(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 ветвями. Этот пример добавляет коэффициент усиления и разбаланс фазы к переданной форме волны на основе флага modelIQImbalance. В получателе оцените коэффициент усиления и фазовый дисбаланс и исправьте сигнал по схеме компенсации, указанной в [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, спектральной плоскостности и дисбаланса Q. В качестве части повторной дискретизации примените фильтр сглаживания lowpass перед понижением дискретизации. Влияние lowpass фильтра видно при измерении спектральной плоскостности. Повторно отобразите форму волны в полосу модулирующих частот с помощью dsp.FIRDecimator System object(TM) с одинаковыми коэффициентами, coeffs, используется для избыточной дискретизации в разделе «Избыточная дискретизация и фильтрация».
% Resample the waveform to baseband decimationFilter = dsp.FIRDecimator(osf,'Numerator',coeffs); rxWaveform = decimationFilter(txWaveform);
Этот раздел обнаруживает, синхронизирует и извлекает каждый пакет в rxWaveform, затем измеряет EVM, спектральную плоскостность и дисбаланс IQ. Для каждого пакета пример выполняет следующие шаги:
Обнаружение начала пакета
Извлечение полей, отличных от HT
Оцените и исправьте крупное смещение частоты несущей (CFO)
Выполните оценку точного символа времени при помощи исправленных по частоте не-HT полей
Извлеките пакет из формы волны с помощью смещения синхронизации тонкого символа
Исправьте извлеченный пакет с помощью грубой оценки CFO
Извлеките L-LTF, затем оцените мелкий CFO и исправьте для всего пакета
Извлеките VHT-LTF и выполните оценку канала для каждого из потоков передачи
Измерьте дисбаланс IQ от оценки канала и выполните коррекцию от оценки канала
Измерьте спектральную плоскостность при помощи оценки канала
Извлечение и OFDM демодулируют поле данных VHT
Выполните оценку шума путем использования пилотных сигналов демодулированного поля данных и оценки канала с одним потоком на поднесущих пилот-сигнала
Фазовая коррекция и выравнивание поля данных VHT с помощью оценок канала и шума
Исправьте уравненные поднесущие данных с помощью оценки дисбаланса IQ
Для каждой несущей данные поднесущей в каждом пространственном потоке найдите ближайшую точку созвездия и измерьте EVM
Схема показывает цепь обработки:

Символы VHT-LTF включают пилот-символы, чтобы позволить отслеживать фазу, но этот пример не выполняет отслеживание фазы.
Проверьте спектральную плоскостность для каждого пакета путем измерения отклонения величины отдельных поднесущих в оценке канала от средней [1]. Постройте график этих отклонений для каждого пакета с помощью вспомогательной функции vhtTxSpectralFlatnessMeasurement. Постройте график среднего значения EVM на несущую данные поднесущую и выравниваемых символов для каждого пакета.
Демодулируйте, выравнивайте и декодируйте символы данных VHT с помощью wlanVHTDataRecover функция. Параметризируйте эту функцию, чтобы выполнить отслеживание фазы пилот-сигнала и эквализация с нулем, как требуется стандартом. Этот пример измеряет точность модуляции от уравненных символов.
Этот пример делает два различных измерения EVM, используя два образцов comm.EVM.
RMS EVM на пакет, который содержит усреднение EVM по поднесущим, символы OFDM и пространственные потоки.
RMS EVM на поднесущую по пространственному потоку для пакета. Поскольку эта конфигурация отображает пространственные потоки непосредственно на антенны, это измерение может помочь обнаружить частотно-зависимые нарушения, которые могут по-разному влиять на отдельные RF-цепи. Это измерение усредняет 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

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