

{"id":142,"date":"2018-07-27T16:12:24","date_gmt":"2018-07-27T14:12:24","guid":{"rendered":"https:\/\/project.inria.fr\/puma\/?page_id=142"},"modified":"2018-09-10T17:49:08","modified_gmt":"2018-09-10T15:49:08","slug":"low-noise-amplifier","status":"publish","type":"page","link":"https:\/\/project.inria.fr\/puma\/examples\/low-noise-amplifier\/","title":{"rendered":"Low noise amplifier"},"content":{"rendered":"<p>In this script, we design an input and output matching network for a low-noise amplifier based around the transistor infineon BFP520. We can see the ADS schematic of the transistor with the biasing network in the following picture<\/p>\n<p><a href=\"https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_alone.png\"><img decoding=\"async\" class=\"aligncenter wp-image-859 size-full\" src=\"https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_alone.png\" alt=\"\" width=\"600\" srcset=\"https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_alone.png 4582w, https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_alone-300x181.png 300w, https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_alone-768x463.png 768w, https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_alone-1024x617.png 1024w, https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_alone-150x90.png 150w, https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_alone-250x150.png 250w\" sizes=\"(max-width: 4582px) 100vw, 4582px\" \/><\/a><\/p>\n<p>The schematic of the desired system is the following<\/p>\n<p><a href=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/schematic.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-619 size-full alignnone\" src=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/schematic.png\" alt=\"\" width=\"500\" height=\"238\" \/><\/a><\/p>\n<h2 style=\"text-align: left;\">Loading the simulation data<\/h2>\n<p>We simulated the S-parameters and noise parameters of the transistor combined with its biasing network. Those results are stored in the BFP520noise mat file.<\/p>\n<p>We use the function\u00a0<em>ADSimportSimData<\/em> from the\u00a0 <em>ADSimportData<\/em> toolbox to load the data from <em>ADS<\/em> into the matlab workspace.<\/p>\n<pre lang=\"MATLAB\" line=\"1\">% Load the simulation data\r\nsimdata = ADSimportSimData('BFP520noise');\r\n<\/pre>\n<p>with the data imported from <em>ADS<\/em> we need to construct a <em>MultiPort<\/em> object containing the reflection \\(S_{opt}\\) and a <em>TwoPort<\/em> object with the scattering parameters of the transistor.<\/p>\n<pre lang=\"MATLAB\" line=\"3\">% Construct a one-port with Sopt\r\nSopt = MultiPort(reshape(simdata.sim1_S.Sopt,1,1,[]),'Freq',simdata.sim1_S.freq);\r\n% Construct a two-port that contains the transistor\r\nTran = TwoPort(simdata.sim1_S.S,'Freq',simdata.sim1_S.freq);\r\n<\/pre>\n<p>The frequency band we consider is mainly limited by the design of the biasing network here. With a better inductor, a low noise figure can be obtained over a larger band.<\/p>\n<pre lang=\"MATLAB\" line=\"7\">% Define the frequency band\r\nBAND = FreqBand('Band',[2e9,4e9]);\r\n<\/pre>\n<h2 style=\"text-align: left;\">Input matching<\/h2>\n<p>First we design the input matching network, such that the transistor input &#8220;sees&#8221; Sopt. We do this by synthesising a matching network where conj(Sopt) is the load. The matching network will show at the output the conjugate of the load reflection. Thus we obtain a matching network adapted to \\(50\\Omega\\) at the input and synthesizing \\(S_{opt} \\) at the output.<\/p>\n<p><a href=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/schematic_input.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-620 size-full alignnone\" src=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/schematic_input.png\" alt=\"\" width=\"260\" height=\"330\" \/><\/a><\/p>\n<p>We create the input matching object by choosing\u00a0 order 2\u00a0 for the rational approximation and order 1 for the matching network. Thus we obtain a system of order 3 in this case.<\/p>\n<pre lang=\"MATLAB\" line=\"9\">% Create matching problem to match to conjugate of Sopt\r\nINPUTMATCHING = matching(conj(Sopt),...\r\n                        'SystemOrder',3,...\r\n                        'ApproximationOrder',2,...\r\n                        'Passband',BAND);\r\n<\/pre>\n<p>Next the rational approximation of the load is performed<\/p>\n<pre lang=\"MATLAB\" line=\"14\">% Rational approximation\r\nINPUTMATCHING.rationalApproximation;\r\n<\/pre>\n<p>The plot function can be used check rational approximation.<\/p>\n<pre lang=\"MATLAB\" line=\"16\">% Plot the result of the rational approx\r\nfigure\r\nplot(INPUTMATCHING,'Config','dw')\r\nlegend('show','Location','Best');\r\n<\/pre>\n<p><a href=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-641 size-full\" src=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx1.png\" alt=\"\" width=\"570\" height=\"413\" srcset=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx1.png 570w, https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx1-300x217.png 300w, https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx1-150x109.png 150w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/a>The obtained fit is very good. Then we can solve the matching problem now and plot the results.<\/p>\n<pre lang=\"MATLAB\" line=\"20\">% Solve the matching problemINPUTMATCHING.solve;\r\n% Extract the results\r\nInputResults = INPUTMATCHING.Results;\r\n<\/pre>\n<p>In order to plot the result, the rational model of the matching network need to be evaluated at the frequency points. We can do this with the function <em>getResponse<\/em>. After that the reflection at the second port of the matching network can be compared with the optimal reflection \\(S_{opt} \\)<\/p>\n<pre lang=\"MATLAB\" line=\"23\">% Evaluate the input matching network on the system frequencies\r\nInputFilter = InputResults.FILTER.getResponse(Sopt.Freq);\r\n% Plot the S22 of the filter and compare to Sopt\r\nfigure\r\nclf, hold on\r\nplot(InputFilter.S(2,2,:),'Config','da','DisplayName','S22 of input matching filter');\r\nplot(Sopt,'Config','da','DisplayName','Sopt');\r\nlegend('show','Location','Best')\r\n<\/pre>\n<p><a href=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-647 size-full\" src=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result1.png\" alt=\"\" width=\"570\" height=\"413\" srcset=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result1.png 570w, https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result1-300x217.png 300w, https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result1-150x109.png 150w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/a><\/p>\n<h2 style=\"text-align: left;\">Output matching<\/h2>\n<p>Once we have the input matching network, we compute the S22 of the combination of the input matching and transistor and compute the matching filter for the total network.<\/p>\n<p><a href=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/schematic_output.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-621 size-full alignnone\" src=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/schematic_output.png\" alt=\"\" width=\"400\" height=\"333\" \/><\/a><\/p>\n<p>To do that we can just cascade the input filter and the transistor with the * operator<\/p>\n<pre lang=\"MATLAB\" line=\"31\">% Connect the Filter S22 to the input of the transistor\r\nSys = InputFilter*Tran;\r\n<\/pre>\n<p>Note that this design approach will not work every time. It is possible that stability issues are encountered at this stage, but working with an unconditionally stable transistor+biasing will resolve this issue.<\/p>\n<p>Now we create the matching object for the transistor output. We pick again order 2 for the rational approximation and 1 for the matching network (system of order 3).<\/p>\n<pre lang=\"MATLAB\" line=\"33\">% Create matching problem to match to conjugate of Sopt\r\nOUTPUTMATCHING = matching(Sys(2,2,:),...\r\n                        'SystemOrder',3,...\r\n                        'ApproximationOrder',2,...\r\n                        'Passband',BAND);\r\n<\/pre>\n<p>Next we compute the rational approximation of the load seen at the transistor output<\/p>\n<pre lang=\"MATLAB\" line=\"38\">% Rational approximation\r\nOUTPUTMATCHING.rationalApproximation;\r\n% plot the result of the rational approx\r\nfigure(54654)\r\nplot(OUTPUTMATCHING,'Config','dw')\r\nlegend('show','Location','Best');\r\n<\/pre>\n<p><a href=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-656 size-full\" src=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx2.png\" alt=\"\" width=\"570\" height=\"413\" srcset=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx2.png 570w, https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx2-300x217.png 300w, https:\/\/project.inria.fr\/puma\/files\/2018\/08\/approx2-150x109.png 150w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/a><\/p>\n<p>Finaly we solve the output matching problem and extract the results<\/p>\n<pre lang=\"MATLAB\" line=\"44\">% Solve the matching problem\r\nOUTPUTMATCHING.solve;\r\n% Extract the results\r\nOutputResults = OUTPUTMATCHING.Results;\r\n% Evaluate the output filter on the frequency points\r\nOutputFilter = OutputResults.FILTER.getResponse(Sopt.Freq);\r\n<\/pre>\n<p>In order to plot the obtained global system we can use again the * operator to cascade all objects and then the plot function. However note that the output matching network is matched to the transistor output at port 2. Therefore this network need to be reverted before cascading.<\/p>\n<pre lang=\"MATLAB\" line=\"50\">% Last filter is reverted (matching is performed at port 2 of the filter)\r\nTotalSystem = InputFilter*Tran*(OutputFilter(end:-1:1,end:-1:1,:));\r\n% Plot the result\r\nfigure\r\nclf, hold on;\r\nplot(OUTPUTMATCHING.Passband);\r\nplot(TotalSystem,'DisplayName','S');\r\nylim([-60,30]);\r\ntitle('S parameters of the global system');\r\nlegend('show','Location','Best')\r\n<\/pre>\n<p><a href=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-660 size-full\" src=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result2.png\" alt=\"\" width=\"570\" height=\"413\" srcset=\"https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result2.png 570w, https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result2-300x217.png 300w, https:\/\/project.inria.fr\/puma\/files\/2018\/08\/result2-150x109.png 150w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/a><\/p>\n<p>Finally, we can add both input and output matching networks in the ADS design. We can see next the resulting schematic <a href=\"https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_matched.png\"><img decoding=\"async\" class=\"aligncenter wp-image-860 size-full\" src=\"https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_matched.png\" alt=\"\" width=\"700\" srcset=\"https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_matched.png 7016w, https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_matched-300x212.png 300w, https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_matched-768x543.png 768w, https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_matched-1024x724.png 1024w, https:\/\/project.inria.fr\/puma\/files\/2018\/09\/LNA_matched-150x106.png 150w\" sizes=\"(max-width: 7016px) 100vw, 7016px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this script, we design an input and output matching network for a low-noise amplifier based around the transistor infineon BFP520. We can see the ADS schematic of the transistor with the biasing network in the following picture The schematic of the desired system is the following Loading the simulation\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/project.inria.fr\/puma\/examples\/low-noise-amplifier\/\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":1445,"featured_media":0,"parent":132,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-142","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/project.inria.fr\/puma\/wp-json\/wp\/v2\/pages\/142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/project.inria.fr\/puma\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/project.inria.fr\/puma\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/puma\/wp-json\/wp\/v2\/users\/1445"}],"replies":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/puma\/wp-json\/wp\/v2\/comments?post=142"}],"version-history":[{"count":54,"href":"https:\/\/project.inria.fr\/puma\/wp-json\/wp\/v2\/pages\/142\/revisions"}],"predecessor-version":[{"id":867,"href":"https:\/\/project.inria.fr\/puma\/wp-json\/wp\/v2\/pages\/142\/revisions\/867"}],"up":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/puma\/wp-json\/wp\/v2\/pages\/132"}],"wp:attachment":[{"href":"https:\/\/project.inria.fr\/puma\/wp-json\/wp\/v2\/media?parent=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}