

{"id":80,"date":"2018-04-30T13:16:10","date_gmt":"2018-04-30T11:16:10","guid":{"rendered":"https:\/\/project.inria.fr\/pisa\/?page_id=80"},"modified":"2018-07-24T09:03:52","modified_gmt":"2018-07-24T07:03:52","slug":"oscillator","status":"publish","type":"page","link":"https:\/\/project.inria.fr\/pisa\/examples\/oscillator\/","title":{"rendered":"Oscillator"},"content":{"rendered":"<p>In these several examples, we will analyse the stability of the following MMIC oscillator from the example library of ADS:<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Layout.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-125\" src=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Layout-300x179.png\" alt=\"\" width=\"300\" height=\"179\" srcset=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Layout-300x179.png 300w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Layout-150x89.png 150w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Layout-250x150.png 250w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Layout.png 761w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Most of the transmission lines in the design are modelled using MLIN components. The inductors and capacitors are taken from the DemoKit library. To determine the behaviour of the meandering transmission line above the first transistor, a Momentum simulation is used.<\/p>\n<p>To determine the circuit impedance, we connect a small-signal current source between the resonator and the oscillating transistor. With an AC simulation, we determine the resulting voltage at two nodes: \\(V_{int}\\) and \\(V_{out}\\).<\/p>\n<p>The simulation set-up is shown below:<\/p>\n<p><a href=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Oscillator_schematic.png\"><img decoding=\"async\" src=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Oscillator_schematic.png\" alt=\"\" width=\"500\" class=\"aligncenter size-full wp-image-298\" srcset=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Oscillator_schematic.png 1123w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Oscillator_schematic-300x212.png 300w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Oscillator_schematic-768x542.png 768w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Oscillator_schematic-1024x723.png 1024w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/Oscillator_schematic-150x106.png 150w\" sizes=\"(max-width: 1123px) 100vw, 1123px\" \/><\/a><\/p>\n<h2>Importing the simulation data<\/h2>\n<p>We start by loading the simulation data:<\/p>\n<pre lang=\"matlab\" line=\"1\"> \r\nsimdata = ADSimportSimData('Oscillator.mat');\r\n<\/pre>\n<p>simdata is now a matlab struct that contains the following fields: one field (sim1_AC) contains a struct with the AC simulation data, and a second field (sim2_HB) contains a struct for the HB data. We are interested in determining the unstable poles of the DC operating point, so we focus on the AC simulation data. simdata.sim1_AC contains the following fields:<\/p>\n<p><code>simdata.sim1_AC.Vres: [1\u00d711112 double]<br \/>\nsimdata.sim1_AC.Vint: [1\u00d711112 double]<br \/>\nsimdata.sim1_AC.Vout: [1\u00d711112 double]<br \/>\nsimdata.sim1_AC.freq: [1\u00d711112 double]<br \/>\n<\/code><\/p>\n<p>To determine the stability of the system, we analyse its impedance:<\/p>\n<p style=\"text-align: center;\">\\(\\displaystyle Z_m = \\frac{V_m}{I_{ex}}  \\)<\/p>\n<p>Because \\(I_{ex}=1\\) in our simulations, we have \\(Z_m = V_m\\) and we can immediately analyse the measured voltages to determine the unstable poles. We gather the three measured voltages into a 1-input 3-output FRM object:<\/p>\n<pre lang=\"matlab\" line=\"2\">\r\ndata = [simdata.sim1_AC.Vint;\r\n        simdata.sim1_AC.Vout;\r\n        simdata.sim1_AC.Vres];\r\nfreq = simdata.sim1_AC.freq;\r\nZ = FRM(Zdata,'Freq',freq,'Normalisation',LowpassNormalisation(freq));\r\n<\/pre>\n<h2>Project<\/h2>\n<p>To check whether the circuit is unstable, we use the Project function:<\/p>\n<pre lang=\"matlab\" line=\"6\">PROJ = PisaProject(Z);\r\n<\/pre>\n<p>We obtain the following results for the stable and unstable parts:<\/p>\n<p><a href=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMIC_osc_Projection-1.png\"><img decoding=\"async\" src=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMIC_osc_Projection-1.png\" alt=\"\" width=\"500\" class=\"aligncenter size-full wp-image-278\" srcset=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMIC_osc_Projection-1.png 875w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMIC_osc_Projection-1-300x225.png 300w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMIC_osc_Projection-1-768x576.png 768w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMIC_osc_Projection-1-150x112.png 150w\" sizes=\"(max-width: 875px) 100vw, 875px\" \/><\/a><\/p>\n<p>The data is clearly unstable, with a nice unstable resonance around 20GHz. <\/p>\n<h2>Estimate<\/h2>\n<p>To get a better estimate of the eventual oscillation frequency and of the start-up speed of the oscillator, we want to know the location of the unstable pole.<\/p>\n<p>To do this, we use the PisaEstimate function. To avoid computing the projection twice, we pass the result of our projection to as the &#8220;Projection&#8221; parameter to the PisaEstimate function.<\/p>\n<pre lang=\"matlab\" line=\"7\">poles = PisaEstimate(Z,'Projection',PROJ)\r\n<\/pre>\n<p>We don&#8217;t know the amount of unstable poles in the system yet, so we don&#8217;t specify an order to PisaEstimate. The function will then show a plot of the singular values of the Hankel matrix and ask for the order. In this case, we get the following singular values:<\/p>\n<p><a href=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMICosc_singularvals-1.png\"><img decoding=\"async\" src=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMICosc_singularvals-1.png\" alt=\"\" width=\"500\"  class=\"aligncenter size-full wp-image-286\" srcset=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMICosc_singularvals-1.png 875w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMICosc_singularvals-1-300x225.png 300w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMICosc_singularvals-1-768x576.png 768w, https:\/\/project.inria.fr\/pisa\/files\/2018\/04\/MMICosc_singularvals-1-150x112.png 150w\" sizes=\"(max-width: 875px) 100vw, 875px\" \/><\/a><\/p>\n<p>There are clearly two dominant singular values, which indicates that there are two (complex-conjugate) unstable poles in the circuit. We provide order 2 to PisaEstimate and obtain the  following poles<\/p>\n<pre lang=\"matlab\" line=\"7\">\r\nfprintf('poles estimated at: %g GHz\\n',abs(imag(poles(1)))\/2\/pi\/1e9);\r\nfprintf(' with a damping of %2.2g \\n',cos(pi-angle(poles(1))));\r\n<\/pre>\n<p><code>poles estimated at: 20.1575 GHz<br \/>\n with a damping of -0.014 <\/code><\/p>\n<h2>Download code and workspace<\/h2>\n<p><a href=\"https:\/\/project.inria.fr\/pisa\/files\/2018\/07\/PisaExamples.zip\">Click here<\/a> to download the ADS workspace with the examples together and the matlab code to run pisa.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In these several examples, we will analyse the stability of the following MMIC oscillator from the example library of ADS: Most of the transmission lines in the design are modelled using MLIN components. The inductors and capacitors are taken from the DemoKit library. To determine the behaviour of the meandering\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/project.inria.fr\/pisa\/examples\/oscillator\/\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":1391,"featured_media":0,"parent":69,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-80","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/project.inria.fr\/pisa\/wp-json\/wp\/v2\/pages\/80","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/project.inria.fr\/pisa\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/project.inria.fr\/pisa\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/pisa\/wp-json\/wp\/v2\/users\/1391"}],"replies":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/pisa\/wp-json\/wp\/v2\/comments?post=80"}],"version-history":[{"count":25,"href":"https:\/\/project.inria.fr\/pisa\/wp-json\/wp\/v2\/pages\/80\/revisions"}],"predecessor-version":[{"id":689,"href":"https:\/\/project.inria.fr\/pisa\/wp-json\/wp\/v2\/pages\/80\/revisions\/689"}],"up":[{"embeddable":true,"href":"https:\/\/project.inria.fr\/pisa\/wp-json\/wp\/v2\/pages\/69"}],"wp:attachment":[{"href":"https:\/\/project.inria.fr\/pisa\/wp-json\/wp\/v2\/media?parent=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}