exponenta event banner

Моделирование и проверка задержки усилителя мощности

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

Настройка системы

totalTime = 0;
M = 16; % Modulation order
fs = 1e6; % Sample rate, in Hz (also used for measurement bandwidth)
sigDuration = 0.01; % sec
msgLen = round(sigDuration*fs); % samples

Укажите усилитель как табличный объект. Используя данные измеренного усилителя, хранящиеся в электронной таблице Excel, считывайте выходную мощность по сравнению с входной мощностью и изменение фазы по сравнению с входной мощностью. Мощности даны в дБм, а фазовое изменение в градусах. Опорный импеданс используется для преобразования значений напряжения сигнала в значения мощности.

table = table2array(readtable("PACharacteristic.xlsx", ...
  "PreserveVariableNames",true));
mnl = comm.MemorylessNonlinearity("Method","Lookup table", ...
  "Table",table,"ReferenceImpedance",1);

Определите входную мощность, которая приводит к пиковой выходной мощности. Та входная мощность - пункт, от которого будет замедлен сигнал. Используйте входной возврат, чтобы определить необходимую власть сигнала во входе к усилителю.

[pkOpPwr, idxPk] = max(mnl.Table(:,2));  % dBm
ipPwrAtPkOut = mnl.Table(idxPk,1);  % dBm
IBO = 6;  % input backoff set point, dB
rqdIpPwr = ipPwrAtPkOut - IBO;  % dBm

Постройте график характеристик усилителей AM/AM и AM/PM. Значения, выводимые на печать, соответствуют значениям в электронной таблице.

plot(mnl);

Figure contains 2 axes. Axes 1 with title Table-based AM/AM contains 2 objects of type line. Axes 2 with title Table-based AM/PM contains 2 objects of type line.

Моделирование и проверка системы

Создайте приподнятый косинусный фильтр передачи System object™ для формирования импульсов.

txFilt = comm.RaisedCosineTransmitFilter(...
  'Shape','Square root', ...
  'RolloffFactor',0.2, ...
  'FilterSpanInSymbols',10, ...
  'OutputSamplesPerSymbol',4);

Создайте объект System для измерения мощности в нескольких точках цепочки обработки. Установите в окне измерения измерителя мощности значение 10 мс.

pm = powermeter(...
  "Measurement","Average power", ...
  "WindowLength",round(sigDuration*fs), ...
  "ReferenceLoad",mnl.ReferenceImpedance, ...
  "PowerUnits","dBm");

Генерировать модулированный сигнал, фильтровать его, масштабировать до -10 дБм и измерять мощности. Отфильтрованный сигнал имеет приблизительно постоянную амплитуду на протяжении всей его длительности, поэтому окно измерения мощности может продолжаться на протяжении всей длительности.

filtTransient = txFilt.FilterSpanInSymbols*txFilt.OutputSamplesPerSymbol;
msg = randi([0 M-1],msgLen+filtTransient,1);
modOut = qammod(msg,M,'UnitAveragePower',true);  % 0 dBW (30 dBm)
filtOut = txFilt(modOut);
filtOut = filtOut(1+filtTransient:end);  % Truncate beginning transient
PFiltOutdBm = pm(filtOut);
Pdesired = -10;  % dBm
scaleFactor = 10.^((Pdesired - PFiltOutdBm(end))/20);
filtOut = scaleFactor * filtOut;
reset(pm);
PFiltOutdBm = pm(filtOut);
fprintf('The filtered, scaled signal power is %4.2f dBm.\n',PFiltOutdBm(end))
The filtered, scaled signal power is -10.00 dBm.
PFiltOutdBW = PFiltOutdBm(end) - 30;

Масштабируйте входную мощность усилителя до требуемого значения. Измеренная мощность отраженного сигнала должна быть равна входной мощности на пиковом выходе (5 дБм) за вычетом входного отката (6 дБ). Измеритель мощности проверяет правильность отключения сигнала.

