{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#Chapter 4 Analog to Digital and Digital to Analog converters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 1 Page No: 4.38"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "output voltage  5.0 volt\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "z='0101';\n",
    "n=4;\n",
    "vof=15;#volt\n",
    "#determine v0\n",
    "r=vof/(pow(2,n)-1);\n",
    "v0=r*int(z,2);#output voltage\n",
    "print 'output voltage ',round(v0,3),'volt';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 2 Page No: 4.38"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "output offset  5.1 volt\n",
      "output voltage  3.84 volt\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "r=20e-3;\n",
    "z='11000000';\n",
    "n=8;\n",
    "#determine output voltage output offset voltage\n",
    "vof=r*(pow(2,n)-1);#output offsetvoltage\n",
    "v0=r*int(z,2);#output voltage\n",
    "print 'output offset ',round(vof,3),'volt';\n",
    "print 'output voltage ',round(v0,3),'volt';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 3 Page No: 4.38"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "output voltage  0111  =  2331.0 milivolt\n",
      "output voltage  1111  =  4995.0 milivolt\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=4;\n",
    "import numpy as np\n",
    "z=np.array(['0111','1111']);\n",
    "vref=5;#volt\n",
    "#determine v0\n",
    "r=vref*pow(10,3)/(pow(2,n)-1)\n",
    "i=0;\n",
    "while i<2 : v0=r*int(z[i],2); print'output voltage ',z[i],' = ',round(v0),'milivolt';i=i+1;\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 4 Page No: 4.39"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "full scale output voltage 31.77 volt\n",
      "Resolution 0.03 %\n",
      "output voltage  15.24 volt\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=12;\n",
    "r=8e-3;#volt\n",
    "z='011101110001';\n",
    "#determine output voltage\n",
    "vof=r*pow(2,n)-1;\n",
    "v0=r*int(z,2);#output voltage\n",
    "r=r*1e2/vof;\n",
    "print'full scale output voltage',round(vof,2),'volt';\n",
    "print'Resolution',round(r,2),'%';\n",
    "print'output voltage ',round(v0,3),'volt';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 5 Page No: 4.39"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "minumum number of bits  16384\n",
      "minmum voltage          610.0 μvolt\n",
      "quantization error      176.0 μvolt\n",
      "sampling rate           5.0 Khz\n",
      "aperture time           0.01 μsecond\n",
      "converter               84 dB\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "fs=1e3;#hz\n",
    "r=0.01;\n",
    "vref=10;#volt\n",
    "#determine n vmin rms fs1 t1 z\n",
    "r=0.01/100;\n",
    "n=14;\n",
    "print'minumum number of bits ',pow(2,14);\n",
    "vm=vref*pow(10,6)/pow(2,n);#minmum voltage\n",
    "print'minmum voltage         ',round(vm),'μvolt';\n",
    "import math\n",
    "eq=vref/(pow(2,n)*2*math.sqrt(3));#quantization error\n",
    "print'quantization error     ',round(eq*pow(10,6)),'μvolt';\n",
    "fs1=5*fs;#sampling rate\n",
    "print'sampling rate          ',fs1/1e3,'Khz';\n",
    "t1=1/(2*3.14*fs*pow(2,n));#aperture time\n",
    "print'aperture time          ',round(t1*pow(10,6),3),'μsecond';#error in book\n",
    "print'converter              ',6*n,'dB';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 6 Page No: 4.40"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R =  5.0  Kohm\n",
      "I at 1100 =  1.4 mA\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "vref=10;#volt\n",
    "Is=1.875e-3;#A\n",
    "#determine R I\n",
    "n=4;\n",
    "v0=vref*pow(10,3)/pow(2,n)*(1*pow(2,(n-1))+1*pow(2,(n-2))+1*pow(2,(n-3))+1*pow(2,(n-4)));\n",
    "r=v0/((Is)*pow(10,6));\n",
    "print'R = ',round(r,3),' Kohm';\n",
    "v0=vref*pow(10,3)/pow(2,n)*(1*pow(2,(n-1))+1*pow(2,(n-2)));\n",
    "print'I at 1100 = ',round(v0/pow(10,3)/r,3),'mA';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 7 Page No: 4.41"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "N=  6.0\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "vmin=1e-3;#volt\n",
    "vref=10;#volt\n",
    "q=0.01;\n",
    "#determine n\n",
    "import math\n",
    "n=math.log10(((0.5)/0.01)+1)/math.log10(2);\n",
    "print'N= ',round(n);\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "##Example 8 Page No: 4.42"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R in percent  0.392 %\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=8;\n",
    "#determine R\n",
    "r=1*100e0/(pow(2,n)-1);\n",
    "print'R in percent ',round(r,3),'%';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 9 Page No: 4.42"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Resolution in percent  3.0 %\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=5;\n",
    "#determine resolution\n",
    "r=1*100/(pow(2,n)-1);#Resolution\n",
    "print'Resolution in percent ',round(r,3),'%';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 10 Page No: 4.42"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "minimum voltage each bit  300.0 milivolt\n",
      "output voltage at  100110  =  12.063 volt\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "import numpy as np\n",
    "z=np.array(['111111','100110']);\n",
    "vref1=20;#volt\n",
    "#determine output voltage\n",
    "e=1*pow(10,3)/int(z[0],2)*vref1;#minimum voltage\n",
    "print'minimum voltage each bit ',round(e,3),'milivolt';\n",
    "e=int(z[1],2)*1e0/int(z[0],2)*vref1;#output voltage\n",
    "print'output voltage at ',z[1],' = ',round(e,3),'volt';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "##Example 11 Page No: 4.42"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Resolution  0.02 volt\n",
      "Resolution in percent  0.024 %\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "import math\n",
    "n=12;\n",
    "vref1=50e0;#volt\n",
    "vref2=-50e0;#volt\n",
    "#determine Resolution\n",
    "r=float((vref1-vref2)/(pow(2,n)-(1)));\n",
    "print'Resolution ',round(r,2),'volt';\n",
    "r=1*1e2/(pow(2,n)-(1));\n",
    "print'Resolution in percent ',round(r,3),'%';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "##Example 12 Page No: 4.43"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Resolution  19.55 milivolt\n",
      "Resolution in percent  0.098 %\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=10e0;\n",
    "vref1=-10e0;#volt\n",
    "vref2=10e0;#volt\n",
    "#determine Resolution \n",
    "r=(vref2-vref1)/(pow(2,n)-(1));#Resolution\n",
    "print'Resolution ',round(r*1e3,2),'milivolt';\n",
    "r=100/(pow(2,n)-(1));\n",
    "print'Resolution in percent ',round(r,3),'%';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "##Example 13 Page No: 4.43"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Resolution in percent  0.024 %\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=12e0;\n",
    "#determine Resolution \n",
    "r=1/(pow(2,n)-(1));\n",
    "r=r*100;#Resolution\n",
    "print'Resolution in percent ',round(r,3),'%';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 14 Page No: 4.44"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "change in voltage  178.0 milivolt\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=7;\n",
    "vmax=25.4;#volt\n",
    "#determine voltage \n",
    "r=1*pow(10,3)/(pow(2,n)-1);\n",
    "print'change in voltage ',round(r*vmax),'milivolt';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 15 Page No: 4.44"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "N = 11.0\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "r=5e-3;#volt\n",
    "vref=8;#volt \n",
    "#determine N\n",
    "import math\n",
    "n=math.log10(1/(r/vref)+(1))/math.log10(2);\n",
    "print'N =',round(n);\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 16 Page No: 4.44"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "conversion time =  9.0 μs\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "fs=1e6;#hz\n",
    "n=8;\n",
    "#determine conversion time\n",
    "tc=(1/fs)*(n+1);\n",
    "print'conversion time = ',round(tc*pow(10,6),(3)),'μs';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 17 Page No: 4.45"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "output voltage  1000.0 volt\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "vref=10;#volt\n",
    "vin=100e-3;#volt\n",
    "#determine output voltage\n",
    "v0=vref*vin/pow(10,-3);#output voltage\n",
    "print'output voltage ',round(v0),'volt';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 18 Page No: 4.45"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Resolution of 1th  62.5 μA\n",
      "Output current  937.5 μA\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=4;\n",
    "z='1111';\n",
    "r=10e3;#ohm\n",
    "r1=20e3;#ohm\n",
    "vref=10;#volt\n",
    "#determine Resolution output current\n",
    "r=((1)*pow(10,6)/pow(2,n))*vref/r;#Resolution\n",
    "print'Resolution of 1th ',round(r,3),'μA';\n",
    "iout=r*int(z,2);#Output current\n",
    "print'Output current ',round(iout,3),'μA';#error in book\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 19 Page No: 4.45"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "minimum input voltage  39.0 milivolt\n",
      "input voltage at 1s  10.0 volt\n",
      "decimal at  5.2 volt =  0b10000101\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=8;\n",
    "vref=10;#volt\n",
    "#determine input voltage\n",
    "vmin=vref*pow(10,3)/pow(2,n);#minimum input voltage\n",
    "print'minimum input voltage ',round(vmin,3),'milivolt';\n",
    "vif=vref-vmin/pow(10,3);#input voltage\n",
    "print'input voltage at 1s ',round(vif,3),'volt';\n",
    "vin=5.2;\n",
    "D=vin/vmin;D=133;z=bin(D);\n",
    "print'decimal at ',round(vin,3),'volt = ',z;\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 20 Page No: 4.46"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "output voltage at  01  =  2.5 volt\n",
      "output voltage at  0111  =  4.37 volt\n",
      "output voltage at  10111100  =  7.36 volt\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "vref=10;#volt\n",
    "import numpy as np\n",
    "z=np.array(['01','0111','10111100']);\n",
    "n=2;\n",
    "#determine output voltage\n",
    "v0=vref*1e0/pow(2,2);#output voltage\n",
    "print'output voltage at ',z[0],' = ',round(v0,3),'volt';\n",
    "n=4\n",
    "v0=vref*1e0*(1*pow(10,3)/pow(2,2)+1*pow(10,3)/pow(2,3)+1*pow(10,3)/pow(2,4));#output voltage\n",
    "print'output voltage at ',z[1],' = ',round(v0/pow(10,3),3),'volt';\n",
    "v0=vref*(1*pow(10,3)*1e0/2+1*pow(10,3)/pow(2,3)+1*pow(10,3)/pow(2,4)+1*pow(10,3)/pow(2,5)+1*pow(10,3)/pow(2,6)+1*pow(10,3)/pow(2,8));\n",
    "print'output voltage at ',z[2],' = ',round(v0/pow(10,3),3),'volt';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 21 Page No: 4.46"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "output voltage at  0110  =  3.75 volt\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=4;\n",
    "z='0110';\n",
    "vref=10e0;\n",
    "#determine output voltage\n",
    "v0=vref*(1*pow(10,3)/pow(2,2)+1*pow(10,3)/pow(2,3));#output voltage\n",
    "print'output voltage at ',z,' = ',round(v0/pow(10,3),3),'volt';\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##Example 22 Page No: 4.47"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SNRmax =  61.96 dB\n",
      "ENOB =  9.0\n"
     ]
    }
   ],
   "source": [
    "#given\n",
    "n=10;\n",
    "vfs=10.24;#volt\n",
    "distortion=56;#dB\n",
    "#determine ENOB SNRmax\n",
    "import math\n",
    "q=vfs/(pow(2,n)*math.sqrt(12));\n",
    "snrmax=(6.02*n+1.76);\n",
    "print'SNRmax = ',round(snrmax,3),'dB';\n",
    "en=(distortion-1.76)/6.02;\n",
    "print'ENOB = ',round(en);\n"
   ]
  }
 ],
 "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.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
