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