gain = helperBackoffGain(ipPwrAtPkOut,PFiltOutdBm(end),IBO);
ampIn = gain * filtOut;
reset(pm);
PAmpIndBm = pm(ampIn);
fprintf('The backed off signal power is %4.2f dBm.\n',PAmpIndBm(end))
The backed off signal power is -1.00 dBm.

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

PAmpInInst = abs(ampIn).^2 / mnl.ReferenceImpedance;
PAmpInInstdBm = 10*log10(PAmpInInst) + 30;
edges = -29:9;
histogram(PAmpInInstdBm,edges,"Normalization","probability")
title("Instantaneous Power Probability");
xlabel("Instantaneous P_i_n (dBm)");
ylabel("Probability");
xlim([-30 10]);
grid on;

Figure contains 2 axes. Axes 1 with title Instantaneous Power Probability contains an object of type histogram. Axes 2 with title Table-based AM/PM contains 2 objects of type line.

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

ampOut = mnl(ampIn);
PAmpOutdBm = pm(ampOut);
fprintf('The amplifier output power is %4.2f dBm.\n',PAmpOutdBm(end))
The amplifier output power is 40.63 dBm.

Вычислите средний коэффициент усиления усилителя.

ampGaindB = PAmpOutdBm(end) - PAmpIndBm(end);
fprintf('The amplifier gain is %4.2f dB.\n',ampGaindB)
The amplifier gain is 41.63 dB.

Постройте график указанных и фактических мгновенных значений Pout и Pin, чтобы показать, что фактическое поведение усилителя соответствует поведению, заданному объектом на основе таблицы.

figure;
hFig = helperPlotAMAM(mnl); % Specified Pout vs. Pin
hold on;
pAmpOutInst = abs(ampOut).^2 / mnl.ReferenceImpedance;
pAmpOutInstdBm = 10*log10(pAmpOutInst) + 30;  % Actual Pout vs Pin 
plot(PAmpInInstdBm,pAmpOutInstdBm,'r*');
grid on;
lines = hFig.Children.Children;
legend(lines([2 1]),"Specified","Actual","Location","Northwest");

Figure contains an axes. The axes with title Specified and Actual AM/AM contains 3 objects of type line. These objects represent Specified, Actual.

Создайте диаграмму совокупности для иллюстрации входных и выходных сигналов усилителя. Диаграмма созвездия 16QAM созвездия показывает, что выходной сигнал усилителя слегка повернут (искажение AM/PM), и угловые точки испытывают некоторое сжатие усиления (искажение AM/AM).

constDiag = comm.ConstellationDiagram(...
  'ShowReferenceConstellation',false, ...
  'SamplesPerSymbol',txFilt.OutputSamplesPerSymbol, ...
  'ShowLegend',true, ...
  'ChannelNames',{'Amp Input','Amp Output'});

% Set plot limits
maxLim = 2 * max(real(filtOut));
constDiag.XLimits = [-maxLim maxLim];
constDiag.YLimits = [-maxLim maxLim];

magFiltOut = sqrt(mean(abs(filtOut).^2));
magAmpOut = sqrt(mean(abs(ampOut).^2));
gain = magAmpOut / magFiltOut;
constDiag([filtOut,ampOut/gain]);  % Scale amp output for plotting ease

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. These objects represent Amp Input, Amp Output.

Изучение примера

Можно поэкспериментировать с примером, пробуя различные уровни отката или модулированные сигналы (например, 64QAM или OFDM). Вы можете загрузить электронную таблицу с собственными табличными Pout против Pincharacteristics, чтобы применить этот метод задержки к характеристике PA.

Резюме

В этом примере показано, как применить обратную связь к входному сигналу нелинейного усилителя. Метод был проверен путем сравнения   поведения Pout и Pin указанных и фактических данных.

Приложение

Эти вспомогательные файлы используются в примере: