В этом примере показано, как проектировать широкополосные согласующие сети для малошумящего усилителя (LNA).
На передней стороне РЧ-приемника LNA обычно находится непосредственно после антенны или после первого полосового фильтра, который следует за антенной. Его положение в цепи приемника гарантирует, что он имеет дело со слабыми сигналами, которые имеют значительное содержание шума. В результате LNA должен не только обеспечивать усиление таких сигналов, но также минимизировать свой собственный шумовой след в усиленном сигнале.
В этом примере вы разработаете LNA для достижения целевых характеристик коэффициента усиления и шума по заданной полосе пропускания с использованием скошенных LC-элементов. Подход, основанный на прямом поиске, используется для получения оптимальных значений элементов в сети согласования ввода и вывода.
Рис. 1. Согласование импеданса усилителя
Проектные спецификации следующие.
Усилитель - это усилитель LNA
Центральная частота = 250 МГц
Полоса пропускания = 100 МГц
Коэффициент усиления преобразователя больше или равен 10 дБ
Показатель шума меньше или равен 2,0 дБ
Работа между завершениями 50-Ohm
Создается совпадающая сеть для LNA с полосовым откликом, поэтому задается полоса пропускания целевых показателей соответствия, центральной частоты, усиления и шума.
BW = 100e6; % Bandwidth of matching network (Hz) fc = 250e6; % Center frequency (Hz) Gt_target = 10; % Transducer gain target (dB) NFtarget = 2; % Max noise figure target (dB)
Задайте импеданс источника, опорный импеданс и импеданс нагрузки.
Zs = 50; % Source impedance (Ohm) Z0 = 50; % Reference impedance (Ohm) Zl = 50; % Load impedance (Ohm)
Используйте read метод создания объекта усилителя с использованием данных из файла lnadata.s2p.
Unmatched_Amp = read(rfckt.amplifier,'lnadata.s2p'); Определите количество частотных точек для анализа и настройте частотный вектор.
Npts = 32; % No. of analysis frequency points fLower = fc - (BW/2); % Lower band edge fUpper = fc + (BW/2); % Upper band edge freq = linspace(fLower,fUpper,Npts); % Frequency array for analysis w = 2*pi*freq; % Frequency (radians/sec)
Используйте analyze способ выполнения анализа частотной области в частотных точках вектора freq.
analyze(Unmatched_Amp,freq,Zl,Zs,Z0); % Analyze unmatched amplifierLNA должен работать в стабильном регионе, исследовать стабильность, построить график Delta и K для транзистора. Используйте plot способ rfckt объект для печати Delta и K как функция частоты, чтобы увидеть, стабилен ли транзистор.
figure plot(Unmatched_Amp,'Delta','mag') hold all plot(Unmatched_Amp,'K') title('Device stability parameters') hold off grid on

Как показано на графике, 1 < 1 для всех частот в рассматриваемой полосе частот. Это означает, что устройство безусловно стабильно. Также важно просматривать характеристики усиления мощности и шума на одной полосе пропускания. Вместе с информацией о стабильности эти данные позволяют определить, могут ли быть достигнуты цели показателя усиления и шума.
plot(Unmatched_Amp,'Ga','Gt','dB')

На этом графике показано усиление мощности по всей полосе пропускания 100-MHz. Это указывает на то, что коэффициент усиления преобразователя изменяется линейно от 5,5 дБ до приблизительно 3,1 дБ и достигает только 4,3 дБ в центре полосы. Это также предполагает наличие достаточного запаса между усилением преобразователя. Gt и доступная прибыль Ga для достижения нашей цели Gt 10 дБ.
plot(Unmatched_Amp,'Fmin','NF','dB') axis([200 300 0 2]) legend('Location','NorthEast')

