В этом примере показано, как выполнить эти измерения передатчика на форме волны 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 функция, задавая желаемый фактор сверхдискретизации, количество пакетов, и время простоя между каждым пакетом.
osf = 3; % 3x oversampling factor 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, ... 'OversamplingFactor',osf,'NumPackets',numPackets,'IdleTime',idleTime); fs = wlanSampleRate(cfgVHT); % Baseband sampling rate of the waveform
Неустойчивость 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 txWaveform = nonLinearity(txWaveform);
Добавьте тепловой шум в каждую передающую антенну при помощи comm.ThermalNoise объект с шумовой фигурой 6 дБ [3].
thNoise = comm.ThermalNoise('NoiseMethod','Noise Figure','SampleRate',fs*osf,'NoiseFigure',6); for i = 1:cfgVHT.NumTransmitAntennas txWaveform(:,i) = thNoise(txWaveform(:,i)); end
Передискретизируйте сверхдискретизированную форму волны вниз к основной полосе для обработки физического уровня и EVM и спектральных измерений плоскости, применяя фильтр сглаживания lowpass перед субдискретизацией. Удар фильтра lowpass отображается в спектральном измерении плоскости. Фильтр сглаживания спроектирован так, чтобы все активные поднесущие были в полосе пропускания фильтра.
Спроектируйте фильтр передискретизации.
aStop = 40; % Stopband attenuation ofdmInfo = wlanVHTOFDMInfo('VHT-Data',cfgVHT); % OFDM parameters SCS = fs/ofdmInfo.FFTLength; % Subcarrier spacing txbw = max(abs(ofdmInfo.ActiveFrequencyIndices))*2*SCS; % Occupied bandwidth [L,M] = rat(osf); maxLM = max([L M]); R = (fs-txbw)/fs; TW = 2*R/maxLM; % Transition width b = designMultirateFIR(L,M,TW,aStop);
Передискретизируйте форму волны к основной полосе.
firinterp = dsp.FIRRateConverter(M,L,b); rxWaveform = firinterp(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
Packet 1 at index: 25
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 3.30%, -29.63dB

Packet 2 at index: 9785
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg

Spectral flatness passed
RMS EVM: 3.07%, -30.24dB
Packet 3 at index: 19545
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.91%, -30.71dB
Packet 4 at index: 29305
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 3.04%, -30.33dB
Packet 5 at index: 39065
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.99%, -30.50dB
Packet 6 at index: 48825
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.67%, -31.49dB
Packet 7 at index: 58585
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.93%, -30.65dB
Packet 8 at index: 68345
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.81%, -31.03dB
Packet 9 at index: 78105
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.93%, -30.65dB
Packet 10 at index: 87865
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.73%, -31.28dB
Packet 11 at index: 97625
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.90%, -30.76dB
Packet 12 at index: 107385
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.94%, -30.63dB
Packet 13 at index: 117145
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.84%, -30.94dB
Packet 14 at index: 126905
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.91%, -30.73dB
Packet 15 at index: 136665
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 3.09%, -30.20dB
Packet 16 at index: 146425
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.60%, -31.69dB
Packet 17 at index: 156185
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 2.99%, -30.49dB
Packet 18 at index: 165945
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 3.20%, -29.90dB
Packet 19 at index: 175705
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg
Spectral flatness passed
RMS EVM: 3.24%, -29.79dB
Packet 20 at index: 185465
Measured IQ gain & phase imbalance: 0.98 dB, 0.98 deg

Spectral flatness passed
RMS EVM: 3.20%, -29.91dB


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
Average EVM for 20 packets: 2.96%, -30.56dB
Этот раздел измеряет спектральную маску отфильтрованной и формы волны, которой повреждают, после мощного моделирования усилителя.
Передатчик спектральный тест маски [4] использование пропущенное временем спектральное измерение Поля данных VHT. Пример извлекает Поле данных VHT каждого пакета от сверхдискретизированной формы волны, txWaveform, при помощи индексов запуска каждого пакета в форме волны. Любая задержка, введенная в основополосной цепи обработки, используемой, чтобы определить пакетные индексы, должна составляться при пропускании поля данных VHT в txWaveform. Конкатенация извлеченных Полей данных VHT при подготовке к измерению.
% Indices for accessing each field within the time-domain packet ind = wlanFieldIndices(cfgVHT,'OversamplingFactor', osf); startIdx = ind.VHTData(1); % Start of Data endIdx = ind.VHTData(2); % End of Data idleNSamps = idleTime*fs*osf; % Idle time samples perPktLength = endIdx+idleNSamps; idx = zeros(endIdx-startIdx+1,numPackets); for i = 1:numPackets % Start of packet in txWaveform, accounting for the filter delay pktOffset = (i-1)*perPktLength; % Indices of non-HT 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), Бангалора.