В этом примере показано, как спроектировать широкополосные сети соответствия для низкого шумового усилителя (LNA). Во фронтэнде получателя РФ LNA обычно сразу найден после антенны или после первого полосового фильтра, который следует за антенной. Его положение в цепи получателя гарантирует, что она имеет дело со слабыми сигналами, которые имеют значительное шумовое содержимое. В результате LNA должен не только предоставить усиление таким сигналам, но также и минимизировать его собственное шумовое место на усиленном сигнале. В этом примере вы спроектируете LNA, чтобы достигнуть целевого усиления и шумовых технических требований фигуры по заданной пропускной способности, с помощью смешанных элементов LC. Основанный на прямом поиске подход используется, чтобы достигнуть оптимальных значений элемента в сети соответствия ввода и вывода.
Рисунок 1: Импеданс, соответствующий усилителя
Технические требования проекта следующие
Усилитель является усилителем LNA
Центральная частота = 250 МГц
Пропускная способность = 100 МГц
Усиление преобразователя, больше, чем или равный 10 дБ
Шумовая фигура, меньше чем или равная 2,0 дБ
Работа между завершениями на 50 Ом
Вы создаете соответствующую сеть для 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'); % Create amplifier object
Задайте количество точек частоты, чтобы использовать в анализе и настроить вектор частоты.
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
метод, чтобы выполнить анализ частотного диапазона на частоте указывает в векторной частоте.
analyze(Unmatched_Amp,freq,Zl,Zs,Z0); % Analyze unmatched amplifier
LNA должен действовать в стабильной области, таким образом, наш первый шаг должен построить 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
Когда график показывает, и для всех частот в пропускной способности интереса. Это означает, что устройство безусловно устойчиво. Также важно просмотреть усиление степени и шумовое поведение фигуры через ту же пропускную способность. Вместе с информацией об устойчивости эти данные позволяют вам определять, можно ли усилению и шумовым целям фигуры соответствовать.
plot(Unmatched_Amp,'Ga','Gt','dB')
Этот график, показывает усиление степени через пропускную способность на 100 МГц. Это указывает, что усиление преобразователя варьируется линейно между 5,5 дБ приблизительно к 3,1 дБ и достигает только 4,3 дБ в центре полосы. Это также предполагает, что существует достаточная высота между усилением преобразователя Gt
и доступное усиление Ga, чтобы достигнуть нашего целевого Gt
из 10 дБ.
plot(Unmatched_Amp,'Fmin','NF','dB') axis([200 300 0 2]) legend('Location','NorthEast')
Этот график показывает изменение шумовой фигуры с частотой. Несопоставленный усилитель ясно удовлетворяет целевое шумовое требование фигуры. Однако это изменилось бы, если сети соответствия ввода и вывода включены. Скорее всего, шумовая фигура LNA превысила бы требование.
Область операции между 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-норма вектора усиления и шумовых ошибочных значений фигуры.
Переменные оптимизации: В этом случае это - вектор значений для определенных элементов, чтобы оптимизировать в соответствующей сети.
Метод оптимизации: прямой основанный на поиске метод, MATLAB® функционирует fminsearch
, используется в этом примере, чтобы выполнить оптимизацию.
Количество итераций/вычислений функции: Установите максимум нет. из итераций и вычислений функции, чтобы выполнить, чтобы к компромиссу между скоростью и качеством соответствия.
Значение допуска: Задайте изменение значения целевой функции, в котором должен завершить работу процесс оптимизации.
Целевая функция используется во время процесса оптимизации 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] Людвиг, Райнхольд и Джин Богданов. Проектирование схем РФ: теория и приложения. Верхний Сэддл-Ривер, NJ: Prentice Hall, 2009.
[2] Катберт, широкополосные согласующие радиочастотные цепи с непосредственной связью Томаса Р. Гринвуд, ковчег.: Т.Р. Катберт, 1999.
[3] Катберт, T.R. “Действительный Метод Частоты, Оптимизируя Широкополосные Элементы Эквалайзера”. В 2 000 IEEE Международный Симпозиум по Схемам и Системам. Emerging Technologies в течение 21-го Века. Продолжения (CAT № 00CH36353 IEEE), 5:401–4. Женева, Швейцария: Политехнология Нажатий. Унив Romandes, 2000. https://doi.org/10.1109/ISCAS.2000.857453.
[4] Pozar, Дэвид М. Микроуов Энджиниринг. 4-й редактор Хобокен, NJ: Вайли, 2012.