Симулируйте и проверьте возврат усилителя мощности

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

Системный 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, считайте выходную мощность по сравнению с входной мощностью и фазовый переход по сравнению с входной мощностью. Степени даны в dBm и фазовом переходе в градусах. Ссылочный импеданс используется, чтобы преобразовать значения напряжения сигнала, чтобы привести в действие значения.

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/PM. Нанесенные на график значения совпадают с теми в электронной таблице.

plot(mnl);

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

Системная симуляция и верификация

Создайте повышенную Систему фильтра передачи косинуса 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 dBm и степеням меры. Отфильтрованный сигнал является примерно постоянной амплитудой в своей длительности, таким образом, окно измерения мощности может расширить по целой длительности.

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 dBm) меньше входной возврат (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 dBm, где усилитель ведет себя нелинейно.

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 objects. Axes object 1 with title Instantaneous Power Probability contains an object of type histogram. Axes object 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 object. The axes object with title Specified and Actual AM/AM contains 3 objects of type line. These objects represent Specified, Actual.

Создайте схему созвездия, чтобы проиллюстрировать сигналы ввода и вывода усилителя. Схема созвездия 16QAM созвездие показывает усилитель, выход немного вращался (искажение AM/PM), и угловые точки подверглись некоторому сжатию усиления (искажение 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

Исследование примера

Можно экспериментировать с примером путем попытки различных уровней возврата или модулируемых сигналов (e.g. 64QAM или OFDM). Можно загрузить электронную таблицу с собственным основанным на таблице Pout по сравнению с. Pinхарактеристики, чтобы применить этот метод возврата к вашей характеристике усилителя мощности (УМ).

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

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

Приложение

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