Этот пример показывает, как выполнить эти измерения передатчика на 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), Бангалор.