{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Pole-Zero (PZ) simulation example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this short example we will simulate a simple [RLC circuit](https://en.wikipedia.org/wiki/RLC_circuit) with the [ahkab](https://ahkab.github.io/ahkab/) simulator.\n", "\n", "In particular, we consider a series resonant RLC circuit. If you need to refresh your knowledge on 2nd filters, you may [take a look at this page](http://hyperphysics.phy-astr.gsu.edu/hbase/electric/serres.html).\n", "\n", "## The plan: what we'll do\n", "\n", "### 0. A brief analysis of the circuit\n", "\n", "This should be done with pen and paper, we'll just mention the results. The circuit is pretty simple, feel free to skip if you find it boring.\n", "\n", "### 1. How to describe the circuit with ahkab\n", "\n", "We'll show this:\n", "\n", "* from Python,\n", "* and briefly with a netlist deck.\n", "\n", "### 2. Pole-zero analysis\n", "\n", "* We will extract poles and zeros.\n", "* We'll use them to build input-output transfer function, which we evaluate.\n", "\n", "### 3. AC analysis\n", "\n", "* We will run an AC analysis to evaluate numerically the transfer function.\n", "\n", "### 4. Symbolic analysis\n", "\n", "* We'll finally run a symbolic analysis as well.\n", "* Once we have the results, we'll substitute for the real circuit values and verify both AC and PZ analysis.\n", "\n", "### 5. Conclusions\n", "\n", "We will check that the three PZ, AC and Symbolic analysis match!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The circuit\n", "\n", "The circuit we simulate is a very simple one:\n", "\n", "INSERT\n", "\n", "## 0. Theory\n", "\n", "Once one proves that the current flowing in the only circuit branch in the Laplace domain is given by:\n", "\n", "$$I(s) = \\frac{1}{L}\\cdot\\frac{s}{s^2 + 2\\alpha\\cdot s + \\omega_0^2}$$\n", "\n", "Where:\n", "\n", "* $s$ is the Laplace varible, $s = \\sigma + j \\omega$:\n", " * $j$ is the imaginary unit,\n", " * $\\omega$ is the angular frequency (units rad/s).\n", "* $\\alpha$ is known as the *Neper frequency* and it is given by $R/(2L)$,\n", "* $\\omega_0$ is the *(undamped) resonance frequency, equal to $(\\sqrt{LC})^{-1}$.\n", "\n", "It's easy to show that the pass-band transfer function we consider in our circuit, $V_{OUT}/V_{IN}$, has the expression:\n", "\n", "$$H(s) = \\frac{V_{OUT}}{V_{IN}}(s) = k_0 \\cdot\\frac{s}{s^2 + 2\\alpha\\cdot s + \\omega_0^2}$$\n", "\n", "Where the coeffiecient $k_0$ has value $k_0 = R/L$.\n", "\n", "Solving for poles and zeros, we get:\n", "\n", "* One zero:\n", " * $z_0$, located in the origin.\n", "* Two poles, $p_0$ and $p_1$:\n", " * $p_{0,1} = - \\alpha \\pm \\sqrt{\\alpha^2 - \\omega_0^2}$\n", "\n", "## 1. Describe the circuit with ahkab\n", "\n", "Let's call `ahkab` and describe the circuit above.\n", "\n", "First we need to import `ahkab`:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline\n", "figsize = (10, 7)\n", "# libraries we need\n", "import ahkab" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "We're using ahkab 0.16\n" ] } ], "source": [ "print \"We're using ahkab %s\" % ahkab.__version__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we create a new circuit object titled 'RLC bandpass', which we name `bpf` from Band-Pass Filter:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "bpf = ahkab.Circuit('RLC bandpass')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A circuit is made of, internally, components and nodes. For now, our `bpf` circuit is empty and really of not much use.\n", "\n", "We wish to define our nodes, our components, specifying their connection to the appropriate nodes and inform the circuit instance about the what we did.\n", "\n", "It sounds complicated, but it is actually very simple, also thanks to the convenience functions `add_*()` in the `Circuit` instances ([circuit documentation](https://ahkab.readthedocs.org/en/latest/circuit.html)).\n", "\n", "We now add the inductor `L1`, the capacitor `C1`, the resistor `R1` and the input source `V1`:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "bpf = ahkab.Circuit('RLC bandpass')\n", "bpf.add_inductor('L1', 'in', 'n1', 1e-6)\n", "bpf.add_capacitor('C1', 'n1', 'out', 2.2e-12)\n", "bpf.add_resistor('R1', 'out', bpf.gnd, 13)\n", "# we also give V1 an AC value since we wish to run an AC simulation\n", "# in the following\n", "bpf.add_vsource('V1', 'in', bpf.gnd, dc_value=1, ac_value=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that:\n", "* the nodes to which they get connected (`'in'`, `'n1'`, `'out'`...) are nothing but strings. If you prefer handles, you can call the `create_node()` method of the circuit instance `bpf` ([create_node documentation](https://ahkab.readthedocs.org/en/latest/circuit.html#ahkab.circuit.Circuit.create_node).\n", "* Using the convenience methods `add_*`, the nodes are not explicitely added to the circuit, but they are in fact automatically taken care of behind the hood." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have successfully defined our circuit object `bpf`.\n", "\n", "Let's see what's in there and generate a netlist:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "* RLC bandpass\n", "L1 in n1 1e-06\n", "C1 n1 out 2.2e-12\n", "R1 out 0 13\n", "V1 in 0 type=vdc value=1 vac=1 \n" ] } ], "source": [ "print(bpf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above text defines the same circuit in netlist form. It has the advantage that it's a very coincise piece of text and that the syntax resembles (not perfectly yet) that of simulators such as [SPICE](https://newton.ex.ac.uk/teaching/CDHW/Electronics2/userguide/).\n", "\n", "If you prefer to run `ahkab` from the command line, be sure to check the [Netlist syntax doc page](https://ahkab.readthedocs.org/en/latest/help/Netlist-Syntax.html) and to add the simulation statements, which are missing above." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. PZ analysis\n", "\n", "The analysis is set up easily by calling `ahkab.new_pz()`. Its signature is:\n", "\n", " ahkab.new_pz(input_source=None, output_port=None, shift=0.0, MNA=None, outfile=None, x0=u'op', verbose=0)\n", " \n", "And you can find [the documentation for ahkab.new_pz here](https://ahkab.readthedocs.org/en/latest/ahkab.html#ahkab.ahkab.new_pz).\n", " \n", "We will set:\n", "* Input source and output port, to enable the extraction of the zeros.\n", " * the input source is `V1`,\n", " * the output port is defined between the output node `out` and ground node (`bpf.gnd`).\n", "* We need no linearization, since the circuit is linear. Therefore we set `x0` to `None`.\n", "* I inserted a non-zero shift in the initial calculation frequency below. You may want to fiddle a bit with this value, the algorithm internally tries to kick the working frequency away from the exact location of the zeros, since we expect a zero in the origin, we help the simulation find the zero quickly by shifting away the initial working point." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pza = ahkab.new_pz('V1', ('out', bpf.gnd), x0=None, shift=1e3)\n", "r = ahkab.run(bpf, pza)['pz']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results are in the `pz_solution` object `r`. It has an interface that works like a dictionary.\n", "\n", "Eg. you can do:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[u'p0', u'p1', u'z0']" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check out the [documentation on pz_solution for more](https://ahkab.readthedocs.org/en/latest/results.html#ahkab.results.pz_solution).\n", "\n", "Let's see what we got:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Singularities:\n", "* p0 = -1.03451e+06 -1.07297e+08j Hz\n", "* p1 = -1.03451e+06 +1.07297e+08j Hz\n", "* z0 = -1.44751e-13 +0j Hz\n" ] } ], "source": [ "print('Singularities:')\n", "for x, _ in r:\n", " print \"* %s = %+g %+gj Hz\" % (x, np.real(r[x]), np.imag(r[x]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note that the results are frequencies expressed in Hz** (and *not* angular frequencies in rad/s).\n", "\n", "Graphically, we can see better where the singularities are located:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure(figsize=figsize)\n", "# plot o's for zeros and x's for poles\n", "for x, v in r:\n", " plot(np.real(v), np.imag(v), 'bo'*(x[0]=='z')+'rx'*(x[0]=='p'))\n", "# set axis limits and print some thin axes\n", "xm = 1e6\n", "xlim(-xm*10., xm*10.)\n", "plot(xlim(), [0,0], 'k', alpha=.5, lw=.5)\n", "plot([0,0], ylim(), 'k', alpha=.5, lw=.5)\n", "# plot the distance from the origin of p0 and p1\n", "plot([np.real(r['p0']), 0], [np.imag(r['p0']), 0], 'k--', alpha=.5)\n", "plot([np.real(r['p1']), 0], [np.imag(r['p1']), 0], 'k--', alpha=.5)\n", "# print the distance between p0 and p1\n", "plot([np.real(r['p1']), np.real(r['p0'])], [np.imag(r['p1']), np.imag(r['p0'])], 'k-', alpha=.5, lw=.5)\n", "# label the singularities\n", "text(np.real(r['p1']), np.imag(r['p1'])*1.1, '$p_1$', ha='center', fontsize=20)\n", "text(.4e6, .4e7, '$z_0$', ha='center', fontsize=20)\n", "text(np.real(r['p0']), np.imag(r['p0'])*1.2, '$p_0$', ha='center', va='bottom', fontsize=20)\n", "xlabel('Real [Hz]'); ylabel('Imag [Hz]'); title('Singularities');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As expected, we got two complex conjugate poles and a zero in the origin.\n", "\n", "#### The resonance frequency\n", "\n", "Let's check that indeed the (undamped) resonance frequency $f_0$ has the expected value from the theory.\n", "\n", "It should be:\n", "\n", "$$f_0 = \\frac{1}{2\\pi\\sqrt{LC}}$$\n", "\n", "Since we have little damping, $f_0$ is very close to the damped resonant frequency in our circuit, given by the absolute value of the imaginary part of either $p_0$ or $p_1$.\n", "\n", "In fact, the damped resonant frequency $f_d$ is given by:\n", "\n", "$$f_d = \\frac{1}{2\\pi}\\sqrt{\\alpha^2 -w_0^2}$$\n", "\n", "Since this is an example and we have Python at our fingertips, we'll compensate for the frequency pulling due to the damping anyway. That way, the example is analytically correct." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Resonance frequency from analytic calculations: 1.07302e+08 Hz\n" ] } ], "source": [ "C = 2.2e-12\n", "L = 1e-6\n", "f0 = 1./(2*np.pi*np.sqrt(L*C))\n", "print 'Resonance frequency from analytic calculations: %g Hz' %f0" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Resonance frequency from PZ analysis: 1.07292e+08 Hz\n" ] } ], "source": [ "alpha = (-r['p0']-r['p1'])/2\n", "a1 = np.real(abs(r['p0'] - r['p1']))/2\n", "f0 = np.sqrt(a1**2 - alpha**2)\n", "f0 = np.real_if_close(f0)\n", "print 'Resonance frequency from PZ analysis: %g Hz' %f0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's alright.\n", "\n", "## 3. AC analysis\n", "\n", "Let's perform an AC analysis:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "aca = ahkab.new_ac(start=1e8, stop=5e9, points=5e2, x0=None)\n", "rac = ahkab.run(bpf, aca)['ac']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we use sympy to assemble the transfer functions from the singularities we got from the PZ analysis." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import sympy\n", "sympy.init_printing()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sympy.abc import w\n", "from sympy import I\n", "p0, p1, z0 = sympy.symbols('p0, p1, z0')\n", "k = 13/1e-6 # constant term, can be calculated to be R/L\n", "H = 13/1e-6*(I*w + z0*6.28)/(I*w +p0*6.28)/(I*w + p1*6.28)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Hl = sympy.lambdify(w, H.subs({p0:r['p0'], z0:abs(r['z0']), p1:r['p1']}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need a function to evaluate the absolute value of a transfer function in decibels.\n", "\n", "Here it is:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def dB20(x):\n", " return 20*np.log10(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we can plot $|H(\\omega)|$ in dB and inspect the results visually." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure(figsize=figsize)\n", "semilogx(rac.get_x()/2/np.pi, dB20(abs(rac['vout'])), label='TF from AC analysis')\n", "semilogx(rac.get_x()/2/np.pi, dB20(abs(Hl(rac.get_x()))), 'o', ms=4, label='TF from PZ analysis')\n", "legend(); xlabel('Frequency [Hz]'); ylabel('|H(w)| [dB]'); xlim(4e7, 3e8); ylim(-50, 1);" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## 4. Symbolic analysis\n", "\n", "Next, we setup and run a symbolic analysis. \n", "\n", "We set the input source to be `'V1'`, in this way, `ahkab` will calculate all transfer functions, together with low-frequency gain, poles and zeros, with respect to *every* variable in the circuit.\n", "\n", "It is done very similarly to the previous cases:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "symba = ahkab.new_symbolic(source='V1')\n", "rs, tfs = ahkab.run(bpf, symba)['symbolic']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice how to the `'symbolic'` key corresponds a tuple of two objects: the symbolic results and the TF object that was derived from it.\n", "\n", "Let's inspect their contents:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Symbolic simulation results for 'RLC bandpass' (netlist None).\n", "Run on 2015-05-07 04:24:42.\n", "I[L1]\t = C1*V1*s/(C1*L1*s**2 + C1*R1*s + 1.0)\n", "I[V1]\t = -C1*V1*s/(C1*L1*s**2 + C1*R1*s + 1.0)\n", "VIN\t = V1\n", "VN1\t = V1*(C1*R1*s + 1.0)/(C1*L1*s**2 + C1*R1*s + 1.0)\n", "VOUT\t = C1*R1*V1*s/(C1*L1*s**2 + C1*R1*s + 1.0)\n", "\n" ] } ], "source": [ "print(rs)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Symbolic transfer function results for 'RLC bandpass' (netlist None).\n", "Run on 2015-05-07 04:24:42.\n", "I[L1]/V1:\n", "\tgain:\tC1*s/(C1*L1*s**2 + C1*R1*s + 1.0)\n", "\tgain0:\t0\n", "\tpoles:\n", "\t\t0.5*(-C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1)\n", "\t\t-0.5*(C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1)\n", "\tzeros:\n", "\t\t0\n", "I[V1]/V1:\n", "\tgain:\t-C1*s/(C1*L1*s**2 + C1*R1*s + 1.0)\n", "\tgain0:\t0\n", "\tpoles:\n", "\t\t0.5*(-C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1)\n", "\t\t-0.5*(C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1)\n", "\tzeros:\n", "\t\t0\n", "VIN/V1:\n", "\tgain:\t1\n", "VN1/V1:\n", "\tgain:\t(C1*R1*s + 1.0)/(C1*L1*s**2 + C1*R1*s + 1.0)\n", "\tgain0:\t1.00000000000000\n", "\tpoles:\n", "\t\t0.5*(-C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1)\n", "\t\t-0.5*(C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1)\n", "\tzeros:\n", "\t\t-1/(C1*R1)\n", "VOUT/V1:\n", "\tgain:\tC1*R1*s/(C1*L1*s**2 + C1*R1*s + 1.0)\n", "\tgain0:\t0\n", "\tpoles:\n", "\t\t0.5*(-C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1)\n", "\t\t-0.5*(C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1)\n", "\tzeros:\n", "\t\t0\n", "\n" ] } ], "source": [ "print tfs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In particular, to our transfer function corresponds:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{u'gain': C1*R1*s/(C1*L1*s**2 + C1*R1*s + 1.0),\n", " u'gain0': 0,\n", " u'poles': [0.5*(-C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1),\n", " -0.5*(C1*R1 + sqrt(C1*(C1*R1**2 - 4.0*L1)))/(C1*L1)],\n", " u'zeros': [0]}" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tfs['VOUT/V1']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's easy to show the above entries are a different formulation that corresponds to the theoretical results we introduced at the beginning of this example.\n", "\n", "We'll do it graphically. First of all, let's isolate out TF:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMsAAAAtBAMAAADyyIKfAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHa7q2Yiie9Umd3N\nRDIfxLosAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADXElEQVRYCe1XS2gTURQ9L60zTSaZhuq+Q7Wg\nblqlglTQUCIIboKIdKVBF6Kbli5Lodm4EZEs/UAbseBCxaLg1gouFIMpuHBnI65006rxg9XG+z7T\nvDcd2wTGuumFzvvMuee8b+cEaC66BrK58xJ6sp7NHmguq1VU7BJwg/5EfAFG+ltlaAbPDqWBxDcJ\ndT8D7SvNpLWKSX6ijFRBpsVIwlGSrRKtj39QpPduSYLaCsC0qsueiJ7WMidiVUnXmUH8oazC7jmt\nahEUNu2GiPf8uTi08ysVLj8FrzDIu6IJR234x+Ocry+N4TzcmVnAWsK7aCQ4S8cSfzLgJi8PAp0l\nIE4y7Md93hNROEJmSsnU6NpkpAxe1/sj0iAaeWNKUsaljeEHjc/mAroiPNnWd9Ky01KGX5tJjwmZ\n54CYKL2OIqZziN8iIr43SSI+430QMocR86LgVxzsdlbsNckkKrUcEvs9IXO2d0+EKqtU4qSpFt+b\nfxTXNN54QWtEWr34ZGiVz7pb81YbW5WtFdhwBeqbEVH+R9pwRv8dMD6Y3oQx2Pn2uU2QcfJudJ8t\nwx8/y2nD75i3fmtNUTXQ67rppwLP7uyt8orhj3+JV41HnPtNPQz0um76nExNFtljIjD8cYp/jvVw\nPNlieVVu6KZ95PYZKTMMTFCu4Y/t4BqNS3bEPVkx0KFu2kciJmUGyKHQcTX8Mf/Q67GtpFp+soEO\nddM+0pchv7VQRMAfzylaKsZ6q3iDt7JDJQfQmRA3HZBhP0nGg+mPF0Y5q7DHyWpbyX1xfZ8hY6JD\n3XRAhpuvxVGY/nhynqtwe4wRuOmOel2toko20aFuOlzG9McV4pdOD92XuaQfKtlEh7rpgAyj2dCi\nOWK4U8of00XAKWHBkDrCGyLscvnllXK5RL/SDPRaN91A0n2UJ432Zrpo+uMU/yFTEjJWkfXlhYh4\nqDE24aYDs8EjMqlpGP7YXqFBkJGdpetUQGdDxb83BjrcTQdldgP3iEj3x3xNJtNCpq2KnrUyBjrc\nTRsy3XNwiuwqEWn+eEellq3QgvPZWD0niiEyGvovbtqXSRxbPgonAza2q6oRaf6YywTCT/a7NbQY\nld9PY/Qa9ZCa5o9D7HEqZ6ZoaJjwINLM0/xxE/ZYQ6MJOP4A+DaALtCfajYAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{C_{1} R_{1} s}{C_{1} L_{1} s^{2} + C_{1} R_{1} s + 1.0}$$" ], "text/plain": [ " C₁⋅R₁⋅s \n", "────────────────────────\n", " 2 \n", "C₁⋅L₁⋅s + C₁⋅R₁⋅s + 1.0" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Hs = tfs['VOUT/V1']['gain']\n", "Hs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We wish to substitute the correct circuit values to `R1`, `L1` and `C1` to be able to evaluate numerically the results.\n", "\n", "In order to do so, the `symbolic_solution` class in the `results` module has a method named `as_symbols` that takes a string of space-separed symbol names and returns the `sympy` symbols associated with them ([symbolic_solution.as_symbols documentation](https://ahkab.readthedocs.org/en/latest/results.html#ahkab.results.symbolic_solution.as_symbols))." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [], "source": [ "s, C1, R1, L1 = rs.as_symbols('s C1 R1 L1')\n", "HS = sympy.lambdify(w, Hs.subs({s:I*w, C1:2.2e-12, R1:13., L1:1e-6}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Did we get the same results, let's sat within a 1dB accuracy?" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(dB20(abs(HS(rac.get_x()))), dB20(abs(Hl(rac.get_x()))), atol=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Good.\n", "\n", "## 5. Conclusions\n", "\n", "Let's take a look at PZ, AC and symbolic results together:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure(figsize=figsize); title('Series RLC passband: TFs compared')\n", "semilogx(rac.get_x()/2/np.pi, dB20(abs(rac['vout'])), label='TF from AC analysis')\n", "semilogx(rac.get_x()/2/np.pi, dB20(abs(Hl(rac.get_x()))), 'o', ms=4, label='TF from PZ analysis')\n", "semilogx(rac.get_x()/2/np.pi, dB20(abs(HS(rac.get_x()))), '-', lw=10, alpha=.2, label='TF from symbolic analysis')\n", "vlines(1.07297e+08, *gca().get_ylim(), alpha=.4)\n", "text(7e8/2/np.pi, -45, '$f_d = 107.297\\\\, \\\\mathrm{MHz}$', fontsize=20)\n", "legend(); xlabel('Frequency [Hz]'); ylabel('|H(w)| [dB]'); xlim(4e7, 3e8); ylim(-50, 1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I hope this example helped show how to use [ahkab](https://ahkab.github.io/ahkab/) and in particular how to perform PZ, AC and symbolic analysis. If it also cleared up some doubts, great!\n", "\n", "Please remember this is an experimental simulator and you may find bug... it's getting better bu we're not really ready for prime time yet: please report any and all bugs you may encounter on [the issue tracker](https://github.com/ahkab/ahkab/issues)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.9" } }, "nbformat": 4, "nbformat_minor": 0 }