Моделирование и верификация Backoff усилителя степени

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

Setup системы

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);

Создайте Системный объект счетчика степени чтобы измерить степень в нескольких точках в цепь обработки. Установите окно измерения счетчика степени равным 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 против. Pinхарактеристики для применения этого метода отката к характеристике PA.

Сводные данные

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

Приложение

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