Характеристика усилителя мощности

В этом примере показано, как охарактеризовать усилитель мощности (PA) с помощью измеренных сигналов ввода и вывода Воздухонепроницаемого PA NXP. Опционально, можно использовать настройку тестирования оборудования включая шасси PXI NI с векторным приемопередатчиком сигнала (VST), чтобы измерить сигналы во время выполнения.

Можно использовать результаты характеристики симулировать PA с помощью comm.MemorylessNonlinearity Системный объект или блок Memoryless Nonlinearity. Для модели PA с памятью можно использовать блок Power Amplifier (RF Blockset). Можно использовать эти модели, чтобы спроектировать цифровое предварительное искажение (DPD), использующий comm.DPD и comm.DPDCoefficientEstimator Системные объекты или DPD и Содействующие блоки Средства оценки DPD. Для получения дополнительной информации смотрите Цифровое Предварительное искажение, чтобы Компенсировать Нелинейность Усилителя мощности.

Дополнительное оборудование и программное обеспечение

Этот пример может работать на шасси PXI NI с VST, чтобы измерить сигналы ввода и вывода PA в течение времени выполнения. VST является высокой пропускной способностью инструмент RF, который комбинирует Векторный генератор сигнала (VSG) с Вектором Signal Analyzer (VSA). Следующая NI настройка шасси PXI использовалась, чтобы получить сохраненный сигнал:

  • NI Векторный приемопередатчик сигнала (VST) PXIe-5840

  • NI Исходный модуль меры (SMU) PXIe-4139

  • PXIe-4145 SMU NI

  • Программное обеспечение NI RFmx SpecAn

  • Программное обеспечение NI-RFSG

  • Программное обеспечение NI-RFSG Playback Library

Как устройство под тестом (DUT), этот пример использует Воздухонепроницаемый PA LDMOS Доэрти NXP с рабочей частотой 3.6-3.8 ГГц и 29 усилениями дБ. Этот PA требует 29 В, 5 В, 3 В, 1.6-вольтовое и 1.4-вольтовое смещение DC, которые обеспечиваются с помощью PXIe-4139 и PXIe-4145 SMUs.

Установите MATLAB® на контроллере PXI NI, чтобы запустить этот пример с настройкой оборудования, которая проиллюстрирована в следующем рисунке. MATLAB, работая на контроллере PXI, генерирует тестовую форму волны и загружает форму волны на VSG. VSG передает эту тестовую форму волны к PA, и VSA получает форму волны, которой повреждают, в PA выход. MATLAB собирает PA выход из VSA и выполняет характеристику PA.

Установите переменную источника данных на "Hardware" запускать тестовый сигнал, хотя PA с помощью настройки оборудования описал выше. Тестовый сигнал может быть или подобной 5G формой волны OFDM или двумя тонами, как описано в следующем разделе. Установите переменную источника данных на "From file" использовать записанные заранее данные.

dataSource = "From file";

Сгенерируйте тестовые сигналы

Если testSignal "OFDM", этот пример использует подобную 5G форму волны OFDM с 64-QAM модулируемыми сигналами для каждой поднесущей. Если testSignal "Tones", этот пример использует два тона на уровне 1,8 МГц и 2,6 МГц, чтобы протестировать межмодуляцию, вызванную PA.

testSignal = "OFDM";
switch testSignal
  case "OFDM"
    bw = 100e6;
    [txWaveform, sampleRate, numFrames] = helperPACharGenerateOFDM (bw);
  case "Tones"
    bw = 3e6;
    [txWaveform, sampleRate, numFrames] = helperPACharGenerateTones ();
end

Чтобы идентифицировать высокого уровня нелинейность, тестовый сигнал должен быть сверхдискретизирован, по крайней мере, суммой ожидаемого порядка нелинейности. В этом примере мы запускаем поиск сетки до порядка нелинейности семь. Сверхдискретизируйте семь, чтобы покрыть возможную седьмую нелинейность порядка. Кроме того, нормируйте амплитуду формы волны.

overSamplingRate = 7;
filterLength = 6*70;
lowpassfilter = firpm(filterLength, [0 8/70 10/70 1], [1 1 0 0]);
firInterp = dsp.FIRInterpolator(overSamplingRate, lowpassfilter);
txWaveform = firInterp([txWaveform; zeros(filterLength/overSamplingRate/2,1)]);
txWaveform = txWaveform((filterLength/2)+1:end,1);      % Remove transients
txWaveform = txWaveform/max(abs(txWaveform));   % Normalize the waveform
sampleRate = sampleRate * overSamplingRate;

Тестирование оборудования

Если переменная источника данных установлена в "From file", загрузите записанные заранее данные. If dataSource переменная установлена в "Hardware", rООН тестовый сигнал через PA с помощью VST. Создайте объект helperVSTDriver связаться с устройством VST. Определите имя ресурса к имени ресурса, присвоенному устройству VST. Этот пример использует 'VST_01'. Для устройств NI можно найти имя ресурса с помощью NI Measurement & Automation Explorer (MAX) приложение.

if strcmp(dataSource, "Hardware")
  VST = helperVSTDriver('VST_01');

Установите ожидаемые значения усиления DUT и аттенюатора. Начиная с PA выход соединяется с аттенюатором на 30 дБ, устанавливается внешнее затухание VSA в 30. Установите ожидаемое усиление DUT к 29 дБ и получите точность к 1 дБ. Установите время приобретения на значение, которое приведет к приблизительно 40k выборки. Установите целевую входную мощность на 8 dBm. Можно увеличить это значение, чтобы управлять PA больше в нелинейную область.

  VST.DUTExpectedGain     = 29;     % dB
  VST.ExternalAttenuation = 30;     % dB
  VST.AcquisitionTime     = 0.9e-3*(53.76e6/sampleRate); % seconds
  VST.DUTTargetInputPower =8;  % dBm
  VST.CenterFrequency = 3.7e9   % Hz

Загрузите тестовую форму волны на VSG. Measure PA выход.

  writeWaveform(VST,txWaveform,sampleRate,testSignal)
  results = runPAMeasurements(VST);
  release(VST)
else
  % Load the prerecorded results from VST
  switch testSignal
    case "OFDM"
      dataFileName = sprintf("helperPACharSavedData%dMHz",bw/1e6);
    case "Tones"
      dataFileName = "helperPACharSavedDataTones";
  end
  load(dataFileName,"results","sampleRate","overSamplingRate","testSignal","numFrames")
end

Сопоставьте результаты в локальные переменные.

referencePower = results.ReferencePower;
measuredAMToAM = results.MeasuredAMToAM;
paInput = results.InputWaveform;
paOutput = results.OutputWaveform;
linearGaindB = results.LinearGain;

Постройте спектр тестового сигнала с помощью dsp.SpectrumAnalyzer Системный объект.

saInput = helperPACharPlotInput(paInput, sampleRate, testSignal, bw);

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 6 objects of type patch, line. This object represents PA Input.

Постройте характеристики AM PA.

helperPACharPlotSpecAnAMAM(referencePower, measuredAMToAM)

Figure contains an axes. The axes with title AM/AM contains an object of type line.

Для лучшего представления фокусируйтесь на усилении по сравнению с входной мощностью вместо выходной мощности по сравнению с входной мощностью и постройте снова.

helperPACharPlotSpecAnGain(referencePower, measuredAMToAM)

Figure contains an axes. The axes with title Gain vs Input Power contains an object of type line.

PA в основном линеен из области значений входной мощности-1 к 17 dBm с изменением на только приблизительно 1 дБ в той области значений. Ширина кривой усиления происходит из-за эффектов памяти PA.

Характеристика PA

Используйте измеренные входные и выходные данные PA, чтобы смоделировать PA. Затем можно использовать эту модель, чтобы симулировать систему, которая содержит этот PA, и точно настройте параметры. Этот пример рассматривает три модели: нелинейность без памяти, полином памяти и полином памяти с перекрестными условиями.

Модель нелинейности без памяти

Нелинейные нарушения без памяти искажают амплитуду входного сигнала и фазу. Амплитудное искажение является модуляцией от амплитуды к амплитуде (AM), и искажение фазы является амплитудой к фазовой модуляции (AM/PM). comm.MemorylessNonlinearity Блок системный объект и Memoryless Nonlinearity реализует несколько таких искажений. Используйте входные и выходные данные PA, чтобы создать интерполяционную таблицу, чтобы использовать с этим объектом или блоком.

Чтобы охарактеризовать передаточную функцию AM, вычислите среднюю выходную мощность для области значений значений входной мощности. Измерения находятся в вольтах по полному импедансу на 100 Ом, разделенному между передатчиком и приемником. Преобразуйте измеренные основополосные выборки, чтобы привести в действие значения в dBm. Термин на +30 дБ для dBW к dBm преобразованию, и термин на-20 дБ для импеданса на 100 Ом.

paInputdBm  = mag2db(abs(paInput)) + 30 - 20;
paOutputdBm  = mag2db(abs(paOutput)) + 30 - 20;

Разделите значения входной мощности в интервалы. edges переменная содержит границы интервала и idx переменная содержит индекс значений интервала для каждого значения входной мощности.

[N,edges,idx] = histcounts(paInputdBm, 'BinWidth', 0.5);

Для каждого интервала вычислите среднюю точку интервала, средней выходной мощности и среднего сдвига фазы. Не включайте значение входной мощности, которое меньше на 20 дБ ниже максимальной входной мощности. Сохраните результаты в матрице с тремя столбцами, где первый столбец является входной мощностью в dBm, второй столбец является выходной мощностью в dBm, и последний столбец является сдвигом фазы.

minInPowerdBm = max(paInputdBm) - 20;
minIdx = find(edges < minInPowerdBm, 1, 'last');
tableLen = length(edges)-minIdx-1;
inOutTable = zeros(tableLen,2);
for p = minIdx+1:length(edges)-1
  inOutTable(p-minIdx,1) = mean(paInputdBm(idx == p));   % Average input power for current bin
  inOutTable(p-minIdx,2) = mean(paOutputdBm(idx == p));  % Average output power for current bin
  inOutTable(p-minIdx,3) = mean(angle(paOutput(idx == p)./paInput(idx == p)));  % Average phase shift for current bin
end

Используйте таблицу в comm.MemorylessNonlinearity Системном объекте, чтобы смоделировать PA. Сравните предполагаемый выход с фактическим выходом.

pa = comm.MemorylessNonlinearity('Method','Lookup table','Table',inOutTable,'ReferenceImpedance',100)
pa = 
  comm.MemorylessNonlinearity with properties:

                Method: 'Lookup table'
                 Table: [40x3 double]
    ReferenceImpedance: 100

paOutputFitMemless = pa(paInput);
err = abs(paOutput - paOutputFitMemless)./abs(paOutput);
rmsErrorMemless = rms(err)*100;
disp(['Percent RMS error in time domain is ' num2str(rmsErrorMemless) '%'])
Percent RMS error in time domain is 12.1884%

Чтобы визуализировать и измеренный выходной сигнал и подходящий выходной сигнал, постройте фактический и подходящий временной интервал выходные напряжения.

helperPACharPlotTime(paOutput, paOutputFitMemless, sampleRate)

Figure contains an axes. The axes with title Comparison of Actual and Estimated Output Signals contains 2 objects of type line. These objects represent Actual, Estimated.

Постройте величину усиления.

helperPACharPlotGain(paInput, paOutput, paOutputFitMemless)

Figure contains an axes. The axes with title Comparison of Actual and Estimated Gain contains 2 objects of type line. These objects represent Actual Gain, Estimated Gain.

Модель полинома памяти

Модель полинома памяти включает эффекты памяти PA в дополнение к нелинейному усилению. Используйте многоцелевую функцию помощника helperPACharMemPolyModel, чтобы определить комплексные коэффициенты модели полинома памяти для характеристик усилителя. Установите тип модели на 'Memory Polynomial'.

modType = 'memPoly';

Выполните поиск сетки как показано в Поиске Сетки Приложения в течение Времени хранения в памяти и Полиномиального Порядка. На основе этой сетки результаты поиска получена лучшая подгонка, когда время хранения в памяти и полиномиальные значения степени следующие:

memLen = 5;
degLen = 5;

Выполните подгонку и ошибочное вычисление RMS для этих значений. Только половина данных используется для расчета подходящие коэффициенты, как целый набор данных будет использован для расчета относительная погрешность. Функция помощника helperPACharMemPolyModel вычисляет коэффициенты модели.

numDataPts = length(paInput);
halfDataPts = round(numDataPts/2);

Функция помощника helperPACharMemPolyModel доступна для редактирования для пользовательских модификаций, и возвратить желаемую матрицу. Модель PA имеет оцененные коэффициенты некоторого нуля, который приводит к матрице неполного ранга.

fitCoefMatMem = helperPACharMemPolyModel('coefficientFinder',             ...
  paInput(1:halfDataPts),paOutput(1:halfDataPts),memLen,degLen,modType);