На этом графике показана вариация шумовой фигуры с частотой. Непревзойденный усилитель явно удовлетворяет требованию к целевому значению шума. Однако это изменится после включения сетей согласования входных и выходных данных. Вероятнее всего, показатель шума в МШУ превысил бы это требование.
Область работы - между 200 - 300 МГц. Поэтому выберите полосовую топологию для соответствующих сетей, которая показана здесь.
Рис. 2: Соответствие топологии сети
Выбранная топология, как видно на фиг.2, представляет собой опытную полосовую сеть с прямой связью параллельного резонаторного типа с верхней связью [2], которая первоначально настроена на среднюю геометрическую частоту по отношению к полосе пропускания работы.
N_input = 3; % Order of input matching network N_output = 3; % Order of output matching network wU = 2*pi*fUpper; % Upper band edge wL = 2*pi*fLower; % Lower band edge w0 = sqrt(wL*wU); % Geometric mean
Для исходной конструкции всем индукторам присваивается одинаковое значение на основе первого последовательного индуктора. Как указано в [3], выберите значение прототипа в виде единицы и используйте стандартные преобразования импеданса и частоты для получения денормализованных значений [1]. Значение для конденсатора в параллельной ловушке устанавливают, используя это значение индуктора, чтобы сделать его резонирующим на средней геометрической частоте. Следует отметить, что существует множество способов проектирования начальной согласующейся сети. В этом примере показан один возможный подход.
LvaluesIn = (Zs/(wU-wL))*ones(N_input,1); % Series and shunt L's [H] CvaluesIn = 1 / ( (w0^2)*LvaluesIn(2)); % Shunt C [F]
Используйте либо rfckt.seriesrlc или rfckt.shuntrlc для построения каждой ветви соответствующей сети. Затем сформируйте соответствующую сеть из этих отдельных ветвей, создав rfckt.cascade объект. Выходная согласующая сеть для этого примера совпадает с входной согласующей сетью.
LC_InitialIn = [LvaluesIn;CvaluesIn]; LvaluesOut = LvaluesIn; CvaluesOut = CvaluesIn; LC_InitialOut = [LvaluesOut;CvaluesOut]; InputMatchingNW = rfckt.cascade('Ckts', ... {rfckt.seriesrlc('L',LvaluesIn(1)), ... rfckt.shuntrlc('C',CvaluesIn,'L',LvaluesIn(2)), ... rfckt.seriesrlc('L',LvaluesIn(3))}); OutputMatchingNW = rfckt.cascade('Ckts', ... {rfckt.seriesrlc('L',LvaluesOut(1)), ... rfckt.shuntrlc('C',CvaluesOut,'L',LvaluesOut(2)), ... rfckt.seriesrlc('L',LvaluesOut(3))});
Объединение сети LNA, состоящей из согласующих сетей и усилителя, путем создания rfckt.cascade как показано в предыдущем разделе.
Matched_Amp = rfckt.cascade('Ckts', ... {InputMatchingNW,Unmatched_Amp,OutputMatchingNW});
Перед оптимизацией необходимо рассмотреть несколько моментов.
Объективная функция: объективная функция может быть построена по-разному в зависимости от проблемы под рукой. В этом примере целевая функция показана в файле ниже.
Выбор функции затрат: Функция затрат - это функция, которую вы хотели бы минимизировать (максимизировать) для достижения почти оптимальной производительности. Существует несколько способов выбора функции затрат. В этом примере имеется два требования, которые должны удовлетворять одновременно, т.е. коэффициент усиления и шум. Чтобы сначала создать функцию затрат, найдите разницу между самой современной оптимизированной сетью и целевым значением для каждого требования на каждой частоте. Функция затрат представляет собой L2-norm вектора значений ошибок коэффициента усиления и шумового показателя.
Переменные оптимизации: В этом случае это вектор значений, для конкретных элементов для оптимизации в соответствующей сети.
Метод оптимизации: метод прямого поиска, функция MATLAB ®fminsearch, используется в этом примере для выполнения оптимизации.
Количество итераций/оценок функций: установка максимального значения No. итераций и оценок функций для выполнения с целью компромисса между скоростью и качеством соответствия.
Значение допуска: укажите изменение значения целевой функции, при котором процесс оптимизации должен завершиться.
Целевая функция, используемая в процессе оптимизации fminsearch показан здесь.
type('broadband_match_amplifier_objective_function.m')function output = broadband_match_amplifier_objective_function(AMP,LC_Optim,freq,Gt_target,NF,Zl,Zs,Z0)
%BROADBAND_MATCH_AMPLIFIER_OBJECTIVE_FUNCTION Is the objective function.
% OUTPUT = BROADBAND_MATCH_AMPLIFIER_OBJECTIVE_FUNCTION(AMP,LC_OPTIM,FREQ,GT_TARGET,NF,Zl,Zs,Z0)
% returns the current value of the objective function stored in OUTPUT
% evaluated after updating the element values in the object, AMP. The
% inductor and capacitor values are stored in the variable LC_OPTIM.
%
% BROADBAND_MATCH_AMPLIFIER_OBJECTIVE_FUNCTION is an objective function of RF Toolbox demo:
% Designing Broadband Matching Networks (Part II: Amplifier)
% Copyright 2008 The MathWorks, Inc.
% Ensure positive element values
if any(LC_Optim<=0)
output = inf;
return;
end
% Update matching network elements - The object AMP has several properties
% among which the cell array 'ckts' consists of all circuit objects from
% source to load. Since RFCKT.CASCADE was used twice, first to form the
% matching network itself and a second time to form the LNA, we have to
% step through two sets of cell arrays to access the elements
for loop1 = 1:3
AMP.ckts{1}.ckts{loop1}.L = LC_Optim(loop1);
AMP.ckts{3}.ckts{loop1}.L = LC_Optim(loop1+4);
end
AMP.ckts{1}.ckts{2}.C = LC_Optim(4);
AMP.ckts{3}.ckts{2}.C = LC_Optim(8);
% Perform analysis on tuned matching network
Npts = length(freq);
analyze(AMP,freq,Zl,Zs,Z0);
% Calculate target parameters of the Amplifier
target_param = calculate(AMP,'Gt','NF','dB');
Gt = target_param{1}(1:Npts,1);
NF_amp = target_param{2}(1:Npts,1);
% Calculate Target Gain and noise figure error
errGt = (Gt - Gt_target);
errNF = (NF_amp - NF);
% Check to see if gain and noise figure target are achieved by specifying
% bounds for variation.
deltaG = 0.40;
deltaNF = -0.05;
errGt(abs(errGt)<=deltaG) = 0;
errNF(errNF<deltaNF) = 0;
% Cost function
err_vec = [errGt;errNF];
output = norm((err_vec),2);
% Animate
Gmax = (Gt_target + deltaG).*ones(1,Npts);
Gmin = (Gt_target - deltaG).*ones(1,Npts);
plot(AMP,'Gt','NF','dB');
hold on
plot(freq.*1e-6,Gmax,'r-*')
plot(freq.*1e-6,Gmin,'r-*')
legend('G_t','NF','Gain bounds','Location','East');
axis([freq(1)*1e-6 freq(end)*1e-6 0 Gt_target+2]);
hold off
drawnow;
Переменными оптимизации являются все элементы (индукторы и конденсаторы) входной и выходной согласующих сетей.
nIter = 125; % Max No of Iterations options = optimset('Display','iter','TolFun',1e-2,'MaxIter',nIter); % Set options structure LC_Optimized = [LvaluesIn;CvaluesIn;LvaluesOut;CvaluesOut]; LC_Optimized = fminsearch(@(LC_Optimized) broadband_match_amplifier_objective_function(Matched_Amp,... LC_Optimized,freq,Gt_target,NFtarget,Zl,Zs,Z0),LC_Optimized,options);
Iteration Func-count min f(x) Procedure
0 1 30.4869
1 9 28.3549 initial simplex
2 11 25.5302 expand
3 12 25.5302 reflect
4 13 25.5302 reflect
5 14 25.5302 reflect
6 16 22.8228 expand
7 17 22.8228 reflect
8 19 19.0289 expand
9 20 19.0289 reflect
10 21 19.0289 reflect
11 22 19.0289 reflect
12 24 14.8785 expand
13 25 14.8785 reflect
14 27 10.721 expand
15 28 10.721 reflect
16 29 10.721 reflect
17 31 9.84796 expand
18 32 9.84796 reflect
19 33 9.84796 reflect
20 34 9.84796 reflect
21 35 9.84796 reflect
22 37 9.84796 contract outside
23 39 9.84796 contract outside
24 41 9.84796 contract inside
25 43 9.64666 reflect
26 45 9.64666 contract inside
27 46 9.64666 reflect
28 48 9.64666 contract inside
29 49 9.64666 reflect
30 51 9.64666 contract inside
31 53 7.9372 expand
32 55 7.9372 contract outside
33 56 7.9372 reflect
34 57 7.9372 reflect
35 58 7.9372 reflect
36 59 7.9372 reflect
37 60 7.9372 reflect
38 62 5.98211 expand
39 63 5.98211 reflect
40 64 5.98211 reflect
41 65 5.98211 reflect
42 66 5.98211 reflect
43 68 4.31973 expand
44 70 4.31973 contract inside
45 71 4.31973 reflect
46 72 4.31973 reflect
47 73 4.31973 reflect
48 74 4.31973 reflect
49 75 4.31973 reflect
50 77 2.83135 expand
51 79 1.17624 expand
52 80 1.17624 reflect
53 81 1.17624 reflect
54 82 1.17624 reflect
55 84 0.691645 reflect
56 85 0.691645 reflect
57 86 0.691645 reflect
58 88 0.691645 contract inside
59 90 0.691645 contract outside
60 91 0.691645 reflect
61 93 0.691645 contract inside
62 95 0.691645 contract inside
63 96 0.691645 reflect
64 97 0.691645 reflect
65 98 0.691645 reflect
66 100 0.691645 contract inside
67 102 0.691645 contract outside
68 103 0.691645 reflect
69 105 0.691645 contract inside
70 107 0.497434 reflect
71 109 0.497434 contract inside
72 111 0.497434 contract inside
73 112 0.497434 reflect
74 114 0.497434 contract inside
75 116 0.497434 contract inside
76 118 0.444957 reflect
77 120 0.402851 expand
78 122 0 reflect
79 123 0 reflect
80 125 0 contract inside
81 127 0 contract inside
82 128 0 reflect
83 129 0 reflect
84 130 0 reflect
85 131 0 reflect
86 132 0 reflect
87 133 0 reflect
88 134 0 reflect
89 135 0 reflect
90 137 0 contract inside

