В этом примере показано, как выполнить эти измерения передатчика на форме волны IEEE® 802.11ac™:
Точность модуляции
Маска эмиссии спектра
Плоскость спектра
Синфазный и квадратура (IQ) усиление и разбаланс фазы
Точность модуляции передатчика, требуемая маска спектра и требуемая спектральная плоскость для данной настройки заданы в [Раздел 21.3.17 из 1]. В этом примере показано, как выполнить эти измерения на форме волны. Этот пример также модели, меры, и корректирует усиление IQ и разбаланс фазы. Сгенерируйте форму волны с WLAN Toolbox™ или используйте полученную форму волны со спектром анализатор.
Пример генерирует 20 пакетов VHT с пропускной способностью канала на 80 МГц и разрывом с 10 микросекундами между пакетами. Каждый пакет содержит случайные данные и использует 256-QAM модуляцию. Чтобы сократить внеполосные выбросы и удовлетворить спектральное требование маски, сверхдискретизируйте и отфильтруйте основополосную форму волны. Добавьте усиление IQ и разбаланс фазы к отфильтрованной форме волны. Используйте модель мощного усилителя (HPA), чтобы ввести внутриполосное искажение и спектральный перерост. Выполните спектральное измерение маски эмиссии на сверхдискретизированной форме волны после мощного моделирования усилителя. Downsample и правильный форма волны с предполагаемым усилением IQ и разбалансом фазы. Измерьте величину вектора ошибок (EVM) Поля данных VHT, чтобы определить точность модуляции. Кроме того, измерьте спектральную плоскость. Эта схема показывает рабочий процесс, содержавшийся в примере.
Этот пример генерирует форму волны 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
наряду с пакетным объектом 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
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 возникает, когда компонент фронтенда не уважает баланс сил или ортогональность между ветвями 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.
Смоделируйте усилитель при помощи 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
Добавьте тепловой шум в форму волны, задав фигуру [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, спектральной плоскости и измерений неустойчивости IQ. Как часть передискретизации, примените фильтр сглаживания lowpass перед субдискретизацией. Удар фильтра lowpass отображается в спектральном измерении плоскости. Передискретизируйте форму волны к основной полосе с помощью dsp.FIRDecimator
System object(TM) с теми же коэффициентами, coeffs
, используемый для сверхдискретизации в разделе 'Oversampling and Filtering'.
% Resample the waveform to baseband decimationFilter = dsp.FIRDecimator(osf,'Numerator',coeffs); rxWaveform = decimationFilter(txWaveform);
Этот раздел обнаруживает, синхронизирует и извлекает каждый пакет в rxWaveform
, затем измеряет EVM, спектральную плоскость и неустойчивость IQ. Для каждого пакета пример выполняет эти шаги:
Обнаружьте запуск пакета
Извлеките поля non-HT
Оцените и откорректируйте крупную несущую частоту возмещена (CFO)
Выполните прекрасную оценку синхронизации символа при помощи откорректированных частотой полей non-HT
Извлеките пакет из формы волны при помощи прекрасного смещения синхронизации символа
Откорректируйте извлеченный пакет крупной оценкой CFO
Извлеките L-LTF, затем оцените прекрасный CFO и правильный для целого пакета
Извлеките VHT-LTF и выполните оценку канала для каждого из потоков передачи
Измерьтесь неустойчивость IQ от канала оценивают и выполняют коррекцию на оценке канала
Измерьте спектральную плоскость при помощи оценки канала
Извлеките и OFDM демодулируют поле данных VHT
Выполните шумовую оценку при помощи демодулируемых пилотов поля данных и оценки канала единого потока в экспериментальных поднесущих
Правильный фазой и компенсируют поле данных VHT при помощи канала и шумовых оценок
Откорректируйте компенсируемые поднесущие данных оценкой неустойчивости IQ
Для каждой несущей данные поднесущей в каждом пространственном потоке найдите, что самое близкое созвездие указывает и измеряет EVM
Схема показывает цепь обработки:
Символы VHT-LTF включают экспериментальные символы, чтобы позволить, чтобы фаза отследила, но этот пример не выполняет отслеживание фазы.
Протестируйте спектральную плоскость на каждый пакет путем измерения отклонения в величине отдельных поднесущих в оценке канала против среднего значения [1]. Постройте эти отклонения для каждого пакета с помощью функции помощника vhtTxSpectralFlatnessMeasurement. Постройте средний EVM на несущую данные поднесущую и компенсируемые символы для каждого пакета.
Демодулируйте, компенсируйте и декодируйте символы Данных VHT при помощи wlanVHTDataRecover
функция. Параметрируйте эту функцию, чтобы выполнить отслеживание экспериментального этапа и обеспечивающую нуль эквализацию как требуется по стандарту. Этот пример измеряет точность модуляции от компенсируемых символов.
Этот пример делает два различных измерения EVM с помощью двух экземпляров comm.EVM
.
EVM RMS на пакет, который включает усреднение 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
при помощи некоторое время цикла, который выполняет эти шаги.
Обнаружьте пакет путем индексации в 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. Пример извлекает Поле данных 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(:),:);
Стандарт 802.11ac задает спектральную маску относительно пиковой мощности спектральная плотность. Функция помощника helperSpectralMaskTest генерирует график, который накладывает необходимую маску с измеренным PSD.
if pktNum>0 helperSpectralMaskTest(gatedVHTData,fs,osf); end
Spectrum mask passed
Этот пример строит четыре результата: спектральная плоскость, RMS EVM на поднесущую, компенсировала созвездие и спектральную маску.
Мощная модель усилителя вводит значительное внутриполосное искажение и спектральный перерост, который отображается в результатах EVM, шумном созвездии и внеполосной эмиссии в спектральном графике маски. Попытайтесь увеличить мощный возврат усилителя и отметьте улучшенный EVM, созвездие и понизьте внеполосную эмиссию.
Попытайтесь использовать различные значения для iqGaindB
и iqPhaseDeg
и отметьте удар на EVM и созвездие.
Спектральная фильтрация и субдискретизация (чтобы принести форму волны к основной полосе для обработки) этапы включают фильтрацию. Эти ответы фильтра влияют на спектральное измерение плоскости. Пульсация в спектральном измерении плоскости происходит в основном из-за субдискретизации к основной полосе. Попытайтесь использовать различные фильтры или отфильтруйте длины и отметьте удар на спектральную плоскость.
Станд. IEEE 802.11™-2016 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования.
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) RF: 38-49.
М. Джейнэсвами, Н. К. Чавали и С. Бэйтабьял, "Измерение передатчика параметры IQ в HT и беспроводных системах LAN VHT", 2 016 Международных конференций по вопросам Обработки сигналов и Коммуникаций (SPCOM), Бангалора.