diff options
Diffstat (limited to 'Linear_Integrated_Circuits/Chapter_6.ipynb')
-rw-r--r-- | Linear_Integrated_Circuits/Chapter_6.ipynb | 763 |
1 files changed, 763 insertions, 0 deletions
diff --git a/Linear_Integrated_Circuits/Chapter_6.ipynb b/Linear_Integrated_Circuits/Chapter_6.ipynb new file mode 100644 index 00000000..002417d5 --- /dev/null +++ b/Linear_Integrated_Circuits/Chapter_6.ipynb @@ -0,0 +1,763 @@ +{
+ "metadata": {
+ "name": ""
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h1>Chapter 6: Active Filters<h1>"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No. 6.1, Page NO: 269<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "%pylab inline"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Populating the interactive namespace from numpy and matplotlib\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stderr",
+ "text": [
+ "WARNING: pylab import has clobbered these variables: ['f']\n",
+ "`%pylab --no-import-all` prevents importing * from pylab and numpy\n"
+ ]
+ }
+ ],
+ "prompt_number": 17
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''first order low pass butterworth filter'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "fH=10.0*10**3 #Frequency in hertz\n",
+ "f=12.0*10**3 #Frequency in hertz\n",
+ "\n",
+ "#Calculations:\n",
+ "t=(f**2/fH**2) \n",
+ "Hif=1/(math.sqrt(1+t)) #Calculating magnitude of voltage tranfer fuction\n",
+ "Hifdb=20*math.log(Hif)/math.log(10) #Calculating magnitude of voltage tranfer fuction\n",
+ "\n",
+ "#Result:\n",
+ "print('Delta Vi=%.2f dB'%Hifdb)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Delta Vi=-3.87 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 18
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No. 6.2, Page No: 270<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''first order low pass filter'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "fh=2000.0 #Cut-off frequency in hertz\n",
+ "A=2.0 #Gain\n",
+ "C=0.01*10**-6 #Capacitance in farad\n",
+ "\n",
+ "#Calculations:\n",
+ "R=1/(2*math.pi*fh*C) #Calculating value of resistance\n",
+ "R=R/1000.0 #Calculating resistance value\n",
+ "\n",
+ "#Results:\n",
+ "print('R= %.3f kohm'%R)\n",
+ "#Rf/Ri=A-1\n",
+ "print('\\n Hence Rf=Ri=10kohm')"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "R= 7.958 kohm\n",
+ "\n",
+ " Hence Rf=Ri=10kohm\n"
+ ]
+ }
+ ],
+ "prompt_number": 19
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No.6.3, Page No: 272<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''second order low pass butterworth filter'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "fh=10.0*10**3 #Cut-off frequency in hertz \n",
+ "f=12.0*10**3 #Signal freuency in hertz\n",
+ "R=200.0*10**3 #Resistance value in ohm\n",
+ "\n",
+ "#Calaculations:\n",
+ "RC=1/(2*math.pi*fh) #Calculating value of resistance\n",
+ "C=RC/R #Calculating value of capacitance \n",
+ "C3=1.414*C #Calculating value of capacitance\n",
+ "C4=0.707*C #Calculating value of capacitance \n",
+ "\n",
+ "t=(f**4/fh**4) \n",
+ "Hif=1/(math.sqrt(1+t)) #Calculating magnitude of voltage tranfer fuction\n",
+ "Hifdb=20*math.log(Hif)/math.log(10) #Calculating magnitude of voltage tranfer fuction\n",
+ "\n",
+ "#Result:\n",
+ "print('Hif= %.2f dB'%Hifdb)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Hif= -4.88 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 20
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3> Example 6.4, Page No-275<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''second order low pass butterworth filter with uppercutoff frequency'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "N=2.0 #Order of filter\n",
+ "fh=2.0*10**3 #upper cut-off frequency in hertz\n",
+ "C=0.1*10**-6 #Capacitance value in farad\n",
+ "alpha=1.414 #Value of damping coefficient\n",
+ "\n",
+ "#Calculations:\n",
+ "R=1/(2*math.pi*fh*C) #Calculating resistance value\n",
+ "Rkohm=R/1000.0 #Calculating resistance value\n",
+ "A=3-alpha #Calculating passband gain\n",
+ "RfbyRi=A-1 #Calculating ratio Rf/Ri\n",
+ "\n",
+ "#Results:\n",
+ "print('R= %.1f kohm'%Rkohm)\n",
+ "print('\\nRf/Ri= %.3f'%RfbyRi)\n",
+ "print('\\nHence, take Rf=5.86 kohm and Ri=10 kohm')"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "R= 0.8 kohm\n",
+ "\n",
+ "Rf/Ri= 0.586\n",
+ "\n",
+ "Hence, take Rf=5.86 kohm and Ri=10 kohm\n"
+ ]
+ }
+ ],
+ "prompt_number": 21
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No.6.5, Page No: 276<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''third order low pass butterworth filter'''\n",
+ "\n",
+ "#Variable declaration:\n",
+ "import math\n",
+ "\n",
+ "fh=10.0*10**3 #cut-off frequency in hertz\n",
+ "f=12.0*10**3 #Signal frequency in hertz\n",
+ "\n",
+ "#For third order low pass butterworth filter\n",
+ "\n",
+ "#Calculations:\n",
+ "t=(f**6/fh**6) \n",
+ "Hif=1/(math.sqrt(1+t)) #Calculating magnitude of voltage transfer function\n",
+ "Hifdb=20*math.log(Hif)/math.log(10) #Calculating magnitude of voltage transfer function\n",
+ "\n",
+ "#Result:\n",
+ "print('Hif= %.4f dB'%Hifdb)\n",
+ "\n",
+ "#For fourth order low pass butterworth filter\n",
+ "\n",
+ "#Calculation:\n",
+ "t=(f**8/fh**8)\n",
+ "Hif=1/(math.sqrt(1+t))\n",
+ "Hifdb=20*math.log(Hif)/math.log(10)\n",
+ "\n",
+ "#Result:\n",
+ "print('\\nHif= %.2f dB'%Hifdb)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Hif= -6.0054 dB\n",
+ "\n",
+ "Hif= -7.24 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 22
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No. 6.6, Page No: 276 <h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''fourth order low pass butterworth filter'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "N=2.0 #Order of filter\n",
+ "fh=2000.0 #cut-off frequency in hertz\n",
+ "C=0.1*10**-6 #Capacitance values in farad\n",
+ "alpha1=0.765 #damping coefficient\n",
+ "alpha2=1.848 #damping coefficient\n",
+ "\n",
+ "#Calculations:\n",
+ "R=1/(2*math.pi*fh*C) #Calculating resistance value\n",
+ "Rkohm=R/1000.0 #Calculating resistance value\n",
+ "\n",
+ "A1=3-alpha1 #Calculating passband gain\n",
+ "A2=3-alpha2 #Calculating passband gain\n",
+ "\n",
+ "Rf1byRi1=A1-1 #Calculating Rf1/Ri1 ratio\n",
+ "Rf2byRi2=A2-1 #Calculating Rf2/Ri2 ratio\n",
+ "\n",
+ "#Results:\n",
+ "print('R= %.1f kohm'%Rkohm)\n",
+ "print('\\nRf1/Ri1= %.3f'%Rf1byRi1)\n",
+ "print('\\nHence, take Rf1=12.35 kohm and Ri1=10 kohm')\n",
+ "print('\\nRf2/Ri2= %.3f'%Rf2byRi2)\n",
+ "print('\\nHence, take Rf2=15.2 kohm and Ri2=100 kohm')"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "R= 0.8 kohm\n",
+ "\n",
+ "Rf1/Ri1= 1.235\n",
+ "\n",
+ "Hence, take Rf1=12.35 kohm and Ri1=10 kohm\n",
+ "\n",
+ "Rf2/Ri2= 0.152\n",
+ "\n",
+ "Hence, take Rf2=15.2 kohm and Ri2=100 kohm\n"
+ ]
+ }
+ ],
+ "prompt_number": 23
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No. 6.7, Page No: 279<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''first order high pass filter'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "A=2.0 #Gain\n",
+ "fL=2.0*10**3 #Frequency in hertz\n",
+ "C=0.01*10**-6 #Capacitance value in farad\n",
+ "\n",
+ "#Calculations:\n",
+ "R=1/(2*math.pi*fL*C) #Calculating value of resistance\n",
+ "Rkohm=R/1000.0 #Calculating value of resistance\n",
+ "RfbyRi=A-1 #Calculating ratio Rf/Ri\n",
+ "\n",
+ "#Results:\n",
+ "print('R= %.1f kohm'%Rkohm)\n",
+ "print('\\nRf/Ri= %.3f'%RfbyRi)\n",
+ "print('\\nHence, take Rf=10 kohm and Ri=10 kohm')"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "R= 8.0 kohm\n",
+ "\n",
+ "Rf/Ri= 1.000\n",
+ "\n",
+ "Hence, take Rf=10 kohm and Ri=10 kohm\n"
+ ]
+ }
+ ],
+ "prompt_number": 24
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No: 6.8, Page No: 282<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''second order high pass butterworth filter variable gain'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "\n",
+ "R2=16.0*10**3 #Resistance in ohm\n",
+ "R3=16.0*10**3 #Resistance in ohm\n",
+ "Rf=15.8*10**3 #Resistance in ohm\n",
+ "Ri=27.0*10**3 #Resistance in ohm\n",
+ "C2=0.01*10**-6 #Capacitance in farad\n",
+ "C3=0.01*10**-6 #Capacitance in farad\n",
+ "\n",
+ "#Calculations:\n",
+ "fL=1/(2*math.pi*math.sqrt(R2*R3*C2*C3)) #Calculating lower cut-off frequency\n",
+ "fL=fL/1000.0 #Calculating lower cut-off frequency\n",
+ "A=1+Rf/Ri #Calculating passband gain\n",
+ "\n",
+ "#Results:\n",
+ "print('\\nfL= %.1f kHz'%fL)\n",
+ "print('\\nA= %.3f'%A)\n",
+ "\n",
+ "a=[-35.99,-23.96,-3.12,1.00,3.95,4.00,4.01,4.01,4.01]\n",
+ "b=[log10(100),log10(200),log10(700),log10(1000),log10(3000),log10(7000),log10(10000),log10(30000),log10(100000)]\n",
+ "plot(b,a,'b')\n",
+ "plot(log10(100),-35.99,'o')\n",
+ "plot(log10(200),-23.96,'o')\n",
+ "plot(log10(700),-3.12,'o')\n",
+ "plot(log10(1000),1.00,'o')\n",
+ "plot(log10(3000),3.95,'o')\n",
+ "plot(log10(7000),4.00,'o')\n",
+ "plot(log10(10000),4.01,'o')\n",
+ "plot(log10(30000),4.01,'o')\n",
+ "plot(log10(100000),4.01,'o')\n",
+ "m=arange(-40,1,0.0005)\n",
+ "x5=(3*m)/m\n",
+ "plot(x5,m,'--')\n",
+ "k = arange(2.0001,3.5, 0.0005)\n",
+ "plot(k,4.006*k/k,'--')\n",
+ "text(1.6,4.006,'+4.006')\n",
+ "text(3.3,-38,'Passband')\n",
+ "text(2.3,-38,'Stopband')\n",
+ "text(2.2,-10,'40 dB/decade')\n",
+ "text(3,2,'3dB')\n",
+ "title('Frequency response of ssecond order high-pass filter')\n",
+ "ylabel('Voltage gain in dB')\n",
+ "xlabel('frequency index n where n=log(f)')"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "\n",
+ "fL= 1.0 kHz\n",
+ "\n",
+ "A= 1.585\n"
+ ]
+ },
+ {
+ "metadata": {},
+ "output_type": "pyout",
+ "prompt_number": 25,
+ "text": [
+ "<matplotlib.text.Text at 0x8410ba8>"
+ ]
+ },
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEZCAYAAABWwhjiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcVNX7wPHPsCQuCKgpigsKGpIbuO+4gJRLauWClX4t\nW0w0bdFMU8s1tV8uWX0t9zUzlyQVU8G1sMRcMBdyZTG3ZAcZzu+P0ftlBFQYYBh43q+XL+HOvec+\n985lnrnnnHuOTimlEEIIIfLAytwBCCGEsFySRIQQQuSZJBEhhBB5JklECCFEnkkSEUIIkWeSRIQQ\nQuSZJBFR4n311VdUqVKF8uXLc/v2bXOHky+WLVtG+/btC6x8V1dXdu/enS9lhYSEUKNGjRxff+ut\nt5g6depjlTVkyBAmTpyYL3EVhjNnztCkSRPKly/PggULjI71UeelqLAxdwDm4Orqyj///IO1tTUA\nOp2Os2fP4uzsbObIRGG7e/cu7777LmFhYTRo0MDc4VgMnU6HTqcrlH199dVXj71uYcaVHz777DO6\ndOnCsWPHHrmuq6srS5YsoXPnzoUQ2eMrkXciOp2Obdu2ER8fT3x8PHFxcVkSSHp6upmiM4+Sdrz3\nxcbGkpKSQv369c0dSpGU39dFSb3OcnLp0iU8PT0fa12dTkdenw1XSuV520cpkUkkJ1ZWVixatIi6\ndevy1FNPAbBt2zaaNGmCk5MTbdu25cSJE9r64eHheHt7U758eQYMGMCAAQO0W+nsqhOsrKz4+++/\nAUhNTeW9996jVq1aODs789Zbb5GSkgIYbmOrV6/O559/TpUqVahWrRrLli3TyklOTubdd9/F1dUV\nR0dHOnToQEpKCt27d2fhwoVG+2zUqBFbtmzJcqwXL17EysqKJUuWUKtWLbp27QrAkiVL8PT0pEKF\nCvj7+3P58mVtm9GjR1OlShUcHBxo1KgRERERgKEK4c0338TPz4/y5cvj4+NjtN2hQ4do3rw5jo6O\ntGjRgsOHD2uv+fj48PHHH9OuXTvKly9Pt27duHnzJgApKSm89NJLVKpUCScnJ1q0aME///wDwJ07\nd3j11VepVq0a1atXZ+LEiWRkZGT7vqampvLOO+/g4uKCi4sLo0ePJi0tjbNnz2rJw9HRUTsHmT0s\nhmXLluHm5kb58uWpU6cOa9as0bZ72Hk8deoUvr6+VKxYEWdnZ2bMmPHQOB/nmrh58ya9evXCwcGB\nli1bEhkZme25uG/r1q08/fTTODk50alTJ/766y/tNVdXVz777DMaNWqEvb09er2elStXUqtWLSpV\nqsT06dONylJKMXPmTNzd3alUqRL9+/fXqgVzus6yk9OxPVhF9dlnn2nv+7fffmv0dwVw69YtevTo\nQfny5WnVqpXRaw961LU7atQoatasiYODA82aNePAgQPaa2FhYTRr1gwHBwecnZ159913gYdfM5l1\n7tyZkJAQRowYQfny5Tl37lyO1XEvv/wyly9fpmfPntjb2zNnzhwAfv31V9q0aYOTkxNNmjQhNDRU\n28bHx4cJEybQtm1bypYty4ULF3I8DyZRJZCrq6v65ZdfsizX6XTKz89P3b59W6WkpKijR4+qypUr\nq7CwMJWRkaGWL1+uXF1dVVpamkpNTVU1a9ZUX3zxhUpPT1c//PCDsrW1VRMnTlRKKbV06VLVrl27\nLOVHRkYqpZR655131HPPPadu376t4uPjVc+ePdWHH36olFJq7969ysbGRk2aNEmlp6ern3/+WZUp\nU0b9+++/Simlhg8frjp16qSio6OVXq9Xhw8fVqmpqer7779XLVu21PZ37NgxVbFiRXX37t0sx3rh\nwgWl0+nU4MGDVVJSkkpOTlabN29W7u7u6q+//lJ6vV5NnTpVtWnTRiml1I4dO1TTpk3VnTt3lFJK\n/fXXXyomJkYppdTgwYOVvb292r9/v0pNTVWjRo3Sjv3mzZvK0dFRrVq1Sun1erV27Vrl5OSkbt26\npZRSqmPHjsrd3V2dO3dOJScnKx8fHzVu3DillFJff/216tmzp0pOTlYZGRnq6NGjKi4uTimlVO/e\nvdWbb76pkpKS1D///KNatGihvvnmm2zf74kTJ6rWrVur69evq+vXr6s2bdpo79PFixeVTqdTer0+\n221ziiEhIUGVL19enT17VimlVGxsrDp16pRSSj30PMbFxSlnZ2f1+eefq9TUVBUfH69+++23R8b5\nqGuif//+qn///iopKUmdPHlSubi4qPbt22d7TGfOnFFly5ZVv/zyi0pPT1efffaZcnd3166TWrVq\nKS8vL3X16lWVkpKiTp06pcqVK6e9v2PGjFE2NjZq9+7dSimlvvjiC9W6dWsVFRWl0tLS1BtvvKEG\nDhyY7XWWkpKSJZ5HHduQIUO087B9+3bl7OysIiIiVFJSkho0aJDR39XgwYNVxYoV1ZEjR1R6eroa\nNGiQGjBgQLbn4f76OV27Sim1atUqdevWLaXX69XcuXOVs7OzSk1NVUop1apVK7Vq1SqllFKJiYna\n+/iw6/ZBPj4+6rvvvtN+z3yse/fuVdWrV9dec3V11c65UkpdvXpVVaxYUW3fvl0ppdSuXbtUxYoV\n1Y0bN5RShr+tWrVqqYiICKXX67P9HMgPJTKJ1KpVS5UrV045OjoqR0dH1adPH6WU4UN+79692npv\nvvmm9obe99RTT6nQ0FAVGhqqqlWrZvRa5j/6hyWRjIwMVbZsWe3CV0qpQ4cOqdq1ayulDBdP6dKl\njT7YKleurH777Tel1+tV6dKl1fHjx7McV3JysnJyclLnz59XSin17rvvqrfffjvbc3D/j/vChQva\nMn9/f6MLWq/XqzJlyqhLly6pPXv2qHr16qlff/01ywfu4MGDtQ8NpZRKSEhQ1tbW6sqVK2rFihVG\niU0ppVq3bq2WLVumlDL8EU2bNk17bdGiRcrf318ppdSSJUtUmzZtshxrbGysKlWqlEpOTtaWrVmz\nRnXq1CnbY3Vzc9P+0JRSaufOncrV1dXoPOSURHKKISEhQTk6OqqNGzeqpKQko9cedh7XrFmjvL29\ncx3nw66J9PR0ZWtrq86cOaO9Nn78+CzX332ffPKJ6t+/v/Z7RkaGcnFxUaGhoUopw4fV0qVLtden\nTJli9P4mJiaqJ554QvtAq1+/vtGHW3R0tLK1tVV6vT7b6+xBDzs2pYw/WP/zn/+o8ePHa+udP3/e\nKIkMGTJEDRs2THv9559/Vh4eHjnuO6dr9+rVq9mu7+TkpF0LHTp0UJMmTVLXr183WienayY7Pj4+\n6ttvv9V+HzJkiJowYYJS6tFJZObMmerll182Kq9bt25q+fLlWtmTJk16ZAymKpHVWTqdji1btnD7\n9m1u377Njz/+qL2WuTfEpUuXmDt3Lk5OTtq/q1evEhMTQ3R0NC4uLkbl1qpV67H2f/36dZKSkmja\ntKlW7jPPPMONGze0dSpWrIiV1f/enjJlypCQkMCNGzdISUnBzc0tS7l2dnb069ePlStXopRi3bp1\nvPzyyw+N5cHjHTVqlBZTxYoVAYiOjqZTp06MGDGCt99+mypVqvDGG28QHx8PGM5n9erVtXLKli1L\nhQoViI6OJiYmhpo1a2Y5T9HR0drvmdujSpcuTUJCAmC4he/WrRsDBgzAxcWFsWPHkp6ezqVLl7h7\n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\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x5070fd0>"
+ ]
+ }
+ ],
+ "prompt_number": 25
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No. 6.9, Page No: 284<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''fourth order high pass butterworth filter'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "fh=50000.0 #frequency in hertz\n",
+ "C=0.001*10**-6 #capacitance in farad\n",
+ "\n",
+ "#Calculations:\n",
+ "R=1/(2.0*math.pi*fh*C) #Calculating value of resistance\n",
+ "Rkohm=R/1000.0 #Calculating value of resistance\n",
+ "\n",
+ "R1=R/1.082 #Calculating value of resistance\n",
+ "R2=R/0.9241 #Calculating value of resistance\n",
+ "R3=R/2.613 #Calculating value of resistance\n",
+ "R4=R/0.3825 #Calculating value of resistance\n",
+ "Hif=0.02\n",
+ "s=(Hif**2)/(1-Hif**2) \n",
+ "s1=s**0.125 \n",
+ "f=fh/1.6815 * s1 #Calculating value of frequency\n",
+ "fkhz=f/1000.0 #Calculating value of frequency\n",
+ "\n",
+ "#Results:\n",
+ "print('R= %.3f kohm'%Rkohm)\n",
+ "print('\\nR1= %.3f kohm'% (R1/1000))\n",
+ "print('\\nR2= %.3f kohm'% (R2/1000))\n",
+ "print('\\nR3= %.3f kohm'% (R3/1000))\n",
+ "print('\\nR4= %.3f kohm'% (R4/1000))\n",
+ "print('\\nf= %.2f kHz'% fkhz)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "R= 3.183 kohm\n",
+ "\n",
+ "R1= 2.942 kohm\n",
+ "\n",
+ "R2= 3.445 kohm\n",
+ "\n",
+ "R3= 1.218 kohm\n",
+ "\n",
+ "R4= 8.322 kohm\n",
+ "\n",
+ "f= 11.18 kHz\n"
+ ]
+ }
+ ],
+ "prompt_number": 26
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No. 6.10, Page No: 286<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''bandpass filter'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "fh=2500.0 #Frequency in hertz\n",
+ "fL=250.0 #Frequency in hertz\n",
+ "\n",
+ "#Calculations:\n",
+ "B=fh-fL #Calculating bandwidth\n",
+ "fr=math.sqrt(fh*fL) #Calculating frequency\n",
+ "fc=(fL+fh)/2 #Calculating frequency\n",
+ "\n",
+ "#Results:\n",
+ "print('Bandwdth B= %d Hz'%B)\n",
+ "print('\\nResonant Frequency fr= %.2f Hz'%fr)\n",
+ "print('\\nCenter Frequency fr= %d Hz'%fc)\n",
+ "print('\\nHence, resonant frequency is always less than center frequency')"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Bandwdth B= 2250 Hz\n",
+ "\n",
+ "Resonant Frequency fr= 790.57 Hz\n",
+ "\n",
+ "Center Frequency fr= 1375 Hz\n",
+ "\n",
+ "Hence, resonant frequency is always less than center frequency\n"
+ ]
+ }
+ ],
+ "prompt_number": 27
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No. 6.11, Page No: 286<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''bandpass filter with resonant frequency'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "#Part A\n",
+ "fr=1000.0 #Frequency in hertz\n",
+ "B=3000.0 #Bandwidth in hertz\n",
+ "\n",
+ "#Calculations:\n",
+ "Q=fr/B #Calculation Quality factor \n",
+ "\n",
+ "#Part B\n",
+ "fL= math.sqrt((B*B/4)+fr**2) - B/2 #Calculating lower cut-off frequency\n",
+ "\n",
+ "#Part C\n",
+ "fh=fL+B #Calculating high cut-off frequency \n",
+ "\n",
+ "#Results:\n",
+ "print('Quality factor Q= %.2f '%Q)\n",
+ "print('Since Q<0.5, this is a wideband filter')\n",
+ "print('\\nfL= %.2f Hz'%fL) \n",
+ "print('\\nfh= %.2f Hz'%fh)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Quality factor Q= 0.33 \n",
+ "Since Q<0.5, this is a wideband filter\n",
+ "\n",
+ "fL= 302.78 Hz\n",
+ "\n",
+ "fh= 3302.78 Hz\n"
+ ]
+ }
+ ],
+ "prompt_number": 28
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No: 6.12, Page No: 288<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''narrowband bandpass filter'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "import math\n",
+ "# Part A\n",
+ "#For a bandpass filter\n",
+ "R=20000.0 #Resistance in ohm\n",
+ "Rr=2700.0 #Resistance in ohm\n",
+ "C=0.01*10**-6 #Capacitance in farad\n",
+ "\n",
+ "#Calculations:\n",
+ "fr=0.1125*(math.sqrt(1+R/Rr))/(R*C) #Calculating resonant frequency\n",
+ "\n",
+ "#Part B\n",
+ "B=0.1591/(R*C) #Calculating Bandwidth\n",
+ "\n",
+ "#Results:\n",
+ "print('Resonant frequency= %.1f Hz'%fr)\n",
+ "print('\\nBandwidth= %.1f Hz'%B)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Resonant frequency= 1631.0 Hz\n",
+ "\n",
+ "Bandwidth= 795.5 Hz\n"
+ ]
+ }
+ ],
+ "prompt_number": 29
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example NO. 6.13, Page No: 289<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''narrowband bandpass filter with resonant frequency'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "fr=200.0 #Resonant frequency in hertz\n",
+ "B=20.0 #Bandwidth in hertz\n",
+ "C=0.33*10**-6 #Capacitance in farad\n",
+ "\n",
+ "#Calculations:\n",
+ "Q=fr/B #Calculating quality factor\n",
+ " \n",
+ "R=0.1591/(B*C) #Calculating resistance value\n",
+ "Rr=R/(2.0*Q*Q-1) #Calculating resistance value\n",
+ "R=R/1000.0 #Calculating resistance value\n",
+ "\n",
+ "#Results:\n",
+ "print('\\nR= %.1f kohm'%R)\n",
+ "print('\\nRr= %.1f ohm'% Rr)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "\n",
+ "R= 24.1 kohm\n",
+ "\n",
+ "Rr= 121.1 ohm\n"
+ ]
+ }
+ ],
+ "prompt_number": 30
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "<h3>Example No. 6.14, Page NO: 307<h3>"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "''' clock frequency'''\n",
+ "\n",
+ "#Variable Declaration:\n",
+ "R=1.0*10**6 #Resistance in ohm\n",
+ "C=40.0*10**-12 #Capacitance value\n",
+ "\n",
+ "#Calculations:\n",
+ "fck=1/(R*C) #Calculating clock frequency\n",
+ "fck=fck/1000 #Calculating clock frequency\n",
+ "\n",
+ "#Result:\n",
+ "print('Fck= %.1f kHz'%fck)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Fck= 25.0 kHz\n"
+ ]
+ }
+ ],
+ "prompt_number": 31
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file |