Warning: Rank deficient, rank = 24, tol =  1.870573e-01.
disp(abs(fitCoefMatMem))
   23.1553    8.8539   17.8403   13.3042    3.2174
         0   11.7661   26.4612   23.1878    5.5464
   20.9748   16.8495   25.7229   22.1851    5.0674
   32.6203    8.4018    9.4817   10.6939    2.5605
   15.3880    2.3642    2.0892    2.9342    0.7370

Чтобы подтвердить подбор кривой, используйте функцию помощника, чтобы вычислить ошибку RMS процента относительно измеренного сигнала.

rmsErrorTimeMem = helperPACharMemPolyModel('errorMeasure', ...
  paInput, paOutput, fitCoefMatMem, modType);
disp(['Percent RMS error in time domain is ' num2str(rmsErrorTimeMem) '%'])
Percent RMS error in time domain is 6.1056%

Чтобы визуализировать и измеренный выходной сигнал и подходящий выходной сигнал, постройте фактический и подходящий временной интервал выходные напряжения.

paOutputFitMem = helperPACharMemPolyModel('signalGenerator', ...
  paInput, fitCoefMatMem, modType);
helperPACharPlotTime(paOutput, paOutputFitMem, sampleRate)

Figure contains an axes. The axes with title Comparison of Actual and Estimated Output Signals contains 2 objects of type line. These objects represent Actual, Estimated.

Постройте величину усиления.

helperPACharPlotGain(paInput, paOutput, paOutputFitMem)

Figure contains an axes. The axes with title Comparison of Actual and Estimated Gain contains 2 objects of type line. These objects represent Actual Gain, Estimated Gain.

Обсуждения

Ошибка расчета RMS процента во временном интервале для модели нелинейности без памяти, которая является между 9% и 13%, является приблизительно в 3 - 4 раза больше, чем ошибка для модели полинома памяти, который является между 2% и 6% для сигналов OFDM с различной пропускной способностью.

Проверяйте ошибку расчета в частотный диапазон путем графического вывода спектра фактического PA выход вместе со спектром предполагаемого PA выход для всех трех моделей. Модель поиска по таблице нелинейности без памяти не может симулировать спектральный рост, замеченный в измеренном PA выход. Для этого PA модель полинома памяти обеспечивает хорошее приближение характеристик PA.

sa = helperPACharPlotSpectrum(...
  [paOutput paOutputFitMemless paOutputFitMem],...
  {'Actual PA Output','Memoryless Model Output', ...
  'Memory Polynomial Output'},...
  sampleRate,testSignal);

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 3 objects of type line. These objects represent Actual PA Output, Memoryless Model Output, Memory Polynomial Output.

Функция помощника helperPACharMemPolyModel может также использовать полином памяти с перекрестной моделью условий, которая включает продвижение и отставание перекрестных условий памяти в дополнение к эффектам памяти PA и нелинейного усиления. Установите тип модели на 'Cross-Term Memory' исследовать эту модель.

Для дальнейшего исследования попробуйте различное время хранения в памяти и полиномиальные комбинации степени. Измените фактор сверхдискретизации и исследуйте его эффект на производительности модели PA. Измените функцию помощника helperPACharMemPolyModel, чтобы попробовать различные модели PA.

Используя модель PA для тестирования DPD

Сохраните матрицу коэффициентов модели PA, которая будет использоваться в Усилителе мощности (RF Blockset) для симуляции в уровне системы в Цифровом Предварительном искажении, чтобы Компенсировать Нелинейность Усилителя мощности.

frameSize = floor(length(paInput)/numFrames);
paIn.signals.values = double(reshape(paInput(1:frameSize*numFrames,1),numFrames,frameSize));
paIn.signals.dimensions = frameSize;
paIn.time = [];
save('PAcoefficientsAndInput.mat','modType','fitCoefMatMem','memLen','degLen','paIn','linearGaindB')

Приложение: поиск сетки в течение времени хранения в памяти и полиномиального порядка

Не прокомментируйте следующие линии, чтобы выполнить поиск сетки, когда функция стоимости будет ошибкой RMS процента вовремя. Сначала выберите тип модели.

modType = 'memPoly';
% rmsErrorTime = helperPACharGridSearchTime(paInput,paOutput,modType,overSamplingRate)

Повторите поиск, когда функция стоимости будет ошибкой RMS процента в частоте.

% rmsErrorFreq = helperPACharGridSearchFrequency(paInput,paOutput,modType,overSamplingRate)