91 139 0 contract outside Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-02
Когда процедура оптимизации прекращается, значения оптимизированного элемента сохраняются в LC_Optimized. Следующий код обновляет входную и выходную согласующую сеть с этими значениями.
for loop1 = 1:3 Matched_Amp.ckts{1}.ckts{loop1}.L = LC_Optimized(loop1); Matched_Amp.ckts{3}.ckts{loop1}.L = LC_Optimized(loop1 + 4); end Matched_Amp.ckts{1}.ckts{2}.C = LC_Optimized(4); Matched_Amp.ckts{3}.ckts{2}.C = LC_Optimized(8); analyze(Matched_Amp,freq,Zl,Zs,Z0); % Analyze LNA
Результаты оптимизации можно увидеть, построив график коэффициента усиления преобразователя и показателя шума по ширине полосы и сравнив его с непревзойденным усилителем.
plot(Matched_Amp,'Gt') hold all plot(Unmatched_Amp,'Gt') plot(Matched_Amp,'NF') plot(Unmatched_Amp,'NF') legend('G_t - Matched','G_t - Unmatched','NF - Matched',... 'NF - Unmatched','Location','East') axis([freq(1)*1e-6 freq(end)*1e-6 0 12]) hold off

График показывает, что целевые требования как для коэффициента усиления, так и для показателя шума выполнены. Чтобы понять эффект оптимизации по отношению только к коэффициенту усиления преобразователя, используйте первый выбор для функции стоимости (которая включает только член коэффициента усиления) в целевой функции, показанной выше.
Оптимизированные значения индуктора и конденсатора для входной согласующей сети показаны ниже.
Lin_Optimized = LC_Optimized(1:3)
Lin_Optimized = 3×1
10-7 ×
0.5722
0.9272
0.3546
Cin_Optimized = LC_Optimized(4)
Cin_Optimized = 6.8526e-12
Аналогично, здесь приведены оптимизированные значения индуктора и конденсатора для выходной согласующей сети.
Lout_Optimized = LC_Optimized(5:7)
Lout_Optimized = 3×1
10-6 ×
0.0517
0.1275
0.0581
Cout_Optimized = LC_Optimized(8)
Cout_Optimized = 5.4408e-12
[1] Людвиг, Рейнгольд и Джин Богданов. RF Circuit Design: теория и применение. Река Верхнее Седло, Нью-Джерси: Прентис-Холл, 2009.
[2] Катберт, Томас Р. Широкополосные сети с прямой связью и соответствующие радиочастотные сети. Гринвуд, ковчег: Т.Р. Катберт, 1999.
[3] Катберт, Т.Р. «Метод оптимизации реальной частоты элементов уравнивателя широкополосной связи». В 2000 году Международный симпозиум IEEE по схемам и системам. Новые технологии для XXI века. Слушания (кошка IEEE № 00CH36353), 5:401-4. Женева, Швейцария: Пресса Политех. Юнив. Романдес, 2000. https://doi.org/10.1109/ISCAS.2000.857453.
[4] Позар, Дэвид М. Микроволновая инженерия. 4-й ред. Хобокен, Нью-Джерси: Уайли, 2012.