diff options
author | Trupti Kini | 2016-09-24 23:30:26 +0600 |
---|---|---|
committer | Trupti Kini | 2016-09-24 23:30:26 +0600 |
commit | a54f67e8de857b73ac3af2ada963f8349b03de5d (patch) | |
tree | 528499b6bb01b04790e649f92e5758bce6128d49 | |
parent | 75799451fd9bd83e4d9ba0981c5c55052d7cdff4 (diff) | |
download | Python-Textbook-Companions-a54f67e8de857b73ac3af2ada963f8349b03de5d.tar.gz Python-Textbook-Companions-a54f67e8de857b73ac3af2ada963f8349b03de5d.tar.bz2 Python-Textbook-Companions-a54f67e8de857b73ac3af2ada963f8349b03de5d.zip |
Added(A)/Deleted(D) following books
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter10_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter11_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter12_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter13_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter14_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter15_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter16_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter2_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter3_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter4_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter5_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter6_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter7_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter8_1.ipynb
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2correlationCoeff_1.png
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2expansionofSignal_1.png
A Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2timeInvertedsignal_1.png
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter10_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter11_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter15_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter1_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter2_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter3_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter5_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter6_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter7_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter8_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter9_1.ipynb
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/ctftch1.png
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/fourierTransch1.png
A Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/modulatedWaveChap3_1.png
A Thermodynamics_by_Gaggioli_and_Obert/Ch18.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/Ch8.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch1.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch10.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch11.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch12.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch13.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch14.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch15.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch16.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch17.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch2.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch3.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch5.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch7.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/ch9.ipynb
A Thermodynamics_by_Gaggioli_and_Obert/screenshots/changeInMoisture14.png
A Thermodynamics_by_Gaggioli_and_Obert/screenshots/degreeOfSaturation14.png
A Thermodynamics_by_Gaggioli_and_Obert/screenshots/humidityratio14.png
50 files changed, 13806 insertions, 0 deletions
diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter10_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter10_1.ipynb new file mode 100644 index 00000000..50dcaed0 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter10_1.ipynb @@ -0,0 +1,386 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 10 : Introduction to theory of probability" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 437 Ex 10.1" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "probability of each outcome=0.12\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "# referred to fig 10.1 on the page no. 435\n", + "# the occurance of each outcome is essumed to be equal.\n", + "n=8 # number of outcomes\n", + "p=1/n#\n", + "print \"probability of each outcome=%0.2f\"%p" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 438 Ex no 10.3" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "probability = 0.1667\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "m=6 # enter the number of faces \n", + "n=2# enter the number of dice \n", + "l=m**n ## total number of outcomes = 36\n", + "a=7 #\"enter the number which is to be obtained as the sum of dice\n", + "c=0 # # counter value for favorable outcome\n", + "for i in range(1,7):\n", + " for j in range(1,7):\n", + " if (i+j==a):\n", + " c=c+1#\n", + " else :\n", + " continue\n", + " \n", + " \n", + "\n", + "p=c/l#\n", + "print \"probability = %0.4f\"%p\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 438 Ex no 10.4" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "probability = 0.4075\n" + ] + } + ], + "source": [ + "from numpy.random import gamma\n", + "from __future__ import division\n", + "m=2# the number of faces \n", + "n=4 #the number of tosses\n", + "l=m**n ## l is total number of outcomes = 16\n", + "a=2 #exact no of heads\n", + "p=gamma (n+1)/(gamma(n+1-a) * gamma (a+1))## to find combination\n", + "print \"probability = %0.4f\"%(p/l)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 440 Ex no 10.5" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total probability = 0.0023\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "a=52# # total no of cards in a deck\n", + "b=6# the no of cards to be drawn\n", + "pA1= b/a## probability of getting first red ace =pA1\n", + "#the cards are drawn in succession without replacement, therefore the probability that the 2nd card will be the red ace = pA2\n", + "pA2=1/(a-1)#\n", + "p= pA1*pA2\n", + "print \"total probability = %0.4f\"%p" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 441 Ex no 10.6" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "probability = 1.04e-10\n" + ] + } + ], + "source": [ + "from numpy.random import gamma\n", + "from __future__ import division\n", + "\n", + "# This problem is based on Bernoulli Trials formula which is P( k successes in n trials ) = n!*p**k *(1-p)**(n-k)/k!*(n-k)!22\n", + "# hence the probability of finding 2 digits wrong in a sequence of 8 digits is\n", + "\n", + "k=2 # no. of successes\n", + "p= 1e-5# probability of success\n", + "n=8 #\"no. of trials\n", + "A=gamma (n+1)* (p**k)*((1-p)**(n-k))/(gamma(k)*gamma(n+1-k))#\n", + "print \"probability = %0.2e\"%A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 446 Ex no 10.9" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "probability = 0.0231\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "m=6 # enter the number of faces\n", + "n=3 # enter the number of dice\n", + "l=m**n ## l is total number of outcomes \n", + "a=8# the number which is to be obtained as the sum of dice\n", + "c=0 # # counter value for favorable outcome\n", + "for i in range(1,7):\n", + " for j in range(1,7):\n", + " if(i+j==a):\n", + " c=c+1\n", + " else :\n", + " continue\n", + " \n", + "p=c/l#\n", + "print \"probability = %.4f\"%p\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 447 Ex no 10.10" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Py(1) = 0.5924\n", + "Py0=0.4076\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "Pe=0.6898 # error probability\n", + "Q= 0.2567 # the probability of transmitting 1 #Hence probability of transmitting zero is 1-Q = P\n", + "P=1-Q#\n", + "Px_1=Q#\n", + "Px0=P#\n", + "# If x and y are transmitted digit and received digit then for BSC P(y=0/x=1) = P(y=1/x=0) = Pe , P(y=0/x=10) = P(y=1/x=1) = 1-Pe\n", + "# to find the probability of receiving 1 is Py(1) = Px(0)*P(y=1/x=0) + Px(1)*P(y=1/x=1)\n", + "Py_1= ((1-Q)* Pe) + (Q *(1-Pe))#\n", + "print \"Py(1) = %0.4f\"%Py_1\n", + "Py0=((1-Q)*(1-Pe)) + (Q*Pe)\n", + "print \"Py0=%.4f\"%Py0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 448 Ex 10.11" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "probability of error = 6.04e-05\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "Px0=.4\n", + "Px1=.6 \n", + "PE0=10**-6 \n", + "PE1=10**-4 ## given\n", + "PE=(Px0*PE0) + (Px1*PE1)# formula for probability of error\n", + "print \"probability of error = %.2e\"%PE" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 472 Ex no 10.20" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "width or spread of Gaussian PDF = 0.986\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import pi,sqrt,exp\n", + "#Gaussian PDF: Q(x)= %e**((-x**2)/2)/ (x*sqrt(2*pi))\n", + "x=2.5 # input for the function Q \n", + "Q_x = (exp(-(x**2)/2))/ (x*sqrt(2*pi))\n", + "P=1-(2*Q_x)#\n", + "print \"width or spread of Gaussian PDF = %.3f\"%P\n", + "## P gives the width or spread of Gaussian PDF" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 479 Ex no 10.21" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SNR improvement = 12.90 dB\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log\n", + "# formula for estimate error E is E = mk** - mk = a1* mk-1 +a2* mk-2 -mk\n", + "#given: various values of correlation (mk*mk)'= (m**2)',(mk*mk-1)'= .825* (m**2)',(mk*mk-2)'= .562*(m**2)',(mk*mk-3)'= .825*(m**2)' , R02=.562(m**2)', a1=1.1314, a2= -0.3714\n", + "# mean square error is given by I=(E**2)'=[1-((.825*a1)+(.562*a2))]*(m**2)'= .2753*(m**2)'\n", + "\n", + "m=1#\n", + "I=.2753*(m**2)#\n", + "S=10*log ((m**2)/I)#\n", + "print \"SNR improvement = %0.2f dB\"%S" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter11_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter11_1.ipynb new file mode 100644 index 00000000..397d0367 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter11_1.ipynb @@ -0,0 +1,202 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 11 : Random Processes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 500 Example 11.2" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "enter the value of T : 0.245\n", + "mean square value of the signal is 0.9995 Watt\n" + ] + } + ], + "source": [ + "from math import pi,sin\n", + "#given signal is Sx=(N/2)*rect(w/4(pi)B)\n", + "N=1#\n", + "B=1#\n", + "T=input(\"enter the value of T : \")\n", + "Rx=(N*B)*(sin(2*(pi)*B*T))#\n", + "print \"mean square value of the signal is %0.4f\"%Rx,\"Watt\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 501 Example 11.3" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "enter the value of wct : .165\n", + "mean square value of the process is 1.9728 Watt\n" + ] + } + ], + "source": [ + "from math import cos\n", + "# autocorrelation function of given signal is A**2/2 * cos(wct)\n", + "A=2#\n", + "wct=input(\"enter the value of wct : \")\n", + "Rx=((A**2)/2)* cos(wct)#\n", + "print \"mean square value of the process is %.4f\"%Rx,\"Watt\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 506 Example 11.7" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "enter prob of symbol 1 : .75\n", + "enter prob of symbol -1 : .21\n", + "mean is 0.54\n", + "mean square is 0.96\n" + ] + } + ], + "source": [ + "P1=input(\"enter prob of symbol 1 : \")\n", + "P2=input(\"enter prob of symbol -1 : \")\n", + "ak=(1)*P1+(-1)*P2#\n", + "print \"mean is\",ak\n", + "Ro=(1**2)*P1+((-1)**2)*P2#\n", + "print \"mean square is\",Ro" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 507 Example 11.8a " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "enter prob of symbol 1 : 0.215\n", + "enter prob of symbol 0 : .314\n", + "mean is 0.215\n", + "mean square is 0.215\n" + ] + } + ], + "source": [ + "P1=input(\"enter prob of symbol 1 : \")\n", + "P0=input(\"enter prob of symbol 0 : \")\n", + "ak=(1)*P1+(0)*P2#\n", + "print \"mean is\",ak\n", + "Ro=(1**2)*P1+((0)**2)*P2#\n", + "print \"mean square is\",Ro" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 508 Example 11.8b" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "enter prob of symbol 0 : .25\n", + "enter prob of symbol 1 : .35\n", + "enter prob of symbol -1 : .45\n", + "mean is -0.1\n", + "mean square is 0.8\n" + ] + } + ], + "source": [ + "# bipolar signalling\n", + "P0=input(\"enter prob of symbol 0 : \")\n", + "P1=input(\"enter prob of symbol 1 : \")\n", + "P2=input(\"enter prob of symbol -1 : \")\n", + "ak=(0)*P0+(1)*P1+(-1)*P2#\n", + "print \"mean is\",ak\n", + "Ro=(0**2)*P0+(1**2)*P1+((-1)**2)*P2#\n", + "print \"mean square is\",Ro" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter12_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter12_1.ipynb new file mode 100644 index 00000000..c965c427 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter12_1.ipynb @@ -0,0 +1,407 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 12 : Behaviour of analog systems in the presence of noise " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 536 Example 12.1" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "output SNR = 78.36 dB\n" + ] + } + ], + "source": [ + "from math import pi,log\n", + "#from mpmath import quad\n", + "from mpmath import quad\n", + "# Let the received signal be km(t)cos(wct) , demodulator input is [km(t)+nc(t)]cos(wct)+[ns(t)sin(wct)]. When this is multiplied by 2coswct and low pass filtered the output is s0(t)+n0(t)=km(t)+nc(t).\n", + "# Hence So=k**2*m**2' , No=nc**2'. But the power of the received signal km(t)cos(wct)= 1uW. Hence k**2*m**2'/2=10**-6\n", + "So=2*10**-6#\n", + "# to compute nc: (nc**2)'=(n**2)'=x\n", + "t0=496000.#\n", + "t1=504000. #\n", + "a=10**6 * pi#\n", + "y=quad (lambda t:1/((t**2)+(a**2)),[t0,t1])\n", + "# to compute output SNR\n", + "SNR=So/y#\n", + "val=(10.*(log (SNR)))#\n", + "print \"output SNR = %0.2f dB\"%val" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 540 Problem 12.2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "gamma threshold : 13.8155\n" + ] + } + ], + "source": [ + "from math import log,exp\n", + "#as En=sqrt(nc**2+ns**2),where both nc and ns are gaussian with variance 6n**2,according to the following eqn P(En>=A)=integrate(En/6n**2)*e**(-En**2/2*6n**2)dEn#\n", + "# the value of this integral is the probability of which is 0.01\n", + "#hence e**(-A**2/2*6n**2)=0.01\n", + "#let g=A**2/(2*6n**2)#\n", + "g=-(log(0.01)/log(exp(1)))#\n", + "# the variance 6n**2 of the bandpass noise of PSD N/2 and the bandwidth 2B is 2NB.Hence at the onset of the threshold\n", + "# therefore A**2/(2*6n**2)=A**2/(4NB)=g\n", + "#for tone modulation\n", + "#Si=A**2+m'**2/2#\n", + "#Si=3*A**2/4#\n", + "gma_th=3*(g)## gma_th=Si/NB=3*A**2/(4NB)#\n", + "print 'gamma threshold : %0.4f'%gma_th" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 547 Problem 12.3" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SIGNAL TO NOISE RATIO : 0.0053\n" + ] + } + ], + "source": [ + "# for a gaussian m(t),mp will be assumed as 36m\n", + "Sg=3##assumed\n", + "Mbar=(Sg**2)#\n", + "MP=((3.*Sg)**2)#\n", + "B=0.2##ASSUMED\n", + "gma=0.4##assumed\n", + "SNR=3.*B**2*(Mbar/MP)*gma#\n", + "print 'SIGNAL TO NOISE RATIO : %0.4f'%SNR" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 550 Problem 12.4" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "value of Bm : 8.3333\n" + ] + } + ], + "source": [ + "from mpmath import quad\n", + "t0=-5#\n", + "t1=5#\n", + "y=quad(lambda t:t**2,[t0,t1])#\n", + "f=quad(lambda t:1,[t0,t1])\n", + "Bm=y/f#\n", + "print 'value of Bm : %0.4f'%Bm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 550 Problem 12.5" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bm2 : 3.0\n" + ] + } + ], + "source": [ + "from mpmath import quad\n", + "from math import exp\n", + "# Sm(w)=k*e**(-w2/26**2) this is given\n", + "# let us the assume the value of constant 6**2/4(pi**2) =3\n", + "# thus the variance can be calculated as\n", + "f0=0#\n", + "f1=15#\n", + "y=quad(lambda f:(f**2)*(exp(-(f**2)/6)),[f0,f1])\n", + "g=quad(lambda f:exp(-(f**2)/6),[f0,f1])#\n", + "v=y/g#\n", + "print 'Bm2 : ',v" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 552 Prob 12.6" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "factor of superiority of PM over FM : 3.0\n" + ] + } + ], + "source": [ + "from mpmath import quad\n", + "from math import exp,pi\n", + "#for the same transmission bandwidth variance of PM and FM systems is same\n", + "#hence the ratio of SNR of PM to FM is B**2/(3Bm'**2)\n", + "#assuming 6=1\n", + "B=3/(2*pi)##because W=2*pi*B\n", + "#variance is Bm2\n", + "f0=0#\n", + "f1=15.#\n", + "y=quad(lambda f:(f**2)*(exp(-(f**2)*2*(pi**2))),[f0,f1])\n", + "g=quad(lambda f:exp(-(f**2)*2*(pi**2)),[f0,f1])\n", + "Bm2=y/g#\n", + "l=(B**2)/(3*(Bm2))#\n", + "print 'factor of superiority of PM over FM : ',l" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 555 Example 12.7" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "threshold SNR = 300.00 \n", + "Threshold SNR = -104.68 dB \n", + "system is not in threshold\n" + ] + } + ], + "source": [ + "from math import log\n", + "B=4# SNR=20.5# # given\n", + "r=20*(B+1)##as B=4\n", + "#output SNR is given as So/No=3*B**2*r*(m**2'/mp**2)\n", + "m=4.# m=mp/6m is given\n", + "SNRt=3*(B**2)*r*(1/m)**2#\n", + "print \"threshold SNR = %0.2f \"%SNRt\n", + "# to calculate output SNR in dB\n", + "SNRdB=20*log(SNR)#\n", + "print \"Threshold SNR = %0.2f dB \"%SNRdB\n", + "if 20.5<SNRdB:\n", + " print \"system is in threshold\"\n", + "else: \n", + " print 'system is not in threshold'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 561 Prob 12.8" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SNR is equal : 21845.33\n", + "SNR = 43.394 dB\n" + ] + } + ], + "source": [ + "from math import log10\n", + "#for a gausssian signal,mp=infinity(00),but we may assume 36 loading,thus mp=3*6,\n", + "Sgm=3.#\n", + "m2=(Sgm**2)#\n", + "mp2=((3*Sgm)**2)#\n", + "y=(m2)/(mp2)#\n", + "# to calculate SNR,we have SNR=3(2**n)*((m**2)/(mp**2)) \n", + "n=8##given\n", + "l=3*(2**(2*n))*y##by formula\n", + "print 'SNR is equal : %0.2f'%l\n", + "print 'SNR = %0.3f dB'%(10*(log10(l)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 567 Prob 12.10" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "value of |m| : 0.80\n" + ] + } + ], + "source": [ + "from math import pi,sqrt,exp\n", + "from mpmath import quad\n", + "# to calculate |m|\n", + "m0=0#\n", + "m1=50.#\n", + "m=quad(lambda m:(m*(exp(-(m**2)/2.))),[m0,m1])##assuming 6m=1\n", + "print 'value of |m| : %0.2f'%(sqrt(2/pi)*m)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 569 Prob 12.11" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "transmitted power : 1.01e-04\n", + "SNR without pre-emphasis and de-emphasis : 2.53e-08\n", + "S is 2.44e+00\n", + "SNR at the output : 3.31e-08\n", + "Improvement factor in SNR with pre-emphasis and de-emphasis : 1.31\n" + ] + } + ], + "source": [ + "from math import pi,sqrt\n", + "from mpmath import quad\n", + "a=1400.*pi##given\n", + "c=1.##assumed\n", + "w0=0\n", + "w1=8000.*pi#\n", + "S=quad(lambda w:1/((w**2)+(a**2)),[w0,w1])\n", + "So=S/pi#\n", + "print 'transmitted power : %0.2e'%So##assuming G=1,hence St=So\n", + "#assuming N=1\n", + "No=4000.##because No=N*B\n", + "SNR=So/No#\n", + "print 'SNR without pre-emphasis and de-emphasis : %0.2e'%SNR\n", + "S=quad(lambda w:1/(sqrt((w**2)+(a**2))),[w0,w1])#\n", + "print 'S is %0.2e'%S\n", + "SNRo=(10**-8)*4*(pi**2)/(2*(S**2))#\n", + "print 'SNR at the output : %0.2e'%SNRo\n", + "print 'Improvement factor in SNR with pre-emphasis and de-emphasis : %0.2f'%(SNRo/SNR)" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter13_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter13_1.ipynb new file mode 100644 index 00000000..35729415 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter13_1.ipynb @@ -0,0 +1,102 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 13 : Behaviour of digital communication systems in the presence of noise " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 620 prob no 13.1" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "signal power required at the receiver = 0.47 Watts\n", + "Bandwidth is = 2080000.00 Hertz\n", + "signal power required at the receiver= 10.38 Watts\n", + "Bandwidth is = 520000.00 Hertz\n", + "signal power required at the receiver = 2.87 Watts\n", + "Bandwidth is = 1040000.00 Hertz\n" + ] + } + ], + "source": [ + "from math import log\n", + "\n", + "def log2(x):\n", + " y=log(x,2)\n", + " return y\n", + "\n", + "#Determinaion of the transmission bandwidth and the signal power required at the receiver input for i)Binary ii)16-ary ASK iii)16-ary PSK\n", + "#given Rb=2.08*10**6,Pb<=10**-6\n", + "\n", + "#i)for BINARY we have to consider Pb=Pe=10**-6=Q(sqrt(2Eb/N)). This yields Eb/N=11.35. \n", + "#SIgnal power is given by Si=Eb*Rb=11.35*N*Rb\n", + "N=2*10**-8##for binary. Channel noise PSD=10**-8\n", + "Rb=2.08*10**6#\n", + "Si1=11.35*N*Rb#\n", + "print \"signal power required at the receiver = %0.2f Watts\"%Si1\n", + "Bt1=Rb## Bandwidth for baseband pulses\n", + "print \"Bandwidth is = %0.2f Hertz\"%Bt1\n", + "\n", + "#ii)for 16-ary ASK we have to consider Pb=10**-6=Pem/log2(16)\n", + "# therefore Pem is given as Pem=Pb*log2(16)\n", + "Pb=10**-6#\n", + "Pem=Pb*log2(16)#\n", + "#'Pem' is also given as Pem=2(M-1/M)*Q*sqrt(6Eb*log2(16)/(N(M**2-1)))\n", + "M=16## for 16-array ASk\n", + "# By using above formula for 'Pem' , we can calculate the value of Eb,which is come out to be equal to 0.499*10**-5#\n", + "Eb=0.499*10**-5## if the M-ary pulse rate is RM =Rb/4 then\n", + "RM =Rb/4# \n", + "Si2=Eb*(log2(M))*RM#\n", + "print \"signal power required at the receiver= %0.2f Watts\"%Si2\n", + "Bt2=RM##transmission bandwith\n", + "print \"Bandwidth is = %0.2f Hertz\"%Bt2\n", + "\n", + "#iii) for 16-array PSK we have to consider Pem=4*Pb. This is approximately equal to 2*Q(sqrt(2*pi**2*Eb*log2(16))/256*N). This yields \n", + "Eb= 137.8*10**-8#\n", + "Si3=Eb*log2(16)*RM#\n", + "print \"signal power required at the receiver = %0.2f Watts\"%Si3\n", + "Bt3=RM##normally \n", + "#But for PSK, as it is a modulated signal the required bandwidth is 2Bt3.\n", + "Bpsk=2*(Bt3)#\n", + "print \"Bandwidth is = %0.2f Hertz\"%Bpsk" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter14_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter14_1.ipynb new file mode 100644 index 00000000..897627d8 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter14_1.ipynb @@ -0,0 +1,158 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 14 : Optimum signal detection" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 631 Prob 14.1" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f06e3c30650>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from numpy import arange\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot,show,title,xlabel,ylabel\n", + "\n", + "# the co-ordinates of the vectors are \n", + "# s1(1,-0.5),s2=(-0.5,1),s3=(0,-1),s4=(0.5,1)\n", + "x4=arange(0,0.6,0.1)\n", + "y4=[]\n", + "for x in x4:y4.append(2*x)\n", + "\n", + "plot(x4,y4) # blue line\n", + "x1=arange(0,1.1,0.1)\n", + "y1=[]\n", + "for x in x1:y1.append(-0.5*x)\n", + "plot(x1,y1) #green line\n", + "title(\"x4 Vs y4 & x1 Vs y1\")\n", + "xlabel(\"x --->\")\n", + "ylabel(\"y --->\")\n", + "show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no. 650 problem no. 14.2" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "probability of symbol m1 is 0.168\n", + "probability of symbol m2 is0.245\n", + "the threshold is= 0.08 \n" + ] + } + ], + "source": [ + "from math import sqrt,log\n", + "\n", + "# the two symbols to be transmitted are m1 and m2,the probabilities of which are not equal\n", + "# To design the optimum receiver we need to decide the threshold say d\n", + "# N be the given noise PSD,E the energy of the signal, assume N =1, E=1.5\n", + "Pm1=input(\"probability of symbol m1 is \")\n", + "Pm2=input(\"probability of symbol m2 is\")\n", + "#d is calculated as follows\n", + "N=1#\n", + "E=1.5#\n", + "d=(N/(4*sqrt(E)))*log(Pm2/Pm1)#\n", + "print \"the threshold is= %0.2f \"%d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 665 Problem 14.7" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "probability of symbol m1 is0.25\n", + "probability of symbol m2 is0.35\n", + "mean energy of the first signal is 0.125000 units\n", + "mean energy of the second signal is 0.087500 units\n" + ] + } + ], + "source": [ + "# we know k1P(m1)=k2P(m2), where k1 and k2 are the distances of the signals s1 and s2 resp.,hence k1+k2=d\n", + "Pm1=input(\"probability of symbol m1 is\")\n", + "Pm2=input(\"probability of symbol m2 is\")\n", + "#assume d=1\n", + "d=1#\n", + "E1=(((Pm1)*((d**2)/2.))+((Pm2)*((d**2)/2)))#\n", + "print \"mean energy of the first signal is %f units\"%E1\n", + "E2=Pm1*Pm2*(d**2)#\n", + "print \"mean energy of the second signal is %f units\"%E2\n", + "if(E1==E2):\n", + " print \"signals are equiprobable\"#\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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter15_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter15_1.ipynb new file mode 100644 index 00000000..cdc0af66 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter15_1.ipynb @@ -0,0 +1,231 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 15 : Introduction to information theory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 687 prob no 15.1" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Length = 1.14 4-ary digits\n", + "Entropy of source is, H = 0.90 4-ary units\n", + "Efficiency of code, N = 0.79 \n" + ] + } + ], + "source": [ + "from math import log\n", + "# Here we have given six messages. For 4-ary Huffman code, we need to add one dummy variable to satisfy the required condition of r+k(r-1) messages.Probabilities are given as p(1)=0.3# p(2)=0.25# p(3)=0.15# p(4)=0.12# p(5)=0.1# p(6)=0.08# p(7)=0.\n", + "\n", + "#The length L of this code is calculated as\n", + " \n", + "n=5# the length of probability vector p\n", + "p=[.3, .25, .15, .12, .1, .08, 0]## enter probabilities in descending order\n", + "l=[1, 1, 1 ,2 ,2 ,2, 2]## code length of individual message according to order\n", + "L=0#\n", + "for i in range(0,n):\n", + " L=L+(p[(i)]*l[(i)])\n", + "\n", + "print \"Length = %0.2f \"%L,'4-ary digits'\n", + "\n", + "# Entropy of source is calculated as\n", + "H=0#\n", + "for i in range(0,n-1):#since the value of log(1/0) for the last entry is infinite which when multiply by 0 gives result as 0\n", + " H=H+(p[(i)]*log(1.0/p[(i)]))#\n", + "\n", + "H1=H/log(4)\n", + "print \"Entropy of source is, H = %0.2f \"%H1,'4-ary units'\n", + "\n", + "# Efficiency of code is given as \n", + "N=H1/L#\n", + "print \"Efficiency of code, N = %0.2f \"%N" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 688 Example no. 15.2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Length = 1.00 \n", + "Entropy of source is, H = 0.72 bit\n", + "Efficiency of code, N = 0.72 \n", + "Length = 0.78 \n", + "Efficiency of code, N = 0.93 \n", + "Length = 0.73 \n", + "Efficiency of code, N = 0.99 \n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "# N=1\n", + "#Here we have given two messages with probabilities m1=0.8 and m2=0.2 . Therefore, Huffman code for the source is simply 0 and 1.\n", + "\n", + "#The length L of this code is calculated as\n", + "N=1#\n", + "p=[.8, .2]##enter probabilities in descending order\n", + "n=len(p)\n", + "l=[1, 1]##code length of individual message according to order\n", + "L=0#\n", + "for i in range(0,n):\n", + " L=L+(p[(i)]*l[(i)])#\n", + "\n", + "print \"Length = %0.2f \"%L\n", + "\n", + "# Entropy of source is calculated as\n", + "H=0#\n", + "for i in range(0,n):\n", + " H=H+(p[(i)]*log(1/p[(i)],2))\n", + "\n", + "print \"Entropy of source is, H = %0.2f bit\"%H\n", + "\n", + "# Efficiency of code is given as \n", + "N1=H/L#\n", + "print \"Efficiency of code, N = %0.2f \"%N1\n", + "\n", + "#for N=2\n", + "#There are four (2**N) combinations and their probabilities obtained by multiplying individuals probability.\n", + "#The length L of this code is calculated as\n", + "N=2#\n", + "p=[0.64, 0.16, 0.16, 0.04]##enter probabilities in descending order\n", + "n=len(p)#\n", + "l=[1 ,2 ,3 ,3]##code length of individual message according to order\n", + "L1=0#\n", + "for i in range(0,n):\n", + " L1=L1+(p[(i)]*l[(i)])#\n", + "\n", + "L=L1/N## word length per message\n", + "print \"Length = %0.2f \"%L\n", + "\n", + "# Efficiency of code is given as \n", + "N2=H/L#\n", + "print \"Efficiency of code, N = %0.2f \"%N2\n", + "\n", + "\n", + "#for N=3\n", + "#There are eight (2**N)combinations and their probabilities obtained by multiplying individuals probability\n", + "#The length L of this code is calculated as\n", + "N=3#\n", + "p=[.512, .128, .128, .128, .032, .032, .032, .008]##enter probabilities in descending order\n", + "n=len(p)#\n", + "l=[1, 3 ,3 ,3, 5, 5 ,5 ,5]##code length of individual message according to order\n", + "L1=0\n", + "for i in range(0,n):\n", + " L1=L1+(p[(i)]*l[(i)])#\n", + "\n", + "L=L1/N## word length per message\n", + "print \"Length = %0.2f \"%L\n", + "\n", + "# Efficiency of code is given as \n", + "N3=H/L#\n", + "print \"Efficiency of code, N = %0.2f \"%N3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 702 prob no 15.4" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "entropy = 1.00 bits\n", + "entropy = 2.00 bits\n", + " if x and y have equal absolute entropies,their relative (differential) entropies must differ by 1 bit \n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log\n", + "from mpmath import quad\n", + "\n", + "\n", + "x0=(-1)#\n", + "x1=1##given\n", + "y0=(-2)#\n", + "y1=2##given\n", + "G=2##gain of amplifier\n", + "#the probbilities are given as P(x)=1/2 for |x|<1 & P(y)=1/4 for |y<2| otherwise P(x)=P(y)=0.\n", + "#P(x<1 & -x<1)=1/2#\n", + "#P(y<2 & -y<2)=1/4#\n", + "# hence entropies are given as\n", + "g1=(1./2)*log(2,2)#\n", + "g2=(1./4)*log(4,2)# \n", + "X=quad(lambda x:g1*1,[x0,x1])\n", + "Y=quad(lambda y:g2*1,[y0,y1])\n", + "print \"entropy = %0.2f bits\"%X\n", + "print \"entropy = %0.2f bits\"%Y\n", + "#Here the entropy of random variable 'y' is twice that of the 'x'.This results may come as a surprise,since a knowledge of 'x' uniquely determines 'y' and vice versa , since y=2x.Hence , the average uncertainty of x and y should be identical.\n", + "# The reference entropy R1 for x is -log dx ,and The reference entropy R2 for y is -log dy (in the limit as dx,dy->0 ).\n", + "# R1= lim (dx->0) -log dx\n", + "#R2= lim (dy->0) -log dy\n", + "#and R1-R2 = lim(dx,dy->0) log(dx/dy) = log (dy/dx) = log2 2 =1 bit\n", + "#Therefore,the reference entropy of x is higher than the reference entropy for y. Hence we conclude that \n", + "print \" if x and y have equal absolute entropies,their relative (differential) entropies must differ by 1 bit \"" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter16_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter16_1.ipynb new file mode 100644 index 00000000..572bf36e --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter16_1.ipynb @@ -0,0 +1,136 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter16 : Error correcting codes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 732 Example no 16.1" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "code words are given as\n", + "[[1 1 1 0 0 0]]\n", + "[[1 1 0 1 1 0]]\n", + "[[1 0 1 0 1 1]]\n", + "[[1 0 0 1 0 1]]\n", + "[[0 1 1 1 0 1]]\n", + "[[0 1 0 0 1 1]]\n", + "[[0 0 1 1 1 0]]\n", + "[[0 0 0 0 0 0]]\n" + ] + } + ], + "source": [ + "from numpy import mat,shape\n", + "\n", + "#here generator matrix is given\n", + "G=mat([[1, 0, 0, 1 ,0 ,1],[0, 1, 0, 0, 1, 1],[0, 0, 1, 1, 1, 0]])\n", + "d1=mat([[1, 1, 1]])\n", + "d2=mat([[1, 1, 0]])\n", + "d3=mat([[1, 0, 1]])\n", + "d4=mat([[1, 0, 0]])\n", + "d5=mat([[0, 1, 1]])\n", + "d6=mat([[0, 1, 0]])\n", + "d7=mat([[0, 0, 1]])\n", + "d8=mat([[0, 0 ,0]])\n", + "c1=d1*G\n", + "\n", + "for i in range(0,6):\n", + " if c1[0,i]==2:\n", + " c1[0,i]=0\n", + " \n", + "\n", + "c2=d2*G#\n", + "for i in range(0,6):\n", + " if c2[0,i]==2:\n", + " c2[0,i]=0\n", + " \n", + "\n", + "c3=d3*G#\n", + "for i in range(0,6):\n", + " if c3[0,i]==2:\n", + " c3[0,i]=0\n", + " \n", + " \n", + "c4=d4*G#\n", + "for i in range(0,6):\n", + " if c4[0,i]==2:\n", + " c4[0,i]=0\n", + " \n", + "\n", + "c5=d5*G#\n", + "for i in range(0,6):\n", + " if c5[0,i]==2:\n", + " c5[0,i]=0#\n", + " \n", + "\n", + "c6=d6*G#\n", + "for i in range(0,6):\n", + " if c6[0,i]==2:\n", + " c6[0,i]=0#\n", + " \n", + "\n", + "c7=d7*G#\n", + "for i in range(0,6):\n", + " if c7[0,i]==2:\n", + " c7[0,i]=0#\n", + " \n", + "\n", + "c8=d8*G#\n", + "for i in range(0,6):\n", + " if c8[0,i]==2:\n", + " c8[0,i]=0#\n", + " \n", + "\n", + "print \"code words are given as\"\n", + "print c1\n", + "print c2\n", + "\n", + "print c3\n", + "print c4\n", + "print c5\n", + "print c6\n", + "print c7\n", + "print c8" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter2_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter2_1.ipynb new file mode 100644 index 00000000..c46040cd --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter2_1.ipynb @@ -0,0 +1,498 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter2 : Introduction to signals" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 17 Prob 2.1 b" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "power of signal: 0.333 Watt\n" + ] + } + ], + "source": [ + "from mpmath import quad\n", + "\n", + "t0=-1\n", + "t1=1\n", + "y=quad(lambda t:t**2,[t0,t1])\n", + "print 'power of signal: %0.3f'%(y/2),\"Watt\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no.26 Exa no.2.3b" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f70110a6f90>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "from matplotlib.pyplot import plot,subplot,show,title\n", + "\n", + "from numpy import arange\n", + "\n", + "t=arange(-3,1.0082,.0082)\n", + "m1=(0-1)/(-3-(-1))##slope for -3<t<-1\n", + "c1=(0-m1*(-3))##intercept for pt(-3,0)\n", + "u=[]\n", + "for tt in t:\n", + " if tt<=-1:\n", + " u.append(((m1*tt)+c1))\n", + " else:\n", + " break\n", + "m2=(1-0)/(-1-1)##slope for -1<t<1\n", + "c2=(0-m2*1)#intercept for pt(1,0)\n", + "\n", + "for tt in t:\n", + " if tt>-1:\n", + " u.append(((m2*tt)+c2))\n", + "subplot(221)\n", + "plot(t,u)\n", + "title('original signal')\n", + "subplot(222)\n", + "plot([2*tt for tt in t],u)\n", + "title('expansion of signal')\n", + "show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page27 Problem 2.4" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nKN+9q7T7AAAAAElFTkSuQmCC\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6ff76e1cd0>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6ff71a4f10>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from math import exp\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot,subplot,show,title,xlabel,ylabel\n", + "\n", + "t=range(-5,0)#\n", + "y=[]\n", + "for tt in t:y.append(exp(tt/2))\n", + "subplot(221)\n", + "plot(t,y)\n", + "title ( \" Original signal \" )\n", + "xlabel( \" Time \")\n", + "ylabel(\"g(t) \" )\n", + "show()\n", + "t_inv=[]\n", + "for tt in t:t_inv.append(-tt)\n", + "y=[] \n", + "for tt in t_inv:y.append(exp(-tt/2)) \n", + "subplot(222)\n", + "plot(t,y)#\n", + "title ( \" Time inverted signal\")\n", + "xlabel( \" time \")\n", + "ylabel(\"g(-t)\" )\n", + "show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 33 Exa 2.5a" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "energy of sine signal= 3.14 Joule\n", + "value of c= 1.27 \n" + ] + } + ], + "source": [ + "from numpy import arange,pi\n", + "from mpmath import quad,sin\n", + "\n", + "#Assuming SI units for all quantities\n", + "\n", + "#approximation of square signal to sine signal with minimum energy\n", + "t=arange(0,2*pi+.1,0.1)\n", + "t0=0#\n", + "t1=2*pi#\n", + "y=quad(lambda t:(sin(t))**2,[t0,t1])\n", + "print 'energy of sine signal= %.2f Joule'%y\n", + "#to calculate value of c\n", + "t2=0#\n", + "t3=pi#\n", + "g=quad(lambda t:sin(t),[t2,t3])\n", + "t4=pi#\n", + "t5=2*pi#\n", + "h=quad(lambda t:-sin(t),[t4,t5])\n", + "print \"value of c= %0.2f \"%((g+h)/pi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 33 Exa 2.6a" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "energy of signal x(t)=5.00 J\n", + "energy of signal=5.00 J\n", + "correlation coefficient=1\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange,pi,sqrt\n", + "from mpmath import quad,sin\n", + "#Assuming SI units for all quantities\n", + "#given signal is x(t)=1\n", + "#energy of signal x(t)\n", + "t0=0#\n", + "t1=5\n", + "x=1\n", + "y=quad(lambda t:x**2,[t0,t1])\n", + "print 'energy of signal x(t)=%.2f J'%y\n", + "#to find correlation coefficient we have to calculate the energies of different given signals\n", + "#1st signal g1(t)=1\n", + "g1=1\n", + "e1=quad(lambda t:g1**2,[t0,t1])\n", + "print 'energy of signal=%.2f J'%e1\n", + "#correltion coefficient \n", + "c1=quad(lambda t:g1*x,[t0,t1])\n", + "print 'correlation coefficient=%.f'%(c1/sqrt(y*e1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 33 Exa 2.6b" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "energy of signal x(t)=5.00 J\n", + "energy of signal=1.25 J\n", + "correlation coefficient=1.00\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange,pi,sqrt\n", + "from mpmath import quad,sin\n", + "\n", + "#Assuming SI units for all quantities\n", + "#given signal is x(t)=1\n", + "#energy of signal x(t)\n", + "t0=0#\n", + "t1=5\n", + "x=1\n", + "y=quad(lambda t:x**2,[t0,t1])\n", + "print 'energy of signal x(t)=%.2f J'%y\n", + "#to find correlation coefficient we have to calculate the energies of different given signals\n", + "g2=.5\n", + "e2=quad(lambda t:g2**2,[t0,t1])\n", + "print 'energy of signal=%.2f J'%e2\n", + "#correltion coefficient \n", + "c2=quad(lambda t:g2*x,[t0,t1])\n", + "print 'correlation coefficient=%.2f'%(c2/sqrt(y*e2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 33 Exa 2.6c" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "energy of signal x(t)=5.00 J\n", + "energy of signal=5.00 J\n", + "correlation coefficient=-1.00\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange,pi,sqrt\n", + "from mpmath import quad,sin\n", + "\n", + "#Assuming SI units for all quantities\n", + "#given signal is x(t)=1\n", + "#energy of signal x(t)\n", + "t0=0#\n", + "t1=5\n", + "x=1\n", + "y=quad(lambda t:x**2,[t0,t1])\n", + "print 'energy of signal x(t)=%.2f J'%y\n", + "#to find correlation coefficient we have to calculate the energies of different given signals\n", + "g3=-1\n", + "e3=quad(lambda t:g3**2,[t0,t1])\n", + "print 'energy of signal=%0.2f J'%e3\n", + "#correltion coefficient \n", + "c3=quad(lambda t:g3*x,[t0,t1])\n", + "print 'correlation coefficient=%.2f'%(c3/sqrt(y*e3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 33 Exa 2.6d" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "energy of signal x(t)=5.00 J\n", + "energy of signal=2.16 J\n", + "correlation coefficient=0.96\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange,pi,sqrt\n", + "from mpmath import quad,sin,exp\n", + "\n", + "#Assuming SI units for all quantities\n", + "#given signal is x(t)=1\n", + "#energy of signal x(t)\n", + "t0=0#\n", + "t1=5\n", + "x=1\n", + "y=quad(lambda t:x**2,[t0,t1])\n", + "print 'energy of signal x(t)=%.2f J'%y\n", + "#to find correlation coefficient we have to calculate the energies of different given signals\n", + "e4=quad(lambda t:(exp(-t/5))**2,[t0,t1])\n", + "print 'energy of signal=%.2f J'%e4\n", + "\n", + "#correltion coefficient \n", + "c4=quad(lambda t:(exp(-t/5))*x,[t0,t1])\n", + "print 'correlation coefficient=%.2f'%(c4/sqrt(y*e4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 33 Exa 2.6e" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "energy of signal x(t)=5.00 J\n", + "energy of signal=0.50 J\n", + "correlation coefficient=0.63\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange,pi,sqrt\n", + "from mpmath import quad,sin,exp\n", + "\n", + "#Assuming SI units for all quantities\n", + "#given signal is x(t)=1\n", + "#energy of signal x(t)\n", + "t0=0#\n", + "t1=5\n", + "x=1\n", + "y=quad(lambda t:x**2,[t0,t1])\n", + "print 'energy of signal x(t)=%.2f J'%y\n", + "#to find correlation coefficient we have to calculate the energies of different given signals\n", + "e5=quad(lambda t:(exp(-t))**2,[t0,t1])\n", + "print 'energy of signal=%.2f J'%e5\n", + "#correltion coefficient \n", + "c5=quad(lambda t:(exp(-t))*x,[t0,t1])\n", + "print 'correlation coefficient=%.2f'%(c5/sqrt(y*e5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 33 Exa 2.6f" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "energy of signal x(t)=5.00 J\n", + "energy of signal=2.50 J\n", + "correlation coefficient=0.71\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange,pi,sqrt\n", + "from mpmath import quad,sin,exp\n", + "\n", + "#Assuming SI units for all quantities\n", + "#given signal is x(t)=1\n", + "#energy of signal x(t)\n", + "t0=0#\n", + "t1=5\n", + "x=1\n", + "y=quad(lambda t:x**2,[t0,t1])\n", + "print 'energy of signal x(t)=%.2f J'%y\n", + "#to find correlation coefficient we have to calculate the energies of different given signals\n", + "e6=quad(lambda t:(sin(2*pi*t))**2,[t0,t1])\n", + "print 'energy of signal=%.2f J'%e6\n", + "#correltion coefficient \n", + "c6=quad(lambda t:((sin(2*pi*t))**2)*x,[t0,t1])\n", + "print 'correlation coefficient=%.2f'%(c6/sqrt(y*e6))" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter3_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter3_1.ipynb new file mode 100644 index 00000000..d82be350 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter3_1.ipynb @@ -0,0 +1,182 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 3 : Analysis and transmission of signals" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 75 Prob 3.1" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "fourier transform of x(t)=:\n", + "[ 1.58195029+0.j 1.33722176-0.38516024j 1.02105993-0.4033185j\n", + " 0.84862839-0.29364174j 0.76732853-0.17191927j 0.73478625-0.05628763j\n", + " 0.73478625+0.05628763j 0.76732853+0.17191927j 0.84862839+0.29364174j\n", + " 1.02105993+0.4033185j 1.33722176+0.38516024j]\n" + ] + } + ], + "source": [ + "from scipy.fftpack import fft\n", + "from math import exp\n", + "# given signal is x(t)= e**(-at) * u(t)\n", + "#unity function u(t)=1 for 0 to infinity \n", + "#therefore\n", + "x=1#\n", + "#here we consider 'infinity' value as 10 and the value of 'a' is 1\n", + "t= range(0,11)\n", + "a=1## a >0\n", + "z=[]\n", + "for tt in t:z.append((exp(-a*tt) * x))\n", + "y=fft(z)#\n", + "print 'fourier transform of x(t)=:\\n',y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 81 Prob 3.2" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "fourier transform of x(t)=:\n", + "[ 1.+0.j]\n" + ] + } + ], + "source": [ + "from scipy.fftpack import fft\n", + "\n", + "#given signal is x(t) = rect(t/T)\n", + "#rect(t/T) = 1 for |t| < T/2 and \n", + "# = 0 for |t| > T/2\n", + "# therefore we have to find out fourier transform of x(t)= 1 for |t| < T/2 thus,\n", + "x=[1]#\n", + "T= 200# # consider \n", + "t= range(-T/2,T/2+1)##range for fourer transform\n", + "y=fft(x)#\n", + "print 'fourier transform of x(t)=:\\n',y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 82 Prob 3.3" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "fourier transform of x(t)=:\n", + "[ 1.+0.j]\n" + ] + } + ], + "source": [ + "from scipy.fftpack import fft\n", + "\n", + "# given signal is x(t)= unit impulse d(t) \n", + "#it is defined as d(t) = 1 for t=0\n", + "#therefore \n", + "x=1#\n", + "y=fft([x])#\n", + "print 'fourier transform of x(t)=:\\n',y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 84 problem 3.7" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "fourier transform of signum funcion is : \n", + "[ 0.00000000 +0.j -1.98883083+13.19503037j -0.04442719 +0.14402943j\n", + " -1.90096887 +3.94740253j -0.17376123 +0.25486091j -1.73305187 +1.86778571j\n", + " -0.37651020 +0.30025686j -1.50000000 +0.8660254j -0.63465898 +0.24908529j\n", + " -1.22252093 +0.27903243j -0.92526991 +0.06933939j -0.92526991 -0.06933939j\n", + " -1.22252093 -0.27903243j -0.63465898 -0.24908529j -1.50000000 -0.8660254j\n", + " -0.37651020 -0.30025686j -1.73305187 -1.86778571j -0.17376123 -0.25486091j\n", + " -1.90096887 -3.94740253j -0.04442719 -0.14402943j -1.98883083-13.19503037j]\n" + ] + } + ], + "source": [ + "from numpy import sign\n", + "t=range(-10,11)#\n", + "y=sign(t)#\n", + "g=fft(y)#\n", + "print \"fourier transform of signum funcion is : \\n\",g" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter4_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter4_1.ipynb new file mode 100644 index 00000000..2847c250 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter4_1.ipynb @@ -0,0 +1,70 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 4 : Amplitude(Linear) Modulation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 166 Problem 4.5" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "efficiency in % is 11.111\n", + "efficiency in % is 4.306\n" + ] + } + ], + "source": [ + "# we have given 1)u=.5 and 2)u=.3\n", + "# efficiency n is calculated by using formula n= (u**2) / (2+u**2) *100 %\n", + "#for u=0.5\n", + "u1=0.5#\n", + "n1= (u1**2) / (2+u1**2) *100 #\n", + "print 'efficiency in % is',round(n1,3)\n", + "# Hence only 11.1111% of total power is in sidebands.\n", + "#for u=0.3\n", + "u2=0.3#\n", + "n2= (u2**2) / (2+u2**2) *100#\n", + "print 'efficiency in % is',round(n2,3)\n", + "# Hence only 4.3062% of the total power is the useful power (power in sidebands)" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter5_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter5_1.ipynb new file mode 100644 index 00000000..535073ef --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter5_1.ipynb @@ -0,0 +1,332 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 5 : Angle(exponential) Modulation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 212 Problem 5.1" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Minimum frequency = 99.90 MHz\n", + "Maximum frequency = 100.10 MHz\n", + "Minimum frequency = 99.90 MHz\n", + "Maximum frequency = 100.10 MHz\n" + ] + } + ], + "source": [ + "from math import pi\n", + "\n", + "# The values of constsnts Kf and Kp are given as Kf= 2*pi*10**5 and Kp=10*pi, and carrier frequency fc=100MHz\n", + "\n", + "# For FM :\n", + "#fi= fc + Kf*m(t)/2*pi\n", + "# Minimum value of m(t) = -1 and Maximum value of m(t)= +1\n", + "Kf= 2*pi*10**5 #\n", + "Kp=10*pi#\n", + "fc=100*10**6 ## in Hz\n", + "Mmin = -1 # \n", + "Mmax=1#\n", + "fimin1= fc + Kf*Mmin/(2*pi)#\n", + "print 'Minimum frequency = %0.2f MHz'%(fimin1/10**6)\n", + "fimax1= fc + Kf*Mmax/(2*pi)#\n", + "print 'Maximum frequency = %0.2f MHz'%(fimax1/10**6)\n", + "\n", + "#For PM :\n", + "#fi= fc + Kp*m(t)'/2*pi\n", + "# Minimum value of m(t)' = -20,000 and Maximum value of m(t)'= +20,000\n", + "Mmin1=-20000 # \n", + "Mmax1=20000#\n", + "fimin2= fc + Kp*Mmin1/(2*pi)#\n", + "print 'Minimum frequency = %.2f MHz'%(fimin2/10**6)\n", + "fimax2= fc + Kp*Mmax1/(2*pi)#\n", + "print 'Maximum frequency = %.2f MHz'%(fimax2/10**6)\n", + "\n", + "# Since m(t) is increases and decreases linearly with time, the instantaneous frequency increases linearly from fimin to fimax" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 213 Problem 5.2" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Minimum frequency = 99.90 MHz\n", + "Maximum frequency = 100.10 MHz\n" + ] + } + ], + "source": [ + "from math import pi\n", + "\n", + "# The values of constsnts Kf and Kp are given as Kf= 2*pi*10**5 and Kp=pi/2, and carrier frequency fc=100MHz\n", + "# For FM :\n", + "#fi= fc + Kf*m(t)/2*pi\n", + "# Minimum value of m(t) = -1 and Maximum value of m(t)= +1\n", + "Kf= 2*pi*10**5 #\n", + "Kp=pi/2#\n", + "fc=100*10**6 ## in Hz\n", + "Mmin = -1 #\n", + "Mmax=1#\n", + "fimin1= fc + Kf*Mmin/(2*pi)#\n", + "print 'Minimum frequency = %.2f MHz'%(fimin1/10**6)\n", + "fimax1= fc + Kf*Mmax/(2*pi)#\n", + "print 'Maximum frequency = %.2f MHz'%(fimax1/10**6)\n", + "# Since m(t) is increases and decreases linearly with time, the instantaneous frequency increases linearly from fimin to fimax" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 222 Problem 5.3.a" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bfm = 230.00 kHz\n", + "Bpm = 130.00 kHz\n" + ] + } + ], + "source": [ + "from math import pi\n", + "\n", + "# refer fig from page no. 212 Fig.5.4a\n", + "# The values of constsnts Kf and Kp are given as Kf= 2*pi*10**5 and Kp=5*pi .\n", + "# Here we are assuming the Bandwidth B of m(t) as the frequency of the third harmonic, i.e. 3(10**4/2)Hz= 15kHz\n", + "B=15## in kHz\n", + "# For FM:\n", + "# Here peak amplitude of m(t) is mp=1\n", + "mp=1#\n", + "# df=kf*mp/2*pi\n", + "Kf= 2*pi*10**5# \n", + "Kp=5*pi#\n", + "df= (Kf*mp)/(2*pi)## in Hz\n", + "df=df/10**3## in KHz\n", + "Bfm=2*(df+B)#\n", + "print 'Bfm = %.2f kHz'%(Bfm)\n", + "# For PM:\n", + "#Here peak amplitude of m(t)' is mp=20000\n", + "mp=20000#\n", + "# df=kp*mp/2*pi\n", + "df= (Kp*mp)/(2*pi)## in Hz\n", + "df=df/10**3## in KHz\n", + "Bpm=2*(df+B)#\n", + "print 'Bpm = %.2f kHz'%Bpm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 222 Problem 5.3.b" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bfm = 430.00 kHz\n", + "Bpm = 230.00 kHz\n" + ] + } + ], + "source": [ + "from math import pi\n", + "# The values of constsnts Kf and Kp are given as Kf= 2*pi*10**5 and Kp=5*pi .\n", + "# Here we are assuming the Bandwidth B of m(t) as the frequency of the third harmonic, i.e. 3(10**4/2)Hz= 15kHz\n", + "B=15## in kHz\n", + "# For FM:\n", + "# Here peak amplitude of m(t) is doubled ,mp=2\n", + "mp=2#\n", + "# df=kf*mp/2*pi\n", + "Kf= 2*pi*10**5#\n", + "Kp=5*pi#\n", + "df= (Kf*mp)/(2*pi)## in Hz\n", + "df=df/10**3## in KHz\n", + "Bfm=2*(df+B)#\n", + "print 'Bfm = %.2f kHz'%Bfm\n", + "# For PM:\n", + "#Here peak amplitude of m(t)' is doubled mp=40000\n", + "mp=40000#\n", + "# df=kp*mp/2*pi\n", + "df= (Kp*mp)/(2*pi)## in Hz\n", + "df=df/10**3## in KHz\n", + "Bpm=2*(df+B)#\n", + "print 'Bpm = %.2f kHz'%Bpm\n", + "# doubling the signal amplitude roughly doubles the bandwidth of both FM and PM waveform" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 224 Problem 5.4" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Bfm = 215.00 kHz\n", + "Bpm = 65.00 kHz\n" + ] + } + ], + "source": [ + "from math import pi\n", + "\n", + "# Repeat example 5.3 with m(t) expanded by a factor of 2 i.e. if the period of m(t) is 4*10**-4\n", + "# The values of constsnts Kf and Kp are given as Kf= 2*pi*10**5 and Kp=5*pi .\n", + "# we know that time expansion by a factor 2 reduces the signal spectrum width by a factor 2\n", + "# Therefore bandwidth is half the previous bandwidth\n", + "B=7.5# # im KHz\n", + "# For FM:\n", + "# Time expansion does not affect the peak amplitude so that mp=1.\n", + "mp=1#\n", + "# df=kf*mp/2*pi\n", + "Kf= 2*pi*10**5# \n", + "Kp=5*pi#\n", + "df= (Kf*mp)/(2*pi)## in Hz\n", + "df=df/10**3## in KHz\n", + "Bfm=2*(df+B)#\n", + "print 'Bfm = %.2f kHz'%Bfm\n", + "# For PM:\n", + "#mp is halved i.e. mp=10000\n", + "mp=10000#\n", + "# df=kp*mp/2*pi\n", + "df= (Kp*mp)/(2*pi)## in Hz\n", + "df=df/10**3## in KHz\n", + "Bpm=2*(df+B)#\n", + "print 'Bpm = %.2f kHz'%Bpm\n", + "# Time expansion of m(t) has very little effect on the FM bandwidth, but it halves the PM bandwidth" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page 225 Problem 5.5" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a) The carrier power is : 50.00 Watt\n", + "b) The frequency deviation = 12387.32 Hz\n", + "c) The deviation ratio is: 12.39 \n", + "d)The phase deviation = 15.00 rad\n", + "e)Bandwidth is : 26774.65 Hz\n" + ] + } + ], + "source": [ + "from math import pi\n", + "#Assuming SI unit for all quantities\n", + "\n", + "# An angle modulated signal with carrier frequency wc = 2*pi*10**5 is described by the equation Qem= 10cos(@(t)) where @(t)=wct+5sin3000t+10sin2000pi*t\n", + "B=2000*pi/(2*pi)##signal bandwidthis the highest frequency in m(t)\n", + "Ac=10##carrier amplitude\n", + "P=Ac**2/2## carrier power\n", + "print 'a) The carrier power is : %.2f Watt'%P\n", + "# to find frequency derivative df, e find instantaneous freq. w as\n", + "# wi=d/dt(@(t))= wc+15000cos3000t+20000pi*cos2000pi*t#\n", + "# The carrier derivative is 15000cos3000t+20000pi*cos2000pi*t. The two sinusoids will add in phase at some point and the maximum value of the expression is dW=15000+20000pi\n", + "dW=15000+20000*pi#\n", + "df=dW/(2*pi)#\n", + "print 'b) The frequency deviation = %.2f Hz'%df\n", + "# The deviation ratio B1 is given as\n", + "B1=df/B#\n", + "print 'c) The deviation ratio is: %.2f '%B1\n", + "#The phase deviation is the maximum value of the angle @(t) and is given b d@\n", + "d=5+10#\n", + "print 'd)The phase deviation = %.2f rad'%d\n", + "Bem=2*(df+B)#\n", + "print 'e)Bandwidth is : %.2f Hz'%Bem" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter6_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter6_1.ipynb new file mode 100644 index 00000000..72f6d5c3 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter6_1.ipynb @@ -0,0 +1,121 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 6: Sampling and pulse code modulation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 271 prob no. 6.2" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Enter the band limited freq in hertz is 1100\n", + "minimum transmission bandwidth = 8800.00 Hertz\n", + "enter the no of signal to be multiplexed 25\n", + "minimum transmission bandwidth = 220000.00 Hertz\n" + ] + } + ], + "source": [ + "from math import log\n", + "fm=input(\"Enter the band limited freq in hertz is \")\n", + "Rn=2*fm# # Nyquist sampling rate\n", + "Ra=Rn*(4/3)## actual Nyquist sampling rate\n", + "# here the maximum quantization error(E) is 0.5% of the peak amplitide mp. Hence, E=mp/L=0.5*mp/100*L\n", + "mp=1##we assume peak amplitude is unity\n", + "L=(mp*100)/(0.5*mp)#\n", + "for i in range(0,11):\n", + " j=2**i\n", + " if(j>=L):\n", + " L1=j#\n", + " break#\n", + " \n", + "n=log(L1,2)## bits per sample\n", + "c=n*Ra## total no of bits transmitted\n", + "# Beause we can transmit up to 2bits/per hertz of bandwidth,we require minimum transmission bandwidth Bt=c/2\n", + "Bt=c/2#\n", + "print \"minimum transmission bandwidth = %.2f Hertz\"%Bt\n", + "s=input(\"enter the no of signal to be multiplexed \")\n", + "Cm=s*c##total no of bits of 's' signal\n", + "c1=Cm/2## minimum transmission bandwidth\n", + "print \"minimum transmission bandwidth = %.2f Hertz\"%c1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 273 prob no 6.3" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "enter the value of L = 12\n", + "enter the bandwidth of signal in hertz350\n", + "SNR ratio is = 13.00 \n" + ] + } + ], + "source": [ + "from math import log,log10\n", + "# from the expresion given on the page no 272# (So/No)=(a+6n) dB where a=10log[3/[ln(1+u)]**2]\n", + "#check the ollowing code for L=64 and L=256\n", + "L=input(\"enter the value of L = \")\n", + "B=input(\"enter the bandwidth of signal in hertz : \")\n", + "n=log(L,2)#\n", + "Bt=n*B#\n", + "u=100##given\n", + "a=10*log10(3/(log(1+u))**2)\n", + "SNR=(a+(6*n))#\n", + "print \"SNR ratio is = %0.2f \"%SNR\n", + "# Here the SNR ratio for the two cases are found out. The difference between the two SNRs is 12dB which is the ratio of 16. Thus the SNR for L=256 is 16 times the SNR for L=64. The former requires just about 33% more bandwidth compared to the later." + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter7_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter7_1.ipynb new file mode 100644 index 00000000..5f7a2321 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter7_1.ipynb @@ -0,0 +1,155 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 7 : Principles of digital data transmission" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 314 prob no 7.1" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "transmission rate = 32000\n" + ] + } + ], + "source": [ + "#The transmission bandwidth is given by the equation Bt=(1+r)Rb/2 and hence transmission rate is given by Rb=2Bt/(1+r)#where r=roll-off factor and 0<=r<=1. Since 'r' can take value in between 0 and 1,bandwidth varies from 2Bt to Bt.\n", + "Bt=32000#\n", + "r=1##assume values of Bt and r\n", + "Rb=(2*Bt)/(1+r)#\n", + "print \"transmission rate = \",Rb##Rb=Bt for r=1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Page no 326 Prob no 7.3" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "values of C-1,C0,C1 are obtained:\n", + "[[ 0.20939445]\n", + " [ 1.1262026 ]\n", + " [ 0.31692134]]\n" + ] + } + ], + "source": [ + "from numpy import mat\n", + "# problem fig. is ggiven on page no 324. Referring the fig. we are given the values of a0,a1,a-1,a-2\n", + "a=1#\n", + "b=-0.3#\n", + "c=0.1#\n", + "d=-0.2#\n", + "e=0.05#\n", + "#design a three-tap (N=1) equalizer by substituting these values into eq no 7.45 of the page no 325\n", + "A=mat([[0],[1],[0]])#\n", + "B=mat([[a, d, e],[b, a, d],[c, b, a]])\n", + "c=(B**-1)*A## As, A=B*C Hence c is obtained as given\n", + "print 'values of C-1,C0,C1 are obtained:'\n", + "print c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no 334 Prob NO 7.4" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Value of x : 0.0052\n", + "error probability = 9.96e-08 \n", + "Value of x : 96.1500\n", + "error probability = 1.17e-04 \n", + "error probability = 1.75e-04 \n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "# a) Find detection error probability\n", + "#Given: Ap=1mV, 6n=192.3uV\n", + "# The formula for polar case is given by Ap/6n\n", + "Ap=1#\n", + "sigma_n=192.3#\n", + "x=Ap/sigma_n##here we have to find the value of P(e)=Q(x) from the table10.2 given on page no. 454\n", + "print \"Value of x : %0.4f\"%x\n", + "Q1=(0.9964)*10**(-7)#\n", + "print \"error probability = %.2e \"%Q1 ##this is nearly equal to zero\n", + "\n", + "#Prob NO 7.4 b) Find detection error probability.\n", + "#In this case, only half the bits are transmitted by no pulse, there are, on the average, only half as many pulses in the on-off case(compared to the polar). \n", + "#To maintain the same power,we need to double the energy of each pulse in the on-off or the bipolar case(compared to the polar).\n", + "#Now, doubling the pulse energy is accomplished by multiplying the pulse by sqrt(2).\n", + "#Thus, for on-off Ap is sqrt(2) times the Ap in the polar case,that is, Ap=sqrt(2)*10**-3\n", + "x=Ap/2*sigma_n##here we have to find the value of P(e)=Q(x) from the table10.2 given on page no. 454\n", + "print \"Value of x : %0.4f\"%x\n", + "Q2=(1.166)*10**-4#\n", + "print \"error probability = %0.2e \"%Q2\n", + "#for a given power , the Ap for both the on-off and the bipolar cases are identical. Hence P(e)=1.5 Q(x)#\n", + "Q3=1.5*Q2#\n", + "print \"error probability = %0.2e \"%Q3" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter8_1.ipynb b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter8_1.ipynb new file mode 100644 index 00000000..2f0e3fa2 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/Chapter8_1.ipynb @@ -0,0 +1,70 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 8 : Emerging digital communications technologies" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## page no. 367 Prob no. 8.3" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No. of hours for resynchronizing : 60 Hr\n" + ] + } + ], + "source": [ + "#since both the plots can be out of synchronization by as much as 6 parts (bits)in 10**13 , we have \n", + "# timing error bits per second can be calculated as-\n", + "#error in synchronization is given as\n", + "e=6.0/(10**13)##timing eeor bits per transmitted bits\n", + "#bit rate is given as\n", + "r =1544000.0 ## in bits/sec\n", + "#timing error bits per second ,Te is given as\n", + "Te=e*r#\n", + "S=1/Te## seconds per timing error bits\n", + "H=S/3600.0## hours per timing error bits\n", + "#since a synchronization error can occur whenever the network is out of synchronization by 1/5 bits, the time between resynchronizing is given as\n", + "T=H/5.0#\n", + "print \"No. of hours for resynchronizing : %.f Hr\"%T" + ] + } + ], + "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 +} diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2correlationCoeff_1.png b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2correlationCoeff_1.png Binary files differnew file mode 100644 index 00000000..77e53b40 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2correlationCoeff_1.png diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2expansionofSignal_1.png b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2expansionofSignal_1.png Binary files differnew file mode 100644 index 00000000..4d19c746 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2expansionofSignal_1.png diff --git a/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2timeInvertedsignal_1.png b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2timeInvertedsignal_1.png Binary files differnew file mode 100644 index 00000000..111501c3 --- /dev/null +++ b/Modern_Digital_And_Analog_Communication_System_by_B._P._Lathi/screenshots/2timeInvertedsignal_1.png diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter10_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter10_1.ipynb new file mode 100644 index 00000000..0eb7d255 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter10_1.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter No 10 - Propagation of radio waves" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example10.1 PageNo 412" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Field strength will reduce by 5.23 dBs\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt, log10\n", + "#Given\n", + "Pt1=100#Radiated power\n", + "Pt2=30# Reduced Power \n", + "r=1#assume distance to be unity for easeof calculation\n", + "E1=300*sqrt(100)/r\n", + "E2=300*sqrt(30)/r\n", + "E=20*log10((E2/E1))# Reduction in field strength in dBs\n", + "print 'Field strength will reduce by %0.2f dBs'%(-E)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example10.2 PageNo 413" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The field strength at distance 20km is 190.53 uV/m\n" + ] + } + ], + "source": [ + "#Given\n", + "P=3#Transmitter power\n", + "ht=100# Antenna height\n", + "G=5#Antenna gain\n", + "d=20e3#distance\n", + "lamda=1\n", + "hr=1#assumed\n", + "E=((88*G*ht*hr*P**0.5)/(lamda*d**2))#field strength\n", + "print 'The field strength at distance 20km is %0.2f uV/m'%(E*1e6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example10.3 PageNo 413" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Direct ray coverage is possible over 63.03 km\n" + ] + } + ], + "source": [ + "from math import sqrt\n", + "#Given\n", + "ht=152.5\n", + "hr=9.15 # Antenna height\n", + "d=4100*(sqrt(ht)+sqrt(hr)) #distance\n", + "print 'Direct ray coverage is possible over %0.2f km'%(d*1e-3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example10.4 PageNo 414" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Max possible distance for efective point to point\n", + " communication is 514.48 km\n" + ] + } + ], + "source": [ + "from math import sqrt\n", + "#Given\n", + "#b\n", + "ht=3e3\n", + "hr=5e3 # Antenna height\n", + "d=4100*(sqrt(ht)+sqrt(hr))#distance\n", + "print 'Max possible distance for efective point to point\\n communication is %0.2f km'%(d*1e-3)" + ] + } + ], + "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 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter11_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter11_1.ipynb new file mode 100644 index 00000000..b8b0be75 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter11_1.ipynb @@ -0,0 +1,68 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter No 11 - Broadband Communication" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example11.1, page no 435" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The total no of samples per second is:\n", + "160000 samples/second\n" + ] + } + ], + "source": [ + "#Given\n", + "c=20# no of signal channels\n", + "s=8e3# Channel sampling rate\n", + "t=1/s# time interval over which ll channels are sampled once\n", + "#b\n", + "g=5e-6# guaed time for each channel sample\n", + "s_duration=t-g# duration of each sample\n", + "#c\n", + "samples_sec=c*s#\n", + "print 'The total no of samples per second is:\\n%d samples/second'%samples_sec" + ] + } + ], + "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 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter15_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter15_1.ipynb new file mode 100644 index 00000000..d45717f4 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter15_1.ipynb @@ -0,0 +1,153 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter No 15 - Basic Information theory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example15.1, page no 533" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The source entropy is: 1.50 bits/symbol\n" + ] + } + ], + "source": [ + "from math import log\n", + "#Given\n", + "P_A=0.5# probability of producing symbol 'A'\n", + "P_B=0.25# probability of producing symbol 'B'\n", + "P_C=0.25# probability of producing symbol 'C'\n", + "def log2(x):\n", + " return log(x,2)\n", + "H=P_A*log2(1/P_A)+P_B*log2(1/P_B)+P_C*log2(1/P_C)# the source entropy\n", + "print 'The source entropy is: %0.2f bits/symbol'%(H)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example15.2, page no 535" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The source entropy is: 1.94 bits/symbol\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log\n", + "def log2(x):\n", + " return log(x,2)\n", + "\n", + "#Given\n", + "P_A=0.5\n", + "P_B=0.25\n", + "P_C=1/32\n", + "P_D=1/8\n", + "P_E=1/16\n", + "P_F=1/32# probabilities of producing respective symbol\n", + "H=(P_A*log2(1/P_A))+(P_B*log2(1/P_B))+(P_C*log2(1/P_C))+(P_D*log2(1/P_D))+(P_E*log2(1/P_E))+(P_F*log2(1/P_F))# Source Entropy\n", + "n=6\n", + "T=1\n", + "print 'The source entropy is: %0.2f bits/symbol'%(round(1000*H)/1000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example15.3, page no 536" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a)\n", + " Channel capacity is: 20 Kbits/sec\n", + " Bandwidth: 5 KHz\n", + "b)\n", + " SNR for 3KHz bandwidth: 100.59\n" + ] + } + ], + "source": [ + "from math import log\n", + "def log2(x):\n", + " return log(x,2)\n", + "\n", + "#Given\n", + "#a\n", + "B1=4e3#Channel Bandwidth\n", + "SNR1=31#Channel SNR\n", + "C1=B1*log2(1+SNR1)#Channel Capacity\n", + "SNR2=14#Reduced SNR\n", + "B2=round(C1/log2(1+SNR2))#Bandwidth for reduced SNR with same Channel capacity\n", + "\n", + "#b\n", + "B3=3e3#Reduced Bandwidth\n", + "SNR3=(2**(C1/B3))-1#Signal Power for reduced bandwidth\n", + "print 'a)\\n Channel capacity is: %d Kbits/sec\\n Bandwidth: %d KHz\\nb)\\n SNR for 3KHz bandwidth: %0.2f'%(C1*1e-3,B2*1e-3,SNR3)\n", + "# the Answer in the book is wrong.It is printed as 90.4 for SNR3 but it should be 100.59" + ] + } + ], + "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 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter1_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter1_1.ipynb new file mode 100644 index 00000000..d317e792 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter1_1.ipynb @@ -0,0 +1,1411 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 1 : Signals" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example1,page no12" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The value of the above integral is:C=0\n", + " Since C=0, the two functions: \n", + " f(t)=sin(n*wo*t)\n", + " g(t)=cos(n*wo*t) are Orthogonal\n" + ] + } + ], + "source": [ + "from numpy.random import randint\n", + "from numpy import pi, arange\n", + "from sympy.mpmath import quad, sin, cos\n", + "#Given:\n", + "n=round(randint(1000))#any integers\n", + "m=round(randint(1000))#any integers\n", + "wo=2*(n+m)*pi#Angular Freq\n", + "t=arange(0,2*pi/wo,0.01)\n", + "to=0;t1=2*pi/wo\n", + "C= quad(lambda t:sin(n*wo*t)*cos(m*wo*t),[to,t1])# integrating sin(n*wo*t)*cos(m*wo*t) function\n", + "print \"The value of the above integral is:C=%d\\n Since C=%d, the two functions: \\n f(t)=sin(n*wo*t)\\n g(t)=cos(n*wo*t) are Orthogonal\"%(C,C)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example2,page no 12" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The optimum value of C to minimise the mean square error is:\n", + " C= 1.273240\n" + ] + } + ], + "source": [ + "from numpy import arange,pi\n", + "from sympy.mpmath import quad, sin, cos\n", + "#Given:\n", + "# Curve on page no 9....fig 1.6\n", + "t=arange(0,2*pi,0.1)\n", + "t0=0\n", + "t1=2*pi\n", + "C=((quad(lambda t: sin(t),[t0,t1/2])-quad(lambda t: sin(t),[t1/2,t1]))/quad(lambda t :(sin(t))**2,[t0,t1]))\n", + "\n", + "print \"The optimum value of C to minimise the mean square error is:\\n C= %f\"%(C)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3,page no12" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a) The value of constants Cn are:\n", + "1.273237 for n= 1\n", + "\n", + "0.000000 for n= 2\n", + "\n", + "0.424406 for n= 3\n", + "\n", + "0.000000 for n= 4\n", + "\n", + "0.254636 for n= 5\n", + "\n", + "0.000000 for n= 6\n", + "\n", + "0.181874 for n= 7\n", + "\n", + "b) Mean Square error is\n", + "epsi(1) = 0.190000\n", + "\n", + "epsi(3) = 0.100000\n", + "\n", + "epsi(5) = 0.070000\n", + "\n", + "epsi(7) = 0.050000\n", + "\n" + ] + } + ], + "source": [ + "from numpy import arange\n", + "from sympy.mpmath import quad\n", + "from math import pi,sin\n", + "#Given:\n", + "#a # Referance Figure on page no 9.. (1.6d)\n", + "\n", + "t=range(0,int(2*3.14+1))\n", + "t0=0\n", + "t1=2*3.14\n", + "print 'a) The value of constants Cn are:'\n", + "C=[] \n", + "for i in range(1,8):\n", + " C.append((quad(lambda t:sin(i*t),[t0,t1/2])-quad(lambda t:sin(i*t),[t1/2,t1]))/quad(lambda t:(sin(i*t))**2,[t0,t1]))\n", + " if C[i-1] <= 0.01:\n", + " C[i-1]=0\n", + " \n", + " print '%f for n= %d\\n'%(C[i-1],i)\n", + "\n", + "#b Mean Square error\n", + "\n", + "int1=quad(lambda t:(1)**2,[t0,t1])\n", + "for n in range(1,8):\n", + " if (n%2) == 0:\n", + " C[n-1] = 0\n", + " else:\n", + " C[n-1]=4.0/(n*pi)\n", + "\n", + "\n", + "K=[]\n", + "for n in range(1,8):\n", + " \n", + " K.append(quad(lambda t:(sin(n*t))**2,[t0,t1]))\n", + " \n", + "K[n-1]=pi\n", + "S=[0]\n", + "for n in range(1,8):\n", + " S.append(S[n-1]+(((C[n-1])**2)*K[n-1]))\n", + "#Mean Square error\n", + "epsi=[]\n", + "for n in range(1,8):\n", + " epsi.append((1.0/(t1-t0)*(int1-S[n])))\n", + "\n", + "print 'b) Mean Square error is'\n", + "for n in arange(1,2+7,2):\n", + " print 'epsi(%d) = %f\\n'%(n,round(100*epsi[n-1])/100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example4,page no12" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "P0 = 1\n", + "P1 = t\n", + "P2 = 1.5*t**2 - 0.5\n", + "P3 = 2.5*t**2 - 1.5\n", + "\n", + "The Constant coeff (Cn) values are :\n", + "C0 = 0.0\n", + "C1 = -1.5\n", + "C2 = 0.0\n", + "C3 = 0.875\n", + "\n", + "f(t)= 0*P0 + -1.500000*P1 + 0*P2 + 0.875000*P3\n" + ] + } + ], + "source": [ + "from sympy import symbols,solve\n", + "from sympy.mpmath import quad\n", + "from numpy import arange\n", + "#Given:\n", + "t=arange(-1,1.01,0.01)\n", + "t0=-1\n", + "t1=1\n", + "# Legendre Polynomial\n", + "t=symbols(\"t\")\n", + "P0=1\n", + "P1=t\n", + "P2=-0.5+1.5*t**2\n", + "P3=-1.5+2.5*t**2\n", + "print \"P0 =\",P0\n", + "print \"P1 =\",P1\n", + "print \"P2 =\",P2\n", + "print \"P3 =\",P3\n", + "#The Constant coeff (Cn)\n", + "C0=0.5*(quad(lambda t:1,[-1,0])+quad(lambda t:-1,[0,1]))\n", + "C1=1.5*(quad(lambda t:t,[-1,0])+quad(lambda t:-t,[0,1]))\n", + "C2=2.5*(quad(lambda t:(1.5*t**2)-0.5,[-1,0])+quad(lambda t:-(1.5*t**2)+0.5,[0,1]))\n", + "C3=3.5*(quad(lambda t:(2.5*t**3)-(1.5*t),[-1,0])+quad(lambda t:-(2.5*t**3)+(1.5*t),[0,1]))\n", + "print \"\\nThe Constant coeff (Cn) values are :\"\n", + "print \"C0 =\",C0\n", + "print \"C1 =\",C1\n", + "print \"C2 =\",C2\n", + "print \"C3 =\",C3\n", + "print \"\\nf(t)= %d*%s + %f*%s + %d*%s + %f*%s\"%(C0,\"P0\",C1,\"P1\",C2,\"P2\",C3,\"P3\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 5, page no 19" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The value of a0 is: 0.500000\n", + "\n", + "The values of a(n): (upto n=10)\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "The values of b(n): (upto n=10)\n", + "-0.318308838986\n", + "-0.159152848691\n", + "-0.106100153783\n", + "-0.0795732827116\n", + "-0.0636567411629\n", + "-0.0530453643632\n", + "-0.0454655102642\n", + "-0.0397803578398\n", + "-0.0353583398512\n", + "-0.0318205159538\n", + "The trigonometric Fourier series for given function\n", + " can be written as:\n", + "\n", + "f(t)=-0.318309-0.159153sin(2*pi*t)-0.106100sin(4*pi*t)\n", + "-0.079573sin(6*pi*t)-0.063657sin(8*pi*t)-0.053045sin(10*pi*t)\n", + "-0.045466sin(12*pi*t)-0.039780sin(14*pi*t).......\n" + ] + } + ], + "source": [ + "from math import pi,cos,sin\n", + "from numpy import arange,trapz\n", + "#given\n", + "T=1\n", + "t0=0\n", + "wo=2*pi\n", + "P=1\n", + "t=arange(0,1.001,0.001)\n", + "f=P*t\n", + "#The trigonometric Fourier series coeff for given function\n", + "a0=(1/T)*trapz(t,f)\n", + "a=[]\n", + "a.append(0)\n", + "for n in range(1,11):\n", + " f1=[]\n", + " for tt in t:\n", + " f1.append((P*tt)*cos(wo*n*tt))\n", + " a.append((2/T)*trapz(t,f1))\n", + " \n", + " if a[(n)]<2.01:\n", + " a[(n)]=0\n", + " \n", + "b=[]\n", + "b.append(0)\n", + "for n in range(1,11):\n", + " f2=[]\n", + " for tt in t:\n", + " f2.append((P*tt)*sin(2*pi*(1/T)*n*tt))\n", + " b.append(-(2/T)*trapz(t,f2))\n", + "\n", + "# Displaying trigonometric Fourier series coeff\n", + "print \"The value of a0 is: %f\\n\"%(a0)\n", + "print \"The values of a(n): (upto n=10)\"\n", + "for n in range(1,11):\n", + " print a[(n)]\n", + "\n", + "print \"The values of b(n): (upto n=10)\"\n", + "for n in range(1,11):\n", + " print b[(n)]\n", + "\n", + "print \"The trigonometric Fourier series for given function\\n can be written as:\\n\"\n", + "print \"f(t)=%f%fsin(2*pi*t)%fsin(4*pi*t)\\n%fsin(6*pi*t)%fsin(8*pi*t)%fsin(10*pi*t)\\n%fsin(12*pi*t)%fsin(14*pi*t).......\"%(b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 6, page no 21" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Exponential Fourier coeff(Fn) are:for n=-5 to 5\n", + "-0.05j \n", + "\n", + "(1+0j) \n", + "\n", + "-0.0981305252753j \n", + "\n", + "(1+0j) \n", + "\n", + "-0.315687575734j \n", + "\n", + "(0.5+0j) \n", + "\n", + "0j \n", + "\n", + "(1-0.153884176859j) \n", + "\n", + "0j \n", + "\n", + "(1-0.0688190960236j) \n", + "\n", + "0j \n", + "\n", + "\n", + "The given function in Expo Fourier series can be represented as \n", + "\n", + "f(t)= 0.500000+jP/2*pi* ∑1/n *exp(j2*pi*t)\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import nditer,trapz\n", + "#given\n", + "\n", + "t0=1\n", + "T=1\n", + "w0=2*3.14/T\n", + "P=1\n", + "t=arange(0,0.1+1,0.1)\n", + "f=[P*tt for tt in t]# function f(t)=P*t, 0<t<1\n", + "a=1\n", + "print 'The Exponential Fourier coeff(Fn) are:for n=-5 to 5'\n", + "Fr=[];Fi=[]\n", + "for n in range(-5,6): # Calculating the fourier coeff\n", + " fr=[ff*cos(pi*n*tt/T) for ff,tt in nditer([f,t])]\n", + " #Fr(a)=inttrap(t,fr)\n", + " Fr.append(trapz(t,fr))\n", + " fi=[ff*sin(pi*n*tt/T) for ff,tt in nditer([f,t])]\n", + " Fi.append(trapz(t,fi))\n", + " if Fr[a-1] < 0.01:\n", + " Fr[a-1]=0\n", + " \n", + " if Fi[a-1] < 0.01:\n", + " Fi[a-1]=0\n", + " \n", + " print Fr[a-1]-1J*Fi[a-1],'\\n'\n", + " a=a+1\n", + "\n", + "print '\\nThe given function in Expo Fourier series can be represented as \\n'\n", + "print 'f(t)= %f+jP/2*pi* ∑1/n *exp(j2*pi*t)'%(P/2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 7, page no 22" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Expo fourier series coeff are: for n=-5 to 5\n", + "(2.77555756156e-17-1.37737043993e-15j) \n", + "\n", + "(0.127481160803+3.12250225676e-16j) \n", + "\n", + "(-1.9567680809e-15-1.47624967806e-15j) \n", + "\n", + "(0.636776885598+6.54858112181e-16j) \n", + "\n", + "(-1.69309011255e-15-0.5j) \n", + "\n", + "(-1.90970223489+0j) \n", + "\n", + "(-1.69309011255e-15+0.5j) \n", + "\n", + "(0.636776885598-6.54858112181e-16j) \n", + "\n", + "(-1.9567680809e-15+1.47624967806e-15j) \n", + "\n", + "(0.127481160803-3.12250225676e-16j) \n", + "\n", + "(2.77555756156e-17+1.37737043993e-15j) \n", + "\n", + "The given function in Expo Fourier series can be represented as \n", + "\n", + "f(t)= 2V/pi -2V*exp(j2*pi*t)/3*pi -2V*exp(j2*pi*t)/15*pi\n", + " -2V*exp(j2*pi*t)/35*pi ...\n", + " -2V*exp(-j2*pi*t)/3*pi -2V*exp(-j2*pi*t)/15*pi...\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEPCAYAAABGP2P1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXd8VFX2wL+HEFSKSyiy0kHArmADBSSKBVGxg0FAQBd/\n7oq9l4VdC4q9oCKdpYmoIDZUIIhUkaJ0pEOwoSIRDCGc3x83CUlIMpPJvHkzk/P9fOaTeTN37j0v\nr5x37j1FVBXDMAzDyKGc3wIYhmEY0YUpBsMwDCMfphgMwzCMfJhiMAzDMPJhisEwDMPIhykGwzAM\nIx+eKgYRGS4iP4rId8W0eUVE1onIMhFp4aU8hmEYRmC8thhGAB2K+lJEOgJNVLUp0Ad4w2N5DMMw\njAB4qhhUdTbwWzFNOgGjstsuAKqKSC0vZTIMwzCKx+81hjrA1jzb24C6PsliGIZh4L9iAJAC25aj\nwzAMw0fK+zz+dqBenu262Z/lQ0RMWRiGYYSAqhZ8+A6I3xbDB0APABFpBfyuqj8W1lBVY/I1fbpy\n8snK2Wcrn36q7N9/aJt+/frl205LUx59VKlWTbnrLmX3bv/3ozSvgvsXK6+//lL69XPH4Y47lI0b\nA+/bgQPK7NnKRRcpxxyjvPee//tRFo+dqrJqlTsOjRsro0cre/YE3r8//lBef12pXVu57jplyxb/\n96M0r1Dx2l11PDAXOFZEtopIbxG5RURuAVDVj4ENIvI9MBj4p5fyRJKMDLjnHujRA/77X5gzBy6+\nGBISAv/26KPh8cdh5Ur47Tdo0QIWLvReZuMgK1dCy5awdCl88w289BI0bBj4dyLQpg1MmwZvvQUP\nPAC9e8Pu3Z6LbGSjCm++CW3bwqWXwqpV0L07HHFE4N9WqQK33grr1sFJJ8Hpp8PEid7LHG14OpWk\nqilBtLnNSxn8IC0NLr/c3UiWLYPq1UPrp1YtGDEC3n3X9devH/wzblRn9DJxIvzrXzBgANx0k7vZ\nh8L558PixXDXXe4G8+GH0KxZeGU18rN3r3sY27gRvvoKjj02tH4qVoR//xs6doSuXSE1FV55Bcr7\nPfkeIfyeSoo7Vq6Ec86Ba6+FSZOCUwrJycnFfn/NNTB/vjsxH3wQDhwIj6yRItD+RQuq8MILztL7\n4gu4+ebASiHQvlWuDEOGwP33Q7t27jjGErFy7AB27oQLLoDERGehB6MUAu3fGWc4i3H9erj6avjz\nz/DIGu1IaeahIoWIaCzIuWQJdOgAzz3nTNdws3MnXHGFe+ocOhTKmVoPK488AlOmwCefQL16gduX\nlI8/hp49YcIEZ00Y4eOnnyA52VnWAwaE/9rIzIQ+fWDNGjdNWKVKePv3ChFBQ1h8NsUQJlauhPbt\nYdAg92ThFX/+6dYqWrRwFkSo0xxGfp56CsaOhVmzoEYN78aZNctZkx98AGef7d040YLYCRoxCrtH\nmmLwkU2b3ELXU095YykUZNcu98R5ySXwxBPejxfvDBrkFpe//NIt/HvNJ5/AjTfC55/Dqad6P56f\nZN+Y/BYj7inq/2yKwSd274bWraFXL7fIGCl++cV5zfTr5xbbjNCYNs0du7lzg/M6ChcTJrj1ooUL\n4aijIjdupDHFEBlMMUQRBw64heHq1d0CY6St5hUr3Lzq1KnQqlVkx44H1qxxlt577zkX00jz2GPO\n22X6dKhQIfLjRwJTDJEh3IrBli9LwRNPwM8/u6kIP6ZSTzwRhg93c9Y/FhoWaBRFerpbyB8wwB+l\nAPCf/7j1jDvv9Gd8wygKUwwhMns2vP6683k/7DD/5Lj8cjdf3bNn7Lmx+knfvm4K8Kab/JOhXDkY\nNcpNZ733nn9yGAcZMGAA//jHP4Juv3LlSs4888yg2s6ePZvjjjuuxDJ9++23tG7dusS/KxV+h2wH\nGdat0cTOnar166t++KHfkjj27VNt1Ur1+ef9liQ2GDtW9dhjVdPT/ZbEMX++6lFHqW7e7Lck4Sfa\nrt1wc/XVV+vbb78d8u9Hjhypqamp+T4TEV2/fn2+zzp27KhTp04tsp+i/s/Zn5f4nmtrDCHQuTPU\nru08WaKFjRvhrLOcp0vz5n5LE71s2gRnngmffeZcfqOFZ56Bjz5yaw7xFJ8Sz2sMO3bs4KSTTmLH\njh1UKOEi0VtvvcVRRx3Frl27aNCgAWvXrqVWrVpcccUVlCtXjnXr1nHMMcfkth83bhzjx49n6tSp\nhfYX7jUG362BYF5E0VPHO++4p829e/2W5FBGjFBt0cJZEMahHDigeuGFqgMG+C3JoWRlqbZurfrq\nq35LEl6i6dotyNNPP6116tTRKlWq6LHHHqvTp0/Xfv36abdu3VRVdePGjSoiOmrUKK1fv77WqFFD\nn3zyydzfjxo1Si+88MJ8fTZo0EAHDBigJ5xwgiYlJWmvXr30r7/+UlXVmTNnat26dVVVNTMzU599\n9llt3ry5nn322TpixAhVVW3btq2KiFaqVEkrV66sEydOVFXVbdu26RFHHKH7iri4i/o/E6LF4HUS\nvQ4isjq7pvMDhXxfQ0Q+FZGlIrJcRHp6KU9p2bnTzU0PHw6HH+63NIdy443O9fHZZ/2WJDoZOdId\nw3vv9VuSQylXDoYNcwvSmzb5LU38s2bNGgYNGsSiRYv4448/+Oyzz2jYsGGhAXlz5sxh7dq1TJ8+\nnf/+97+sWbMGgO+++45jC8m7MW7cOD777DPWr1/P2rVreaKQYCNVpVy2aVguj4n45ZdfAm5dYffu\n3Vx33XUA1KlTh8TExNyxvcYzxSAiCcBruJrPJwApInJ8gWa3AUtUtTmQDDwvIlGbpuquu6BLF5cL\nKRoRgcGD4cUXXUZJ4yBpaS7T6fDh0ZsI7dhjXZ6mf/zD5W0qC4iE51VSEhISyMjIYMWKFWRmZlK/\nfn0aN25c6HRMv379OOywwzjllFM49dRTWbZsGQC7du2icuXKBfZHuO2226hTpw5JSUk88sgjjB8/\n/pA+R4wYQaNGjbjzzjt54oknyMjIYPLkycXKXKVKFX7//feS72wIeGkxnAV8r6qbVDUTmABcUaDN\nDuDI7PdHAjtVdb+HMoXMzJkuncGTT/otSfE0aOCC3m69tezcXILh3ntdUrxojzS+914XvDhhgt+S\nRAbV8LxKSpMmTXjppZfo378/tWrVIiUlhR07dhTa9u9//3vu+4oVK5Keng5AUlISuwvJp14vT6Kt\n+vXrk5aWdkibPn36cNVVVwFOmdxyyy1ceeWVxcq8e/duqlatGnjnwoCXiqGwes51CrQZApwoImnA\nMuAOD+UJmcxMuO029yReqZLf0gTm1ltd2oy33/ZbkuggNdVl23z0Ub8lCUz58vDaa3DffVbDwWtS\nUlKYPXs2mzdvRkR44IEHSpTb6ZRTTmHt2rWHfL5ly5Z872vXrl1kHzfeeCPt2rULONb27dvZt29f\noVNXXuClYghGjz8MLFXV2kBzYJCIRF3ewtdeg7p1IVvBRz0JCU7me++1m0tmplsXeuEFl2M/Fmjd\n2iVkfPxxvyWJX9auXcuMGTPIyMjgsMMO4/DDDychmCpaHExWd8EFF7B48WL27duX77vXX3+d7du3\n8+uvv/Lkk09y/fXXl0i2WrVqsX79+nyfzZo1i/bt25OYmFiivkLFy9nWgvWc6+GshrycAzwJoKrr\nRWQjcCywqGBn/fv3z32fnJwcsTzxP/zgkuN99VVsZTLNubk88YRzhSyrvP66S4znZcZbLxg40FUQ\n690bQoiJMgKQkZHBQw89xKpVq0hMTKR169a89dZbDB48OJ/VUJgFkfNZrVq1OP/885k8eTKdO3fO\n/a5r165cdNFFpKWlceWVV/JoHlM1GIukf//+3Hjjjezdu5chQ4Zw7bXXMnbsWG699daAv01NTSU1\nNTVgu4CE4soUzAundNYDDYEKwFLg+AJtXgD6Zb+vhVMc1Qrpq1BXrEhw662qd93l2/ClIi1NtVo1\n1Y0b/ZbEH377TbVmTdUVK/yWJDSefVa1Uye/pSgdfl67kWDlypV65pln5m43bNhQp0+fHtYxli1b\npuecc06xbYr6PxONAW4icgnwEpAADFPVAXnqPQ8WkRrACKA+blprgKqOK6Qf9VLOoli71nkgrVkT\nenlOv+nfH77/HsaM8VuSyPPww66Ay9ChfksSGn/95ayF0aPh3HP9liY04jnArTAaNWrEsGHDOD/C\nlZgsu2oE6dzZRcc+9FDEhw4b6emu4tvUqa7ucFlh+3Y45RRXc7tuXb+lCZ2xY+Hll2HBgtiayszB\nFENkMMUQIRYudIvN69bFzqJlUQwe7JL9TZ/utySRo08fqFYNnn7ab0lKx4EDLoXH/fe7GJpYo6wp\nBr8wxRABVF2FtK5dXbBRrLN/P5xwglMQ553ntzTes2oVtGvnpgCTkvyWpvR8/rnzrFqxwnmcxRKm\nGCKD1WOIAJ9+6ryRevXyW5LwUL68KwrTv3/ZCHp7+GH3hB0PSgHgggtc3YayEvRm+I9ZDAVQdVlK\nH3jAFcCJF/bvd4V93njDWUPxyuLFrkbF99/DEUf4LU34mD4d/vlPZzVEa0qPwjCLITKYxeAx06bB\n3r2x5/ceiByroV+/+LYannjCRQ3Hk1IAp8yPOgoKSbsT9YiIvTx+hf2YxYI2j5TFoOrKPN52G6Sk\neD5cxMnKclbDa6+56Yl4Y/lyt18bNsS+w0BhzJgBt9zi1lBiyWoIljvugMREeO45vyXxhuuvd7VS\nHnwwcmPa4nMYmDnz4IUXa4t8wTJunKtRHWuR3MGQkuLci++/329JvEEVkpNdNPSNN/otTXj54Qfn\nILFyJeTJWRdXrFzpjt/69VAlQol/TDGEgfPPhx49XP3keCUry6VaePXV+LIa1qyBtm0je9H5QWqq\n85RbvTq+Hl7uu88F9L36qt+SeEvXri6+JlJWgymGUjJnDnTv7m4wEcpT5RujRrnAqc8+81uS8HHj\njdCkiVtHiWdUXR6su++OH+eIX35xQZjLlkG9eoHbxzLffQcXX+ymOyNR7MsWn0vJE084LR7vSgHc\nlMvKlbBkid+ShIcNG1y95L59/ZbEe0TcVNnAgfHjRPDSS3DddfGvFABOPtnVBIn2FDVmMQDffguX\nXOJuMIcd5tkwUcVzzznXznGHZKaKPfr2hcqVYcAAvyWJDAcOwPHHu4DFCCUZ9oz0dGjY0KX8OOYY\nv6WJDDNnupopK1e6kq5eYhZDKXjhBeeJVFaUAriUEdOmwcaNfktSOn791U2LlQVrIYdy5dyc/MCB\nfktSekaMcMqtrCgFcPtbpYrLXxateKoYRKSDiKwWkXUi8kARbZJFZImILBeRVC/lKYy0NJgyxXkj\nlSWOPNItYr74ot+SlI7Bg6FTJyimSFZc0q0bLF3qrN1YJSvLTSPdfbffkkSWvNOB0YpnU0kikgCs\nAS7AFe35GkhR1VV52lQF5gAXq+o2Eamhqr8U0pdnU0mPPOLKYL72mifdRzVpac5Dae1al3Ih1ti3\nz01DfPJJ9Ndy9oKnn3bTEaNH+y1JaLz3Hjz7LMyb57ckkScryy24jx7tnAm8Ihqnks4CvlfVTaqa\nCUwArijQpivwrqpuAyhMKXjJn3/CW2/BnXdGctTooXZtF+H9+ut+SxIa48e7gL2yqBQA/u//4MMP\nYevWwG2jkeefh3vu8VsKf0hIcKV3o9VqCEoxiMjxInKJiFwsIsEWGqwD5D1lt2V/lpemQDURmSki\ni0Ske5B9h4WRI53ve5MmkRw1urjrLpc/KU/Z2phAtWzfWACqVnVxN7Go2OfPhx07YqeOuhfceCPM\nnetib6KNIgPrRaQRcBfQETcVlAYIcLSI1AU+BF5U1U1FdBHM3E8icBrQHqgIzBOR+aq6rmDDcNd8\nzspy8+sjR5aqm5jnxBPda9IkF3wTK3zxhfPOufhivyXxl9tuc1UG//3v2MoP9fzzLgVGPAXplZSK\nFV0U+6BBzgEmHHhe8xmYCFwIJBbyXSJwETCxmN+3Aj7Ns/0Q8ECBNg8A/fNsDwWuLaSvQuuZloYp\nU1TPPFP1wIGwdx1zTJ6s2rKl31KUjI4dVYcO9VuK6KBjR9Vhw/yWIng2bXK1yP/4w29J/Cfnf7F7\ntzf9E2LN5yKnklS1s6p+TuHTTeVU9TNV7VyMzlkENBWRhiJSAegCfFCgzRSgjYgkiEhFoCWwspg+\nw8ZrrzkXx3jLFxQKl10GP/7oqtbFAuvXO1ljycLxkttvh1deiZ2AtzffdFkG4jl1SbA0aOCKSv3v\nf35Lkp9g1hgK8xkI6EegqvuB24BpuJv926q6SkRuEZFbstusBj4FvgUWAENU1XPFsGaNC7+/7jqv\nR4oNEhLgX/+KnTw1b7zhiijF0tSJl1x4oUsV/9VXfksSmL/+guHDXW0Jw9G3r7v2okmxF+muKiJH\nA7WBsTjvIcGtGxwJvKmqwS5Cl17IMLur3nEHVKoETz0Vti5jnt9+g8aNXWbZaM5uuWcP1K8PX38N\njRr5LU308NprMGsWvPOO35IUz//+59JBTJvmtyTRg6pLrPfii+FPbBn2JHoi0hO4ETgDNy2Uw25g\npKq+F4KcIRFOxZCe7sy3JUvcDcY4yP/9n3Nh/fe//ZakaIYNg/ffd26axkF273YxHUuXRnfOoZYt\nXexQp05+SxJdDBniIqE/KDjZXko8y64qIteq6qSQJQsD4VQMgwe7ms7vvx+W7uKKFSvctMTmzdGZ\nTFAVTj/dWXodOvgtTfRxxx0uZ9STT/otSeEsWuQywq5fX7a9kQojxxJeuNBZ7uEi7AFuItJTRMoX\npRREpIKI9CrpgH6i6kzuf/3Lb0mikxNPhKZNw//UEi7mz3dPxhdd5Lck0cmtt7r5+8xMvyUpnEGD\nnIymFA6lYkUXkzJkiN+SOIpbfK4MfC0i40XkHhHpKiI3ZL8fj1ssjqnlv9mz3UXTvr3fkkQvt9zi\nvEaikZwbi9cZKWOV446DY491ub+ijZ07YfJkuOkmvyWJXvr0cUkFoyHYtNipJHFVplsDbYCcGfnN\nwFfA3LCuCBdDuKaSrr/eBQPdfnsYhIpTMjLcHPXcudEVEf7zz86a2bgRkpL8liZ6GT/ercN88YXf\nkuTnuedckZpRo/yWJLpJTnYeW52LCwQoAVbBLQC//OJudHZjCcy99zpz/5ln/JbkIC+84FyM7cZS\nPNGo2FVd/Yhhw7xNGBcPjB8PQ4fC9Onh6c/LxeejgH8ADTmYQkNVtXdJBwuVcCiGF190hWmiLZAk\nGlm7Ftq0ccnZoqFGhaorFD9kiJPLKJ777nOBm9GSoG32bDdFuWKFBZQGIkexz5njLOTS4mV21Sm4\n2IXPgY/yvGIGVXdTuflmvyWJDZo1cyUIo8Vza84c99eeNoOjTx9nWWVk+C2JI+faM6UQmMMOg549\nXdZnPwnGYliqqs0jJE9RMpTKYpg710XKrl5tJ2ewTJzoIoxnzvRbEpeF8pRTynYm1ZJywQXuZnz9\n9f7K8dtvLhDx++9js+aHH3z/vVsLDYfF7qXF8KGIXBqCTFGDPbGUnCuvdEVgVq/2V47ff3deNj16\n+CtHrBEt3mXjxrmYE1MKwdOkiXsQevdd/2QIRjHcCUwVkb9EZHf26w+vBQsXu3a5KRG7sZSMChWc\nSTt8uL9yjBvn4hZq1vRXjljjiitcepN1hySwjxw2hRs6ffq4xXq/CKgYVLWyqpZT1cNVtUr268hg\nOg+m5nN2uzNFZL+IXF0S4YNh/HhnVteqFe6e459evVzpQb8CpnJuLP/4hz/jxzIVKsANN/hbb2TR\nIvjjDzj/fP9kiFU6dXJeeBs3+jN+cZHPx2f/Pa2wV6COs2s+vwZ0AE4AUnL6LKTdM7gsq2Gf7LEb\nS+gcd5wLz//0U3/GX7zYTSVZQGJo9O7tFqGzsvwZf+hQZy1YQGLJOfxwSEnxzz27uEN2d/bfF4Dn\nC3kFIpiazwB9gUnAz8EKHSyLF7v4hXBnLCxL9O7t33TSkCEuUtZuLKFx0kkuKeLnn0d+7PR0l+m1\nZ8/Ijx0v9O7tIqEPHIj82MUV6sl5zn4duEJVzwNmAr8D9wbRd8CazyJSB6cs3sgZNjixg2PoUHdj\nsdwsodO5s/NM+umnyI6bnu48o3rFVDau6MMvxf72266eeu3akR87XmjRAqpVgxkzIj92kTWf8/CY\nqk4UkTbA+cBzOGXRMsDvgrnJvwQ8qKqanX6jyKmkktZ83rMHJkxw83RG6Bx5pFvIHDMG7r47cPtw\n8c47Lm6hTp3AbY2iuf56ePBBZzlH0jNo6FB4+OHIjRev9OrlrIZgZz3CVfM56DgGEXka+E5Vx4rI\nElVtEeB3rXD1nDtkbz8EHFDVZ/K02cBBZVAD2AP8Q1U/KNBXieMYxo1zC6d+zY/HE7Nmufwty5dH\nzuW3XTu480646qrIjBfP3HCDq4MQqRxha9a4nD9bt0L5YB49jSLZudOt823aFFoqHy/jGLaLyFu4\nms0ficjhQf4uYM1nVW2sqo1UtRFuneHWgkohVEaNcoFRRuk591wXRfv115EZb+NGF0NxaUxHz0QP\nOXPVkWLUKKeMTCmUnurV4eKL3exHJAnmBt8ZV7f5IlX9HUgC7gv0o2BqPnvF9u3uJnbllV6OUnYQ\nOWjSRoLRo90USIUKkRkv3jnvPBeBvGSJ92NlZbl8ZPZQFj4irdghTrOrPvOMCyuPlqIX8cDWrXDq\nqbBtmysq4hWqLvJzwgQ480zvxilr9O/vpiVefdXbcaZPd0n8Fi/2dpyyRFaWK0f8yScuh1lJ8HIq\nKaZQtWkkL6hXD846y/vEenPmuPwwZ5zh7ThljZ49XbDnX395O45de+EnIcH9TyNpNcSdYvjmGzcf\nbpk4w08kXB9zbiyW1yq8NGwIzZt7W7Z1927Xf0qKd2OUVXr1cp6BkcpCEHeKYdQolxfJbizhp1Mn\nN0+9bZs3/e/d6xKHdevmTf9lnR493PqNV7z7rnNUOOoo78YoqzRp4uozRMrLMq4Uw759bm7aEuZ5\nw+GHwzXXwNix3vQ/ebJbV7DYBW+4+mr46ivvghVtGslbunePXKGxuFIMH33kKn01auS3JPFLzsnp\nhc+C3Vi8pXJluOwyb1wfN21yNZ0vuyz8fRuOzp1h2jSXP8xr4kox2I3Fe9q0cekqli4Nb79pabBg\ngbkYe41XT51jxkCXLtFRCjZeqVbNJZScNMn7seJGMfz8M6SmwrXX+i1JfFOunFsDCPfNZexYN9Xh\npSus4W4s27aFtwCTqlu7sIcy74nUdFLcKIbx450Ze2RQlSKM0tC9u/t/798fnv7MxThylC8PXbuG\n9+Yyb55zqbS4E+/p2BFWrHBTd14SN4rBbiyR49hjoX59+OKL8PS3eLFLetimTXj6M4qnRw839ROu\ndM7mYhw5DjvMrTV45QCSQ1wohuXL4ccfrVJUJAmnSZvjYmx1FyLDqafC3/4Gs2eXvq+9e10mXHMx\njhxeOoDkEBeX4ujR7sS0uguR4/rrnRfY7t2l6ycz03nJdO8eHrmM4AiXYp86FU4/HerWLX1fRnC0\nauXSZCxa5N0YniuGQHWfReQGEVkmIt+KyBwROaUk/WdluRTbdmOJLDVquGCm994rXT/TprnAnWOO\nCY9cRnB07eqO3d69petnzBi79iKNiDcOIHnxVDEEWfd5A3Cuqp4CPA68VZIxZs92N6kTTwyHxEZJ\nCMdT57hxLkWzEVnq1HFP+lOnht7Hzp2uVofVzIg83bo5S9urFBleWwwB6z6r6jxV3ZW9uQAokVE6\ndqx7+jEiz+WXu4XjUFNkpKfDxx/DddeFVy4jOEqr2CdNgg4doEqV8MlkBMcxxzhLe9o0b/r3WjEE\nrPtcgJuAj4PtPCPDmcOWtMsfclJkjBsX2u+nTHHJDmvWDK9cRnBcfbWzuH/+ObTfm7XnL17GNHit\nGIJeNxeR84DewCHrEEXxySdw0kkuJbThD6XxkDBrz19KkyJjyxbnT9+hQ/jlMoIjJ0XGrl2B25YU\nr4vvbQfy3rbr4ayGfGQvOA8BOqjqb4V11L9//9z3ycnJJCcn2xNLFNCmjfNMWrbMpXUOlp9+grlz\nYeJE72QzAtO9Ozz2GPTtW7LfjR/vrEWrsucf1ao5F/1Jk+Cmm9xnqamppKamlrpvTyu4iUh5YA3Q\nHkgDFgIpqroqT5v6wAygm6rOL6KfQyq4/fGHsxQ2bnT/IMM/HnnEZbZ99tngfzNokFMMXgfqGMWz\nf7+7jmbNgmbNgv/dqae6anDnnuudbEZg3nsPXnsNZswo/PuorOAWZN3nf+PqSL8hIktEZGEwfb/3\nHiQnm1KIBm64wT1BliSS1qaRooPy5V3yu/Hjg//N8uWuhrRFqvtPx44uoeX27eHtN2ZrPl90Edx8\ns5tnM/yneXN4+WVo1y5w2w0boGVLl1E1MdF72YziWbjQTSmtXh1cWouHH3bxQ888471sRmBuusm5\n699996HfRaXF4BU//ABff22536OJrl2D904aP965qJpSiA7OPNPd6BcvDtz2wAF3nM3aix66dg3/\nlGxMKoa333ZlJi1Fc/Rw/fWutOO+fcW3U3UnsTkNRA8iwd9c5s513kynlCg/geElycnO+g5nKvWY\nVAw2Px191K/vqucFqkm7bJnLpHr22ZGRywiOlBTntpqVVXy7HGvBMqlGDwkJ7sGsJOtEgYg5xbBu\nnfOhbt/eb0mMggQznZSj1C2TanRx/PHw978776SiyMx0mVTtoSz6yLn2wrVkHHOX57hxzouivNcR\nGEaJue46F3RYVMbVAwfcU41NI0UnN9xQvGL/7DNXi6Nhw4iJZATJGWc4Ky5cGVdjSjGo2sJXNFO9\nuvNrnzKl8O+//NK1sYSH0UmXLs4NPCOj8O9tCjd6Kck6UTDElGL45hs3B3rWWX5LYhRFcSenRapH\nN3XrusC1jwvJVpaT8NDcw6OXlBTnmBNonSgYYkox5Dyx2MJX9NKpk6sB/NNP+T/PyHBeS9df749c\nRnAUtU6Uk/CwRo3Iy2QEx7HHunTqM2eWvq+YUQxZWc5rwkzZ6KZSJbj0UrdImZechIf16/sjlxEc\n11zj1hLW3EB5AAAgAElEQVT++CP/5+ZiHBuUJJ6oOGJGMcycCbVrw3HH+S2JEYjCTk5bG4oNqlVz\nfvHvv3/ws59/dvELnTr5JpYRJF26wOTJ8NdfpesnZhSDzU/HDhddBGvXugSH4J4+p02zgjyxQkHv\npIkTnRVYubJ/MhnBUacOtGhR+DpRSYgZxTB5ss1PxwqJiU4J5OT5f/99S3gYS1x2mcuf9OOPbtse\nymKLcHgneV3zuYOIrBaRdSJSaAEeEXkl+/tlItKiqL5atHBTSfFIOPKnRxs5J6cqvPpqatxOI8Xj\nsatY0ZVtffttGD8+lXXr4MIL/ZbKG+Lx+F19NXzxBfz+e+h9eKYYRCQBeA3oAJwApIjI8QXadASa\nqGpToA/wRlH9xfMTSzyenOec4wLdPv8cli9P5fLL/ZbIG+Lx2MHBdaIhQ1LjOuFhPB6/pCRXwCfv\nOlFJ8dJiOAv4XlU3qWomMAG4okCbTsAoAFVdAFQVkVqFdXb11R5KaoSdcuWcX3WvXs6NzhIexhbt\n27v06F9/bU4DsUhpvZO8VAx1gK15trdlfxaoTd3COqtaNayyGRGga1eX9fHkk/2WxCgpiYkumC0h\nwVl/Rmxx2WWlS4/hWaEeEbkGV8P5H9nb3YCWqto3T5upwNOqOid7+wvgflVdXKCv6K8mZBiGEYWE\nUqjHy1R024F6ebbr4SyC4trUzf4sH6HsmGEYhhEaXk4lLQKaikhDEakAdAE+KNDmA6AHgIi0An5X\n1R89lMkwDMMIgGcWg6ruF5HbgGlAAjBMVVeJyC3Z3w9W1Y9FpKOIfA/8CfTySh7DMAwjODxbYzAM\nwzBik6iKfA5nQFw0Emj/RCRZRHaJyJLs16N+yFlSRGS4iPwoIt8V0yaWj1ux+xerxy0HEaknIjNF\nZIWILBeR24toF5PHMJj9i9VjKCKHi8gCEVkqIitFZEAR7Up27FQ1Kl646abvgYZAIrAUOL5Am47A\nx9nvWwLz/ZY7zPuXDHzgt6wh7FtboAXwXRHfx+xxC3L/YvK45ZH/70Dz7PeVgTVxdu0Fs38xewyB\nitl/ywPzgTalPXbRZDGENSAuCglm/wBizgNLVWcDvxXTJJaPWzD7BzF43HJQ1R9UdWn2+3RgFVAw\nAU3MHsMg9w9i9Biq6p7stxVwD6C/FmhS4mMXTYohrAFxUUgw+6fAOdnm3scickLEpPOWWD5uwRA3\nx01EGuKsowUFvoqLY1jM/sXsMRSRciKyFPgRmKmqKws0KfGx8zKOoaQEuwpeUKvHyup5MHIuBuqp\n6h4RuQSYDDTzVqyIEavHLRji4riJSGVgEnBH9pP1IU0KbMfUMQywfzF7DFX1ANBcRP4GTBORZFVN\nLdCsRMcumiyGsAXERSkB909Vd+eYhar6CZAoIvGQrDqWj1tA4uG4iUgi8C4wRlUnF9Ikpo9hoP2L\nh2OoqruAj4AzCnxV4mMXTYoh3gPiAu6fiNQScRWtReQsnDtxwfnCWCSWj1tAYv24Zcs+DFipqi8V\n0Sxmj2Ew+xerx1BEaohI1ez3RwAXAksKNCvxsYuaqSSN84C4YPYPuBa4VUT2A3uAmChNJCLjgXZA\nDRHZCvTDeV7F/HGDwPtHjB63PLQGugHfikjOTeVhoD7ExTEMuH/E7jE8GhglIuVwD/r/U9Xppb1v\nWoCbYRiGkY9omkoyDMMwogBTDIZhGEY+vCztGddh9oZhGPGKl4vPmcBdqro023/4GxH5XFVX5TSQ\nPDWfRaQlruZzKw9lMgzDMALgmcUQ72H2hmEY8UpE1hjiPczeMAwjnvA8jiEcYfZiNZ8NwzBCQkMo\njeypxRDOMHu/U9t6+erXr5/vMtj+2b7Z/sXfK1S89EqK6zB7wzCMeMXLqaR4D7M3DMOISzxTDKr6\nFUFYJKp6m1cyxArJycl+i+Ap8bp/u3dDRkay32J4Srweuxziff9CJSZyJYmIxoKcRtni9dfhtttg\n40Zo0MBvaQzjUEQEDWHx2RSDYYTIaafBgQNw5ZXQv3/hbbIzORuG5xR2jzTFYBgRZPFiuPpqeP99\nuOIKZzUkJBzaLvvCjLyARpmiqPMsVMVgSfQMIwSGDYPevaFFC6hVC774wm+JDCN8mMVgGCVkzx6o\nVw+WLnV/Bw92iuGddw5taxaDEQnMYjAMn3n3XWjZ0ikFgJQUpxh++slfuQwjXJhiMIwSMnQo3Hzz\nwe0jj3QL0P/7n38yGUY4McVgGCVg7VpYswYuuyz/5zff7BSGzRpFJ7Nnz+a4447zW4yg2Lt3L5df\nfjlVq1alS5cuADz66KPUrFmT2rULJqj2BlMMhlEChg2DHj2gQoX8n59zjlMKc+f6I1coNGzYkIoV\nK1KlSpXc1+23F1pPyzP69+9PYmJiPhmee+65sI/Ttm1bVq9eHdY+Fy5cSMeOHUlKSqJ69eq0bNmS\nkSNHlrrfSZMm8dNPP/Hrr7/y9ttvs2XLFl544QVWr15NWlpa6QUPAlMMhhEkmZkwapTzRiqIyEGr\nIVYQET788EN2796d+3rllVciLkNKSko+Ge69996wjrF///5S/T4rK+uQz+bNm0f79u0577zzWL9+\nPTt37uSNN97g008/LdVYAJs3b6ZZs2aUK+duz1u2bKF69epUr1691H0HiykGwwiSDz+Epk2hqBmJ\nHj1cXMOuXZGVywtuvfVWrr322tztBx54gAsuuACA1NRU6taty4ABA6hZsyaNGjVi3LhxuW137dpF\njx49OOqoo2jYsCFPPvlkkZ5ZxWUB/eCDDzjxxBNJSkrivPPOy/fEX65cOTZs2JC73bNnTx577LF8\n8g0cOJCjjz6am266idTUVOrVO5jIOS0tjWuuuYajjjqKxo0b8+qrr+Z+179/f6699lq6d+/O3/72\nN0aNGnWIbPfddx89e/bkvvvuo1q1agCcdtppTJgwIbfNkCFDaNq0KdWrV+eKK65gx44dud+tXr2a\nCy+8kOrVq3PcccfxTrZLW79+/Xj88cd5++23qVKlCm+99RYXXXQRaWlpVKlShd6FPZV4gd9pYYNM\nHauG4TcdO6qOHFl8m2uuUX3zzYPb0XzuNmzYUL/44otCv9uzZ482a9ZMR44cqV9++aXWqFFDt2/f\nrqqqM2fO1PLly+s999yj+/bt01mzZmmlSpV0zZo1qqravXt3vfLKKzU9PV03bdqkzZo102HDhhU6\nTr9+/bRbt26HfL5mzRqtVKmSfvHFF7p//34dOHCgNmnSRDMzM1VVVUR0/fr1ue179uypjz32WD75\nHnzwQd23b5/u3btXZ86cqXXr1lVV1aysLD3ttNP08ccf18zMTN2wYYM2btxYp02blitTYmKiTpky\nRVVV9+7dm0+2P//8UxMSEjQ1NbXI/+306dO1Ro0aumTJEs3IyNC+ffvqueeeq6qq6enpWrduXR05\ncqRmZWXpkiVLtEaNGrpy5UpVVe3fv7927949t6/U1NRc2YuiqPMs+/OS33ND+VGkX9F8cRllg61b\nVZOSVNPTi2/3ySeqZ555cDvQuetWJkr/CoUGDRpo5cqVtWrVqrmvoUOH5n6/YMECTUpK0gYNGuiE\nCRNyP8+58e7Zsyf3s86dO+vjjz+u+/fv1woVKuiqVatyvxs8eLAmJycXKkO/fv20QoUKueMnJSVp\nWlqa/ve//9UuXbrktjtw4IDWqVNHZ82apaqFK4ZHH300V74KFSpoRkZGPplzbq7z58/X+vXr55Pj\nqaee0l69euXK1K5duyL/b9u2bVMRyVWEhdG7d2994IEHcrfT09M1MTFRN23apBMmTNC2bdvma9+n\nTx/9z3/+kzt+XmWZV/aiCLdi8LyCm2HEAyNHQpcuUKlS8e0uvBD69IFly+DUUwP3qz56MYkIU6ZM\n4fzzzy/0+7POOovGjRvzyy+/cN111+X7LikpiSOOOCJ3u0GDBuzYsYOdO3eSmZlJgzxZBevXr8/2\n7YXW3wKgS5cujB49Ot9nO3bsoH79+vlkrVevXrH95KVmzZpUKOghkM3mzZtJS0sjKSkp97OsrCzO\nPffc3O26dYuuMJyUlES5cuXYsWMHzZo1K7TNjh07OOOMM3K3K1WqRPXq1dm+fTubN29mwYIF+cbf\nv38/PXr0CGrfIoGtMRhGAA4ccN5IeWMXiiIhwS1ODxvmvVxeM2jQIPbt20ft2rUZOHBgvu9+++03\n9uzZk7u9efNmateuTY0aNUhMTGTTpk25323ZsqXIG21REbu1a9dm8+bNuduqytatW6lTpw4AFStW\nzDf+jh078iUsLC55Yb169WjUqBG//fZb7uuPP/7gww8/zP1tcb+vWLEiZ599NpMmTSqyTe3atfP9\nD/7880927txJ3bp1qV+/Pu3atcs3/u7duxk0aFBA2SOFKQbDCMCMGVC1qsumGgy9esG4cbB3r7dy\nhYPCbsoAa9eu5bHHHmPs2LGMHj2agQMHsmzZsnxt+vXrR2ZmJrNnz+ajjz7iuuuuo1y5cnTu3JlH\nHnmE9PR0Nm/ezIsvvki3bt1KNH7nzp356KOPmDFjBpmZmTz//PMcfvjhnHPOOQA0b96csWPHkpWV\nxaeffsqXX34Z9D6fddZZVKlShYEDB7J3716ysrJYvnw5ixYtKlamvAwcOJCRI0fy3HPPsXPnTgCW\nLVtGSkoKACkpKYwYMYJly5aRkZHBww8/TKtWrahfvz6XXnopa9euZcyYMWRmZpKZmcnXX3+du7ge\nzPhe43XN5+Ei8qOIfFfE98kisktElmS/HvVSHsMIhZxI52Af5Bo0gNNPdx5K0c7ll1+eL4bgmmuu\nISsri+7du/Pggw9y8skn06RJE5566im6d+9OZmYmAH//+99JSkqidu3adO/encGDB+dOq7z66qtU\nqlSJxo0b07ZtW2644QZ69Sq8OGNRT+fNmjVjzJgx9O3bl5o1a/LRRx8xdepUypd3s98vv/wyU6dO\nJSkpiXHjxnHVVVcd0m9hYwEkJCTw4YcfsnTpUho3bkzNmjXp06cPf/zxR7Ey5eXss89mxowZzJgx\ng2OOOYbq1atzyy23cOmllwLQvn17Hn/8ca655hpq167Nxo0bcz2WqlSpwmeffcaECROoU6cORx99\nNA899BD79u0rcvxIWxGeJtETkbZAOjBaVU8u5Ptk4G5V7RSgH40GLWqUPX75BZo0cWm180wJB+Sd\nd+CNN2DmzPhLopeamkr37t3ZunWr36IY2cRUEj1VnQ38FqCZ/xNqhlEEY8a49BclUQoAnTrB8uXe\nyGQYXuP3GoMC54jIMhH5WERO8Fkew8hF9dCEecFy2GHQvXv4ZYoWomGB1PAOz+sxiEhDYGoRU0lV\ngCxV3SMilwAvq+oh/l82lWT4wYIF0K2bS5wXyn1w5Uo48cT4m0oyoo9wTyX5GsegqrvzvP9ERF4X\nkWqq+mvBtv3zFNVNTk4mOTk5IjIaZZehQ+Gmm0JTCgAnmP1rRJjU1FRSU1NL3Y/fFkMt4CdVVRE5\nC5ioqg0LaWcWgxFRdu+G+vXdU//RR4fej1VwMyJBTFkMIjIeaAfUEJGtQD8gEUBVBwPXAreKyH5g\nD3C9l/IYRrBMnAjt2pVOKRhGrGI1nw2jEM4+Gx555NCCPCXFFmmNSBEzFoNhxCLLl8OWLdChQ+n7\nUlUWLoSuXd0idjm//QANIwjsNDWMAgwb5tJalA/TY9OZZ0LFijBrVnj6Mwyvsakkw8hDRgbUretc\nVRs3Dl+/r7zi+hw7Nnx9GkYgojLy2TBijSlT4JRTwqsUwMVDfPQR/BYoD4BhRAGmGAwjD6FGOgei\nWjXo2NEsBiM2sKkkw8hm40a3HrBtGxx+ePj7nzED7roLli4NPWjOMEqCTSUZRikZMQJuuMEbpQCQ\nnAzp6fDNN970bxjhwhSDYQBZWTB8uEuB4RXlyrn+hw71bgzDCAemGAwDmDYN6tRxC89ecuONLqr6\nzz+9HccwSoMpBsPAu0XngtSpA61bu0I+hhGt2OKzUeb58Uc47jgX7VylivfjTZkCzz4LX33l/VhG\n2cYWnw0jREaPhquvjoxSAOe2un49ZNd+N4yowxSDUabJqdLm5aJzQRIToWdPl3rDMKIRUwxGmear\nryAhwWVTjSS9eztLZd++yI5rGMFgisEo0+QsOkc64KxpU1fhberUyI5rGMFgi89GmeX336FhQ1i3\nDmrWjPz4Y8fCmDHwySeRH9soG9jis2GUkPHj4aKL/FEK4Ba8Fy503lCGEU0EpRhEpI6ItBaRc0Wk\nnYicG+TvhovIjyLyXTFtXhGRdSKyTERaBCu4YZSWSMUuFMURR0BKikvFYRjRRMCpJBF5BugCrASy\ncj5X1csDdi7SFkgHRqvqyYV83xG4TVU7ikhL4GVVbVVIO5tKMsLKkiVw1VWwYYO/VdWWLoUrrnBy\nJCT4J4cRn3hZ2vMq4FhVzShp56o6W0QaFtOkEzAqu+0CEakqIrVU9ceSjmUYJWHYMOcZ5HepzebN\n3VTW9OluWsswooFgLov1QAWPxq8DbM2zvQ2o69FYhgHA3r1ufaFXL78lcdx8syXWM6KLYCyGvcBS\nEZkO5FgNqqq3h0mGgmZOoXNG/fv3z32fnJxMcnJymIY3yhrvvgtnnQX16vktiSMlBR56CH7+2b+F\ncCM+SE1NJTU1tdT9BLPG0DP7bU5DwSmGUUEN4KaSphaxxvAmkKqqE7K3VwPtCk4l2RqDEU6Sk6Fv\nX7jmGr8lOUjPni6z6913+y2JEU+EusZQpGIQkfqqWmpHugCKIe/icyvgJVt8Nrxk7Vpo2xa2boUK\nXk2QhsBXX0GfPrBihVV3M8KHF3EMU/J0/m6IQo0H5gLHishWEektIreIyC0AqvoxsEFEvgcGA/8M\nZRzDCJbhw6FHj+hSCuBScR84APPm+S2JYRRvMSxR1RYF3/uBWQxGOMjMhPr1YeZMl2Y72nj2WVi1\nyikvwwgHFvlsGAH46CNo0iQ6lQI4S+b99+GPP/yWxCjrFKcYThGR3SKyGzg55332y05dI+YYNszf\nSOdA1KoF558Pb7/ttyRGWceS6Bllgu3b4eST3aJzpUp+S1M0n3wC/fvDggV+S2LEAzaVZBjFMHIk\ndOkS3UoBXPRzWhp8+63fkhhlGVMMRtxz4ICbRopklbZQSUhwqTqsupvhJ6YYjLhn5kw48kg4/XS/\nJQmOXr1crYa//vJbEqOsYorBiHv8qtIWKg0bwmmnOQ8lw/ADW3w24pqdO+GYY2DjRkhK8lua4Jk4\nEQYPdllXDSNUbPHZMAphzBi47LLYUgrgajR8+y2sX++3JEZZxBSDEbeo+l+lLVQOOwy6d7fqboY/\nmGIw4pavv3YLuO3a+S1JaNx0k1MM+/f7LYlR1jDFYMQtQ4e6m2usLDoX5MQToUED+PRTvyUxyhq2\n+GzEJenpLmHeihVw9NF+SxM6w4fDBx/A5Ml+S2LEIrb4bEQd330HdepAy5bwwAPw8ceRSxA3cSKc\ne25sKwWAzp3hyy9hx47IjLd1K/zvf25dpkkTOO88VwrVKFuYYjA8IS3NeQM9+SQ88wwccYRLK127\ntiuref/9Ltvprl3ejJ8zjRTrVK7sKs2NCqpeYsnZvBlGj3bR1scc4+InpkyB5s1dHEXt2m4R/MAB\nb8Y3ohObSjLCTnq6W/C9+mp45JH83/31l0sQN2sWpKbCwoVw/PGufXIytGkDVauWbvwVK+DCC2HL\nFigfTFXzKGfBArjhBli3rvTrJZs2Hfzfp6bCn38e/N8nJ7tjUS7P42JGhvtftmoFAweWbmwj8oS9\ntGc4EJEOwEtAAjBUVZ8p8H0yrlLchuyP3lXVJwrpxxRDjJCVBVdd5YraDx0a+EaWkeGUQ86NasEC\nOPZYd5Nq186V4SxpDMLddzsL5cknQ9yJKEPV1YN+9VX3fynJ7zZtcv/XHGWwd+/B/22OIgh0jHbu\nhHPOcf/XW24JdS8MP4g6xSAiCcAa4AJgO/A1kKKqq/K0SQbuVtVOAfoyxRAj3H47rFzp0kcnJpb8\n9xkZzs0052Y2fz40bXrwRta2LVSrVvzv69VzJTKPOSbUvYg+Xn4ZFi1y8/9FoeoivHOUbGoq7Nt3\n0BpITnZKNxSr4/vv3f9+xAjo0CGUPTD8IBoVw9lAP1XtkL39IICqPp2nTTJwj6peHqAvUwwxwMsv\nw1tvwZw5pZ8OymHfPqcocp54c274OTe6c8/NryjeeQfefDP+UkkUltpD1UVG57UIsrLyWwTNmoXP\nXXfuXLjySvj8czj11PD0aXhLNCqGa4GLVfUf2dvdgJaq2jdPm3bAe8A2nFVxr6quLKQvUwxRzpQp\n8M9/uptHgwbejbNvH3zzzcEn4nnzoFGjgzfDV1+FPn0gJcU7GfwiJcV5CtWvf1AZqB5Uku3aOevK\ny7iNiRPh3nvd/71OHe/GMcJDqIrBy6W5YO7ki4F6qrpHRC4BJgPNCmvYv3//3PfJyckkl2Sy1fCU\nRYuce+PHH3urFAAqVICzz3avhx6CzEynKGbNgiFD4Oef3RpHPPKvf8GNN7p9P+88+M9/nBURyQC+\nzp1hwwbncfbll1ClSuTGNgKTmppKampqqfvx0mJoBfTPM5X0EHCg4AJ0gd9sBE5X1V8LfG4WQ5Sy\nebNbmHz9dZf4zYh/VN0i9PbtzlKMB8+veCUaA9wWAU1FpKGIVAC6AB/kbSAitUTc846InIVTVL8e\n2pURjfz+O3Ts6GISTCmUHURg0CCXw+n2252iMOILzxSDqu4HbgOmASuBt1V1lYjcIiI5Tm/XAt+J\nyFKcW+v1XsljhJd9++Daa6F9e7jjDr+lMSJNYqJb6P/qK3jhBb+lMcKNBbgZJUbVRRX/8ouLjk1I\n8Fsiwy+2bnVrHi+/7CK0jegiGhefjTjlqadg2TK34GtKoWxTr55L8nfxxVC3rsuLZcQ+livJKBHj\nx7tYhQ8/dHl8DOO001zg21VXuTgLI/axqSQjaGbPdtMF06fDySf7LY0Rbbz2mluUnjs39kqpxitR\nF+AWTkwx+M/atS7KePRouOgiv6UxopW77nLTjJ9+6mJODH8xxWB4xi+/uAXGBx6IzfrJRuTIynLe\nakceCSNHxm71vHghGuMYjDjgr79cjMJ115lSMAKTkABjx8KqVfD4435LY4SKWQxGkRw44PLziMC4\ncfnz9BtGcfz4o6vh8N//ukI/hj+Yu6oRdh55xKU9+OILUwpGyahVy1XoS052Lq2W2iy2sMvdKJQh\nQ2DSJFeE/vDD/ZbGiEVOOMG5N3fpAqtX+y2NURJsKsk4hM8+gx49nHtq06Z+S2PEOiNHuvWGefPg\nqKP8lqZsYV5JRlj47juX/+i991z9ZcMIB4895qYkZ8xwZVeNyGCKwSg1aWnOLfXpp+Oz0I3hH6rQ\nrZsrvTpxoq1ZRQpzVzVKRXo6XH65y7NvSsEINyIwfDj89BM8+KDf0hiBMIvBR1TdU3q1av6a11lZ\nLs/NUUe5RWcLSjK84tdfnVV6993uIcRPfvnFFRkKV33yaMTcVWOA/ftduoA5c9zrq6+cab13L5xy\nipvTb93avWrWjIxMqnDnnU6GN94wpWB4S7VqrgRsmzaudvUll0RmXFWX1iXvtffDDy5Wp2HD/Nde\nw4Z2HZjF4CG7d8P8+e4knDMHFi50Pt2tWx88ERs3hj173Hc5J+28ec4PPOdEbdMGmjXz5mR96SUY\nOtSN+7e/hb9/wyiMuXPhyivh88/h1FPD339GBixefPDamzvXWeV5FcBJJznFsHTpQWUxZ45b/8h7\njZ56auyWL43KxWcR6YCrzJYADC2s3rOIvAJcAuwBeqrqkkLaxIRi2Lo1/xPJunUuJXHOiXjOOe6J\nKRBZWbBiRf6T9c8/3e9zTtbTT4fDDiudvJMnuwLzc+dCgwal68swSso777gppXnzXC2H0vDrr+48\nzrlmlixxD1N5b/DBjKHqUofnXHdz5sCWLXDmmQf7adXK5YKKBaJOMYhIArAGuADYDnwNpKjqqjxt\nOgK3qWpHEWkJvKyqrQrpK+oUQ1YWLF+e/wTasyf/E8lppwV3805NTSU5QGjotm0Hx5kzB9asgRYt\n8iud6tWDl//rr1295k8+gTPOCP53oRDM/sUq8bxv4P3+PfOMC4KbPRuqVAnuN6qwYUP+a2/rVlck\nKOd6aNUquP6C2b9ff3XKK0fpLF7s4nvyWvT16gUne6SJxjWGs4DvVXUTgIhMAK4AVuVp0wkYBaCq\nC0SkqojUUtUfPZQrJP78ExYsOHhyzJ8PRx/tTowLL4T+/d3JEsp0TzAnZ926LoK0Sxe3vXv3QXle\neQVuuMG1yfuEdMwxhcuzaZMz44cO9V4pQHzfPON538D7/bv/fli/3p3XH3xQ+JRNZqazAPJa0OXL\nHzzX/+//3BpdKNM9wexftWpw6aXuBa7e+eLFTo6JE13N88MPz3/tnXxybFc39FIx1AG25tneBhQs\n/FdYm7qA74ohLS3/E/rKldC8uTvo//wnjBkTuQXiwqhSBS64wL3ALWx/9527cD75xOU52r//4FNN\n69bOwtizx53g99/vsqYahp+IuOI+l10Gt9/u3u/adfAJfc4cWLTIrcW1bg1XXw0vvOAWrv1aIK5Q\nwVkkrVrBPfc4C+b77w8qrddec/ePVq0OXnstW8ZWxUMvFUOwcz8FD6+vc0YDB8Kbb7qTM2dO/8UX\n3ZN1NOcMKl/e3fhbtIC+fd3JumXLwYtr1Chnflet6lxT77jDb4kNw5GY6NYbcpwsfvjBXW9t2rga\nIK1aRbdLqYibLWjaFHr1cp/98svBNY9//9stcB9/PDz/PLRr56+8weDlGkMroL+qdsjefgg4kHcB\nWkTeBFJVdUL29mqgXcGpJBGJrgUGwzCMGCHa1hgWAU1FpCGQBnQBCsbUfgDcBkzIViS/F7a+EMqO\nGYZhGKHhmWJQ1f0ichswDeeuOkxVV4nILdnfD1bVj0Wko4h8D/wJ9PJKHsMwDCM4YiLAzTAMw4gc\nMVjxZpUAAAQkSURBVJNET0T6isgqEVkuIocEysUDInKPiBwQkSDC4GIHEXk2+9gtE5H3RCQuYqxF\npIOIrBaRdSLygN/yhBMRqSciM0VkRfY1d7vfMoUbEUkQkSUiMtVvWcJNtuv/pOzrbmX2VH3QxIRi\nEJHzcDEPp6jqScBzPosUdkSkHnAhsNlvWTzgM+BEVT0VWAs85LM8pSY7gPM1oANwApAiIsf7K1VY\nyQTuUtUTgVbAv+Js/wDuAFbisyekR7wMfKyqxwOnkD9+LCAxoRiAW4EBqpoJoKo/+yyPF7wA3O+3\nEF6gqp+r6oHszQW4WJVYJzeAM/u8zAngjAtU9QdVXZr9Ph13Y6ntr1ThQ0TqAh2BoRzqMh/TZFvk\nbVV1OLj1XlXdVZI+YkUxNAXOFZH5IpIqIhGI140cInIFsE1Vv/VblgjQG/jYbyHCQGHBmXV8ksVT\nsj0LW+CUerzwInAfcCBQwxikEfCziIwQkcUiMkREKpakg6jJGSginwN/L+SrR3ByJqlqKxE5E5gI\nNI6kfKUlwP49BFyUt3lEhAojxezfw6o6NbvNI8A+VR0XUeG8IR6nHw5BRCoDk4A7si2HmEdELgN+\nUtUlIpLstzweUB44DZeH7msReQl4EPh3STqIClT1wqK+E5Fbgfey232dvUBbXVV3RkzAUlLU/onI\nSTgNv0xcjH9d4BsROUtVf4qgiKWiuOMHICI9caZ7+4gI5D3bgbyp0+rhrIa4QUQSgXeBMao62W95\nwsg5QKfsJJ6HA0eKyGhV7eGzXOFiG24G4uvs7Uk4xRA0sTKVNBk4H0BEmgEVYkkpFIeqLlfVWqra\nSFUb4Q7qabGkFAKRnX79PuAKVf3Lb3nCRG4Ap4hUwAVwfuCzTGFD3FPKMGClqr7ktzzhRFUfVtV6\n2dfb9cCMOFIKqOoPwNbseyW4DNcrStJH1FgMARgODBeR74B9QNwcxEKIxymKV4EKwOfZVtE8Vf2n\nvyKVjqICOH0WK5y0BroB34pITo2Uh1T1Ux9l8op4vOb6AmOzH1rWU8LgYQtwMwzDMPIRK1NJhmEY\nRoQwxWAYhmHkwxSDYRiGkQ9TDIZhGEY+TDEYhmEY+TDFYBiGYeTDFINhGIaRD1MMhmEYRj5MMRhG\nCRGR+0Skb/b7F0Vkevb780VkjL/SGUbpMcVgGCXnS6Bt9vszgEoiUj77s1m+SWUYYcIUg2GUnMXA\n6SJSBfgLmIdTEG2A2X4KZhjhIFaS6BlG1KCqmSKyEegJzAW+xWX/baKqq/2UzTDCgVkMhhEas4F7\ncVNHs4H/w1kShhHzmGIwjNCYjatYNy+7dsZebBrJiBMs7bZhGIaRD7MYDMMwjHyYYjAMwzDyYYrB\nMAzDyIcpBsMwDCMfphgMwzCMfJhiMAzDMPJhisEwDMPIhykGwzAMIx//Dyu5AFfcrLFeAAAAAElF\nTkSuQmCC\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f3df8629110>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from numpy import arange,sin,pi,cos,trapz,nditer,zeros\n", + "%matplotlib inline \n", + "from matplotlib.pyplot import plot,subplot,title,legend,xlabel,ylabel,show\n", + "\n", + "#given\n", + "V=1\n", + "t0=1\n", + "T=1\n", + "w0=2*3.14/T\n", + "P=1\n", + "t=arange(0,0.01+3,0.01)\n", + "f=[V*abs(sin(pi*tt)) for tt in t]\n", + "#The Expo fourier series coeff\n", + "print 'The Expo fourier series coeff are: for n=-5 to 5'\n", + "a=1\n", + "Fr=[];Fi=[];mag=[]\n", + "for n in range(-5,6):\n", + " fr=[ff*cos(pi*n*tt/T) for ff,tt in nditer([f,t])]\n", + " Fr.append(trapz(t,fr))\n", + " fi=[ff*sin(pi*n*tt/T) for ff,tt in nditer([f,t])] \n", + " Fi.append(trapz(t,fi))\n", + " mag.append(abs(Fr[a-1]+1J*Fi[a-1]))\n", + "\n", + " print Fr[a-1]-(1J*Fi[a-1]),'\\n'\n", + " x=zeros(len(t))\n", + " #x=x+((Fr(a))-1J*Fi(a)).*(cos(pi*n*t/T)+1J*sin(pi*n*t/T))\n", + " x=x+((Fr[a-1])-1J*Fi[a-1])*(cos(pi*n*t/T)+1J*sin(pi*n*t/T))\n", + " a=a+1\n", + "\n", + "print 'The given function in Expo Fourier series can be represented as \\n'\n", + "print 'f(t)= 2V/pi -2V*exp(j2*pi*t)/3*pi -2V*exp(j2*pi*t)/15*pi\\n -2V*exp(j2*pi*t)/35*pi ...\\n -2V*exp(-j2*pi*t)/3*pi -2V*exp(-j2*pi*t)/15*pi...'\n", + "n=range(-5,6)\n", + "subplot(2,1,1)\n", + "plot(t,f) # Rectified sine function Plot\n", + "xlabel(\"t\")\n", + "ylabel(\"sin(t)\")\n", + "legend([\"sin(pi*t)\"])\n", + "subplot(2,1,2)\n", + "plot(n,mag) #Plot of the magnitude of the Fourier coeff\n", + "xlabel(\"w\")\n", + "ylabel(\"Fn\")\n", + "legend([\"Expo Fourier Coeff\"])\n", + "show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 8, page no 24" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The fourier series coeff Fn are:\n", + "(-0.185792520964+0j) \n", + "\n", + "(-0.121542879381+6.93889390391e-18j) \n", + "\n", + "(-0.0695370407613+0j) \n", + "\n", + "(-0.0312803786267+0j) \n", + "\n", + "(-0.00787673751141+1.73472347598e-18j) \n", + "\n", + "(1+0j) \n", + "\n", + "(-0.00787673751141+1.73472347598e-18j) \n", + "\n", + "(-0.00787673751141-1.73472347598e-18j) \n", + "\n", + "(-0.0312803786267+0j) \n", + "\n", + "(-0.0695370407613+0j) \n", + "\n", + "(-0.121542879381-6.93889390391e-18j) \n", + "\n", + "(-1.23107341487-2.77555756156e-17j) \n", + "\n", + "(-0.86361423984-2.77555756156e-17j) \n", + "\n", + "(-0.520835737317-2.77555756156e-17j) \n", + "\n", + "(-0.243085758762+2.77555756156e-17j) \n", + "\n", + "(-0.0625607572533+0j) \n", + "\n", + "(1+0j) \n", + "\n", + "(-0.0625607572533+0j) \n", + "\n", + "(-0.0625607572533+0j) \n", + "\n", + "(-0.243085758762-2.77555756156e-17j) \n", + "\n", + "(-0.520835737317+2.77555756156e-17j) \n", + "\n", + "(-0.86361423984+2.77555756156e-17j) \n", + "\n" + ] + }, + { + "data": { + "image/png": "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\nqKpadaBKF36+UB+Y84AO/b+h2u7+dnrd5Ot09rrZae+s9qvqQJVOXjFZv/ncN7XNfW30iDee1h+/\nO1GXb10et44VlRU6/ZPpOnD6P7XbP6/Trg921duKbtPlW5f7Lr/fvHm6ZPfhzUr1GbZ4sb55SJtQ\nbHv379WJiyfq+U+dr63+t0DbvPqq3vjHv+r7K+P3dazbXKp3Pv2y9nrm73riJb/R449X/d3vVL84\nvJUvul27XId1Vf1/J4eorlZt00Z12zZfm2/erPrHP7r2+bM7rtRtrXvoSy+5E2U8GzeqPjtht1Y0\nztf27ap06FDVCRNUE/w40urjj1XvvFO1e3c34OCOO1SnTYvfZFZd7d776KOqF1/s/ksvvVT1pZdi\nNPPlgGQDR8wVAEVksaoO8u6/oKoJDDj3R0Qu4OBw3CdU9b6aRZzUW5dDRP4MjAb2Aler6qIo+9FY\nx5Ht9lXto+iTIorWFDHt02msK11H78Le9CnsQ8eWHWuHx27Zu4XVO1azpmQN3dp0Y3jP4YzoNYKv\n9PkKzRsHfN0doNKKUi5fPIedpcv5YsU49uzfUzs8tl1ztzxrtVazYfcGVu9YzWc7P+O4Dsexrvcv\nuadzG67rd27CTXqXLl3Ktzt04HI/OZk8Hd95h0WnnEIXn+lGary/agM/mPkGrT+axZz815DqZrTa\n34cjG/eiRZ5rRqvSSrbsX8uuxquparaFjrvPpPSin/NUk/Z8a9jghMoD3Bjc6dPdOFU/NmyAU05x\nq/8laOmHBzjm1NZcds5Wps9vyZFHuvkhPXpA06Zum7Iyl3Jr9Wo3t+QHJ7zHrWtuoGzOopQXLEyn\n6mp45x148003/PfDD10TV58+bm2tvDy3XWmpG9q8apWbQzJ8OIwYARddBPWsMJwTkl0B0G/gqL2f\njXI5cETaWbGTNSVrWL1jNVv3bq19vn1+e3oX9nYn3Ba59df66Oefs3jPHv7Wrx9by7ayZoc7vl37\ndgHuj7dz6870btebXu160bxJPq1nz2bLmWfSKok1vf/7009pBNzjc1D/tv376TN/PiVnn51QP0yN\naydMYEirVlz7zct5f+XnzP14DR98toay/RUANMlrzDGdunNGvz6cMeBoPl1RzOUrVrD8iisSLguA\nCy6AG2+EMWP8bf/mm/DAAy7YJOOkk2DCBCpPPIV16w7OD6mqci83b+7mT/Tp41a4zfv7/8G0afDM\n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\nAElFTkSuQmCC\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7fbfb25b1a10>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from numpy import pi,arange,cos,sin,trapz,zeros\n", + "%matplotlib inline \n", + "from matplotlib.pyplot import plot,subplot,title,legend,xlabel,ylabel,show\n", + "\n", + "\n", + "#given\n", + "\n", + "T=500e-3\n", + "w0=2*pi/T\n", + "d=50e-3\n", + "A=10\n", + "t=arange(-d/2,0.01+T-d/2,0.01)\n", + "t1=arange(-d/2,0.01+d/2,0.01)\n", + "f1=A\n", + "t2=arange(d/2,0.01+T-(d/2),0.01)\n", + "f2=0\n", + "a=0\n", + "Fr=[];Fi=[];mag=[]\n", + "print 'The fourier series coeff Fn are:'\n", + "for n in range(-5,6):\n", + " if n==0:\n", + " Fr.append(1);Fi.append(0)\n", + " else: \n", + " fa1=f1*cos(pi*n*t1/T)\n", + " fa2=f2*cos(pi*n*t2/T)\n", + " fb1=f1*sin(pi*n*t1/T)\n", + " fb2=f2*sin(pi*n*t2/T)\n", + " \n", + " Fr.append(1/T*(trapz(t1,fa1)+trapz(t2,fa2)))\n", + " Fi.append(trapz(t1,fb1)+trapz(t2,fb2))\n", + " mag.append(abs(Fr[a]+1J*Fi[a]))\n", + "\n", + " print Fr[a]-1J*Fi[a],'\\n'\n", + " x=zeros(len(t))\n", + " x=x+((Fr[a])-1J*Fi[a])*(cos(pi*n*t/T)+1J*sin(pi*n*t/T))\n", + " a=a+1\n", + "\n", + "n=range(-5,6)\n", + "subplot(3,1,1)\n", + "plot(t,[f1]*len(t))\n", + "xlabel(\"t\")\n", + "ylabel(\"f(t)\")\n", + "subplot(3,1,2)\n", + "plot(n,mag) # expo fourier series coeff\n", + "xlabel(\"n\") \n", + "ylabel(\"Coeff Magnitude\") \n", + "subplot(3,1,3)\n", + "plot(t,x)\n", + "plot(-t,x) # one sided spectrum with T=500ms\n", + "xlabel(\"w\")\n", + "ylabel(\"Fn\")\n", + "\n", + "T1=T/2\n", + "t=arange(-d/2,0.01+T1-d/2,0.01)\n", + "t1=arange(-d/2,0.01+d/2,0.01)\n", + "f1=A\n", + "t2=arange(d/2,0.01+T1-(d/2),0.01)\n", + "f2=0\n", + "#The Expo fourier series coeff\n", + "a=0\n", + "Fr1=[];Fi1=[];mag=[]\n", + "for n in range(-5,6):\n", + " if n==0:\n", + " Fr1.append(1);Fi1.append(0)\n", + " else :\n", + " fr1=f1*cos(pi*n*t1/T1)\n", + " fr2=f2*cos(pi*n*t2/T1)\n", + " fi1=f1*sin(pi*n*t1/T1)\n", + " fi2=f2*sin(pi*n*t2/T1)\n", + " \n", + " Fr1.append(1/T1*(trapz(t1,fr1)+trapz(t2,fr2)))\n", + " Fi1.append(1/T1*(trapz(t1,fi1)+trapz(t2,fi2)))\n", + " mag.append(abs(Fr1[a]+1J*Fi1[a]))\n", + " print Fr1[a]-1J*Fi1[a],'\\n'\n", + " y = zeros(len(t))\n", + " y=y+((Fr1[a])-1J*Fi1[a])*(cos(pi*n*t/T1)+1J*sin(pi*n*t/T1))\n", + " a=a+1\n", + "\n", + "plot(t,y)\n", + "plot(-t,y) # double sided spectrum with T=250ms\n", + "show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 9, page no 12" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n2hmKAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f606a00b0d0>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6066ed1f90>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "|F(w)|= 1/sqrt(a**2+w**2) and\n", + " Theta(w)=-atan(w/a)\n" + ] + }, + { + "data": { + "image/png": "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\nFvfPAu6SNJHQSupPKcdTFGY2Ebid8KNtUlz8z/QiajhJ9wCvAH0kzZI0BLgU+Kakd4ED43xZynN+\npwF/AzoAI+L15e8F9+MP7jnnnEuibEsYzjnnmpYnDOecc4l4wnDOOZeIJwznnHOJeMJwzjmXiCcM\n55xziXjCcC6HpM6SflLL+y83ZTzOlQp/DsO5HLGzx8dj193OuchLGM5VdymwVXz69bLcNyV9Fv+t\nkDRS0gNxIJo78+1M0tlxsKGJ8YlbJK0fB7UZHXuzPSoubyXpL3FgoolxGGPnSkJqY3o7V8IuIAws\ns2sN72cXy3chDOA1B3hZ0j5mlltldQHQ28xWSuoUl10IPGdmp8WR3EZLepbQZ9HmwM5mVimpS7FO\nyrmG8hKGc9XVpbv1181sduz+egKhy+9ck4C7Yxfgq+OyQ4BfSxoPvAC0IySKg4AbMgPbmFnuoD7O\npcZLGM41zIqs16vJ/3/qcGA/4EjgQkmZeyPHmtl72SuGzl+b5fggrhnwEoZz1S0DOhZjR7H7783N\nbCRhAKXOhB5CnwbOzlovU/01AjgjjlmPV0m5UuIJw7kcZraQcD9icr6b3lS9h5HbzDB3vhVwh6RJ\nwDjg6ji29/8BbSRNkvQmcHFc/ybC0KeTJE0ATgKQdLGkIxt0Ys41kDerdc45l4iXMJxzziXiCcM5\n51winjCcc84l4gnDOedcIp4wnHPOJeIJwznnXCKeMJxzziXiCcM551winjCcc84l4gnDOedcIp4w\nnHPOJeIJwznnXCKeMJxzziXiCcM551winjCcc84l4gnDOedcIp4wnHPOJeIJwznnXCKeMJxzziXi\nCcM551winjCcc84l4gnDOedcIp4wnHPOJeIJwznnXCKeMJxzziXiCcM551winjCcc84l4gnDOedc\nIp4wnHPOJeIJwznnXCKeMJxzziXiCcM551winjCcc84l4gnDOedcIp4wnHPOJeIJwznnXCKeMJxz\nziXiCcM551winjCcc84l4gnDOedcIp4wnHPOJeIJwznnXCKeMJxzziXiCcM551winjCcc84l4gnD\nOedcIp4wnHPOJeIJwznnXCKeMJxzziXiCcPVmaQ3Je2Xdhz1Jem7kp5OO45ikvSUpO+lHUexSNpH\n0nuSlkk6Ku14XCAzSzsGVwSSTgbOA/oAy4AJwB/N7OUG7vdfwCwz+22Dg0yBpN7AB0BrM6tM4fiV\n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\nY+pgAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6066d6d210>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "|F(w)|= 2*a/sqrt(a**2+w**2) and\n", + " Theta(w)=0\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange, exp, pi, transpose, mat, fliplr, angle, absolute, shape\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot, xlabel, ylabel, show, title, subplot\n", + "\n", + "#Given:\n", + "# Analog Signal\n", + "A =1 # Amplitude\n", + "Dt = 0.005#\n", + "t = arange(0,Dt+10,Dt)\n", + "xt = exp(-A*t)#\n", + "\n", + "# Continuous time Fourier Transform\n", + "Wmax =2*pi*1# # Analog Frequency = 1Hz\n", + "K = 4#\n", + "k = arange(0,(K/1000)+K, (K/1000))\n", + "W = k* Wmax /K#\n", + "XW = mat(xt)*exp(-1J*transpose(mat(t))*mat(W))*Dt\n", + "XW_Mag =abs(XW)#\n", + "W = -1*fliplr(mat(W))+mat(W)# (2:1001)]# # Omega from -Wmax to Wmax\n", + "XW_Mag=fliplr(XW_Mag )+XW_Mag # (2:1001)]#\n", + "\n", + "\n", + "#[XW_Phase ,db] = phasemag (XW)#\n", + "XW_Phase = angle(XW)\n", + "db=abs(XW)\n", + "XW_Phase = -1*fliplr(XW_Phase)+XW_Phase #(2:1001)]#\n", + "\n", + "\n", + "\n", + "# Plotting Continuous Time Signal\n", + "plot(t,xt)#\n", + "xlabel( 't in sec .')#\n", + "ylabel(' x(t) ')\n", + "title(' Continuous Time Signal ' )\n", + "show()\n", + "\n", + "\n", + "# Plotting Magnitude Response of CTS\n", + "subplot (3 ,1 ,1)#\n", + "i, j = shape(W)\n", + "W1=[]\n", + "XW_Mag1=[]\n", + "for ii in range(0,i):\n", + " for jj in range(0,j):\n", + " W1.append(W[ii,jj])\n", + " XW_Mag1.append(XW_Mag[ii,jj])\n", + " \n", + "plot(W1, XW_Mag1)\n", + "xlabel ( ' Frequency in Radians / Seconds---> W' )#\n", + "ylabel ( ' abs (X(jW) ) ' )\n", + "title ( 'Magnitude Response (CTFT) ' )\n", + "\n", + "\n", + "\n", + "\n", + "# Plotting Phase Reponse of CTS\n", + "subplot (3 ,1 ,3)#\n", + "\n", + "i, j = shape(W)\n", + "W1=[]\n", + "XW_Phase1=[]\n", + "for ii in range(0,i):\n", + " for jj in range(0,j):\n", + " W1.append(W[ii,jj])\n", + " XW_Phase1.append(XW_Phase[ii,jj])\n", + "\n", + "\n", + "plot(W1, [xx*pi/180 for xx in XW_Phase1 ])\n", + "xlabel(' Frequency in Radians / Seconds---> W')#\n", + "ylabel('<X(jW) ')\n", + "title(' Phase Response (CTFT)in Radians' )\n", + "show()\n", + "print '|F(w)|= 1/sqrt(a**2+w**2) and\\n Theta(w)=-atan(w/a)'\n", + "\n", + "#Part b \n", + "# Analog Signal\n", + "\n", + "A=1## Amplitude\n", + "Dt=0.005#\n", + "t1=arange(-4.5,Dt+4.5,Dt)\n", + "xt1=exp(-A*abs(t1))\n", + "# Continuous time Fourier Transform\n", + "Wmax1 =2*pi*1## Analog Frequency = 1Hz\n", + "K=4#\n", + "k=arange(0,(K/1000)+K,(K/1000))\n", + "W1=k*Wmax1/K\n", + "XW1=mat(xt1)*exp(-1J*transpose(mat(t1))*mat(W1))*Dt\n", + "XW1=(XW1).real\n", + "W1=-1*fliplr(mat(W1))+mat(W1) # (2:1001) ]# # Omega from -Wmax to Wmax\n", + "XW1=fliplr(mat(XW1))+mat(XW1) #(2:1001) ]#\n", + "subplot(3 ,1 ,1)#\n", + "plot(t,xt)\n", + "xlabel('t in sec.')#\n", + "ylabel('x(t)')\n", + "title(' Continuous Time Signal')\n", + "subplot(3 ,1 ,3)\n", + "i, j = shape(W1)\n", + "W11=[]\n", + "XW11=[]\n", + "for ii in range(0,i):\n", + " for jj in range(0,j):\n", + " W11.append(W[ii,jj])\n", + " XW11.append(XW_Phase[ii,jj])\n", + "\n", + "plot(W11,XW11)\n", + "xlabel('Frequency in Radians / Seconds W')#\n", + "ylabel('X(jW)')\n", + "title('Continuous time Fourier Transform ')\n", + "show()\n", + "print '|F(w)|= 2*a/sqrt(a**2+w**2) and\\n Theta(w)=0'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example10, page no 38" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a)\n", + "At wo,n=0: The spectral amplitude is: F0= 0.100000 V\n", + "\n", + "b)\n", + "The Fourier tranform of f(t-delta/2) is given as: \n", + "\n", + "f(t)=A*delta/T*∑Sa(n*delta*pi/T)*exp(jwo(t-delta/2))\n" + ] + } + ], + "source": [ + "from numpy import pi,sin\n", + "\n", + "#Given\n", + "#a\n", + "A=1\n", + "delta=1e-3\n", + "T=10e-3\n", + "w0=2*pi/T\n", + "n=0\n", + "for i in range(0,11):\n", + " if n==0:\n", + " Sa=1 \n", + " else :\n", + " Sa=sin(n*pi*delta/T)/(n*pi*delta/T)\n", + " \n", + "\n", + "F=(A*delta/T)*Sa #spectral Amplitude\n", + "print 'a)\\nAt wo,n=0: The spectral amplitude is: F0= %f V\\n'%F\n", + "#b\n", + "# displaying the fourier Transform of the given function\n", + "print 'b)\\nThe Fourier tranform of f(t-delta/2) is given as: '\n", + "print '\\nf(t)=A*delta/T*∑Sa(n*delta*pi/T)*exp(jwo(t-delta/2))'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example11(1), page no 39" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nhM4s987Gks2Bg4Bt0rB9IyT1q8F6QxcwdCistlrnSe4A++4LN9yQdxShK6h6Db5kAFGDrzvffguv\nvOLNCN/7HqyySv22bw8aBN//Phx/fN6RlO+rr2C55Xxg8B498o5mTt99B6NHw8cfQ7dusOqqsGxc\n91Z3yqnBR4IPgN9Cf8stcPnl8MgjsPLKsNRS8PXX8OqrnpB+9jM47DAfZ7QeTJvmzTNPPw19+uQd\nTdvsvz9ssw0cfnjekczy2GNw3nl+T0GvXr5vv/3W3/9FF/WYjzjCPwshf/XSRBPq3EMPwVprwbnn\n+uAU48fDqFHwwAPeze0nn8DFF8Ojj8Iaa8DNN+cdsRs6FFZcsfMld/Bked11eUfhPvrIT1IfdBBs\nvTWMGQMvv+zv/6OP+vs/eLAfeay9NpxyCkyenHfUoSxmluvDQwh5+PRTs4MOMlthBbPbbitvmUcf\nNVtlFbPDDzf77rvqxlfKgQeanXdevjG017ffmi22mNn77+cbx4MPmi2zjNlpp5l9/XXp+T/6yOyA\nA8x69zYbMqT68YWWpdzZan6NJpp2mjEDXnzRa7pjxsAHH3gzxyKLeI3yhz+EddeF+ebLO9LiXnjB\nr+bYfXf4wx/a1uzyxRdw8MFeo7v1Vt/mWvviC+/A6403YMkla7/+Shg40D8jxx2Xz/r//W844QQ/\nkth227Yte999fv5jv/3gzDNhnppccN12H3zgHbyNGuVHIvPOCwss4M2PG2wA66/vzU+dUV000Ujq\nJ+lVSW9IOrna66um6dP9jsmDDvL2yX32gXvugW++8RttNt7YT0aOGuVt1Ysv7oe+d9/t7cX14oYb\nYIcd4KyzvFmmrW3qiyzi7fUrr+zdA3z9dXXibM3gwdDU1HmTO/j18Hk101xzDZx6Kgwb1vbkDj5K\n1XPP+Wd92229madevPMOnH66fz7XWw+uusqnr7WWT+ve3ec57TQ/n7DZZv49eP/9fOOuilJV/I48\ngLmBN4HewLzAC8AaBfNU8SCmMj791Ox3vzNbfnmzTTYxu+gis3feKb3cpElml1xi1revL3vBBX5o\nnpdp08xOPtkPr194oePlTZ/uTTz9+tW+uWarrcxuuaW266y0qVPNevY0e+WV2q73ttvMll7a7KWX\nOl7WtGlmZ5xhttxyZk891fHyOuK558z69zfr0cPs6KP9/xkzWl9myhSze+4xGzjQm8z22svs4YdL\nL1cPKKOJptoJflPgv5n/TwFOKZinqjuhIz76yOzEE/2NP+wws5Ej21/WM8+Y7bKLJ/rLL/fkWEsT\nJ5r96Edm225r9sknlSt36lSzPfYw22ef2m3TW2/5lzjvcwCVcPLJZiecULv1DR1qtuSSZs8+W9ly\nb7vN35OrrqpsueV44w3/DC67rNn555t98037yvnyS7MLLzRbbTWzjTc2u+OO+k709ZDgfwxclvn/\nIOCCgnmquhPa4913zY46yhP7UUf5/5XyxBN+FLDppmYjRlSu3Na89JKfGD3uOE/Ilfbtt2abb272\n299WvuxiTj/d35dG8NprZkstVZsfqzFjvOb+wAPVKb/an7NCkyeb/eY3ZkssYXbWWeWdJC7H9Olm\nN91ktu66ZuutZzZ4cO0rZOWohwS/dzkJ/vTTT5/5GDp0aDX3Savef99r6ost5jX3jz6qznqmTze7\n9FL/Yh91lDflVMutt9amZjVunFmvXv5lqKZp08xWXLHyNdA8bb212Y03VncdX39ttuGGZn/5S3XX\nM2GC2Q47mG23nTdtVsOMGWa33+5NjfvuazZ2bHXXs9FGZmuuaXbzzdVZT7mGDh06W66shwTft6CJ\n5lTg5IJ5qrpT2mLMGK+FVuuDWejTT80GDfLL1K66qrKHg99954f+vXqZPf105cptzbPP+o9JJdr3\nW3LrrX5Oo5HceKPZlltWr/wZM8wGDDDbf//aNDlMnWp2/PFmK61k9uKLlS37rbe8qXO11czuu6+y\nZbdkxgy/JPTvf6/N+spVDwl+HuCtdJJ1vs56krXannrKawlbbNGxdv5mb7zh5e26a2Xb28txzTX+\nxZ44sTrlb7ON2bXXVqfsvEyZ4udmqtVkd9FFZmuvbfbVV9UpvyX//rc3n5x3XsebOL7+2k/mLrGE\n2Z/+lO/FCvUi9wTvMbAT8Fq6mubUIq9XdSd0FtOmmf3jH34C7LDDzN5+u+1lTJ7s7dOLL+4nm/I6\nQXTccWY77VT5dssRI/xEWiOcXC105plmBx9c+XIfe8ybAt98s/Jll+PVV80228wrL6NHt335KVPM\n/vUvb4758Y8rez6ss6uLBF8ygEjws5kwwezXv/YkPWCA2fDhpRPl5Mn+49Crlx+G5/0lmDLFL2Os\n9EnXffYx++tfK1tmvZg0yd/zt96qXJkffuiXL959d+XKbI9p07wW36OH2aGHlnd55rhxZuecY9an\n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\n1P8H1yCRRYSRqj0AAAAASUVORK5CYII=\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6080c29ad0>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "F(w)= A*t*Sa(w*t/2) \n" + ] + } + ], + "source": [ + "from numpy import arange, ones,pi,exp,mat,transpose, shape\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot, xlabel, ylabel, show, title, subplot\n", + "\n", + "#Given\n", + "T = 10# #time Tau\n", + "Tg = arange(-T/2,0.1+T/2,0.1) # time period for given Gate Function -tau/2 to tau/2\n", + "G_t0 = 1# #Magnitude of Gate Function (A)\n", + "G_t = G_t0*ones (len(Tg))## Gate function G(t)\n", + "f = arange(-pi,pi / len(Tg)+pi,pi / len(Tg))\n", + "Dw = 0.1#\n", + "F_jW =mat(G_t)*exp(1J*transpose(mat(Tg))*mat(f))*Dw## fourier Transform of the gate function\n", + "F_jW = (F_jW).real\n", + "# Plotting the Fourier Transform of G(t)\n", + "subplot (2 ,1 ,1)\n", + "plot(Tg,G_t)\n", + "title( ' Given Function (Gate Function) G(t) ' )\n", + "subplot(2 ,1 ,2)\n", + "i,j =shape(mat(f))\n", + "m,n=shape(F_jW)\n", + "f1=[];F_jW1=[]\n", + "for ii in range(0,i):\n", + " for jj in range(0,j):\n", + " f1.append(mat(f)[ii,jj])\n", + "for ii in range(0,m):\n", + " for jj in range(0,n):\n", + " F_jW1.append(F_jW[ii,jj])\n", + " \n", + "\n", + "plot(f1,F_jW1)\n", + "xlabel('Frequency in Radians/Seconds ')#\n", + "title('Continuous time Fourier Transform X(jW)' )\n", + "title ( 'Fourier Transform of G(t)= F(jW) ' )\n", + "show()\n", + "print 'F(w)= A*t*Sa(w*t/2) '" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example11(2), page no 43" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "|F(w)|= 2*pi*A*delta(w), Hence the Fourier Transform of constant is an Impulse Function\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6080c29e50>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange, ones,pi,exp,mat,transpose,pi, fliplr, shape\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot, xlabel, ylabel, show, title, subplot\n", + "\n", + "#Given\n", + "# CTS Signal\n", + "A=2## Amplitude\n", + "Dt=0.01#\n", + "T1=49.5# #Time in seconds\n", + "t=arange(-T1/2,Dt+T1 /2, Dt)\n", + "xt=[]\n", + "for i in range(0,len(t)):\n", + " xt.append(A)\n", + "\n", + "# Continuous time Fourier Transform\n", + "Wmax=2*pi*1## Analog Frequency = 1Hz\n", + "K =4#\n", + "k=arange(0,(K/1000)+K,(K/1000))\n", + "W=k*Wmax/K#\n", + "#xt=transpose(mat(xt))\n", + "XW =(mat(xt)*exp(1J*transpose(mat(t))*mat(W)*Dt))-5#\n", + "\n", + "\n", + "XW_Mag =(XW).real\n", + "W = -1*fliplr(mat(W))+W # (2:1001)]# # Omega from -Wmax to Wmax\n", + "XW_Mag = fliplr(mat(XW_Mag))+XW_Mag #(2:1001)\n", + "subplot(2 ,1 ,1)#\n", + "plot(t,xt)#\n", + "xlabel('t in msec .')#\n", + "title(' Contiuous Time Signal x(t) ')\n", + "subplot(2 ,1 ,2)#\n", + "i,j =shape(mat(W))\n", + "m,n=shape(XW_Mag)\n", + "W1=[];XW_Mag1=[]\n", + "for ii in range(0,i):\n", + " for jj in range(0,j):\n", + " W1.append(mat(W)[ii,jj])\n", + "for ii in range(0,m):\n", + " for jj in range(0,n):\n", + " XW_Mag1.append(XW_Mag[ii,jj])\n", + "\n", + "plot(W1,XW_Mag1)\n", + "xlabel('Frequency in Radians/Seconds ')#\n", + "title('Continuous time Fourier Transform X(jW) = an Impulse Function' )\n", + "print '|F(w)|= 2*pi*A*delta(w), Hence the Fourier Transform of constant is an Impulse Function'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example13, page no 44" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "F(w)= 1/(j*w)+ pi*delta(w)\n" + ] + }, + { + "data": { + "image/png": "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\nQg35f44uyQwHAKflAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6066d01690>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange, ones,pi,exp,mat,transpose,pi, fliplr, shape\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot, xlabel, ylabel, show, title, subplot\n", + "\n", + "\n", + "# CTS Signal\n", + "A =1# # Amplitude\n", + "Dt = 0.005#\n", + "T1 =0.5# #Time in seconds\n", + "t=arange(0,Dt+T1, Dt)\n", + "xt=[]\n", + "for i in range(0,len(t)):\n", + " xt.append(A)\n", + "\n", + "# Continuous time Fourier Transform\n", + "Wmax= 2*pi*1# # Analog Frequency = 1Hz\n", + "K =4#\n", + "k=arange(0,(K/1000)+K,(K/1000))\n", + "W =k*Wmax/K#\n", + "#xt=transpose(mat(xt))\n", + "XW =mat(xt)*exp(-1J*transpose(mat(t))*mat(W))*Dt#\n", + "XW_Mag =(XW).real\n", + "W =-1*fliplr(mat(W))+W #(2:1001)]# # Omega from -Wmax to Wmax\n", + "XW_Mag =fliplr(mat(XW_Mag))+XW_Mag #(2:1001)]\n", + "# displaying the given function\n", + "subplot(2 ,1 ,1)#\n", + "plot(t,xt)#\n", + "xlabel('t in msec .')#\n", + "title(' Contiuous Time Signal x(t) ')\n", + "# displaying the fourier Transform of the given function\n", + "subplot(2 ,1 ,2)#\n", + "print 'F(w)= 1/(j*w)+ pi*delta(w)'\n", + "i,j =shape(mat(W))\n", + "m,n=shape(XW_Mag)\n", + "W1=[];XW_Mag1=[]\n", + "for ii in range(0,i):\n", + " for jj in range(0,j):\n", + " W1.append(mat(W)[ii,jj])\n", + "for ii in range(0,m):\n", + " for jj in range(0,n):\n", + " XW_Mag1.append(XW_Mag[ii,jj])\n", + "\n", + "plot(W1,XW_Mag1)\n", + "\n", + "xlabel('Frequency in Radians / Seconds ')#\n", + "title('Continuous time Fourier Transform X(jW)' )\n", + "show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example14, page no 44" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n+f9guQur8xUbEQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6080bf8a10>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6066d83990>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from numpy import pi,sqrt\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot, xlabel, ylabel, show, title, subplot\n", + "\n", + "# CTS Signal\n", + "# Continuous Time Fourier Transforms of\n", + "# Sinusoidal waveforms(a)sin(Wot)(b)cos(Wot)\n", + "\n", + "# CTFT\n", + "T1 = 2#\n", + "T = 4* T1#\n", + "Wo = 2* pi /T#\n", + "W = [-Wo ,0, Wo ]#\n", + "ak = (2* pi *Wo*T1/ pi )/ 1J#\n", + "XW = [-ak ,0, ak ]#\n", + "ak1 = (2* pi*Wo*T1/pi)#\n", + "XW1 =[ ak1 ,0, ak1 ]#\n", + "#displaying the given function\n", + "plot(W,[aa.imag for aa in XW])\n", + "xlabel('W' )#\n", + "title( 'CTFT of sin(Wot ) ')\n", + "show()\n", + "#displaying the fourier Transform of the given function\n", + "plot(W,XW1)\n", + "xlabel('W' )#\n", + "title( 'CTFT of cos (Wot)')\n", + "show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example16, page no 47" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Spectral Amplitude of the given function is given by \n", + "Fn= A*delta/2 *[Sa(n*pi*delta/T)]\n", + "Therefore the fourier transform will be :\n", + "F[f(t)]=0.628319 ∑Sa[n*pi/10]8delta(w-4*n*pi)\n" + ] + } + ], + "source": [ + "from numpy import pi\n", + "A=1\n", + "delta=50e-3\n", + "T=500e-3\n", + "print 'Spectral Amplitude of the given function is given by '# Displaying the expression for Spectral Amplitude\n", + "print 'Fn= A*delta/2 *[Sa(n*pi*delta/T)]'\n", + "print 'Therefore the fourier transform will be :'\n", + "print 'F[f(t)]=%f ∑Sa[n*pi/10]8delta(w-4*n*pi)'%(2*pi*A*delta/T)# Displaying the Fourier transform" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example17,page no12" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "F[∂t(t)]= 2*pi/T*∑∂(w-wo)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6080bf8910>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from numpy import ones,pi\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot, xlabel, ylabel, show, title, subplot\n", + "\n", + "#Given:\n", + "# CTFT\n", + "T = range(-4,5)##\n", + "T1 = 1# # Sampling Interval\n", + "xt = ones (len(T))#\n", + "ak = 1/ T1#\n", + "XW = 2* pi *ak* ones (len(T))#\n", + "Wo = 2*pi/T1#\n", + "W = [Wo*Tt for Tt in T]#\n", + "# Displaying the given function\n", + "subplot(2 ,1 ,1)\n", + "plot(T,xt)\n", + "xlabel ( 't ' )#\n", + "title('Periodic Impulse Train ')\n", + "# displaying the fourier Transform of the given function\n", + "subplot(2 ,1 ,2)\n", + "plot(W,XW)\n", + "xlabel('t')#\n", + "title ( 'CTFT of Periodic Impulse Train')\n", + "\n", + "print 'F[∂t(t)]= 2*pi/T*∑∂(w-wo)'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example18,page no12" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hence Fourier transform of given Gate function is:\n", + " A*delta*Sa[w*delta/2]/ exp(-j*w*delta/2)\n" + ] + }, + { + "data": { + "image/png": "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\n/w+9sYHJi5vhcwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f6066c6b150>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from __future__ import division\n", + "from numpy import arange, pi,exp,mat, transpose,fliplr,shape\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot, xlabel, ylabel, show, title, subplot\n", + "\n", + "#Given:\n", + "# CTS Signal\n", + "A =1# # Amplitude\n", + "Dt = 0.005#\n", + "T1 = 2# #Time in seconds\n", + "t = arange(0,Dt+T1 /2, Dt)\n", + "xt=[]\n", + "for i in range(0,len(t)):\n", + " xt.append(A)\n", + "\n", + "# Continuous time Fourier Transform\n", + "Wmax= 2*pi*1# # Analog Frequency = 1Hz\n", + "K =4#\n", + "k=arange(0,(K/1000)+K,(K/1000))\n", + "W =k*Wmax/K#\n", + "XW =mat(xt)*exp(-1J*transpose(mat(t))*mat(W))*Dt#\n", + "XW_Mag =(XW).real\n", + "W =-fliplr(mat(W))+W #(2:1001)]# # Omega from Wmax to Wmax\n", + "XW_Mag =fliplr(mat(XW_Mag))+XW_Mag #(2:1001)]#\n", + "# displaying the given function\n", + "subplot(2 ,1 ,1)#\n", + "plot(t,xt)#\n", + "xlabel('t in msec .')#\n", + "title(' Contiuous Time Signal x(t) {Gate Function} ')\n", + "# displaying the fourier Transform of the given function\n", + "subplot(2 ,1 ,2)#\n", + "i,j =shape(mat(W))\n", + "m,n=shape(XW_Mag)\n", + "W1=[];XW_Mag1=[]\n", + "for ii in range(0,i):\n", + " for jj in range(0,j):\n", + " W1.append(mat(W)[ii,jj])\n", + "for ii in range(0,m):\n", + " for jj in range(0,n):\n", + " XW_Mag1.append(XW_Mag[ii,jj])\n", + "\n", + "plot(W1,XW_Mag1)\n", + "\n", + "xlabel('Frequency in Radians / Seconds ')#\n", + "title('Continuous time Fourier Transform X(jW)' )\n", + "print 'Hence Fourier transform of given Gate function is:\\n A*delta*Sa[w*delta/2]/ exp(-j*w*delta/2)'" + ] + } + ], + "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 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter2_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter2_1.ipynb new file mode 100644 index 00000000..8d9af0c5 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter2_1.ipynb @@ -0,0 +1,444 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 2 Switched communication systems" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2.2, page no 125" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "maximum auxillary current is:10.00 mA\n", + "\n", + "MMF in the auxillary winding is:2.00AT \n", + "\n", + "MMF in main winding is:40.00 AT \n", + "\n", + "net MMF required in main winding is:44.00 AT \n", + "\n", + "operating current needed is:4.40 mA \n", + "\n", + "working voltage is:2.84 volts \n", + "\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "#given\n", + "Io=4*10**-3 #rqueired operating current\n", + "N1=10000 #no of turns in the main winding\n", + "R1=645 #resistence of the main winding in ohms\n", + "N2=200 #no of turns in auxillary winding\n", + "B=2 #spacing bias\n", + "Iaux=B/N2 #maximum auxillary current\n", + "print \"maximum auxillary current is:%0.2f mA\\n\"%(Iaux*1e3)\n", + "MMFaux=N2*Iaux #MMF in the auxillary winding\n", + "print \"MMF in the auxillary winding is:%0.2fAT \\n\"%(MMFaux)\n", + "MMFop=Io*N1 #operating MFF in main winding\n", + "print \"MMF in main winding is:%0.2f AT \\n\"%(MMFop)\n", + "MMFnet=MMFop+(0.1*MMFop) #net MMF required in main winding\n", + "print \"net MMF required in main winding is:%0.2f AT \\n\"%(MMFnet)\n", + "Iop=MMFnet/N1 #operating current needed\n", + "print \"operating current needed is:%0.2f mA \\n\"%(Iop*1e3)\n", + "V=Iop*R1 #working voltage in volts\n", + "print \"working voltage is:%0.2f volts \\n\"%(V)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2.3,page no 125" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Busy hour calling rate is:1.20 \n", + "\n", + "Rate of traffic flow is 250.00 traffic unit \n" + ] + } + ], + "source": [ + "#given\n", + "C=6000#Tatol no of call in busy hour\n", + "SC=5000#no of subscribers\n", + "CR=C/SC#busy hour calling rate\n", + "print \"Busy hour calling rate is:%0.2f \\n\"%(CR)\n", + "T=2.5/60#avarage duration of calls in hours\n", + "\n", + "A=C*T#rate of traffic flow\n", + "print \"Rate of traffic flow is %0.2f traffic unit \"%(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2.4,page no 126" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "maxixmum current is 33.33 mamps \n", + "\n", + "operate lag is 1.83 msec \n", + "\n", + "release lag is 2.85 msec \n", + "\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log\n", + "#given\n", + "L=3#relay inductance in henry\n", + "R=1500#relay resistance in ohm\n", + "Io=20e-3#oparating current in amps\n", + "Ir=8e-3#release current in amps\n", + "\n", + "V=50#supply volatage in volts\n", + "Im=V/R#maxixmum current in amps\n", + "print \"maxixmum current is %0.2f mamps \\n\"%(Im*1e3)\n", + "to=(L/R)*log(1/(1-(Io/Im)))#operate lag in sec\n", + "print \"operate lag is %0.2f msec \\n\"%(to*1000)\n", + "tr=(L/R)*log(Im/Ir)#release lag in sec\n", + "print \"release lag is %0.2f msec \\n\"%(tr*1000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2.4.1,page no 126" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(a)\n", + "periods per character is:150.00 msec\n", + "\n", + "period per element is:20.00 msec\n", + "\n", + "speed is:50.00 bauds\n", + "\n", + "\n", + "(b)\n", + "periods per character is:100.00 msec\n", + "\n", + "period per element is:13.33 msec\n", + "\n", + "speed is 75.00 bauds\n", + "\n", + "\n", + "(c)\n", + "periods per character is:100.00 msec\n", + "\n", + "period per element is:10.00 msec\n", + "\n", + "speed is 100.00 bauds\n", + "\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "#given\n", + "#a\n", + "C_S1=20/3#speed in characters per second\n", + "P_C1=1/C_S1#periods per character\n", + "print \"(a)\\nperiods per character is:%0.2f msec\\n\"%(P_C1*1e3)\n", + "E_C1=7.5#elements per character\n", + "P_E1=P_C1/E_C1#period per element\n", + "print \"period per element is:%0.2f msec\\n\"%(P_E1*1e3)\n", + "Sb1=1/P_E1#speed in bauds\n", + "print \"speed is:%0.2f bauds\\n\\n\"%(Sb1)\n", + "#b\n", + "C_S2=10#speed in characters per second\n", + "P_C2=1/C_S2#periods per character\n", + "print \"(b)\\nperiods per character is:%0.2f msec\\n\"%(P_C2*1e3)\n", + "E_C2=7.5#elements per character\n", + "P_E2=P_C2/E_C2#period per element\n", + "print \"period per element is:%0.2f msec\\n\"%(P_E2*1e3)\n", + "Sb2=1/P_E2#speed in bauds\n", + "print \"speed is %0.2f bauds\\n\\n\"%( Sb2)\n", + "#c\n", + "C_S3=10#speed in characters per second\n", + "P_C3=1/C_S3#periods per character\n", + "print \"(c)\\nperiods per character is:%0.2f msec\\n\"%(P_C3*1e3)\n", + "E_C3=10#elements per character\n", + "P_E3=P_C3/E_C3#period per element\n", + "print \"period per element is:%0.2f msec\\n\"%(P_E3*1e3)\n", + "Sb3=1/P_E3#speed in bauds\n", + "print \"speed is %0.2f bauds\\n\"%(Sb3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2.5,page no 127" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total inductance is 0.05 H \n", + "\n", + "maximum current is 10.00 mA \n", + "\n", + "operating current is 5.00 mA \n", + "\n", + "operate lag is 0.35 msec \n", + "\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "#given\n", + "N=1000#no of turns\n", + "L1=5e-8#inductance per turn\n", + "L=N**2*L1#total inductance\n", + "print \"total inductance is %0.2f H \\n\"%(L)\n", + "R=100#resistance of winding in ohm\n", + "MMF=5#operating MMF in amp. turn\n", + "V=1#voltage of received signal in volts\n", + "Im=V/R#maximum current\n", + "print \"maximum current is %0.2f mA \\n\"%(Im*1e3)\n", + "Io=MMF/N#operating current\n", + "print \"operating current is %0.2f mA \\n\"%(Io*1e3)\n", + "to=(L/R)*log(1/(1-(Io/Im)))#operate lag\n", + "print \"operate lag is %0.2f msec \\n\"%(to*1e3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2.6,page no 128" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Busy hour calling rate is:1.60 \n", + "\n", + "Rate of traffic flow is 693.33 traffic unit \n" + ] + } + ], + "source": [ + "#given\n", + "S=10000#no of subscribers\n", + "C=16000#Tatol no of call in busy hour\n", + "CR=C/S#busy hour calling rate\n", + "print \"Busy hour calling rate is:%0.2f \\n\"%(CR)\n", + "T=2.6#avarage duration of calls in min\n", + "\n", + "A=C*(T/60)#rate of traffic flow\n", + "print \"Rate of traffic flow is %0.2f traffic unit \"%(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2.7,page no 135" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "duration of each element is:10.00 msec\n", + "\n", + "speed is 100.00 bauds\n", + "\n", + "total possible combinations are:128.00\n" + ] + } + ], + "source": [ + "#given\n", + "N=7#no of character elements\n", + "E_C=10#elements per character (1+7+1+1)\n", + "To=100e-3#duration of one character\n", + "Te=To/E_C#duration of each element\n", + "print \"duration of each element is:%0.2f msec\\n\"%(Te*1e3)\n", + "Sb=1/Te#speed in bauds\n", + "print \"speed is %0.2f bauds\\n\"%(Sb)\n", + "C=2**N#total possible combinations\n", + "print \"total possible combinations are:%0.2f\"%(C)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2.8,page no 129" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total no of call in busy hour is:1500.00 calls per Hour\n", + "\n", + "Busy hour calling rate is:1.50 \n", + "\n", + "grade of service is: 0.02\n" + ] + } + ], + "source": [ + "#given\n", + "S=1000#no of subscribers\n", + "T=2.4/60#avarage duration of calls in hours\n", + "A=60#rate of traffic flow\n", + "C=A/T#Tatol no of call in busy hour\n", + "print \"Total no of call in busy hour is:%0.2f calls per Hour\\n\"%(C)\n", + "CR=C/S#busy hour calling rate\n", + "print \"Busy hour calling rate is:%0.2f \\n\"%(CR)\n", + "SCL=30#no of call lost per hour\n", + "\n", + "B=SCL/(C+SCL)#grade of service\n", + "print \"grade of service is: %0.2f\"%(B)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2.9,page no 129" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "grade of service is: 2.00e-03\n", + "\n", + "traffic lost is: 1.80e-03\n" + ] + } + ], + "source": [ + "from math import factorial\n", + "#given\n", + "N=5#no of switches\n", + "A=0.9#traffic offered \n", + "#grade of service B=(A**N/N!)/(1+A+A**2/2!+A**3/3!+...+A**N/N!)\n", + "#here\n", + "B=(A**N/factorial(N))/(1+A+(A**2/factorial(2))+(A**3/factorial(3))+(A**4/factorial(4))+(A**5/factorial(5)))\n", + "print \"grade of service is: %0.2e\\n\"%(B)\n", + "Tl=A*B#traffic lost\n", + "print \"traffic lost is: %0.2e\"%(Tl)" + ] + } + ], + "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 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter3_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter3_1.ipynb new file mode 100644 index 00000000..49782c9f --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter3_1.ipynb @@ -0,0 +1,1095 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter No. 3 - Modulation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.1, page no 135" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "percentage modulation is:83.14.2f \n", + " Power after modulation is:13.46.2f watts\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt\n", + "#Given\n", + "Ic=10 #carrier current in Amps\n", + "Imod=11.6# Current after modulation\n", + "Rl=1#Assumed load in ohm\n", + "Pmod=Rl*Imod**2#power before modulation\n", + "Ma= sqrt(2*((Pmod/Ic**2)-1))#percentage modulation\n", + "Pc=10\n", + "Pmod=Pc*(1+(Ma**2/2))#power after modulation\n", + "print 'percentage modulation is:%0.2f.2f \\n Power after modulation is:%0.2f.2f watts'%(Ma*100,Pmod)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.2, page no 135" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Depth of modulation is:0.50.2f\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt\n", + "#Given\n", + "Pc=9e3# Tx Power without modulation\n", + "Pmod=10.125e3#Tx Power after modulation\n", + "Ma= sqrt(2*((Pmod/Pc)-1))#depth of (percentage) modulation\n", + "print 'Depth of modulation is:%0.2f.2f'%(Ma)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.3, page no 136" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The total power radiated is 1320 watts\n" + ] + } + ], + "source": [ + "#Given\n", + "M1=0.2#depth of modulation for first tone\n", + "M2=0.4#depth of modulation for second tone\n", + "Pc=1200#Tx Power\n", + "Pmod=Pc*(1+M1**2/2+M2**2/2)#total power radiated after modulation by both the tones\n", + "print 'The total power radiated is %d watts'%(Pmod)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.4, page no 138" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "modulating power required from the audio source\n", + " is:37.69 watts\n", + " Modulator Impedance is:29850.75 ohm\n", + " Plate dissipation is:96.69 watts\n" + ] + } + ], + "source": [ + "#Given\n", + "Ebb=2e3#DC plate supply\n", + "Ecc=-500#DC grid bias\n", + "Ib=67e-3#DC plate current\n", + "Ic=30e-3#DC grid current\n", + "Egm=750#RF peak grid voltage\n", + "Pout=75#RF Power output\n", + "Ma=0.75#Depth of modulation\n", + "Paf=(Ma**2*Ebb*Ib)/(2*1)#modulating power required from the audio source\n", + "Pdc=Ebb*Ib#Power supplied by DC source\n", + "Zm=Ebb**2/Pdc#Modulator Impedance\n", + "\n", + "Pd=Pdc+Paf-Pout#Plate dissipation\n", + "print 'modulating power required from the audio source\\n is:%0.2f watts\\n Modulator Impedance is:%0.2f ohm\\n Plate dissipation is:%0.2f watts'%(Paf,Zm,Pd)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.5b, page no 139" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tx power:1200.00 Watts\n", + " Power dissipation at the modulator is: 3000.00 Watts\n", + " Overall Efficiency at0.6 modulation is:41.16% \n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt\n", + "#Given\n", + "Pd=944#Anode dissipation of the class C amplifier in watts\n", + "Ma=0.6#modulation depth,\n", + "Etta=0.6#efficiency\n", + "Pout=(Etta*Pd/(1-Etta))#power dissipation at 60% modulation\n", + "Pc=Pout/(1+(Ma**2/2))#Tx power\n", + "Psb=Pout-Pc\n", + "Pdc1=Pc/Etta#DC power inputto PA\n", + "Paf=Psb/Etta# modulation power input to PA\n", + "Eff=0.25# efficiency of the modulator\n", + "Pdc2=Paf/Eff#DC power input to modulator\n", + "Pdct=Pdc1+Pdc2#Total DC power to the system\n", + "Effo=Pout/Pdct#Overall Efficiency\n", + "Ma=1# 100% modulation\n", + "Pt=Pc*(1+(Ma**2)/2)\n", + "Psb=(Pc*Ma**2)/2\n", + "Paf=Psb/Etta#modulating input power to PA\n", + "Pdc2=Paf/Eff# DC power input to modulator\n", + "Pd=Pdc2-Paf#Power dissipation at the modulator\n", + "Effo1=Pout/(Pdc1+Pdc2)#Overall Efficiency\n", + "print 'Tx power:%0.2f Watts\\n Power dissipation at the modulator is: %0.2f Watts\\n Overall Efficiency at0.6 modulation is:%0.2f%c '%(Pc,Pd,100*Effo,'%')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.6, page no 141" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Carrier Power is: 1133.33 watts \n", + " DC plate dissipation is: 266.67 watts\n", + " output power of modulator is: 700.00 watts\n", + " Plate dissipation inthe modulator is:466.67 watts\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt#Given\n", + "Pdc=1400#DC power i/p to PA under 100% modulation\n", + "Ptdc=400#Plate dissipation\n", + "Pd=Ptdc*(2/3)#DC plate dissipation\n", + "\n", + "Pdmod=Ptdc*(1/3)#\n", + "Pc=Pdc-Pd#Carrier Power\n", + "\n", + "Psb=Pc/2#side band power\n", + "Paf=Psb+Pdmod#output power of modulator\n", + "\n", + "Mod_Eff=0.6\n", + "Pdc2=Paf/Mod_Eff#DC i/p power to the modulator\n", + "Pd_AF=Pdc2-Paf#Plate dissipation inthe modulator\n", + "print 'Carrier Power is: %0.2f watts \\n DC plate dissipation is: %0.2f watts\\n output power of modulator is: %0.2f watts\\n Plate dissipation inthe modulator is:%0.2f watts'%(Pc,Pd,Paf,Pd_AF)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.7, page no 141" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Maximum carrier power is: 750 watts\n", + " Total RF power is: 1125 watts\n" + ] + } + ], + "source": [ + "#Given\n", + "Paf=500#Modulator output power\n", + "Eff=0.75#Efficiency of the amplifier\n", + "P_lost=Paf*(1-Eff)#modulating power lost in the amplifier\n", + "Psb=Paf*Eff#side band power\n", + "\n", + "m=1\n", + "Pc=2*Psb\n", + "\n", + "Pt=Pc+Psb#Total RF power\n", + "print 'Maximum carrier power is: %d watts\\n Total RF power is: %d watts'%(Pc,Pt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.8, page no 143" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Carrier power is: 2100 watts\n", + " Maximum depth of modulation is: 92.58\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt#Given\n", + "Po=3000# Rating of Power Amplifier\n", + "Pr=750#Push-Pull amplifier rated as\n", + "Paf=2*Pr#Rated power output from Push-Pull modulator\n", + "Eff=0.6\n", + "P_lost=Paf-(Eff*Paf)#Modulation power lost\n", + "Psb=Paf-P_lost#side band power\n", + "\n", + "Pc=Po-Psb#Carrier power\n", + "Ma=sqrt(2*Psb/Pc)*100#Maximum depth of modulation\n", + "print 'Carrier power is: %d watts\\n Maximum depth of modulation is: %0.2f'%(Pc,Ma)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.9, page 143" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Carrier freq is: 10 MHz\n", + "Modulating freq is:500 Hz\n", + "Carrier power is: 208.00 watts\n", + "Mean output power is: 224.64 watts\n", + "Peak output power is: 408.33 watts\n" + ] + } + ], + "source": [ + "from numpy import arange, pi\n", + "#Given\n", + "t=arange(0,10,0.001)\n", + "#e=500*(1+(0.4*sin(3140*t)))*sin(6.28e7*t)\n", + "#a\n", + "wc=6.28e7#Carrier angular frequency\n", + "fc=wc/(2*pi)# Carrier freq\n", + "#b\n", + "wm=3140#Modulating angular freq\n", + "fm=wm/(2*pi)#Modulating freq\n", + "#c\n", + "Ec=500#/peak carrier voltage\n", + "Pc=(Ec**2)/(2*600)#Carrier power\n", + "#d\n", + "Ma=0.4\n", + "Pt=Pc*(1+(Ma**2 / 2))#Mean output power\n", + "#e\n", + "Rl=600#load resistance\n", + "Ecp=Ec+(Ma*Ec)#Peak output voltage\n", + "Ptm=Ecp**2/(2*Rl)#Peak power\n", + "print 'Carrier freq is: %d MHz\\nModulating freq is:%d Hz\\nCarrier power is: %0.2f watts\\nMean output power is: %0.2f watts\\nPeak output power is: %0.2f watts'%(round(fc*1e-6),round(fm),Pc,Pt,Ptm)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.10, page no 143" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Antenna current for full modulation is: 45.64 amp\n", + "Peak base voltage is: 5672.55/_48 volts\n", + "Peak base voltage is: 4254.41/_48 volts\n" + ] + } + ], + "source": [ + "from math import atan,sqrt\n", + "from cmath import polar\n", + "#Given\n", + "#b\n", + "Pc=50e3#Carrier power\n", + "Z=36 + 1J*40#base impedance of the antenna\n", + "Ma=1#modulation depth\n", + "Pmod=Pc*(1+((Ma**2)/2))#power delivered to the antenna under 100% modulation\n", + "#i\n", + "R=36#resistance of the antenna \n", + "Irms=sqrt(Pmod/R)#Antenna Current\n", + "\n", + "#ii\n", + "Ic=sqrt(Pc/R)#RMS carrier current \n", + "\n", + "Icm=Ic*sqrt(2)# Peak carrier current \n", + "Imod=2*Icm#Modulated current\n", + "\n", + "Theta=atan(40/36)*180/pi# from real and imaginary components of Z\n", + "Vbm100=Imod*Z#Peak base output voltage for 100% modulation\n", + "[Re_Vb,Im_Vb]=polar(Vbm100)\n", + "\n", + "#iii\n", + "Ma=0.5\n", + "Imod=Icm*(1+0.5)\n", + "\n", + "Vbm50=Imod*Z\n", + "[Re_Vb1,Im_Vb1]=polar(Vbm50)\n", + "print 'Antenna current for full modulation is: %0.2f amp\\nPeak base voltage is: %0.2f/_%d volts\\nPeak base voltage is: %0.2f/_%d volts'%(Irms,Re_Vb,Theta,Re_Vb1,Theta)\n", + "# The Ans is little deviated from that of book as the decimal places considered while calculating at different stages might be different \n", + "\n", + "#Answers from the book are little deviated but the evaluated values in the scilab are correct results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.11, page no 144" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "USB freq=10005 k5Hz\n", + "USB amplitude=2.50 V\n", + "LSB freq=9995 kHz\n", + "LSB amplitude=2.50 V\n", + "Carrier amplitude=10 V\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7fac3ffd5150>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from math import sin\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot, subplot, title, xlabel, ylabel, show\n", + "# Given\n", + "def f(x):\n", + " y=[]\n", + " for xx in x:\n", + " y.append(Ec*(1+ma*(sin(wm*xx)))*sin(wc*xx))\n", + " return y\n", + "Ec=10\n", + "ma=0.5\n", + "wm=10000*pi\n", + "wc=2*pi*1e7\n", + "x=arange(0,20*pi/10,.01)\n", + "subplot(2,1,1)\n", + "plot(x,f(x))\n", + "xlabel(\"t\")\n", + "ylabel(\"Modulated Wave\")\n", + "Fc=wc/(2*pi)\n", + "Fm=wm/(2*pi)\n", + "Fusb=(wm+wc)/(2*pi)\n", + "Flsb=(wm-wc)/(2*pi)\n", + "print 'USB freq=%d k5Hz\\nUSB amplitude=%0.2f V\\nLSB freq=%d kHz\\nLSB amplitude=%0.2f V\\nCarrier amplitude=%d V'%(Fusb*1e-3,2.5,Flsb*-1e-3,2.5,10)\n", + "F=[0,2.5,10,2.5,0]\n", + "T=[-2,-1,0,1,2]\n", + "subplot(2,1,2)\n", + "plot(T,F)\n", + "xlabel(\"Freq\")\n", + "ylabel(\"Amplitude\")\n", + "show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.12 page no 145" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The depth of modulation is: 50%\n" + ] + } + ], + "source": [ + "from math import sqrt\n", + "#Given\n", + "Pc=9e3#unmodulated carrier power\n", + "Pt=10.125e3#Modulated carrier power\n", + "Ma=sqrt(2*((Pt/Pc)-1))#depth of modulation\n", + "print 'The depth of modulation is: %d%c'%(Ma*100,'%')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.13 page no 148" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The power output is: 34.45 W\n" + ] + } + ], + "source": [ + "#Given\n", + "Pt=5e3#carrier power for 95% modulation\n", + "Ma=0.95\n", + "Pc=Pt/(1+((Ma**2)/2))#carrier power\n", + "Ma=0.2#average modulation by speech signal\n", + "Psb=(Ma**2)*Pc/2#the power n the sideband\n", + "Pout=Psb/2# because one of the side band is suppressed\n", + "print 'The power output is: %0.2f W'%(Pout)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.14 page no 152" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "DeltaPhi1= 10 rad\n", + "DeltaPhi2=500 rad\n", + "\n" + ] + } + ], + "source": [ + "#Given\n", + "#Phi=(wc*t+Mf*sin(wmt))....instantaneous phase of FM\n", + "fm=5000#modulating freq\n", + "deltaf=50e3#freq deviation\n", + "deltaPhi1=deltaf/fm# Advance or retard in phase\n", + "\n", + "fm=100#modulating freq in second signal\n", + "deltaPhi2=deltaf/fm\n", + "print 'DeltaPhi1= %d rad\\nDeltaPhi2=%d rad\\n'%(deltaPhi1,deltaPhi2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.14 page no 157" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Peak Phase Deviation: 0.76 rad\n", + "Peak Freq Deviation: 761 Hz\n", + "Depth of residual AM: 0.08\n", + "Residual AM freq:2 kHz\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt,atan\n", + "#Given\n", + "#e=Ec(1+0.4cos(2pie3*t))*sin(2pie7*t)\n", + "fm=1000#modulating s/g freq\n", + "deltaTheta=2*atan(0.4)#peak phase deviation\n", + "\n", + "deltaF=deltaTheta*fm#Peak freq deviation\n", + "\n", + "Ec=1\n", + "Er=sqrt((Ec**2)*(1+(0.4**2)))\n", + "m=(Er-Ec)/Ec#depth of residual AM \n", + "\n", + "AMFr=2*fm# freq ofresidual AM\n", + "print 'Peak Phase Deviation: %0.2f rad\\nPeak Freq Deviation: %d Hz\\nDepth of residual AM: %0.2f\\nResidual AM freq:%d kHz'%(deltaTheta,deltaF,(round(m*100)/100),AMFr*1e-3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.16 page no 170" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a)\n", + "Max phase deviation is:250 rad\n", + "b)\n", + "Max phase deviation is:2.50 rad\n" + ] + } + ], + "source": [ + "#Given\n", + "deltaF=25e3#freq deviation\n", + "#a\n", + "fm=100#modulation signal freq\n", + "mf=deltaF/fm# Max phase deviation\n", + "print 'a)'\n", + "print 'Max phase deviation is:%d rad'%(mf)\n", + "#b\n", + "fm=10e3#modulation signal freq\n", + "mf=deltaF/fm#Max phase deviation\n", + "\n", + "print 'b)'\n", + "print 'Max phase deviation is:%0.2f rad'%(mf)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.17, page no 171" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The maximum freq deviation is: 5 kHz\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt\n", + "#Given\n", + "gm=0.1e-3# trans-conductance variation A/V\n", + "C=0.5e-12# capactance between anode and grid\n", + "R=1e3# resistance\n", + "fo=10e6# oscillator freq\n", + "Vrms=1.414#AF RMS voltage \n", + "Vp=sqrt(2)*Vrms#Peak voltage\n", + "Ct=100e-12#tank capacitance\n", + "deltaC=gm*C*R*Vp\n", + "\n", + "deltaF=fo*(deltaC/(2*Ct))# maximum freq deviation\n", + "print 'The maximum freq deviation is: %d kHz'%(round(deltaF/1000))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.18, page no 172" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The approximate bandwidth is: 2 MHz\n" + ] + } + ], + "source": [ + "#Given\n", + "deltaF=1e6# max freq deviation\n", + "fm=10e3#modulating freq\n", + "mf=(2*deltaF)/fm# modulation coefficient\n", + "BW=mf*fm# bandwidth\n", + "print 'The approximate bandwidth is: %d MHz'%(BW/1e6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.19, page no 172" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The approximate bandwidth is: 150 kHz\n" + ] + } + ], + "source": [ + "#Given\n", + "deltaF=75e3# max freq deviation\n", + "fm=15e3#modulation freq\n", + "mf=(2*deltaF)/fm# freq modulation depth\n", + "BW=mf*fm# Bandwidth\n", + "print 'The approximate bandwidth is: %d kHz'%(BW/1e3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.21, page no 173" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overall bandwidth including guard band is 200 kHz\n" + ] + } + ], + "source": [ + "#Given\n", + "deltaF=75e3#freq deviation\n", + "fm=15e3# modulating freq\n", + "mf=deltaF/fm\n", + "BW=2*mf*fm# Bandwidth\n", + "GB=25e3#Guard Band\n", + "BWo=BW+(2*GB)# Overall bandwidth\n", + "print 'Overall bandwidth including guard band is %d kHz'%(BWo/1e3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.25, pageno 175" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average power is: 25.17 watts\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<matplotlib.figure.Figure at 0x7f9d76e23e90>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from math import sin\n", + "%matplotlib inline\n", + "from matplotlib.pyplot import plot, subplot, title, xlabel, ylabel, show\n", + "#Given\n", + "#em=3sin(2*pi*1000t)+5cos(2*pi*3000t)\n", + "#ec=50sin(2*pi*500e3*t)\n", + "m1=0.06#(sine wave amplitude/ peak carrier voltage)\n", + "m2=0.1#(cosine wave amplitude/ peak carrier voltage)\n", + "Vc=50#Carrier voltage\n", + "R=50#load resistance\n", + "Pc=(Vc**2)/(2*R)#Peak carrier power\n", + "Pt=Pc*(1+((m1**2+m2**2)/2))#Total power after modulation\n", + "print 'Average power is: %0.2f watts'%(Pt)\n", + "F=[0,2.5,1.5,50,1.5,2.5,0]\n", + "T=[490,497,499,500,501,503,510]\n", + "plot(T,F)\n", + "xlabel(\"Freq\")\n", + "ylabel(\"Amplitude\")\n", + "show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.26, page no 176" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Required Deviation is: 50 kHz\n", + "\n", + "Required Multipication Factor is: 5*5*5*5*2\n" + ] + } + ], + "source": [ + "#Given\n", + "mp=0.1#Modulating index\n", + "fm=400#Modulating signal freq\n", + "deltaF=mp*fm#Max freq deviation\n", + "#print deltaF)\n", + "ReqDev=50e3# Required deviation\n", + "MF=ReqDev/deltaF# multiplication factor\n", + "print 'Required Deviation is: %d kHz\\n'%(ReqDev/1e3)\n", + "print 'Required Multipication Factor is: 5*5*5*5*2'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.27, page no 176" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Depth of modulation across the \n", + " circuit is : Ma= 49.07%\n" + ] + } + ], + "source": [ + "#Given\n", + "Q=100 #Q factor\n", + "fc=1000e3# Carrier freq\n", + "fsb1=999e3#lower Side band freq\n", + "fsb2=1001e3#Upper side Band freq\n", + "ma=0.5#Modulation depth of signal current\n", + "Ma=ma/1.019# Expression for Ma after simplification\n", + "print 'The Depth of modulation across the \\n circuit is : Ma= %0.2f%c'%(Ma*100,'%')\n", + "\n", + "# Note : There are some calculation errors in the solution presented in the book" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.28, page no 177" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Depth of modulation:72.90 %\n" + ] + } + ], + "source": [ + "#Given\n", + "R=1#Antenna Resistance assumed to be 1 ohm for ease of calculation\n", + "Ic=10.8# current with no modulation\n", + "Pc=Ic**2*R#power with no modulation\n", + "It=12.15#modulated current\n", + "Pt=It**2*R# modulated power\n", + "ma=(sqrt(2*(((It/Ic)**2)-1)))#modulation depth)\n", + "\n", + "print 'Depth of modulation:%0.2f %c'%(round(1000*ma)/10,'%')#" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.29, page no 177" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total RF power delivered is:Pt= 112.50 kW\n" + ] + } + ], + "source": [ + "#Given\n", + "Pc=100e3#Carrier power\n", + "ma=0.5#Depth of modulation\n", + "Pt=Pc*(1+((ma**2)/2))#total RF power\n", + "print 'Total RF power delivered is:Pt= %0.2f kW'%(Pt/1e3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.30, page no 178" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Carrier power:71.17 kW\n", + "The Intelligence power: 28.83 kW\n" + ] + } + ], + "source": [ + "#Given\n", + "Pt=100e3# Total power\n", + "ma=0.9#Depth of modulation\n", + "Pc=Pt/(1+((ma**2)/2))#Carrier power\n", + "Psb=Pt-Pc# Intelligence power i.e sideband power\n", + "print 'Carrier power:%0.2f kW\\nThe Intelligence power: %0.2f kW'%(Pc/1000,Psb/1000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example3.19, page no 178" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Modulation Index is: 64.81 \n" + ] + } + ], + "source": [ + "from math import sin,sqrt\n", + "#Given\n", + "R=1# load resistance\n", + "Eo=100#RF voltage\n", + "Po=Eo**2/R#Carrier power\n", + "E=110#Modulated RMS voltage\n", + "Pt=E**2/R#Total modulated power\n", + "ma=sqrt(2*((Pt/Po)-1))# Depth of modulation\n", + "print 'Modulation Index is: %0.2f '%(ma*100)" + ] + } + ], + "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 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter5_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter5_1.ipynb new file mode 100644 index 00000000..e234ad9f --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter5_1.ipynb @@ -0,0 +1,69 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 5 : Radio Transmission system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 5.1, page no 230" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Freq deviation is 17.453293 Hz\n", + " Multification factor is 1718\n", + " corresponding modified max freq deviation is 30114kHz\n" + ] + } + ], + "source": [ + "from numpy import pi\n", + "#Given\n", + "#b\n", + "fm=1e2#modulation freq\n", + "Phimax=10*pi/180# Max Phase deviation\n", + "#i\n", + "Freq_dev=Phimax*fm# Freq deviation\n", + "#ii\n", + "Mul_fact=30e3/Freq_dev# Multification factor\n", + "print ' Freq deviation is %f Hz\\n Multification factor is %d\\n corresponding modified max freq deviation is 30114kHz'%(Freq_dev,Mul_fact)\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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter6_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter6_1.ipynb new file mode 100644 index 00000000..c82ada44 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter6_1.ipynb @@ -0,0 +1,104 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 6 : Radio Receivers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 6.1, page no 262" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Carrier freq for the BW to be 1% of fc is: 2000 kHz\n" + ] + } + ], + "source": [ + "#Given\n", + "#Vm(t),Vc(t),Vmod(t)\n", + "fm=10e3#modulating freq\n", + "BW=2*fm# Bandwidth\n", + "fc=100*BW#Carrier freq\n", + "print'Carrier freq for the BW to be 1%% of fc is: %d kHz'%(fc/1000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example6.2, page no 262" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a)\n", + "Tuning capacitor range is: 4.579156\n", + "b)\n", + "Tuning capacitor range is: 1051\n" + ] + } + ], + "source": [ + "#Given\n", + "fmax=1600e3\n", + "fmin=500e3\n", + "IF=465e3\n", + "#i\n", + "fo1max=fmax+IF\n", + "fo1min=fmin+IF\n", + "C1max_C1min=(fo1max/fo1min)**2\n", + "#ii\n", + "fo2max=fmax-IF\n", + "fo2min=fmin-IF\n", + "C2max_C2min=(fo2max/fo2min)**2\n", + "print 'a)\\nTuning capacitor range is: %f\\nb)\\nTuning capacitor range is: %d'%(C1max_C1min,C2max_C2min)\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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter7_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter7_1.ipynb new file mode 100644 index 00000000..ee96e59f --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter7_1.ipynb @@ -0,0 +1,438 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 7 : Noise" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.2, page no 276" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The mean square noise voltage is: 18.363 mV\n" + ] + } + ], + "source": [ + "from numpy import sqrt,pi\n", + "from sympy.mpmath import quad\n", + "#Given\n", + "mue=25#\n", + "rp=5e3\n", + "Rl=10e3\n", + "C=1e-9\n", + "gm=mue/rp\n", + "Req=2.5/gm\n", + "\n", + "k=1.381e-23\n", + "T=293\n", + "R1=1e5\n", + "# Power density spectrum for respective res\n", + "d1=2*k*T*R1\n", + "d2=2*k*T*Req\n", + "d3=2*k*T*Rl\n", + "xo=0\n", + "x1=1e14\n", + "#w=0:inf\n", + "#H1(w)=(-gm*rp*Rl)/(rp+Rl+(1J*w*rp*Rl*C))\n", + "Vo=sqrt((20231.65e2/pi)*quad(lambda w:1/(((3e9)**2)+(w**2)),[xo,x1]))\n", + "print 'The mean square noise voltage is: %0.3f mV'%(Vo*1e3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.3, page no 279" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The mean square noise voltage is: 22.414 uV\n" + ] + } + ], + "source": [ + "from numpy import sqrt,pi\n", + "from sympy.mpmath import quad\n", + "\n", + "#Given\n", + "mue=25\n", + "rp=5e3\n", + "Rs=1e3#input resistance\n", + "#Coupling Capacitors are assumed as short circuit\n", + "Rg=1e5\n", + "gm=25/5e3\n", + "Req=2.5/gm\n", + "F=1+((((Req*(Rs+Rg)**2)+(Rg*Rs**2))/(Rs*Rg**2)))\n", + "xo=0\n", + "x1=1e10\n", + "#w=0:inf\n", + "\n", + "vo=sqrt((30145e-8/pi)*quad(lambda w:1/(((3e5)**2)+(w**2)),[xo,x1]))\n", + "print 'The mean square noise voltage is: %.3f uV'%(vo*1e6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.4, page no 283" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "overall noise Figure is: 4.33\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "#Given\n", + "Ap1=10\n", + "Ap2=10\n", + "Ap3=10# # Gain of each states\n", + "F_1=6\n", + "F_2=6\n", + "F_3=6# #Noise figure of each state\n", + "F1= round(10**(F_1/10))\n", + "F2= round(10**(F_2/10))\n", + "F3= round(10**(F_3/10))# # approximating the values\n", + "\n", + "F=F1+((F2-1)/Ap1)+((F3-1)/(Ap1*Ap2))\n", + "print 'overall noise Figure is: %.2f'%(F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.5, page no 283" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The overall noise figure is: 7.04\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "#Given\n", + "Fif=15# Noise figure of IF amplifier\n", + "Ap1=10# Gain of Preamplifier\n", + "Fpa=6#Noise figure of preamplifier\n", + "F2=10**(Fif/10)\n", + "F1=10**(Fpa/10)\n", + "\n", + "F=F1+((F2-1)/Ap1)#overall noise figure\n", + "print 'The overall noise figure is: %.2f'%(F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.6, page no 284" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overall Noise figure is: 2.055\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "#Given\n", + "mue=25# tube parameters\n", + "rp=10e3# tube parameters\n", + "gm=2.5e-3# transconductance\n", + "Req=2.5/gm# equivalent resistance\n", + "Rs=1000\n", + "Rg=1e5\n", + "F1=1+(((Req*((Rs+Rg)**2))+Rg*Rs**2)/(Rs*(Rg**2)))#noise figure of the first stage\n", + "Rg2=9.1e3\n", + "Rs2=10e3\n", + "Es=1# assuming Es=1 for ease of calculation\n", + "Pi=((Es/2e3)**2)*1e3\n", + "Po=1.532e-2*Es**2\n", + "Ap1=Po/Pi\n", + "F2=1+(((Req*((Rs2+Rg2)**2))+Rg2*Rs2**2)/(Rs2*(Rg2**2)))# noise figure of the second stage\n", + "F=(F1)+((F2-1)/Ap1)\n", + "print 'Overall Noise figure is: %.3f'%(F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.8, page no 285" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The equivalent noise temp is: 4.913 K\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "#Given\n", + "g01=30# gain of 1st stage\n", + "g02=20#gain of 2nd stage\n", + "g03=40#gain of 3rd stage\n", + "F2=6# Noise factor of stage 2\n", + "F3=12# Noise factor of stage 3\n", + "Te1=4# Eq noise temp of stage 1\n", + "T=290# Room \n", + "G01=round(10**(g01/10))\n", + "G02=round(10**(g02/10))\n", + "G03=round(10**(g03/10))\n", + "F_2=round(10**(F2/10))\n", + "F_3=round(10**(F3/10))\n", + "Te2=round((F_2-1))*T\n", + "Te3=round((F_3-1))*T\n", + "Te=Te1+(Te2/G01)+(Te3/(G01*G02))# Eq overall noise temp\n", + "print 'The equivalent noise temp is: %.3f K'%(Te)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.9, page no 286" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Equivalent noise temperature is 7.028 K\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "#Given\n", + "g01=round(10**(25/10))#low noise amplifier gain\n", + "Te1=4#low noise amplifier noise temp\n", + "g02=round(10**(1.7))#preamplifier gain\n", + "F2=round(10**0.6)#preamplifier noise figure\n", + "F3=round(10**1.2)#preamplifier noise figure\n", + "T=290# room temp\n", + "Te2=round((F2-1)*T)\n", + "Te3=round((F3-1)*T)\n", + "Te=Te1+(Te2/g01)+(Te3/(g01*g02))#Overall noise Temperature\n", + "print 'Equivalent noise temperature is %.3f K'%(Te)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.10, page no 286" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "S/N ratio for FM is 43.29 dBs\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log10\n", + "#Given\n", + "SNRam=25# Signal to noise ratio of AM\n", + "PcFM_AM=0.9#\n", + "mf=5\n", + "SNRfm=(10*log10(3*(mf**2)*(PcFM_AM)))+SNRam\n", + "print 'S/N ratio for FM is %.2f dBs'%(SNRfm)\n", + "# Note : There are some calculation errors in the solution presented in the book" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.11, page no 287" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a)\n", + " New SNR for 3dB increase in input s/g is 23 dBs\n", + "b) When Modulation depth is increased to 60%\n", + " SNR becomes 25.676045 dBs\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log10\n", + "#Given\n", + "ma=0.3\n", + "SNR=20# s/n ratio\n", + "SNR1=10**(0.1*SNR)\n", + "SNR_new=SNR+3\n", + "ma2=0.6# increased new depth of modulation\n", + "Pt_Ni=SNR1*((1+(ma**2))/(ma**2))\n", + "SNR2=10*log10(Pt_Ni*((ma2**2)/(1+((ma2**2)/2))))\n", + "\n", + "print 'a)\\n New SNR for 3dB increase in input s/g is %d dBs\\nb) When Modulation depth is increased to 60%%\\n SNR becomes %f dBs'%(SNR_new,(SNR2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example7.12, page no 287" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a) Bit Transmission rate: 60 kbits/s\n", + " Signal to Quantization noise ratio 128 \n", + "b)\n", + " Bit Transmission rate: 5 kbits/sample\n", + " Signal to Quantization noise ratio: 64\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log\n", + "#Given\n", + "fmax=5e3#max s/g freq\n", + "S_fmin=2*fmax# Min sampling freq\n", + "B_S=6#Binary bits sent per sample\n", + "BTR=B_S*S_fmin#Bit Transmission rate\n", + "Q=2**B_S#No of Quantizable levels\n", + "MQN=0.5/Q#Max Quantization noise\n", + "S_QNR=MQN**-1# Signal to Quantization noise ratio\n", + "#b\n", + "S_QNRreq=0.5*S_QNR# Signal to Quantization noise ratio\n", + "Qreq=0.5*S_QNRreq#No of Quantizable levels\n", + "B_Sreq=log(Qreq,2)#Binary bits sent per sample\n", + "print 'a) Bit Transmission rate: %d kbits/s\\n Signal to Quantization noise ratio %d \\nb)\\n Bit Transmission rate: %d kbits/sample\\n Signal to Quantization noise ratio: %d'%(BTR/1000,S_QNR,B_Sreq,S_QNRreq)" + ] + } + ], + "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 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter8_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter8_1.ipynb new file mode 100644 index 00000000..3631a473 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter8_1.ipynb @@ -0,0 +1,779 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter No 8 - Transmission Line" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.1, page no 313" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The characteristic Impedance is Zo= 154.92 ohm\n", + "\n", + "Propagation constant is Gama=0.0+7.75e-06j W\n", + "\n", + " The freq at which the line length is equal to wavelength is: 750 KHz\n", + " The velocity of propagation is: 322.75 km/sec\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt, pi\n", + "#Given\n", + "#a\n", + "L=1.2*10**-3#distributed inductance\n", + "C=0.05*10**-6#distributed capacitance\n", + "Zo=sqrt(L/C)#Characteristic Impedance\n", + "print 'The characteristic Impedance is Zo= %0.2f ohm'%(Zo)\n", + "Wo=1# Assumedfor ease of calculation \n", + "G=1J*sqrt(L*C)*Wo\n", + "print '\\nPropagation constant is Gama={0:0.1f}+{1:0.2e}j W'.format(G.real,G.imag)\n", + "#b\n", + "#i\n", + "lamda=0.4e3#wavelength=Line length\n", + "c=3e8\n", + "f=c/lamda\n", + "#ii\n", + "L=L*0.4\n", + "C=C*0.4\n", + "v=1/(sqrt(L*C))\n", + "print '\\n The freq at which the line length is equal to wavelength is: %d KHz\\n The velocity of propagation is: %0.2f km/sec'%(f*1e-3,v*1e-3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.2, page no 314" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The phase shift is: 144 degrees\n", + "Open Circuited line impedance: -688.19 ohms\n", + "Short Circuited line impedance: -363.27 ohms\n" + ] + } + ], + "source": [ + "from math import cos, sin, tan,pi\n", + "#Given\n", + "v=3e8# velocty of light\n", + "f=1.2e6# Operating Freq\n", + "lamda=v/f\n", + "#print lamda)\n", + "l=100# length of the Tx-Line\n", + "phi=2*(pi*l)/(lamda)# Phase shift in degrees\n", + "Zo=500# Characteristic impedance\n", + "#a Open circuited Line\n", + "\n", + "Zin=-1J*Zo*(cos(phi)/sin(phi))\n", + "\n", + "#b Short circuited Line\n", + "Z1in=1J*Zo*tan(phi)\n", + "print 'The phase shift is: %d degrees'%(phi*180/pi)\n", + "print 'Open Circuited line impedance: {0:0.2f}'.format(-Zin.imag),'ohms'\n", + "print 'Short Circuited line impedance: {0:.2f}'.format(Z1in.imag),'ohms'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.3, page no 315" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Characteristic impedance:Zo= \n", + "(185.464726748-135.988363959j)\n", + "The value of Alpha=0.263 nepere/km\n", + "\n", + "The value of Beta= 0.308\n", + "the tx-Line parameters are\n", + "R= 90.72 ohms\n", + "L= 21.46 mH\n", + "G= 128.80 umhos\n", + "C= 1.76 mF\n", + "\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from cmath import exp,sqrt,log,atan\n", + "#Given\n", + "f=1600\n", + "w=1000\n", + "Zoc=2460*exp(1J*-86.5*pi/180)# Open circuited Line impedance\n", + "Zsc=21.5*exp(1J*14*pi/180)# Short circuited Line impedance\n", + "Zo=sqrt(Zoc*Zsc)# Characteristic impedance\n", + "A=(sqrt(Zsc/Zoc)).real# tan(a+ jBeta) = A + jB\n", + "B=(sqrt(Zsc/Zoc)).imag\n", + "l=1/4\n", + "alpha=(1/(4*l))*log(((1+A**2+B)**2)/(((1-A)**2)+B**2)) #Attenuation Constant\n", + "Beta=(1/(2*l))*atan((2*B)/(1-A**2-B)) #phase constant\n", + "\n", + "#the tx-Line parameters\n", + "R=(Zo*complex(alpha,Beta)).real\n", + "L=(Zo*complex(alpha,Beta)).imag\n", + "G=(complex(alpha,Beta)/Zo).real\n", + "C=(complex(alpha,Beta)/Zo).imag\n", + "print 'The Characteristic impedance:Zo= '\n", + "print Zo\n", + "print 'The value of Alpha={0:.3f} '.format(alpha.real),'nepere/km\\n'\n", + "print 'The value of Beta= {0:0.3f}'.format(Beta.real)\n", + "print 'the tx-Line parameters are\\nR= %0.2f ohms\\nL= %0.2f mH\\nG= %0.2f umhos\\nC= %0.2f mF\\n'%(R,L,G*1e6,C*1e3)\n", + "\n", + "# Note : There are some calculation errors in the solution presented in the book" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.4, page no 316" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The atenuation constant is 0.011 nepers/mile\n", + "The Cut-off Freq is 6 KHz\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import sqrt,pi\n", + "#Given\n", + "d=0.7# distance between two insertions\n", + "Ld_m= (80e-3)*(10/7)#Loading coil inductance\n", + "#print Ld_m)\n", + "Rd_m=100/7#Loading coil resistance\n", + "#print Rd_m)\n", + "R=20+Rd_m#Line resistance \n", + "L=Ld_m# Line inductance\n", + "C=0.05e-6# Line Capacitance\n", + "alfa=0.5*R*sqrt(C/L)#Attenuation Constant\n", + "#\n", + "fc=(pi*d*sqrt(L*C))**-1#cut off freq\n", + "print 'The atenuation constant is %0.3f nepers/mile\\nThe Cut-off Freq is %d KHz'%(alfa,fc*1e-3)\n", + "\n", + "# Note : There are some calculation errors in the solution presented in the book" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.5, page no 317" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "the voltage at the mid point of the line is \n", + " 6.97+6.97j\n", + " V with Angle = -8.59degrees\n" + ] + } + ], + "source": [ + "from cmath import exp\n", + "#Given\n", + "a=0.7#attenuation constant\n", + "b=0.3#phase constant\n", + "Gamma=a+(1J*b)#propagation constant\n", + "l=0.5# half length of line( for midpoint)\n", + "Vs=10# Excitation voltage\n", + "V_mod=Vs*(exp(-a*l))#Magnitude of the Vs\n", + "\n", + "phi=b*l*180/pi#phase shift\n", + "V=V_mod*(exp(-1J*(phi*pi/180)))#voltage at the mid point\n", + "print 'the voltage at the mid point of the line is \\n {0:0.2f}+{0:.2f}j\\n V with Angle = -%0.2fdegrees'.format(V.real,V.imag)%phi\n", + "\n", + "# Note : There are some calculation errors in the solution presented in the book" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.6, page no 317" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The characteristic impedance Zo= 22.20 /_-19.66 ohm\n", + "\n", + " The Phase velocity is: v= 2.88e+07 m/sec\n", + " Percent decrease in the voltage is 14.91%\n" + ] + } + ], + "source": [ + "from cmath import pi,sqrt,polar,phase\n", + "#Given\n", + "R=0.01\n", + "l=1e3\n", + "L=1e-6\n", + "G=1e-6\n", + "C=0.001e-6\n", + "f=1.59e3# operating freq\n", + "w=2*pi*f# angular freq\n", + "#a\n", + "Zo=sqrt((R+(1J*w*L))*0.35/(G+(1J*w*C)))#characteristic impedance\n", + "Z0=polar(Zo)\n", + "Z0r=Z0[0]\n", + "Z0i=Z0[1]\n", + "#b\n", + "\n", + "Beta=sqrt(0.5*(sqrt((((R**2)+(round(w**2)*(L**2)))*(round(G**2)+(round(w**2)*(C**2)))))-(round(R*G)-((w**2)*L*C))))#Phase constant\n", + "\n", + "v=w/Beta#phase velocity\n", + "\n", + "#c\n", + "Alpha=sqrt(0.5*(sqrt((((R**2)+((w**2)*(L**2)))*((G**2)+((w**2)*(C**2)))))+((R*G)-((w**2)*L*C))))#attenuation constant\n", + "Vs=1#Assumed for easeof calculation\n", + "A=(Vs-(Vs*exp(-Alpha*l)))*100\n", + "print 'The characteristic impedance Zo= %0.2f /_%0.2f ohm\\n'%(Z0r,Z0i*180/pi)\n", + "print ' The Phase velocity is: v= %3.2e m/sec\\n Percent decrease in the voltage is %0.2f%c'%(v.real,A.real,'%')\n", + "\n", + "# Note : There are some calculation errors in the solution presented in the book" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.15, page no 348" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The input impedance is 526.81 /_-2.18deg\n", + "Reflection Coeff is 0.07 /_-163.77deg\n" + ] + } + ], + "source": [ + "from cmath import exp,polar,cosh,sinh\n", + "\n", + "#Given\n", + "l=100# Tx-line length\n", + "ZR=200#Terminal resistance\n", + "Zo=600#Characteristic impedance\n", + "a=0.01#attenuation constant\n", + "Beta=0.03#phase constant\n", + "d=0#reflection coeff at load is Zero\n", + "Gamma=a+1J*Beta#propagation constant\n", + "Kd=((ZR-Zo)/(ZR+Zo))*exp(-2*Gamma*d)#reflection coeff at point D d km from load\n", + "Kdd=polar(Kd)\n", + "Kdr=Kdd[0]\n", + "Kdi=Kdd[1]\n", + "d1=100# distance\n", + "Ks=((ZR-Zo)/(ZR+Zo))*exp(-2*Gamma*d1)#reflection coeff at the sending end\n", + "[Ksr,Ksi]=polar(Ks)\n", + "Zin=Zo*(((ZR*cosh(Gamma*l))+(Zo*sinh(Gamma*l)))/((Zo*cosh(Gamma*l))+(ZR*sinh(Gamma*l))))#Input impedance\n", + "Zz=polar(Zin)\n", + "Zinr=Zz[0]\n", + "Zini=Zz[1]\n", + "print 'The input impedance is %0.2f /_%0.2fdeg\\nReflection Coeff is %0.2f /_%0.2fdeg'%(Zinr,Zini*180/pi,Ksr,Ksi*180/pi)\n", + "\n", + "# Note : There are some calculation errors in the solution presented in the book" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.15, page no 334" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The current received is= 13.64 mA at phase-22.59\n" + ] + } + ], + "source": [ + "from cmath import cosh,polar\n", + "#GivenR=0.01\n", + "x=10#line length\n", + "Zo=100# characteristic impedance\n", + "a=0.1# attenuation constant\n", + "Beta=0.05# phase constant\n", + "Is=20e-3# source current\n", + "Gamma=a+ 1J*Beta# propagation constant\n", + "\n", + "I=Is/cosh(Gamma*x)# received current\n", + "\n", + "Ii=polar(I)\n", + "I_r=Ii[0]\n", + "I_i=Ii[1]\n", + "\n", + "print 'The current received is= %0.2f mA at phase%0.2f'%(1000*I_r,I_i*180/pi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.16, page no 349" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The characteristic impedance is 283.94 /_-41.38deg\n" + ] + } + ], + "source": [ + "from cmath import sqrt,polar\n", + "#Given\n", + "L=1e-3#inductance\n", + "R=40# Resistance\n", + "C=0.1e-6# capacitance\n", + "G=1e-6#conductance\n", + "w=5000# angular freq\n", + "Zo=sqrt(complex(R,(w*L))/complex(G,(w*C)))#Characteristic impedance\n", + "#Zr=sqrt(sqrt(R**2+(w*L)**2)/sqrt(G**2+(w*C)**2))\n", + "Zz=polar(Zo)\n", + "ZoR=Zz[0]\n", + "ZoI=Zz[1]\n", + "print 'The characteristic impedance is %0.2f /_%0.2fdeg'%(ZoR,ZoI*180/pi)\n", + "\n", + "# Note : There are some calculation errors in the solution presented in the book" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.17, page no 349" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The voltage at the mid point of the line is 7.05 /_-8.59 \n" + ] + } + ], + "source": [ + "from cmath import polar,exp\n", + "#Given\n", + "l=0.5#half line distance\n", + "Vs=10#Excitation voltage\n", + "Gamma=0.7+1J*0.3#propagation constant\n", + "Vv=polar(Vs*(exp(-Gamma*l)))#vtg at mid point\n", + "Vr=Vv[0]\n", + "Vi=Vv[1]\n", + "print 'The voltage at the mid point of the line is %0.2f /_%0.2f '%(Vr,Vi*180/pi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.18, page no350" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The max voltage on line is 5.92 V\n", + " The min voltage on line is 4.23 V\n" + ] + } + ], + "source": [ + "from math import sqrt\n", + "#Given\n", + "Zo=50# characteristic impedance\n", + "P=500e-3#Supplied power\n", + "S=1.4#VSWR on the line\n", + "Emax=sqrt(Zo*S*P)#Max vtg\n", + "\n", + "Emin=sqrt(Zo*P/S)# Min vtg\n", + "print 'The max voltage on line is %0.2f V\\n The min voltage on line is %0.2f V'%(Emax,Emin)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.19, page no 350" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "The voltage reflection coeff is 0.17\n", + "The VSWR is 1.40\n", + "\n", + "\n", + "The Max and min voltage and crresponding crrent is\n", + " Emax= 3.74V Imin= 26.73mA\n", + " Emin= 2.67V Imax= 37.42mA\n", + "\n", + " The Termination resistance should be 28.57 ohm\n" + ] + } + ], + "source": [ + "from math import sqrt\n", + "#Given\n", + "Zo=100# Characteristic Impedance\n", + "P=100e-3#Load power\n", + "Zr=140#Load Resistance\n", + "f=100e3# Operating freq\n", + "#a\n", + "K=(Zr-Zo)/(Zo+Zr)#Vtg Reflection coeff\n", + "\n", + "#b\n", + "S=(1+K)/(1-K)#VSWR\n", + "\n", + "#c+d\n", + "Emax=sqrt(Zr*P)#Max line vltg\n", + "Imin=Emax/Zr#Min line current\n", + "\n", + "Emin=Emax/S# Min line vltg\n", + "Imax=S*Imin#Max line current\n", + "\n", + "#e\n", + "R=14000/40\n", + "\n", + "Zr=(Zo**2)/R#\n", + "print '\\nThe voltage reflection coeff is %0.2f\\nThe VSWR is %0.2f\\n\\n\\nThe Max and min voltage and crresponding crrent is\\n Emax= %0.2fV Imin= %0.2fmA\\n Emin= %0.2fV Imax= %0.2fmA\\n\\n The Termination resistance should be %0.2f ohm'%(K,S,Emax,Imin*1e3,Emin,Imax*1e3,Zr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.20, page no 352" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "the receiving voltage will be 0.25 V\n" + ] + } + ], + "source": [ + "from math import exp,log\n", + "#Given\n", + "V=0.5#receiving vtg\n", + "Vs=2#Source vtg\n", + "al=-log(V/Vs)#attenuation\n", + "\n", + "al2=al*1.5\n", + "V=Vs*exp(-al2)#receiving voltage\n", + "print 'the receiving voltage will be %0.2f V'%(V)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.22, page no352" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The lrngth should be 25 metres\n", + "The Characteristic Impedance should be 48.79 ohms\n" + ] + } + ], + "source": [ + "from cmath import sqrt\n", + "#Given\n", + "Zin=25+1J*15# Internal Impedance\n", + "Zr=70-1J*42#load\n", + "f=3e6#operating freq\n", + "v=3e8#light velocity\n", + "L=v/(4*f)#length of the line\n", + "\n", + "Zo=sqrt(Zin*Zr)#Characteristic Impedance\n", + "\n", + "print 'The lrngth should be %d metres\\nThe Characteristic Impedance should be %0.2f ohms'%(L,Zo.real)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.23, page no353" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The cut-off freq is 3.03 KHz \n", + " the voltage being measured is 1 V\n" + ] + } + ], + "source": [ + "from math import sqrt,pi\n", + "from __future__ import division\n", + "#Given\n", + "#a\n", + "L=1e-3# inductance\n", + "C=61.25e-9#capacitance\n", + "Ld=44e-3#coil inductance\n", + "d=2#distance intervals after which coils are added\n", + "Lt=(L*2)+(Ld*2)#total inductance\n", + "Ct=C*2#total capacitance\n", + "fc=(pi*sqrt(Lt*Ct))**-1#cut off freq\n", + "\n", + "#b\n", + "I=100e-3#milliameter range\n", + "R=1#milliameter resistance\n", + "Zo=100#characteristic impedance\n", + "Zin=(Zo**2)/R#input impedance\n", + "\n", + "Er=I*R#\n", + "Es=Er*sqrt(Zin/Zo)\n", + "print 'The cut-off freq is %0.2f KHz \\n the voltage being measured is %d V'%(fc*1e-3,Es)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.24, page no 354" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "the Length of the transformer(stub) is 3.75 metres\n", + " The characteristic impedance of this transformer is 224 ohms\n" + ] + } + ], + "source": [ + "#Given\n", + "f=20e6#tuned freq\n", + "ZR=100#Equivalent aerial Resistance\n", + "Zin=500#input impedance\n", + "c=3e8\n", + "lamda=c/f\n", + "l=lamda/4#lamda/4 Transformer\n", + "\n", + "Zo=sqrt(Zin*ZR)#Characteristic impedance\n", + "print 'the Length of the transformer(stub) is %0.2f metres\\n The characteristic impedance of this transformer is %d ohms'%(l,round(Zo))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example8.25, page no 354" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The sending end (Source end)impedance (Zl)is: \n", + "330.46+-16.35j\n" + ] + } + ], + "source": [ + "#Given\n", + "lamda=5#wavelength\n", + "Zo=200#Characteristic impedance\n", + "Zo1=100#Zo'\n", + "ZL=50+(1J*50)# load impedance\n", + "l1=0.4*lamda\n", + "l2=0.2*lamda\n", + "Beta=(2*pi/lamda)# phase difference\n", + "Z2=Zo1*(((ZL*cos(Beta*l2))+(1J*Zo1*sin(Beta*l2)))/((Zo1*cos(Beta*l2))+(1J*ZL*sin(Beta*l2))))#I/p Impedance offered by I2toI1\n", + "Z1=Zo*(((Z2*cos(Beta*l1))+(1J*Zo*sin(Beta*l1)))/((Zo*cos(Beta*l1))+(1J*Z2*sin(Beta*l1))))#I/p impedance\n", + "print 'The sending end (Source end)impedance (Zl)is: '\n", + "print '{0:0.2f}+{1:0.2f}j'.format(Z1.real,Z1.imag)" + ] + } + ], + "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 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter9_1.ipynb b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter9_1.ipynb new file mode 100644 index 00000000..2d2304df --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/Chapter9_1.ipynb @@ -0,0 +1,338 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter No 9 - Aerials" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example9.1, page no 397" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The maximum effective aperture of the\n", + " aerial is 28.65 sq m\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import pi\n", + "\n", + "#Given\n", + "D=90# directivity\n", + "lamda=2# wavelength\n", + "Ae=(D*(lamda**2))/(4*pi)#effective aperture\n", + "print 'The maximum effective aperture of the\\n aerial is %0.2f sq m'%(Ae)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example9.2, page no 397" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Angular beam width is 22.92 degrees\n", + "BeamWidth is 0.40 rad\n" + ] + } + ], + "source": [ + "from math import pi,cos\n", + "#Given\n", + "n=10#no of aerial elements\n", + "d=0.5#distance in terms of wavelength\n", + "Beam_Width=2/(n*d)#\n", + "Beam_Width_degrees=Beam_Width*180/pi\n", + "print 'Angular beam width is %0.2f degrees\\nBeamWidth is %0.2f rad'%(Beam_Width_degrees,Beam_Width)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example9.3, pageno 397" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total power radiated is 888.89 watts\n" + ] + } + ], + "source": [ + "from numpy import arange, pi\n", + "from sympy.mpmath import quad, sin\n", + "#Given\n", + "r=1#assume distance for ease of calculation\n", + "#Pav(theta)=(1000/(3*pi*r**2))*((sin(theta))**2)\n", + "theta=arange(0, pi, 0.1)\n", + "x0=0\n", + "x1=pi\n", + "Pt=(2000/(3*r**2))*quad(lambda theta: (sin(theta))**3,[x0,x1])#Total power radiated \n", + "print 'Total power radiated is %0.2f watts'%(Pt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example9.4, page no 398" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "electric field intensity is 0.25 mV/m \n", + " magnetic field intensity is 0.67 uA/m\n" + ] + } + ], + "source": [ + "from math import pi,cos\n", + "#Given\n", + "dl=2# length of wire \n", + "I=6#current in the wire\n", + "f=1e6# operating freq\n", + "r=30e3#distance at which field is to be calculated\n", + "theta=90#right angles to the wire axis\n", + "lamda=300# wavelength\n", + "w=2*pi*f#angular freq\n", + "c=3e8\n", + "t=f**-1\n", + "Phi=w*(t-(r/c))#Phase shift\n", + "Erad=25.13e-5*cos(Phi)#Radiation electric field intensity\n", + "H=Erad/(120*pi)#Radiation magnetic field intensity\n", + "print 'electric field intensity is %0.2f mV/m \\n magnetic field intensity is %0.2f uA/m'%(Erad*1e3,H*1e6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example9.5, page no 399" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The radiated power is 1.03 watts\n" + ] + } + ], + "source": [ + "from math import sqrt\n", + "#Given\n", + "#c\n", + "Rr=73# radition resistance\n", + "Vrms=10#RMS voltage of the signal\n", + "Zin_mod=sqrt((73**2)+(42**2))#absolute input impedance\n", + "Irms=Vrms/Zin_mod#RMS current\n", + "Pt=(Irms**2)*Rr# Radiated power\n", + "print 'The radiated power is %0.2f watts'%(round(100*Pt)/100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example9.6 page no 400" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ideal directive gain is 55840\n" + ] + } + ], + "source": [ + "#Given\n", + "#b\n", + "c=3e8\n", + "f=2e9#operating freq\n", + "Ae=100#aperture area\n", + "lamda=c/f# operating wavwlength\n", + "D=((4*3.141*Ae)/(lamda**2))# Directivity\n", + "print 'Ideal directive gain is %d'%(D)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example9.7, pageno 400" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The angular width is 0.40 degrees\n" + ] + } + ], + "source": [ + "#Given\n", + "#b\n", + "n=10# no of aerial elements\n", + "lambda_d=2#\n", + "BeamWidth=2*lambda_d/n# Beamwidth\n", + "print 'The angular width is %0.2f degrees'%(BeamWidth)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example9.8, page no 400" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Overall Gain is 3.52 dBs\n" + ] + } + ], + "source": [ + "from math import log10\n", + "#Given\n", + "D1=1\n", + "D2=1.5*D1 # diameters of the new reflectors D1=1assumed for ease of calculation\n", + "G_dbs=10*log10((D2/D1)**2)#Gain in dBs\n", + "print 'Overall Gain is %0.2f dBs'%(round(1000*G_dbs)/1000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example9.9, page no 401" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Radiation resistance is 2.05 ohm\n" + ] + } + ], + "source": [ + "#Given\n", + "#b\n", + "c=3e8\n", + "f=800e3# operating freq\n", + "dl=27#effective height\n", + "lamda=c/f\n", + "\n", + "Rr=40*(3.142**2)*(dl/lamda)**2#Radiation Resistance\n", + "print 'Radiation resistance is %0.2f ohm'%(Rr)" + ] + } + ], + "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 +} diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/ctftch1.png b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/ctftch1.png Binary files differnew file mode 100644 index 00000000..7c959f08 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/ctftch1.png diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/fourierTransch1.png b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/fourierTransch1.png Binary files differnew file mode 100644 index 00000000..c0033679 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/fourierTransch1.png diff --git a/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/modulatedWaveChap3_1.png b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/modulatedWaveChap3_1.png Binary files differnew file mode 100644 index 00000000..3b34f439 --- /dev/null +++ b/Principle_of_Communication_Engineering_by_A._Singh_and_A._K._Chhabra/screenshots/modulatedWaveChap3_1.png diff --git a/Thermodynamics_by_Gaggioli_and_Obert/Ch18.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/Ch18.ipynb new file mode 100644 index 00000000..ef61bd07 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/Ch18.ipynb @@ -0,0 +1,394 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 18 Refrigeration" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:18.1 Pg:784" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From steam tables,\n", + "Coefficient of performance = 12.0 \n", + "\n", + " horsepower required per ton of refrigeration = 0.393 hp/ton refrigeration\n", + "\n", + " Work of compression = -62.8 Btu/lbm\n", + "\n", + " Work of expansion = 1.42 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "Ta=500 #R\n", + "Tr=540 #R\n", + "#calculations\n", + "cop=Ta/(Tr-Ta)\n", + "hp=4.71/cop\n", + "print \"From steam tables,\"\n", + "ha=48.02\n", + "hb=46.6\n", + "hc=824.1\n", + "hd=886.9\n", + "Wc=-(hd-hc)\n", + "We=-(hb-ha)\n", + "#results\n", + "print \"Coefficient of performance = %.1f \"%(cop)\n", + "print \"\\n horsepower required per ton of refrigeration = %.3f hp/ton refrigeration\"%(hp)\n", + "print \"\\n Work of compression = %.1f Btu/lbm\"%(Wc)\n", + "print \"\\n Work of expansion = %.2f Btu/lbm\"%(We)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:18.2 Pg:785" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Coefficient of performance = 8.96\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "x=0.8\n", + "he=26.28 #Btu/lbm\n", + "hb=26.28 #Btu/lbm\n", + "pe=98.76 #psia\n", + "pc=51.68 #psia\n", + "hc=82.71 #Btu/lbm\n", + "hf=86.80+0.95\n", + "#calculations\n", + "dwisen=-(hf-hc)\n", + "dwact=dwisen/x\n", + "hd=hc-dwact\n", + "cop=(hc-hb)/(hd-hc)\n", + "#results\n", + "print \"Coefficient of performance = %.2f\"%(cop)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:18.3 Pg:785" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Work done = -100.1 Btu/lbm\n", + "\n", + " horsepower required per ton of refrigeration = 0.994 hp/ton refrigeration\n", + "\n", + " Coefficient of performance actual = 4.74 \n", + "\n", + " Ideal cop = 5.737\n", + "\n", + " relative efficiency = 0.826\n", + "\n", + " Mass flow rate = 0.422 lbm/min ton\n", + "\n", + " Compressor capacity = 3.44 cfm/ton\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "hc=613.3#btu/lbm\n", + "hb=138.9#btu/lbm\n", + "ha=138.9#btu/lbm\n", + "hd=713.4 #btu/lbm\n", + "ta=464.7 #R\n", + "t0=545.7 #R\n", + "v=8.150 #ft**3/lbm\n", + "#calculations\n", + "Qa=hc-hb\n", + "Qr=ha-hd\n", + "Wcd=Qa+Qr\n", + "cop=abs(Qa/Wcd)\n", + "hp=abs(4.71/cop)\n", + "carnot=abs(ta/(t0-ta))\n", + "rel=abs(cop/carnot)\n", + "mass=200/Qa\n", + "C=mass*v\n", + "#results\n", + "print \"Work done = %.1f Btu/lbm\"%(Wcd)\n", + "print \"\\n horsepower required per ton of refrigeration = %.3f hp/ton refrigeration\"%(hp)\n", + "print \"\\n Coefficient of performance actual = %.2f \"%(cop)\n", + "print \"\\n Ideal cop = %.3f\"%(carnot)\n", + "print \"\\n relative efficiency = %.3f\"%(rel)\n", + "print \"\\n Mass flow rate = %.3f lbm/min ton\"%(mass)\n", + "print \"\\n Compressor capacity = %.2f cfm/ton\"%(C)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:18.4 Pg:786" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pressure ratio = 5.74\n", + "\n", + " Heat = 25083 Btu/min\n", + "\n", + " Water make up required = 24.24 lbm/min\n", + "\n", + " Volume of vapor entering ejector = 58054 cfm\n", + "The answers are a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "pc=0.6982 #psia\n", + "pe=0.1217 #psia\n", + "m=200 #gal/min\n", + "qual=0.98\n", + "h1=23.07 #Btu/lbm\n", + "h2=8.05 #Btu/lbm\n", + "hw=1071.3\n", + "#calculations\n", + "rp=pc/pe\n", + "m2=m/0.01602 *0.1388 #Conversion of units \n", + "m2=1670\n", + "dh=15.02\n", + "Qa=m2*(h1-h2)\n", + "h3=h2 + qual*hw\n", + "m3=Qa/(h3-h1)\n", + "v=0.016+ qual*2444\n", + "C=m3*v\n", + "#results\n", + "print \"Pressure ratio = %.2f\"%(rp)\n", + "print \"\\n Heat = %d Btu/min\"%(Qa)\n", + "print \"\\n Water make up required = %.2f lbm/min\"%(m3)\n", + "print \"\\n Volume of vapor entering ejector = %d cfm\"%(C)\n", + "print \"The answers are a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:18.5 Pg:787" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From fig B-4,\n", + "Appropraite notation from textbook has been used\n", + "All are enthalpy values at different stages\n", + "part a\n", + "Work done = -18.08 Btu/lbm\n", + "\n", + " Heat = 47.22 Btu/lbm\n", + "\n", + " horsepower required per ton of refrigeration = 1.803 hp/ton refrigeration\n", + "\n", + " Coefficient of performance actual = 2.61 \n", + "case 2\n", + "\n", + " Work done = -53.6 Btu/lbm\n", + "\n", + " Heat = 146.30 Btu/lbm\n", + "\n", + " horsepower required per ton of refrigeration = 1.726 hp/ton refrigeration\n", + "\n", + " Coefficient of performance actual = 2.73 \n", + "part b\n", + "\n", + " Work done = -22.0 Btu/lbm\n", + "\n", + " Heat = 60.95 Btu/lbm\n", + "\n", + " horsepower required per ton of refrigeration = 1.702 hp/ton refrigeration\n", + "\n", + " Coefficient of performance actual = 2.77 \n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "print \"From fig B-4,\"\n", + "print \"Appropraite notation from textbook has been used\"\n", + "print \"All are enthalpy values at different stages\"\n", + "hc=73.5 #Btu/lbm\n", + "hb=26.28 #Btu/lbm\n", + "hd=91.58 #Btu/lbm\n", + "hc2=190.7 #Btu/lbm\n", + "hd2=244.3 #Btu/lbm\n", + "hb2=44.4 #Btu/lbm\n", + "m1=1 #lbm\n", + "m2=0.461 #lbm\n", + "hc1=73.5 #Btu/lbm\n", + "hd1=83.35 #Btu/lbm \n", + "hc2=190.7 #Btu/lbm \n", + "hd2=244.3 #Btu/lbm\n", + "hb1=12.55 #Btu/lbm \n", + "hc22=197.58 #Btu/lbm \n", + "hd22=224 #Btu/lbm\n", + "#Calculations\n", + "w1=hc-hd\n", + "qa1=hc-hb\n", + "cop1=abs(qa1/(w1))\n", + "hp1=4.71/cop1\n", + "w2=hc2-hd2\n", + "qa2=hc2-hb2\n", + "cop2=abs(qa2/(w2))\n", + "hp2=4.71/cop2\n", + "qa3=m1*(hc1-hb1)\n", + "w3=m1*(hc1-hd1) + m2*(hc22-hd22)\n", + "cop3=abs(qa3/w3)\n", + "hp3=4.71/cop3\n", + "#results\n", + "print \"part a\"\n", + "print \"Work done = %.2f Btu/lbm\"%(w1)\n", + "print \"\\n Heat = %.2f Btu/lbm\"%(qa1)\n", + "print \"\\n horsepower required per ton of refrigeration = %.3f hp/ton refrigeration\"%(hp1)\n", + "print \"\\n Coefficient of performance actual = %.2f \"%(cop1)\n", + "print \"case 2\"\n", + "print \"\\n Work done = %.1f Btu/lbm\"%(w2)\n", + "print \"\\n Heat = %.2f Btu/lbm\"%(qa2)\n", + "print \"\\n horsepower required per ton of refrigeration = %.3f hp/ton refrigeration\"%(hp2)\n", + "print \"\\n Coefficient of performance actual = %.2f \"%(cop2)\n", + "print \"part b\"\n", + "print \"\\n Work done = %.1f Btu/lbm\"%(w3)\n", + "print \"\\n Heat = %.2f Btu/lbm\"%(qa3)\n", + "print \"\\n horsepower required per ton of refrigeration = %.3f hp/ton refrigeration\"%(hp3)\n", + "print \"\\n Coefficient of performance actual = %.2f \"%(cop3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:18.6 Pg:788" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From fig B-4,\n", + "Appropraite notation from textbook has been used\n", + "All are enthalpy values at different stages\n", + "\n", + " horsepower required per ton of refrigeration = 1.585 hp/ton refrigeration\n", + "\n", + " Coefficient of performance actual = 2.97 \n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "print \"From fig B-4,\"\n", + "print \"Appropraite notation from textbook has been used\"\n", + "print \"All are enthalpy values at different stages\"\n", + "ha=44.36 #Btu/lbm \n", + "hc=18.04 #Btu/lbm\n", + "hj=197.58 #Btu/lbm\n", + "hh=213.5 #Btu/lbm \n", + "hd=hc #Btu/lbm\n", + "he=190.66 #Btu/lbm\n", + "hk=241.25 #Btu/lbm\n", + "#calculations\n", + "m=(hc-ha)/(ha-hj)\n", + "hi=(m*hj+hh)/(1+m)\n", + "Qa=he-hd\n", + "W=he-hh + (1+m)*(hi-hk)\n", + "cop=abs(Qa/W)\n", + "hp=4.71/cop\n", + "#results\n", + "print \"\\n horsepower required per ton of refrigeration = %.3f hp/ton refrigeration\"%(hp)\n", + "print \"\\n Coefficient of performance actual = %.2f \"%(cop)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/Ch8.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/Ch8.ipynb new file mode 100644 index 00000000..2e3ca609 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/Ch8.ipynb @@ -0,0 +1,149 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 8 Second and third law topics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:8.1 Pg:255" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dp by ds at constant volume = 275 F/ft**3/lbm\n", + "The answer is a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "P=500 #psia\n", + "T=700 #F\n", + "J=778\n", + "#calculations\n", + "dpds=1490 *144/J\n", + "#results\n", + "print \"dp by ds at constant volume = %d F/ft**3/lbm\"%(dpds)\n", + "print \"The answer is a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:8.2 Pg:256" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thermal efficiency = 66.5 percent\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log\n", + "#Initialization of variables\n", + "cp=0.25 #Btu/lbm R\n", + "T0=520 #R\n", + "T1=3460 #R\n", + "#calculations\n", + "dq=cp*(T0-T1)\n", + "ds=cp*log(T0/T1)\n", + "dE=dq-T0*ds\n", + "eta=dE/dq\n", + "#results\n", + "print \"Thermal efficiency = %.1f percent\"%(eta*100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:8.3 Pg:256" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loss of available energy = -6774 Btu/lbm\n", + "The answer is a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log\n", + "#Initialization of variables\n", + "cp=0.25 #Btu/lbm R\n", + "T0=520 #R\n", + "T1=3460 #R\n", + "dG=21069 #Btu/lbm\n", + "dH=21502 #Btu/lbm\n", + "#calculations\n", + "dq=cp*(T0-T1)\n", + "ds=cp*log(T0/T1)\n", + "dE=dq-T0*ds\n", + "eta=dE/dq\n", + "dw=eta*dH\n", + "de=-dG+dw\n", + "#results\n", + "print \"Loss of available energy = %d Btu/lbm\"%(de)\n", + "print \"The answer is a bit different due to rounding off error in textbook\"" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch1.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch1.ipynb new file mode 100644 index 00000000..56ea81cb --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch1.ipynb @@ -0,0 +1,227 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 1 Survey Of Units And Dimensions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:1.1 Pg: 19" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Force to accelerate = 3.108 lbf\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "gc=32.1739 #lbm ft/lbf s**2\n", + "m=10 #lbm\n", + "a=10 #ft/s**2\n", + "#calculations\n", + "F=m*a/gc\n", + "#results\n", + "print \"Force to accelerate = %.3f lbf\"%(F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:1.2 Pg: 19" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Force to accelerate = 10 lbf\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "gc=32.1739 #lbm ft/lbf s**2\n", + "m=10 #lbm\n", + "a=gc #ft/s**2\n", + "#calculations\n", + "F=m*a/gc\n", + "#results\n", + "print \"Force to accelerate = %d lbf\"%(F)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:1.3 Pg: 19" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "velocity = 60 mph\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "v=88 #ft/s\n", + "#calculations\n", + "v2=v*3600/5280\n", + "#results\n", + "print \"velocity = %d mph\"%(v2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:1.4 Pg: 20" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "velocity = 0 mph\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "v=88 #ft/s\n", + "#calculations\n", + "v2=v*1/5280*3600\n", + "#results\n", + "print \"velocity = %d mph\"%(v2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:1.5 Pg: 20" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Force without dimensions = 5.79e-04 lbm/ft sec\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "F=5e-9 #lbf/ft**2 hr\n", + "g=32.1739\n", + "#calculations\n", + "F2=F*3600*g\n", + "#results\n", + "print \"Force without dimensions = %.2e lbm/ft sec\"%(F2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:1.6 Pg: 21" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Density of water in this system = 1.937 lbf/ft**2\n", + "\n", + " Specific weight = 62.305 lbf/ft**2\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "rho=62.305 #lbf/ft**2\n", + "g=32.1739 #ft/s**2\n", + "#calculations\n", + "gam=rho/g\n", + "#results\n", + "print \"Density of water in this system = %.3f lbf/ft**2\"%(gam)\n", + "print \"\\n Specific weight = %.3f lbf/ft**2\"%(rho)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch10.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch10.ipynb new file mode 100644 index 00000000..4ac6845c --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch10.ipynb @@ -0,0 +1,157 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 10 The pvt relationships" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:10.1 Pg:360" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "For ideal gas case, Table B-6 and for vanderwaals case, Table B-8 have been used\n", + "\n", + " In vanderwaals equation, pressure = 50.0 atm\n", + "\n", + " In ideal gas case, pressure = 57.8 atm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "m=1 #lbm\n", + "T1=212+460 #R\n", + "sv=0.193 #ft**3/lbm\n", + "M=44\n", + "a=924.2 #atm ft**2 /mole**2\n", + "b=0.685 #ft**3/mol\n", + "R=0.73 #atm ft**3/R mol\n", + "#calculations\n", + "v=sv*M\n", + "p=R*T1/v\n", + "p2=R*T1/(v-b) -a/v**2\n", + "#results\n", + "print \"For ideal gas case, Table B-6 and for vanderwaals case, Table B-8 have been used\"\n", + "print \"\\n In vanderwaals equation, pressure = %.1f atm\"%(p2)\n", + "print \"\\n In ideal gas case, pressure = %.1f atm\"%(p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:10.2 Pg:360" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "volume = 8.481 ft**3/mole\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "m=1 #lbm\n", + "p=50.9 #atm\n", + "t=212+460 #R\n", + "R=0.73\n", + "#calculations\n", + "pc=72.9 #atm\n", + "tc=87.9 +460 #R\n", + "pr=p/pc\n", + "Tr=t/tc\n", + "z=0.88\n", + "v=z*R*t/p\n", + "#results\n", + "print \"volume = %.3f ft**3/mole\"%(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:10.3 Pg:361" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pressure = 50.8 atm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "t=212+460 #R\n", + "v=0.193 #ft**3/lbm\n", + "M=44\n", + "R=0.73\n", + "#calculations\n", + "tc=87.9+460 #F\n", + "zc=0.275\n", + "vc=1.51 #ft**3/mol\n", + "tr=t/tc\n", + "vr=v*M/vc\n", + "vrd=vr*zc\n", + "z=0.88\n", + "p=z*R*t/(M*v)\n", + "#results\n", + "print \"Pressure = %.1f atm\"%(p)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch11.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch11.ipynb new file mode 100644 index 00000000..001bcdc2 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch11.ipynb @@ -0,0 +1,762 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 11 The ideal gas and mixture relationship" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.1 Pg:415" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Work done = -58682 ft-lbf/lbm\n", + "The answer is a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "n=1.3\n", + "T1=460+60 #R\n", + "P1=14.7 #psia\n", + "P2=125 #psia\n", + "R=1545\n", + "M=29\n", + "#calculations\n", + "T2=T1*(P2/P1)**((n-1)/n)\n", + "wrev=R/M *(T2-T1)/(1-n)\n", + "#results\n", + "print \"Work done = %d ft-lbf/lbm\"%(wrev)\n", + "print \"The answer is a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.2 Pg:415" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Change in kinetic energy = 52.3 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "P2=10 #psia\n", + "P1=100 #psia\n", + "T1=900 #R\n", + "w=50 #Btu/lbm\n", + "k=1.39\n", + "cp=0.2418\n", + "#calculations\n", + "T2=T1*(P2/P1)**((k-1)/k)\n", + "T2=477\n", + "KE=-w-cp*(T2-T1)\n", + "#results\n", + "print \"Change in kinetic energy = %.1f Btu/lbm\"%(KE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.3 Pg:416" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From table B-9\n", + "Final temperature = 468 R \n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "T1=900 #R\n", + "P1=100 #psia\n", + "P2=10 #psia\n", + "#calculations\n", + "print \"From table B-9\"\n", + "pr1=8.411\n", + "pr2=pr1*P2/P1\n", + "T2=468 #R\n", + "#results\n", + "print \"Final temperature = %d R \"%(T2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.4 Pg:417" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "from table b-9\n", + "final temperature = 1050 R\n", + "\n", + " final pressure = 177.7 psia\n", + "\n", + " work done = -92.85 Btu/lbm\n", + "\n", + " final enthalpy = 253.4 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "cr=6\n", + "p1=14.7 #psia\n", + "t1=60.3 #F\n", + "M=29\n", + "R=1.986\n", + "#calculations\n", + "print \"from table b-9\"\n", + "vr1=158.58 \n", + "u1=88.62 #Btu/lbm\n", + "pr1=1.2147\n", + "vr2=vr1/cr\n", + "T2=1050 #R\n", + "u2=181.47 #Btu/lbm\n", + "pr2=14.686\n", + "p2=p1*(pr2/pr1)\n", + "dw=u1-u2\n", + "h2=u2+T2*R/M\n", + "#results\n", + "print \"final temperature = %d R\"%(T2)\n", + "print \"\\n final pressure = %.1f psia\"%(p2)\n", + "print \"\\n work done = %.2f Btu/lbm\"%(dw)\n", + "print \"\\n final enthalpy = %.1f Btu/lbm\"%(h2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.5 Pg:417" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "part a\n", + "Mole fractions of oxygen and nitrogen are 0.369 and 0.631 respectively\n", + "part b\n", + "Average molecular weight = 29.5 \n", + "part c\n", + "specific gas constant = 0.3639 psia ft**3/lbm R\n", + "part d\n", + "volume of mixture = 94.6 ft**3\n", + "density of mixture is 0.00896 mole/ft**3 and 0.26 lbm/ft**3\n", + "part e\n", + "partial pressures of oxygen and nitrogen are 18.43 psia and 31.57 psia respectively\n", + "part a\n", + "Mole fractions of oxygen and nitrogen are 0.369 and 0.631 respectively\n", + "part b\n", + "Average molecular weight = 29.5 \n", + "part c\n", + "specific gas constant = 52.3960 lbf ft/lbm R\n", + "part d\n", + "volume of mixture = 94.6 ft**3\n", + "\n", + " density of mixture is 0.00896 mole/ft**3 and 0.264 lbm/ft**3\n", + "part e\n", + "partial pressures of oxygen and nitrogen are 18.43 psia and 31.57 psia respectively\n", + "\n", + " partial volumes of oxygen and nitrogen are 34.87 ft**3 and 59.74 ft**3 respectively\n", + "\n", + " Net partial pressure in case of oxygen = 50.00 psia\n", + "\n", + " Net partial volume =94.61 ft**3\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "#Initialization of variables\n", + "m1=10 #lbm\n", + "m2=15 #lnm\n", + "p=50 #psia\n", + "t=60+460 #R\n", + "M1=32\n", + "M2=28.02\n", + "R0=10.73 \n", + "#calculations\n", + "n1=m1/M1\n", + "n2=m2/M2\n", + "x1=n1/(n1+n2)\n", + "x2=n2/(n1+n2)\n", + "M=x1*M1+x2*M2\n", + "R=R0/M\n", + "V=(n1+n2)*R0*t/p\n", + "rho=p/(R0*t)\n", + "rho2=M*rho\n", + "p1=x1*p\n", + "p2=x2*p\n", + "v1=x1*V\n", + "v2=x2*V\n", + "#results\n", + "print \"part a\"\n", + "print \"Mole fractions of oxygen and nitrogen are %.3f and %.3f respectively\"%(x1,x2)\n", + "print \"part b\"\n", + "print \"Average molecular weight = %.1f \"%(M)\n", + "print \"part c\"\n", + "print \"specific gas constant = %.4f psia ft**3/lbm R\"%(R)\n", + "print \"part d\"\n", + "print \"volume of mixture = %.1f ft**3\"%(V)\n", + "print \"density of mixture is %.5f mole/ft**3 and %.2f lbm/ft**3\"%(rho,rho2)\n", + "print \"part e\"\n", + "print \"partial pressures of oxygen and nitrogen are %.2f psia and %.2f psia respectively\"%(p1,p2)\n", + "#Initialization of variables\n", + "m1=10 #lbm\n", + "m2=15 #lnm\n", + "p=50 #psia\n", + "t=60+460 #R\n", + "M1=32\n", + "M2=28.02\n", + "R0=10.73 \n", + "#calculations\n", + "n1=m1/M1\n", + "n2=m2/M2\n", + "x1=n1/(n1+n2)\n", + "x2=n2/(n1+n2)\n", + "M=x1*M1+x2*M2\n", + "R=1545/M\n", + "V=(n1+n2)*R0*t/p\n", + "rho=p/(R0*t)\n", + "rho2=M*rho\n", + "p1=x1*p\n", + "p2=x2*p\n", + "v1=x1*V\n", + "v2=x2*V\n", + "pt=p1+p2\n", + "vt=v1+v2\n", + "#results\n", + "print \"part a\"\n", + "print \"Mole fractions of oxygen and nitrogen are %.3f and %.3f respectively\"%(x1,x2)\n", + "print \"part b\"\n", + "print \"Average molecular weight = %.1f \"%(M)\n", + "print \"part c\"\n", + "print \"specific gas constant = %.4f lbf ft/lbm R\"%(R)\n", + "print \"part d\"\n", + "print \"volume of mixture = %.1f ft**3\"%(V)\n", + "print \"\\n density of mixture is %.5f mole/ft**3 and %.3f lbm/ft**3\"%(rho,rho2)\n", + "print \"part e\"\n", + "print \"partial pressures of oxygen and nitrogen are %.2f psia and %.2f psia respectively\"%(p1,p2)\n", + "print \"\\n partial volumes of oxygen and nitrogen are %.2f ft**3 and %.2f ft**3 respectively\"%(v1,v2)\n", + "print \"\\n Net partial pressure in case of oxygen = %.2f psia\"%(pt)\n", + "print \"\\n Net partial volume =%.2f ft**3\"%(vt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.6 Pg:418" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From gravimetric analysis, co2 = 17.6 percent , o2 = 4.3 percent and n2 = 78.2 percent\n", + "\n", + " From ultimate analysis, co2 = 0.00 percent , o2 = 4.26 percent and n2 = 78.19 percent\n", + "\n", + " Sum in case 1 = 100.0 percent\n", + "\n", + " Sum in case 2 = 82.4 percent\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "m1=5.28\n", + "m2=1.28\n", + "m3=23.52\n", + "#calculations\n", + "m=m1+m2+m3\n", + "x1=m1/m\n", + "x2=m2/m\n", + "x3=m3/m\n", + "C=12/44 *m1/ m\n", + "O=(32/44 *m1 + m2)/m\n", + "N=m3/m\n", + "sum1=(x1+x2+x3)*100\n", + "sum2=(C+N+O)*100\n", + "#results\n", + "print \"From gravimetric analysis, co2 = %.1f percent , o2 = %.1f percent and n2 = %.1f percent\"%(x1*100,x2*100,x3*100)\n", + "print \"\\n From ultimate analysis, co2 = %.2f percent , o2 = %.2f percent and n2 = %.2f percent\"%(C*100,O*100,N*100)\n", + "print \"\\n Sum in case 1 = %.1f percent\"%(sum1)\n", + "print \"\\n Sum in case 2 = %.1f percent\"%(sum2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.7 Pg:419" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Entropy of mixture = 8.27 Btu/R\n", + "\n", + " the answer given in textbook is wrong. please check using a calculator\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from scipy import log\n", + "#Initialization of variables\n", + "x1=1/3\n", + "n1=1\n", + "n2=2\n", + "x2=2/3\n", + "p=12.7 #psia\n", + "cp1=7.01 #Btu/mole R\n", + "cp2=6.94 #Btu/mole R\n", + "R0=1.986\n", + "T2=460+86.6 #R\n", + "T1=460 #R\n", + "p0=14.7 #psia\n", + "#calculations\n", + "p1=x1*p\n", + "p2=x2*p\n", + "ds1= cp1*log(T2/T1) - R0*log(p1/p0)\n", + "ds2= cp2*log(T2/T1) - R0*log(p2/p0)\n", + "S=n1*ds1+n2*ds2\n", + "#results\n", + "print \"Entropy of mixture = %.2f Btu/R\"%(S)\n", + "print \"\\n the answer given in textbook is wrong. please check using a calculator\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.8 Pg:420" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Change in internal energy = -547 Btu\n", + "\n", + " Change in entropy = -1.037 Btu/R\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from scipy import log\n", + "\n", + "#Initialization of variables\n", + "c1=4.97 #Btu/mol R\n", + "c2=5.02 #Btu/mol R\n", + "n1=2\n", + "n2=1\n", + "T1=86.6+460 #R\n", + "T2=50+460 #R\n", + "#calculations\n", + "du=(n1*c1+n2*c2)*(T2-T1)\n", + "ds=(n1*c1+n2*c2)*log(T2/T1)\n", + "#results\n", + "print \"Change in internal energy = %d Btu\"%(du)\n", + "print \"\\n Change in entropy = %.3f Btu/R\"%(ds)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.9 Pg:420" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pressure of mixture = 12.7 psia\n", + "\n", + " Mixing temperature = 86.6 F\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "\n", + "#Initialization of variables\n", + "n1=1\n", + "n2=2\n", + "c1=5.02\n", + "c2=4.97\n", + "t1=60 #F\n", + "t2=100 #F\n", + "R0=10.73\n", + "p1=30 #psia\n", + "p2=10 #psia\n", + "#calcualtions\n", + "t=(n1*c1*t1+n2*c2*t2)/(n1*c1+n2*c2)\n", + "V1= n1*R0*(t1+460)/p1\n", + "V2=n2*R0*(t2+460)/p2\n", + "V=V1+V2\n", + "pm=(n1+n2)*R0*(t+460)/V\n", + "#results\n", + "print \"Pressure of mixture = %.1f psia\"%(pm)\n", + "print \"\\n Mixing temperature = %.1f F\"%(t)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.10 Pg:421" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Change in entropy for gas 1 = 4.242 Btu/R\n", + "\n", + " Change in entropy for gas 1 = 0.331 Btu/R\n", + "\n", + " Net change in entropy = 4.572 Btu/R\n", + "\n", + " In case 2, change in entropy = 4.572 Btu/R\n", + "The answer is a bit different due to rounding off error in the textbook\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from scipy import log\n", + "\n", + "#Initialization of variables\n", + "T2=546.6 #R\n", + "T1=520 #R\n", + "T3=560 #R\n", + "v2=1389.2\n", + "v1=186.2\n", + "R0=1.986\n", + "c1=5.02\n", + "c2=4.97\n", + "n1=1\n", + "n2=2\n", + "v3=1203\n", + "#calculations\n", + "ds1=n1*c1*log(T2/T1) + n1*R0*log(v2/v1)\n", + "ds2=n2*c2*log(T2/T3)+n2*R0*log(v2/v3)\n", + "ds=ds1+ds2\n", + "ds3=n1*c1*log(T2/T1)+n2*c2*log(T2/T3)\n", + "ds4=n2*R0*log(v2/v3)+ n1*R0*log(v2/v1)\n", + "dss=ds3+ds4\n", + "#results\n", + "print \"Change in entropy for gas 1 = %.3f Btu/R\"%(ds1)\n", + "print \"\\n Change in entropy for gas 1 = %.3f Btu/R\"%(ds2)\n", + "print \"\\n Net change in entropy = %.3f Btu/R\"%(ds)\n", + "print \"\\n In case 2, change in entropy = %.3f Btu/R\"%(dss)\n", + "print \"The answer is a bit different due to rounding off error in the textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.11 Pg:42" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final remperature = 851 R\n", + "\n", + " Change in entropy of air = -0.115 btu/mole R and -0.00395 Btu/R\n", + "\n", + " Change in entropy of water = 0.0757 btu/mole R and 0.00395 Btu/R\n", + "The answers are a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from scipy import log\n", + "\n", + "#Initialization of variables\n", + "m1=1 #lbm\n", + "m2=0.94 #lbm\n", + "M1=29\n", + "M2=18\n", + "p1=50 #psia\n", + "p2=100 #psia\n", + "t1=250 +460 #R\n", + "R0=1.986\n", + "cpa=6.96\n", + "cpb=8.01\n", + "#calculations\n", + "xa = (m1/M1)/((m1/M1)+ m2/M2)\n", + "xb=1-xa\n", + "t2=t1*(p2/p1)**(R0/(xa*cpa+xb*cpb))\n", + "d=R0/(xa*cpa+xb*cpb)\n", + "k=1/(1-d)\n", + "dsa=cpa*log(t2/t1) -R0*log(p2/p1)\n", + "dSa=(m1/M1)*dsa\n", + "dSw=-dSa\n", + "dsw=dSw*M2/m2\n", + "#results\n", + "print \"Final remperature = %d R\"%(t2)\n", + "print \"\\n Change in entropy of air = %.3f btu/mole R and %.5f Btu/R\"%(dsa,dSa)\n", + "print \"\\n Change in entropy of water = %.4f btu/mole R and %.5f Btu/R\"%(dsw,dSw)\n", + "print \"The answers are a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.12 Pg:423" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "In case 1, volume occupied = 13.02 ft**3\n", + "\n", + " In case 1, mass of steam = 0.94 lbm steam\n", + "\n", + " In case 2, mass of steam = 0.918 lbm steam\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "\n", + "#Initialization of variables\n", + "T=250 + 460 #R\n", + "p=29.825 #psia\n", + "pt=50 #psia\n", + "vg=13.821 #ft**3/lbm\n", + "M=29\n", + "R=10.73\n", + "#calculations\n", + "pa=pt-p\n", + "V=1/M *R*T/pa\n", + "ma=V/vg\n", + "xa=p/pt\n", + "mb=xa/M *18/(1-xa)\n", + "#results\n", + "print \"In case 1, volume occupied = %.2f ft**3\"%(V)\n", + "print \"\\n In case 1, mass of steam = %.2f lbm steam\"%(ma)\n", + "print \"\\n In case 2, mass of steam = %.3f lbm steam\"%(mb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.13 Pg:424" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "percentage = 65.0 percent\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "\n", + "#Initialization of variables\n", + "ps=0.64 #psia\n", + "p=14.7 #psia\n", + "M=29\n", + "M2=46\n", + "#calculations\n", + "xa=ps/p\n", + "mb=xa*9/M *M2/(1-xa)\n", + "#results\n", + "print \"percentage = %.1f percent\"%(mb*100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:11.14 Pg:424" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "partial pressure of water vapor = 0.317 psia\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "\n", + "#Initialization of variables\n", + "ps=0.5069 #psia\n", + "p=20 #psia\n", + "m1=0.01\n", + "m2=1\n", + "M1=18\n", + "M2=29\n", + "#calculations\n", + "xw= (m1/M1)/(m1/M1+m2/M2)\n", + "pw=xw*p\n", + "#results\n", + "print \"partial pressure of water vapor = %.3f psia\"%(pw)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch12.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch12.ipynb new file mode 100644 index 00000000..c7c68649 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch12.ipynb @@ -0,0 +1,402 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 12 Non steady flow friction and availibility" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:12.1 Pg:482" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Work done in case 1 = 572 Btu\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "p1=100 #psia\n", + "p2=14.7 #psia\n", + "k=1.4\n", + "T1=700 #R\n", + "R=10.73/29\n", + "V=50\n", + "cv=0.171\n", + "cp=0.24\n", + "R2=1.986/29\n", + "#calculations\n", + "T2=T1/ (p1/p2)**((k-1)/k)\n", + "m1=p1*V/(R*T1)\n", + "m2=p2*V/(R*T2)\n", + "Wrev= cv*(m1*T1 - m2*T2) - (m1-m2)*(T2)*cp\n", + "#results\n", + "print \"Work done in case 1 = %d Btu\"%(Wrev)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:12.2 Pg:482" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The friction of the process per pound of air = 18.6 Btu/lbm\n", + "\n", + " Loss of available energy = -16.20 Btu/lbm\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from scipy import log\n", + "#Initialization of variables\n", + "p1=100 #psia\n", + "p2=10 #psia\n", + "n=1.3\n", + "T1=800 #R\n", + "cv=0.172\n", + "R=1.986/29\n", + "T0=537 #R\n", + "cp=0.24\n", + "#calculations\n", + "T2=T1*(p2/p1)**((n-1)/n)\n", + "dwir=cv*(T1-T2)\n", + "dwr=R*(T2-T1)/(1-n)\n", + "dq=dwr-dwir\n", + "dI=-T0*(cp*log(T2/T1) - R*log(p2/p1))\n", + "#results\n", + "print \"The friction of the process per pound of air = %.1f Btu/lbm\"%(dq)\n", + "print \"\\n Loss of available energy = %.2f Btu/lbm\"%(dI)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:12.3 Pg:483" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Friction = 72.9 ft-lbf/lbm\n", + "\n", + " Available energy loss in case a = -72.9 ft-lbf/lbm\n", + "\n", + " Available energy loss in case b = -145.9 ft-lbf/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "ms=10 #lbm\n", + "den=62.3 #lbm/ft**3\n", + "A1=0.0218 #ft**2\n", + "A2=0.00545 #ft**2\n", + "p2=50 #psia\n", + "p1=100 #psia\n", + "gc=32.2 #ft/s**2\n", + "dz=30 #ft\n", + "T0=537 #R\n", + "T1=620 #R\n", + "T2=420 #R\n", + "#calculations\n", + "V1=ms/(A1*den)\n", + "V2=ms/(A2*den)\n", + "df=-144/den*(p2-p1) - (V2**2 -V1**2)/(2*gc) - dz\n", + "dI=-T0/T1 *df\n", + "dI2= -T0/T2 *df\n", + "#results\n", + "print \"Friction = %.1f ft-lbf/lbm\"%(df)\n", + "print \"\\n Available energy loss in case a = %.1f ft-lbf/lbm\"%(dI)\n", + "print \"\\n Available energy loss in case b = %.1f ft-lbf/lbm\"%(dI2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:12.4 Pg:484" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From fig 12.4,\n", + "Pressure drop = 0.00 lbf/ft**2 100 ft\n", + "The answer in the textbook is wrong. Please use a calculator to verify it.\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "r=2.5 #in\n", + "mf=160 #cfm\n", + "rho=1/14\n", + "mu=0.0000121\n", + "v=14 #ft**3/lbm\n", + "g=32.2 #ft/s**2\n", + "z=100 #ft\n", + "#calculations\n", + "A=3.14*(r/12)**2\n", + "V=mf/A /60\n", + "Re=(2*r/12)*V*rho/mu\n", + "print \"From fig 12.4,\"\n", + "f=0.0225/4\n", + "dp=4*f*(rho)*(V/v)**2 /(2*g*(2*r/12)) *z\n", + "#dp=2.32\n", + "#results\n", + "print \"Pressure drop = %.2f lbf/ft**2 100 ft\"%(dp)\n", + "print \"The answer in the textbook is wrong. Please use a calculator to verify it.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:12.5 Pg:485" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mass rate of air flow = 161 cfm\n", + "The answer is a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "from math import pi,sqrt\n", + "#Initialization of variables\n", + "D=0.0724 #ft\n", + "gc=32.2 #ft/s**2\n", + "rho=1.0/14\n", + "L=100 #ft\n", + "mu2=1.46*10**(-10)\n", + "dp=2.32\n", + "dia=5.0 #in\n", + "rho2=48500.0\n", + "vol=14.0 #ft**3/lbm\n", + "#calculations\n", + "ref=D**3 *2*dp*gc*rho/(mu2*L)\n", + "mf=rho2*pi/4 *(dia/12) *sqrt(mu2)\n", + "mfr=mf*vol*60\n", + "#results\n", + "print \"Mass rate of air flow = %d cfm\"%(mfr)\n", + "print \"The answer is a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:12.6 Pg:486" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loss of available energy = -725 Btu/lbm mixture \n", + "\n", + " Effectiveness of combustion = 0.409 \n" + ] + } + ], + "source": [ + "from math import log\n", + "#Initialization of variables\n", + "cp=0.25\n", + "T=3460 #R\n", + "T0=520 #R\n", + "dG=1228 #Btu/lbm\n", + "#calculations\n", + "hf=cp*(T-T0)-T0*cp*log(T/T0)\n", + "dC=hf-dG\n", + "Ec=hf/dG\n", + "#results\n", + "print \"Loss of available energy = %d Btu/lbm mixture \"%(dC)\n", + "print \"\\n Effectiveness of combustion = %.3f \"%(Ec)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:12.7 Pg:487" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loss of available energy = -219.3 Btu/lbm mixture \n", + "\n", + " Efficiency of cycle = 0.563 \n", + "\n", + " Effectiveness of overall cycle = 0.23\n", + "The answer is a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "cp1=0.25\n", + "T=3460 #R\n", + "T0=946.2 #R\n", + "T00=520 #R\n", + "dG=1228 #Btu/lbm\n", + "cp=0.45\n", + "#calculations\n", + "dqa=cp1*(T-T0)\n", + "w=cp*dqa\n", + "hf=cp1*(T-T00)-T00*cp1*log(T/T00)\n", + "heat=w-hf\n", + "eff=w/hf\n", + "epower=w/dG\n", + "#results\n", + "print \"Loss of available energy = %.1f Btu/lbm mixture \"%(heat)\n", + "print \"\\n Efficiency of cycle = %.3f \"%(eff)\n", + "print \"\\n Effectiveness of overall cycle = %.2f\"%(epower)\n", + "print \"The answer is a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:12.8 Pg:487" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All the values are obtained from Mollier chart,\n", + "Engine efficiency = 74.3 percent\n", + "\n", + " Effectiveness = 80.8 percent\n", + "\n", + " Loss of available energy = -32.6 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "p1=400 #psia\n", + "t1=600 #F\n", + "h1=1306.9 #Btu/lbm\n", + "b1=480.9 #Btu/lbm\n", + "p2=50 #psia\n", + "h2=1122 #Btu/lbm\n", + "h3=1169.5 #Btu/lbm\n", + "b3=310.9 #Btu/lbm\n", + "#calculations\n", + "print \"All the values are obtained from Mollier chart,\"\n", + "dw13=h1-h3\n", + "dw12=h1-h2\n", + "dasf=b3-b1\n", + "etae=dw13/dw12\n", + "eta=abs(dw13/dasf)\n", + "dq=dw13+dasf\n", + "#results\n", + "print \"Engine efficiency = %.1f percent\"%(etae*100)\n", + "print \"\\n Effectiveness = %.1f percent\"%(eta*100)\n", + "print \"\\n Loss of available energy = %.1f Btu/lbm\"%(dq)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch13.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch13.ipynb new file mode 100644 index 00000000..efe4a78b --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch13.ipynb @@ -0,0 +1,798 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 13 Fluid flow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.1 Pg:583" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "velocity in ft/s are:\n", + "0.000000 \t1118.735268 \t1663.871913 \t1791.374302 \t2179.668416 \t2779.331106 \t\n", + "\n", + "Area in ft**2 are:\n", + "0.000000 \t0.006600 \t0.005534 \t0.005495 \t0.005760 \t0.007656 \t\n", + "\n", + "The initial values of velocity and area are 0 and infinity respectively. Since, Infinity in calculations stops the code to display an error. It has been mentioned separately.\n" + ] + } + ], + "source": [ + "from numpy import nditer\n", + "from math import sqrt\n", + "#Initialization of variables\n", + "h1=1329.1 #Btu/lbm\n", + "v1=6.218 #ft**3/lbm\n", + "J=778\n", + "g=32.174\n", + "m=1\n", + "#calculations\n", + "p=[80, 60 ,54.6, 40, 20]\n", + "h=[ 1304.1, 1273.8, 1265 ,1234.2, 1174.8]\n", + "v=[ 7.384, 9.208, 9.844 ,12.554, 21.279]\n", + "Fc=1\n", + "V2=[Fc*sqrt(2*J*g*(h1-hh)) for hh in h]\n", + "A=[m*v1/V21 for v1,V21 in nditer([v,V2])]\n", + "V2=[0]+V2\n", + "A=[0]+A\n", + "#results\n", + "print 'velocity in ft/s are:'\n", + "for vv in V2:\n", + " print '%.6f'%vv,'\\t', \n", + "print '\\n\\nArea in ft**2 are:'\n", + "for aa in A:\n", + " print '%.6f'%aa,'\\t',\n", + "print '\\n\\nThe initial values of velocity and area are 0 and infinity respectively. Since, Infinity in calculations stops the code to display an error. It has been mentioned separately.'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.2 Pg:584" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Area required = 0.00464 ft**2\n", + "\n", + " Area in case 2 at the exit= 0.00379 ft**2\n" + ] + } + ], + "source": [ + "from math import sqrt\n", + "#Initialization of variables\n", + "n=1.4\n", + "p1=50 #psia\n", + "J=778\n", + "cp=0.24\n", + "T1=520 #R\n", + "k=n\n", + "R=1545/29\n", + "m=1\n", + "p2=10 #psia\n", + "#calculations\n", + "rpt=(2/(n+1))**(n/(n-1))\n", + "pt=p1*rpt\n", + "Vtrev=223.77*sqrt(cp*T1*(1- rpt**((k-1)/k)))\n", + "v1=R*T1/p1/144\n", + "vt=v1*(p1/pt)**(1/k)\n", + "At=m*vt/Vtrev\n", + "V2rev=223.77*sqrt(cp*T1*(1-(p2/p1)**((k-1)/k)))\n", + "v2=v1*(p1/p2)**(1/k)\n", + "A2=m*v2/V2rev\n", + "#results\n", + "print \"Area required = %.5f ft**2\"%(At)\n", + "print \"\\n Area in case 2 at the exit= %.5f ft**2\"%(A2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.3 Pg:585" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Throat area= 0.0056 ft**2\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "J=778\n", + "g=32.2\n", + "pc=54.6 #psia\n", + "h1=1329.1 #Btu/lbm\n", + "h2=1265 #btu/lbm\n", + "V2rev=1790 #ft/s\n", + "cv=0.99\n", + "m=1 #lbm\n", + "cv2=0.96\n", + "#calculations\n", + "V2d=cv*V2rev\n", + "hd=cv**2 *(h1-h2)\n", + "h2d=h1-hd\n", + "v2d=9.946\n", + "A2d=m*v2d/V2d\n", + "#results\n", + "print \"Throat area= %.4f ft**2\"%(A2d)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.4 Pg:585" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "average velocity = 31.3 ft/sec\n", + "\n", + " mass flow rate = 29.0 lbm/sec\n" + ] + } + ], + "source": [ + "from math import pi,sqrt\n", + "#Initialization of variables\n", + "zm=0.216\n", + "pm=62.3 #lbm/ft**2\n", + "p1=0.0736 #lbm/ft**2\n", + "g=32.2\n", + "d=4\n", + "#calculations\n", + "H=zm*(pm-p1)/12/p1\n", + "V=sqrt(2*g*H)\n", + "m=pi/4 *d**2 *V*p1\n", + "#results\n", + "print \"average velocity = %.1f ft/sec\"%(V)\n", + "print \"\\n mass flow rate = %.1f lbm/sec\"%(m)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.5 Pg:586" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From table B-17,\n", + "Area of throat = 0.00596 ft**2\n", + "\n", + " Area of exit = 0.00805 ft**2\n" + ] + } + ], + "source": [ + "from math import sqrt\n", + "#Initialization of variables\n", + "p0=50 #psia\n", + "T0=520 #R\n", + "rho0=0.259 #lbm/ft**3\n", + "p2=10 #psia\n", + "mf=1 #lbm\n", + "#calculations\n", + "print \"From table B-17,\"\n", + "pr=0.528\n", + "Tr=0.833\n", + "rhor=0.634\n", + "ps=pr*p0\n", + "Ts=Tr*T0\n", + "rhos=rho0*rhor\n", + "Vs=49.1*sqrt(Ts)\n", + "As=mf/(Vs*rhos)\n", + "p2r=p2/p0\n", + "M2=1.71\n", + "V2=1.487*Vs\n", + "T2=0.632*Ts\n", + "A2=As*1.35\n", + "rho2=rhos*0.317\n", + "#results\n", + "print \"Area of throat = %.5f ft**2\"%(As)\n", + "print \"\\n Area of exit = %.5f ft**2\"%(A2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.6 Pg:587" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Length of pipe = 406.3 ft\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "M1=0.2\n", + "M2=0.4\n", + "D=0.5 #ft\n", + "f=0.015\n", + "#calculations\n", + "f1=14.5\n", + "f2=2.31\n", + "dl=(f1-f2)*D/f\n", + "#results\n", + "print \"Length of pipe = %.1f ft\"%(dl)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.7 Pg:588" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "from table B-19\n", + "Change in entropy = 0.0224 Btu/lbm R\n" + ] + } + ], + "source": [ + "from math import log\n", + "#Initialization of variables\n", + "py=20 #psia\n", + "px=3.55 #psia\n", + "R=1.986/29\n", + "#calculations\n", + "pr=py/px\n", + "print \"from table B-19\"\n", + "Mx=2\n", + "My=0.577\n", + "pr2=0.721\n", + "ds=R*log(1/pr2)\n", + "#results\n", + "print \"Change in entropy = %.4f Btu/lbm R\"%(ds)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.8 Pg:588" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From table B-18 and B-17,\n", + "Mach numbers before and after are 1.64 and 0.658 respectively\n", + "\n", + " Pressure before and after are 11.0 psia and 32.9 psia\n", + "\n", + " Exhaust pressure = 32.3 psia\n" + ] + } + ], + "source": [ + "from math import pi,sqrt\n", + "#Initialization of variables\n", + "pi=50 #psia\n", + "pe=34.6 #psia\n", + "#calculations\n", + "print \"From table B-18 and B-17,\"\n", + "pr1=1.35\n", + "p0f=pi/pr1\n", + "pfs=0.528*p0f\n", + "per=pe/pfs\n", + "Me=0.6\n", + "p0e=1.19\n", + "pyx=p0e/pr1\n", + "Mx=1.64\n", + "My=0.658\n", + "px=0.22*pi\n", + "py=32.9 #psia\n", + "p2yx=0.852\n", + "pe2=1.65*pfs\n", + "#results\n", + "print \"Mach numbers before and after are %.2f and %.3f respectively\"%(Mx,My)\n", + "print \"\\n Pressure before and after are %.1f psia and %.1f psia\"%(px,py)\n", + "print \"\\n Exhaust pressure = %.1f psia\"%(pe2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.9 Pg:589" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From table B-20\n", + "Heat required = 272 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "T1=550 #R\n", + "T2=2660 #R\n", + "ts1=0.207\n", + "ts2=0.833\n", + "cp=0.24\n", + "#calculations\n", + "Ts=T1/ts1\n", + "Ts0=T2/ts2\n", + "print \"From table B-20\"\n", + "tr1=0.529\n", + "tr2=0.174\n", + "dq=cp*Ts0*(tr1-tr2)\n", + "#results\n", + "print \"Heat required = %d Btu/lbm\"%(dq)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.10 Pg:590" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Internal thrust = 3651 lbf\n", + "\n", + " Net thrust = 2593 lbf\n", + "The answers are a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "M1=0.5\n", + "M2=1\n", + "A1=0.5 #ft**2\n", + "A2=1 #ft**2\n", + "p1=14.7 #psia\n", + "p2=14.7 #psia\n", + "k=1.4\n", + "#calculations\n", + "thru=p2*144*A2*(1+k*M2**2)-p1*144*A1*(1+k*M1**2)\n", + "net=thru-p1*144*(A2-A1)\n", + "#results\n", + "print \"Internal thrust = %d lbf\"%(thru)\n", + "print \"\\n Net thrust = %d lbf\"%(net)\n", + "print \"The answers are a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.11 Pg:590" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mass flow rate = 0.572 lbm/sec\n" + ] + } + ], + "source": [ + "from math import pi,sqrt\n", + "#Initialization of variables\n", + "p1=50 #psia\n", + "pr=0.58\n", + "#calculations\n", + "p=p1*pr\n", + "s1=1.6585\n", + "h1=1174.1 #Btu/lbm\n", + "sf=0.3680\n", + "sfg=1.3313\n", + "hfg=945.3\n", + "vg=13.746\n", + "hf=218.82\n", + "x= (s1-sf)/sfg\n", + "v2=vg*x\n", + "h2=hf+x*hfg\n", + "V2rev=223.77*sqrt(h1-h2)\n", + "m=pi/4 *1/144 *V2rev/v2\n", + "#results\n", + "print \"mass flow rate = %.3f lbm/sec\"%(m)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.12 Pg:591" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mass flow rate = 0.597 lbm/sec\n", + "\n", + " Meta stable under cooling = 52 F\n" + ] + } + ], + "source": [ + "from math import pi,sqrt\n", + "#Initialization of variables\n", + "k=1.31\n", + "p1=7200 #lbf/ft**2\n", + "v1=8.515 #ft**3/lbm\n", + "pr=0.6\n", + "m1=0.574\n", + "T1=741 #R\n", + "#calculations\n", + "V2rev=8.02*sqrt(k/(k-1) *p1*v1*(1- (pr)**((k-1)/k)))\n", + "v2=v1*(1/pr)**(1/k)\n", + "m=pi/4 *1/144 *V2rev/v2\n", + "C=m/m1\n", + "T2=T1*(0.887)\n", + "t=250+460 #R\n", + "dt=t-T2\n", + "#results\n", + "print \"Mass flow rate = %.3f lbm/sec\"%(m)\n", + "print \"\\n Meta stable under cooling = %d F\"%(dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.13 Pg:592" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Area = 1.344 in**2\n", + "\n", + " diameter = 1.31 in\n" + ] + } + ], + "source": [ + "from math import pi,sqrt\n", + "#Initialization of variables\n", + "C=0.98\n", + "m=1\n", + "v=12.55 #ft**3/lbm\n", + "V=1372 #ft/s\n", + "#calculations\n", + "A=m*v/(C*V) *144\n", + "D=sqrt(A*4/pi)\n", + "#results\n", + "print \"Area = %.3f in**2\"%(A)\n", + "print \"\\n diameter = %.2f in\"%(D)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.14 Pg:593" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Area = 0.92 in**2\n", + "\n", + " diameter = 1.080 in\n" + ] + } + ], + "source": [ + "from math import pi,sqrt\n", + "#Initialization of variables\n", + "nn=0.95\n", + "p1=50 #psia\n", + "p2=30 #psia\n", + "v1=8.515\n", + "m=1 #lbm\n", + "#calculations\n", + "cv=sqrt(nn)\n", + "V2rev=1372\n", + "V2act=cv*V2rev\n", + "n=1.283\n", + "v2=v1*(p1/p2)**(1/n)\n", + "A=m*v2/V2act *144\n", + "D=sqrt(A*4/pi)\n", + "#results\n", + "print \"Area = %.2f in**2\"%(A)\n", + "print \"\\n diameter = %.3f in\"%(D)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.15 Pg:593" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Coefficient of discharge = 0.991 \n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "dFf=110.5 #ft-lbf/lbm\n", + "Vd=1028 #ft/s\n", + "gc=32.2 #ft/s**2\n", + "p0=100 #psia\n", + "k=1.4\n", + "v0=2.08\n", + "p1=55 #psia\n", + "p2=99.2 #psia\n", + "#calculations\n", + "dFe=0.01*Vd**2 /(2*gc)\n", + "dF=dFf+dFe\n", + "V2ig=(p0*144)**(1/k) *v0/(1-1/k) *((p1*144)**(1-1/k) -(p2*144)**(1-1/k))\n", + "C2=(V2ig+dF)/V2ig\n", + "C=sqrt(C2)\n", + "#results\n", + "print \"Coefficient of discharge = %.3f \"%(C)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.16 Pg:594" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pressure drop in the nozzle = 3.60 lbf/ft**2\n", + "\n", + " Coefficient of discharge = 0.982 \n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import pi,sqrt\n", + "#Initialization of variables\n", + "dL=1/6 #ft\n", + "mf=0.430 #lbm/sec\n", + "rho=62.4 \n", + "gc=32.2 #ft/s**2\n", + "d=0.81/12 #ft\n", + "#calculations\n", + "V=mf*4/(rho*pi)\n", + "VD=V/dL**2\n", + "Vd=1.92 #ft/s\n", + "dFf=0.031/(2*gc) *2.31\n", + "dFe=0.04*Vd**2 /(2*gc)\n", + "dF=dFf+dFe\n", + "dp=rho*(3.5/(2*gc) +dF)\n", + "vd22=(2*gc)/rho *dp /(1-(d/dL)**4)\n", + "vd2=sqrt(vd22)\n", + "C=Vd/vd2\n", + "#results\n", + "print \"Pressure drop in the nozzle = %.2f lbf/ft**2\"%(dp)\n", + "print \"\\n Coefficient of discharge = %.3f \"%(C)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:13.17 Pg:595" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mass flow rate = 1.176 lbm/sec\n", + "\n", + " Coefficient of discharge = 0.598\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "K=0.6003\n", + "Y1=0.91\n", + "D1=6.065\n", + "D2=1.820\n", + "rho1=0.156\n", + "p1=30\n", + "p2=20.18\n", + "#calculations\n", + "bet=D2/D1\n", + "m=0.525*K*Y1 *D2**2 *sqrt(rho1*(p1-p2))\n", + "C=K*sqrt(1-bet**4)\n", + "#results\n", + "print \"mass flow rate = %.3f lbm/sec\"%(m)\n", + "print \"\\n Coefficient of discharge = %.3f\"%(C)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch14.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch14.ipynb new file mode 100644 index 00000000..51e36300 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch14.ipynb @@ -0,0 +1,602 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 14 Psychrometrics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.1 Pg:659" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "from steam tables,\n", + "part a\n", + "partial pressure of water = 0.15207 psia\n", + "\n", + " dew temperature = 46 F\n", + "part b\n", + "density of water = 0.000474 lbm/ft**3\n", + "\n", + " in case 2, density of water = 0.000474 lbm/ft**3\n", + "\n", + " density of air = 0.072765 lbm/ft**3\n", + "part c\n", + "specific humidity = 0.0065 lbm steam/lbm air\n", + "part d\n", + "In method 1, Degree of saturation = 0.293\n", + "\n", + " In method 2, Degree of saturation = 0.293\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "t1=80+460 #R\n", + "ps=0.5069 #psia\n", + "print \"from steam tables,\"\n", + "vs=633.1 #ft**3/lbm\n", + "phi=0.3\n", + "R=85.6\n", + "Ra=53.3\n", + "p=14.696\n", + "#calculations\n", + "tdew=46 #F\n", + "pw=phi*ps\n", + "rhos=1/vs\n", + "rhow=phi*rhos\n", + "rhow2= pw*144/(R*t1)\n", + "pa=p-pw\n", + "rhoa= pa*144/(Ra*t1)\n", + "w=rhow/rhoa\n", + "mu=phi*(p-ps)/(p-pw)\n", + "Ws=0.622*(ps/(p-ps))\n", + "mu2=w/Ws\n", + "#results\n", + "print \"part a\"\n", + "print \"partial pressure of water = %.5f psia\"%(pw)\n", + "print \"\\n dew temperature = %d F\"%(tdew)\n", + "print \"part b\"\n", + "print \"density of water = %.6f lbm/ft**3\"%(rhow)\n", + "print \"\\n in case 2, density of water = %.6f lbm/ft**3\"%(rhow2)\n", + "print \"\\n density of air = %.6f lbm/ft**3\"%(rhoa)\n", + "print \"part c\"\n", + "print \"specific humidity = %.4f lbm steam/lbm air\"%(w)\n", + "print \"part d\"\n", + "print \"In method 1, Degree of saturation = %.3f\"%(mu)\n", + "print \"\\n In method 2, Degree of saturation = %.3f\"%(mu2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.2 Pg:659" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "change in moisture content = 0.008857 lbm water/lbm dry air\n", + "\n", + " in grains, change = 62.00 grains water/lbm dry air\n", + "The answers are a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "p=14.696 #psia\n", + "ps=0.0808 #psia\n", + "ps2=0.5069 #psia\n", + "phi2=0.5\n", + "phi=0.6\n", + "grain=7000\n", + "#calculations\n", + "pw=phi*ps\n", + "w1=0.622*pw/(p-pw)\n", + "pw2=phi2*ps2\n", + "w2=0.622*pw2/(p-pw2)\n", + "dw=w2-w1\n", + "dwg=dw*grain\n", + "#results\n", + "print \"change in moisture content = %.6f lbm water/lbm dry air\"%(dw)\n", + "print \"\\n in grains, change = %.2f grains water/lbm dry air\"%(dwg)\n", + "print \"The answers are a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.3 Pg:660" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From steam tables,\n", + "\n", + " humidity ratio = 0.0064 lbm/lbm dry air\n", + "\n", + " relative humidity = 29.7 percent\n", + "\n", + " Dew point = 46 F\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "t1=80 #F\n", + "t2=60 #F\n", + "p=14.696 #psia\n", + "ps=0.507 #psia\n", + "pss=0.256 #psia\n", + "cp=0.24\n", + "print \"From steam tables,\"\n", + "#calculations\n", + "ws=0.622*pss/(p-pss)\n", + "w=(cp*(t2-t1) + ws*1060)/(1060+ 0.45*(t1-t2))\n", + "pw=w*p/(0.622+w)\n", + "phi=pw/ps\n", + "td=46 #F\n", + "#results\n", + "print \"\\n humidity ratio = %.4f lbm/lbm dry air\"%(w)\n", + "print \"\\n relative humidity = %.1f percent\"%(phi*100)\n", + "print \"\\n Dew point = %d F\"%(td)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.4 Pg:661" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "In case 1, enthalpy = 26.32 Btu/lbm dry air\n", + "\n", + " In case 1, sigma function = 26.14 Btu/lbm dry air\n", + "\n", + " In case 2, enthalpy = 26.47 Btu/lbm dry air\n", + "\n", + " In case 2, sigma function = 26.15 Btu/lbm dry air\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "W=0.0065 #lbm/lbm of dry air\n", + "t=80 #F\n", + "td=60 #F\n", + "#calculations\n", + "H=0.24*t+W*(1060+0.45*t)\n", + "sig=H-W*(td-32)\n", + "Ws=0.0111\n", + "H2=0.24*td+Ws*(1060+0.45*td)\n", + "sig2=H2-Ws*(td-32)\n", + "#results\n", + "print \"In case 1, enthalpy = %.2f Btu/lbm dry air\"%(H)\n", + "print \"\\n In case 1, sigma function = %.2f Btu/lbm dry air\"%(sig)\n", + "print \"\\n In case 2, enthalpy = %.2f Btu/lbm dry air\"%(H2)\n", + "print \"\\n In case 2, sigma function = %.2f Btu/lbm dry air\"%(sig2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.5 Pg:662" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "In case 1, Enthalpy = 9.41 Btu/lbm dry air\n", + "\n", + " In case 2, Enthalpy = 31.15 Btu/lbm dry air\n", + "\n", + " Heat added = 21.49 Btu/lbm dry air\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "t1=30 #F\n", + "t2=60 #F\n", + "t3=80 #F\n", + "W1=0.00206\n", + "W2=0.01090\n", + "#calculations\n", + "cm1=0.24+0.45*W1\n", + "H1=cm1*t1+W1*1060\n", + "cm2=0.24+0.45*W2\n", + "H2=cm2*t3+W2*1060\n", + "hf=t2-32\n", + "dq=H2-H1-(W2-W1)*hf\n", + "#results\n", + "print \"In case 1, Enthalpy = %.2f Btu/lbm dry air\"%(H1)\n", + "print \"\\n In case 2, Enthalpy = %.2f Btu/lbm dry air\"%(H2)\n", + "print \"\\n Heat added = %.2f Btu/lbm dry air\"%(dq)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.6 Pg:663" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "using psychrometric charts,\n", + "part a\n", + "partial pressure of water = 0.15 psia\n", + "\n", + " dew temperature = 46 F\n", + "part b\n", + "density of water = 0.000000 lbm/ft**3\n", + "\n", + " density of air = 0.0728 lbm/ft**3\n", + "part c\n", + "specific humidity = 0.00657 lbm water/lbm air\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "pw=0.15#psia\n", + "print \"using psychrometric charts,\"\n", + "tdew=46 #F\n", + "#calculations\n", + "va=13.74 #ft**3/lbm dry air\n", + "rhoa=1/va\n", + "V=13.74\n", + "mw=46/7000\n", + "rhow=mw/V\n", + "w=0.00657\n", + "#results\n", + "print \"part a\"\n", + "print \"partial pressure of water = %.2f psia\"%(pw)\n", + "print \"\\n dew temperature = %d F\"%(tdew)\n", + "print \"part b\"\n", + "print \"density of water = %.6f lbm/ft**3\"%(rhow)\n", + "print \"\\n density of air = %.4f lbm/ft**3\"%(rhoa)\n", + "print \"part c\"\n", + "print \"specific humidity = %.5f lbm water/lbm air\"%(w)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.7 Pg:664" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From humidity charts,\n", + "Enthalpy change = 21.53 Btu/lbm dry air\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "W1=0.00206 #lbm/lbm dry air\n", + "W2=0.01090 #lbm/lbm dry air\n", + "t=60 #F\n", + "print \"From humidity charts,\"\n", + "#calculations\n", + "dw=W1-W2\n", + "hs=144.4\n", + "hs2=66.8-32\n", + "w1=14.4 #Btu/lbm\n", + "ws1=20 #Btu/lbm\n", + "w2=76.3 #Btu/lbm\n", + "ws2=98.5 #Btu/lbm\n", + "dwh1=-(w1-ws1)/7000 *hs\n", + "H1=9.3+dwh1\n", + "dwh2=(w2-ws2)/7000 *hs2\n", + "H2=31.3+dwh2\n", + "dwc=dw*(t-32)\n", + "dq=H2-H1+dwc\n", + "#results\n", + "print \"Enthalpy change = %.2f Btu/lbm dry air\"%(dq)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.8 Pg:665" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From psychrometric charts at 50 F and 80 F,\n", + "The two initial states have been multiplied by 108/262 and distance 2-3 is located\n", + "humidity = 0.83 \n", + "\n", + " Temperature = 62.5 F\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "print \"From psychrometric charts at 50 F and 80 F,\"\n", + "va1=13 #ft**3/lbm dry air\n", + "va2=13.88 #ft**3/lbm dry air\n", + "flow=2000 #cfm\n", + "#calculations\n", + "ma1= flow/va1\n", + "ma2=flow/va2\n", + "print \"The two initial states have been multiplied by 108/262 and distance 2-3 is located\"\n", + "t=62.5# F\n", + "phi=0.83 #percent\n", + "#results\n", + "print \"humidity = %.2f \"%(phi)\n", + "print \"\\n Temperature = %.1f F\"%(t)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.9 Pg:666" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "from psychrometric charts,\n", + "Dry bulb temperature = 71.76 F\n", + "\n", + " percent humidity = 0.80\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "t=90 #F\n", + "ts=67.2 #F\n", + "phi=0.3\n", + "per=0.8\n", + "#calculations\n", + "dep=t-ts\n", + "dt=dep*per\n", + "tf=t-dt\n", + "print \"from psychrometric charts,\"\n", + "phi2=0.8\n", + "#results\n", + "print \"Dry bulb temperature = %.2f F\"%(tf)\n", + "print \"\\n percent humidity = %.2f\"%(phi2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.10 Pg:667" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From psychrometric charts,\n", + "cooling range = 25 F\n", + "\n", + " Approach = 10 F\n", + "\n", + " amount of water cooled per pound of dry air = 1.216 lbm dry air/lbm dry air\n", + "\n", + " percentage of water lost by evaporation = 2.12 percent\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "m=1 #lbm\n", + "t1=100 #F\n", + "t2=75 #F\n", + "db=65 #F\n", + "print \"From psychrometric charts,\"\n", + "t11=82 #F\n", + "phi1=0.4\n", + "H1=30 #Btu/lbm dry air\n", + "w1=65 #grains/lbm dry air\n", + "w2=250 #grains/lbm dry air\n", + "#calculations\n", + "cr=t1-t2\n", + "appr=t2-db\n", + "dmf3=(w2-w1)*0.0001427\n", + "hf3=68\n", + "hf4=43\n", + "H2=62.2\n", + "H1=30\n", + "mf4= (H1-H2+ dmf3*hf3)/(hf4-hf3)\n", + "per=dmf3/(dmf3+mf4)\n", + "#results\n", + "print \"cooling range = %d F\"%(cr)\n", + "print \"\\n Approach = %d F\"%(appr)\n", + "print \"\\n amount of water cooled per pound of dry air = %.3f lbm dry air/lbm dry air\"%(mf4)\n", + "print \"\\n percentage of water lost by evaporation = %.2f percent\"%(per*100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:14.11 Pg:668" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "flow rate of air = 449820 lbm/hr.It is equal to 99960 cfm\n", + "\n", + " Total heat transferred = 13494600 Btu/hr\n", + "\n", + " Enthalpy = 30.0 Btu/lbm dry air\n", + "\n", + " Using second method, Enthalpy = 30.0 Btu/lbm\n", + "\n", + " Performance factor = 3.309 \n", + "\n", + " logrithamic mean enthalpy difference = 2.48 . Estimated low percentage = 25 low\n", + "The answers are a bit different due to rounding off error in textbook.\n" + ] + } + ], + "source": [ + "from math import log\n", + "#Initialization of variables\n", + "mfr=1\n", + "water=900 #gallons\n", + "t2=110 #F\n", + "t1=80 #F\n", + "cp1=1\n", + "#calculations\n", + "mfa=mfr*water*8.33*60\n", + "mfc=mfa/(60*0.075)\n", + "qa=mfa*(t2-t1)\n", + "dH=qa/(mfc*4.5)\n", + "dH2=mfr*cp1*(t2-t1)\n", + "H1=23.73\n", + "H2=5.08\n", + "f=3.309\n", + "lnmean=(H1-H2)/log(H1/H2)\n", + "dtt=(t2-t1)/lnmean\n", + "per=25\n", + "#results\n", + "print \"flow rate of air = %d lbm/hr.It is equal to %d cfm\"%(mfa,mfc)\n", + "print \"\\n Total heat transferred = %d Btu/hr\"%(qa)\n", + "print \"\\n Enthalpy = %.1f Btu/lbm dry air\"%(dH)\n", + "print \"\\n Using second method, Enthalpy = %.1f Btu/lbm\"%(dH2)\n", + "print \"\\n Performance factor = %.3f \"%(f)\n", + "print \"\\n logrithamic mean enthalpy difference = %.2f . Estimated low percentage = %d low\"%(dtt,per)\n", + "print \"The answers are a bit different due to rounding off error in textbook.\"" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch15.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch15.ipynb new file mode 100644 index 00000000..0309850b --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch15.ipynb @@ -0,0 +1,349 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 15 Vapor cycle and processes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:15.1 Pg:697" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "from steam tables,\n", + "Thermal efficiency = 45 percent\n", + "\n", + " Furnace efficiency = 33.8 percent\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "p1=600 #psia\n", + "p2=0.2563 #psia\n", + "t1=486.21 #F\n", + "t2=60 #F\n", + "fur=0.75\n", + "#calculations\n", + "print \"from steam tables,\"\n", + "h1=1203.2\n", + "hf1=471.6\n", + "hfg1=731.6\n", + "h2=1088\n", + "hf2=28.06\n", + "hfg2=1059.9\n", + "s1=1.4454\n", + "sf1=0.6720\n", + "sfg1=0.7734\n", + "s2=2.0948\n", + "sf2=0.0555\n", + "sfg2=2.0393\n", + "xd=(s1-sf2)/sfg2\n", + "hd=hf2+xd*hfg2\n", + "xa=0.3023\n", + "ha=hf2+xa*hfg2\n", + "wbc=0\n", + "wda=0\n", + "wcd=h1-hd\n", + "wab=ha-hf1\n", + "W=wab+wcd+wbc+wda\n", + "Wrev=hfg1- (t2+459.7)*sfg1\n", + "etat=(t1-t2)/(t1+459.7)\n", + "eta=fur*etat\n", + "#results\n", + "print \"Thermal efficiency = %d percent\"%(etat*100)\n", + "print \"\\n Furnace efficiency = %.1f percent\"%(eta*100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:15.2 Pg:698" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thermal efficiency = 22.8 percent\n", + "\n", + " Overall efficiency = 17.1 percent\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "dhab=-123.1\n", + "etac=0.5\n", + "ha=348.5\n", + "etaf=0.75\n", + "eta=0.85\n", + "hf=471.6\n", + "hfg=731.6\n", + "hc=1203.2\n", + "dhcd=452.7\n", + "#calculations\n", + "dwabs=dhab/etac\n", + "hbd=ha-dwabs\n", + "dwcds=dhcd*eta\n", + "dqa=hc-hbd\n", + "etat=(dwcds+dwabs)/dqa\n", + "eta=etat*etaf\n", + "#results\n", + "print \"Thermal efficiency = %.1f percent\"%(etat*100)\n", + "print \"\\n Overall efficiency = %.1f percent\"%(eta*100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:15.3 Pg:699" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From steam tables,\n", + "Thermal efficiency = 38.4 percent\n", + "\n", + " Overall efficiency = 32.7 percent\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "t=60 #F\n", + "J=778.16\n", + "p1=600 #psia\n", + "p2=0.2563 #psia\n", + "etaf=0.85 \n", + "#calculations\n", + "print \"From steam tables,\"\n", + "vf=0.01604 #ft**3/lbm\n", + "dw=-vf*(p1-p2)*144/J\n", + "ha=28.06 #Btu/lbm\n", + "hb=29.84 #Btu/lbm\n", + "hd=1203.2 #Btu/lbm\n", + "he=750.5 #Btu/lbm\n", + "dqa=hd-hb\n", + "dqr=ha-he\n", + "dw=dqa+dqr\n", + "dwturb=hd-he\n", + "dwpump=ha-hb\n", + "etat=dw/dqa\n", + "eta=etat*etaf\n", + "#results\n", + "print \"Thermal efficiency = %.1f percent\"%(etat*100)\n", + "print \"\\n Overall efficiency = %.1f percent\"%(eta*100)\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:15.4 Pg:699" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thermal efficiency = 32.5 percent\n", + "\n", + " Overall efficiency = 27.7 percent\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "dhab=-1.78\n", + "etac=0.5\n", + "ha=28.06\n", + "eta=0.85\n", + "hf=471.6\n", + "hfg=731.6\n", + "hd=1203.2\n", + "dhcd=452.7\n", + "#calculations\n", + "dwabs=dhab/etac\n", + "hbd=ha-dwabs\n", + "dwcds=dhcd*eta\n", + "dqa=hd-hbd\n", + "etat=(dwcds+dwabs)/dqa\n", + "eta=etat*eta\n", + "#results\n", + "print \"Thermal efficiency = %.1f percent\"%(etat*100)\n", + "print \"\\n Overall efficiency = %.1f percent\"%(eta*100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:15.5 Pg:700" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Thermal efficiency in case 1= 46.5 percent\n", + "\n", + " Thermal efficiency in case 1= 40.9 percent\n", + "\n", + " High pressure work = 187.8 Btu/lbm\n", + "\n", + " Low pressure work = 451.5 Btu/lbm\n", + "\n", + " Net work = 639.3 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "sh=1.6070\n", + "ph=94.8 #psia\n", + "th=324 #F\n", + "tr=60 #F\n", + "hh=1186.2 \n", + "pi=94.8 #psia\n", + "hi=1399.5\n", + "si=1.8265\n", + "#calculations\n", + "Q=hi-hh\n", + "Hr=-(tr+459.7)*(si-sh)\n", + "work= Q+Hr\n", + "eff=work/Q\n", + "Qa1=1557.5\n", + "W1=637.1 \n", + "etat=W1/Qa1\n", + "he=1374\n", + "hj=948\n", + "Whp=he-hh\n", + "Wlp=hi-hj\n", + "Wnet=Whp+Wlp\n", + "#results\n", + "print \"Thermal efficiency in case 1= %.1f percent\"%(eff*100)\n", + "print \"\\n Thermal efficiency in case 1= %.1f percent\"%(etat*100)\n", + "print \"\\n High pressure work = %.1f Btu/lbm\"%(Whp)\n", + "print \"\\n Low pressure work = %.1f Btu/lbm\"%(Wlp)\n", + "print \"\\n Net work = %.1f Btu/lbm\"%(Wnet)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:15.6 Pg:701" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "thermal efficiency = 42.6 percent\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "p2=600 #psia\n", + "p1=44 #psia\n", + "te=486.21 #F\n", + "tb=273.1 #F\n", + "J=778.16\n", + "p3=0.25 #psia\n", + "#calculations\n", + "hc=241.9\n", + "hj=834.6\n", + "y=1-0.805\n", + "v1=0.0172\n", + "v2=0.016\n", + "ha=28.06\n", + "hd=hc+v1*(p2-p1)*144/J\n", + "hb=ha+v2*(p1-p3)*144/J\n", + "hh=1374\n", + "Qa=hh-hd\n", + "Qr=(ha-hj)*(1-y)\n", + "etat=(Qa+Qr)/Qa\n", + "#results\n", + "print \"thermal efficiency = %.1f percent\"%(etat*100)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch16.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch16.ipynb new file mode 100644 index 00000000..5fcd8569 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch16.ipynb @@ -0,0 +1,797 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 16 Combustion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.1 Pg:738" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Molecule is C7 H17\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "per=85\n", + "#calculations\n", + "a=per/12\n", + "b=100-per\n", + "ad=1.13*a\n", + "bd=1.13*b\n", + "#results\n", + "print \"Molecule is C%d H%d\"%(ad,bd+1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.2 Pg:738" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Oxygen = 8.74 and Nitrogen = 32.90\n", + "\n", + "Equation is C7.333 H6 + 8.74 O2 + 32.85 N2 = 7.333 CO2 + 3 H2O + 0.03120 SO2 + 32.90 N2\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "per=0.071 #mass fraction of nitrogen\n", + "#calculations\n", + "O2=8.74\n", + "N2=per/2 + 3.76*O2\n", + "Nin=32.85\n", + "CO2=7.333\n", + "H2o=3\n", + "So2=0.0312\n", + "#results\n", + "print \"Oxygen = %.2f and Nitrogen = %.2f\"%(O2,N2)\n", + "print \"\\nEquation is C%.3f H%d + %.2f O2 + %.2f N2 = %.3f CO2 + %d H2O + %.5f SO2 + %.2f N2\"%(CO2,2*H2o,O2,Nin,CO2,H2o,So2,N2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.3 Pg:739" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Air fuel ratio = 12.06 lbm air/lbm fuel\n", + "\n", + "In dry air, Air-fuel ratio = 9.9 lbm air/lbm fuel as fired\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "M=29\n", + "m1=8.74\n", + "m2=32.85\n", + "fuel=100 #lbm\n", + "#calculations\n", + "mass=M*(m1+m2)\n", + "AF=mass/fuel\n", + "a2=9.75\n", + "b2=12.19\n", + "AF2=mass/(fuel+a2+b2)\n", + "#results\n", + "print \"Air fuel ratio = %.2f lbm air/lbm fuel\"%(AF)\n", + "print \"\\nIn dry air, Air-fuel ratio = %.1f lbm air/lbm fuel as fired\"%(AF2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.4 Pg:740" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mass of dry flue gases = 12.50 lbm dry flue gas/lbm fuel ash and moisture free\n", + "\n", + " Mass of dry flue gases = 10.25 lbm dry flue gas/lbm fuel as fired \n", + "\n", + " Energy carried away = 187079.8 btu/mol coal as fired which is same as = 1534.2 Btu/lbm mol coal \n", + "The answers are a bit different due to rounding off errors in textbook\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "m1=322.3 #Mass of Co2\n", + "m2=2 #Mass of SO2\n", + "m3=926 #Mass of N2\n", + "basis=121.94 #Basis taken\n", + "#calculations\n", + "m=m1+m2+m3\n", + "ratio=m/basis\n", + "dh=5777 #Btu/mol\n", + "h1=dh*7.364\n", + "h2=14037\n", + "h3=130501\n", + "H=h1+h2+h3\n", + "hrat=H/basis\n", + "#results\n", + "print \"Mass of dry flue gases = %.2f lbm dry flue gas/lbm fuel ash and moisture free\"%(m/100)\n", + "print \"\\n Mass of dry flue gases = %.2f lbm dry flue gas/lbm fuel as fired \"%(ratio)\n", + "print \"\\n Energy carried away = %.1f btu/mol coal as fired which is same as = %.1f Btu/lbm mol coal \"%(H, hrat)\n", + "print \"The answers are a bit different due to rounding off errors in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.6 Pg:741" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final orsat composition is 1 CO2 + 0.22 H20 + 7.52 N2\n", + "\n", + " Percentage of co2 on a wet basis = 11.4 percent\n", + "\n", + " percentage of co2 on a dry basis = 11.74 percent\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "p=14.7 #psia\n", + "ps=0.363 #psia\n", + "n2=7.52 #moles\n", + "n1=1 #moles\n", + "#calculations\n", + "x= (n1+n2)*ps/p /(1-ps/p)\n", + "n=n1+n2+x\n", + "y1=n1/n\n", + "y2=n1/(n1+n2)\n", + "#results\n", + "print \"Final orsat composition is %d CO2 + %.2f H20 + %.2f N2\"%(n1, x, n2)\n", + "print \"\\n Percentage of co2 on a wet basis = %.1f percent\"%(y1*100)\n", + "print \"\\n percentage of co2 on a dry basis = %.2f percent\"%(y2*100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.7 Pg:742" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Air fuel ratio = 11.3 lbm air/lbm fuel\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "N2=78.1\n", + "M=29\n", + "co2=8.7\n", + "co=8.9\n", + "x4=0.3\n", + "x5=3.7\n", + "x6=14.7\n", + "#calculations\n", + "O2=N2/3.76\n", + "Z=(co2+co+x4)/8\n", + "AF=(O2+N2)*M/(Z*113)\n", + "#results\n", + "print \"Air fuel ratio = %.1f lbm air/lbm fuel\"%(AF)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.8 Pg:743" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Air fuel ratio = 10.2 lbm air/lbm fuel as fired\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "basis=100 #lbm\n", + "x1=0.6\n", + "ash=12 #lbm\n", + "N2=79.7\n", + "M=29\n", + "#calculations\n", + "x=ash/x1\n", + "C=(1-x1)*x\n", + "O2=N2/3.76\n", + "a= (14.6+0.2)/(5.83-0.66)\n", + "AF=(O2+N2)*M/(a*100)\n", + "#results\n", + "print \"Air fuel ratio = %.1f lbm air/lbm fuel as fired\"%(AF)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.9 Pg:744" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Air fuel ratio = 11.4 lbm air/lbm fuel\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "N2=78.1 #Moles of Nitrogen\n", + "M=29 #Molar mass of Air\n", + "ba=2.12 #Basis\n", + "x4=0.3 #Moles of Ch4\n", + "x5=3.7 #Moles of H2\n", + "x6=14.7 #moles of H2o\n", + "#calculations\n", + "O2=N2/3.76\n", + "O2=N2/3.76\n", + "Z=(x4*4+x5*2+x6*2)/17\n", + "AF=(O2+N2)*M/(Z*113)\n", + "#results\n", + "print \"Air fuel ratio = %.1f lbm air/lbm fuel\"%(AF)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.10 Pg:745" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Air fuel ratio = 11.3 lbm air/lbm fuel\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "N2=78.1 #Moles of Nitrogen\n", + "M=29 #Molar mass of Air\n", + "ba=2.12 #Basis\n", + "x4=0.3 #Moles of Ch4\n", + "x5=3.7 #Moles of H2\n", + "x6=14.7 #moles of H2o\n", + "#calculations\n", + "O2=N2/3.76\n", + "c=14.7\n", + "b= x4*4 + x5*2 + x6*2\n", + "a=b/ba\n", + "AF=(O2+N2)*M/(a*12 + b)\n", + "#results\n", + "print \"Air fuel ratio = %.1f lbm air/lbm fuel\"%(AF)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.11 Pg:746" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Air fuel ratio = 11.3 lbm air/lbm fuel\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "co2=8.7 #Moles of CO2\n", + "co=8.9 #Moles of CO\n", + "N2=78.1 #Moles of Nitrogen\n", + "M=29 #Molar mass of Air\n", + "ba=2.12 #Basis\n", + "x4=0.3 #Moles of Ch4\n", + "x5=3.7 #Moles of H2\n", + "x6=14.7 #moles of H2o\n", + "#calculations\n", + "O2=N2/3.76\n", + "c=14.7\n", + "Z=2.238\n", + "X=(Z*17-x4*4-x5*2)/2\n", + "a=co2+co/2+x4+x6/2\n", + "b=3.764*a\n", + "AF=(O2+N2)*M/(Z*113)\n", + "#results\n", + "print \"Air fuel ratio = %.1f lbm air/lbm fuel\"%(AF)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.12 Pg:747" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Air fuel ratio = 11.37\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "x1=8.7 #Moles of Co2\n", + "x2=8.9 #Moles of CO\n", + "x3=0.3 #Moles of O2\n", + "N=78.1 #Moles of N2\n", + "z=113 #Af factor\n", + "M=29 #Molar mass of air\n", + "#calculations\n", + "co2=(x1+x2+x3)*100/(N+x1+x2+x3)\n", + "a=2.325\n", + "AF=103*M/(a*z)\n", + "#results\n", + "print \"Air fuel ratio = %.2f\"%(AF)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.13 Pg:748" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Nitrogen = 87.1 percent\n", + "\n", + "Equation is a(96 CH4 + 3 H2+ 1 CO) + 87.1/3.76 O2 + 87.1 N2 = 10.8 CO2 + 1.2 CO + 0.6 H2 + 0.3 CH4 + 87.1 N2\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "co=1.2 #Moles of CO\n", + "co2=10.8 #Moles of CO2\n", + "#calculations\n", + "H2=co/2\n", + "ch4=0.3\n", + "N2=88-H2-ch4\n", + "#results\n", + "print \"Nitrogen = %.1f percent\"%(N2)\n", + "print \"\\nEquation is a(96 CH4 + 3 H2+ 1 CO) + %.1f/3.76 O2 + %.1f N2 = %.1f CO2 + %.1f CO + %.1f H2 + %.1f CH4 + %.1f N2\"%(N2,N2,co2,co,H2,ch4,N2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.14 Pg:748" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Higher heating value = -2363996 Btu\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "dH=-2369859 #Btu\n", + "r=1.986 #Gas constant\n", + "dn=5.5 #Change in number of moles\n", + "T=536.7 #R\n", + "#calculations\n", + "dQ=dH+dn*r*T\n", + "#results\n", + "print \"Higher heating value = %d Btu\"%(dQ)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.15 Pg:749" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "from steam tables,\n", + "Lower heating value = -2203398 Btu/lbm\n", + "The answers are a bit different due to rounding off error in textbook.\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "M2=18 #Molar mass of water\n", + "M=170 #Molar mass of octane\n", + "p=0.4593 #Pressure of octane #psia\n", + "print \"from steam tables,\"\n", + "vfg=694.9 \n", + "J=778.2\n", + "m=9*18 #Mass of water\n", + "u1=-2363996 #Btu\n", + "#calculations\n", + "hfg=1050.4 #Btu/lbm\n", + "ufg= hfg- p*vfg*144/J\n", + "dU=ufg*m \n", + "Lhv=u1+dU\n", + "#results\n", + "print \"Lower heating value = %d Btu/lbm\"%(Lhv)\n", + "print \"The answers are a bit different due to rounding off error in textbook.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.16 Pg:750" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From Table B-10,\n", + "Heat of reaction = -2202154 Btu\n", + "The answers are a bit different due to rounding off error in textbook.\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "n1=8 #Moles of CO2\n", + "n2=9 #Moles of H2O\n", + "n3=1 #Moles of Octane\n", + "n4=12.5 #Moles of Oxygen\n", + "print \"From Table B-10,\"\n", + "U11=3852 #Internal energy at 1000 R of CO2\n", + "U12=115 #Internal energy at 537 R of CO2\n", + "U21=3009 #Internal energy at 1000 R of H2O\n", + "U22=101 #Internal energy at 537 R of H2O\n", + "U31=24773 #Internal energy at 1000 R of Octane\n", + "U32=640 #Internal energy at 537 R of Octane\n", + "U41=2539 #Internal energy at 1000 R of Oxygen\n", + "U42=83 #Internal energy at 537 R of Oxygen\n", + "H=-2203389 #heat Btu\n", + "#calculations\n", + "dU1=n1*(U11-U12)+n2*(U21-U22)\n", + "dU2=n3*(U31-U32)+n4*(U41-U42)\n", + "Q=H+dU1-dU2\n", + "#results\n", + "print \"Heat of reaction = %d Btu\"%(Q)\n", + "print \"The answers are a bit different due to rounding off error in textbook.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.17 Pg:751" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "from table B-10,\n", + "Upon interpolating, T2 = 5271 R\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "n1=8 #Moles of CO2\n", + "n2=9 #Moles of H2O\n", + "n3=47 #Moles of N2\n", + "print \"from table B-10,\"\n", + "h1=118 #Enthalpy of CO2\n", + "h2=104 #Enthalpy of H2O\n", + "h3=82.5 #Enthalpy of N2\n", + "Q=2203279 #Btu\n", + "#calculations\n", + "U11=n1*h1+n2*h2+n3*h3\n", + "U12=U11+Q\n", + "T2=5271 #R\n", + "#results\n", + "print \"Upon interpolating, T2 = %d R\"%(T2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.18 Pg:752" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "In case 1, Equilibrium constant = 38.5 \n", + "\n", + "In case 2, Equilibrium constant = 1480.1 \n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "n1=0.95\n", + "n2=0.05\n", + "n3=0.025\n", + "P=147 #psia\n", + "pa=14.7 #psia\n", + "#calculations\n", + "n=n1+n2+n3\n", + "p1=n1/n *P/pa\n", + "p2=n2/n *P/pa\n", + "p3=n3/n *P/pa\n", + "Kp1= p1/(p2*p3**0.5)\n", + "Kp2= p1**2 /(p2**2 *p3)\n", + "#results\n", + "print \"In case 1, Equilibrium constant = %.1f \"%(Kp1)\n", + "print \"\\nIn case 2, Equilibrium constant = %.1f \"%(Kp2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:16.19 Pg:753" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "percentage of dissociation = 34.3 percent\n", + "\n", + " If pressure =10 . Degree of dissociation = 18 percent\n" + ] + } + ], + "source": [ + "from sympy.abc import x,y\n", + "from sympy import solve,N\n", + "#Initialization of variables\n", + "kp=5 \n", + "#calculations\n", + "vec=solve(24*x**3 + 3*x-2,x)\n", + "x=N(vec[2],6)\n", + "vec2=solve(249*y**3 +3*y-2,y)\n", + "y=N(vec2[2],6)\n", + "#results\n", + "print \"percentage of dissociation = %.1f percent\"%(x*100)\n", + "print \"\\n If pressure =10 . Degree of dissociation = %d percent\"%(y*100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Ex:16.20 Pg:754" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extent of reaction= 78 percent\n" + ] + } + ], + "source": [ + "from sympy.abc import x,y\n", + "from sympy import solve,N\n", + "\n", + "#Initialization of variables\n", + "vec=solve(24*x**3 +48*x**2 + 7*x -4,x)\n", + "x=N(vec[1],6) *100\n", + "#results\n", + "print \"Extent of reaction= %d percent\"%(100-x)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch17.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch17.ipynb new file mode 100644 index 00000000..9b54ad03 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch17.ipynb @@ -0,0 +1,87 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 17 Gas cycles and processes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:17.1 Pg:768" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " Thermal efficiency = 14.9 percent\n", + "\n", + " Moles of fuel burned per mol of air = 0.00177 mol fuel/mol air\n", + "\n", + " Mass ratio in pounds = 0.00866 lbm fuel/lbm air\n", + "\n", + " Air fuel ratio = 115 lbm air/lbm fuel\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "\n", + "#Initialization of variables\n", + "ha=1033 #Btu/mol air\n", + "hbd=2992 #Btu/mol air\n", + "hc=7823 #Btu/mol air\n", + "hdd=5142 #Btu/mol air\n", + "Hv=2733000 #Btu/mol\n", + "M=29\n", + "#calculations\n", + "Wt=hc-hdd\n", + "Wc=ha-hbd\n", + "Net=Wt+Wc\n", + "Heat=hc-hbd\n", + "etat=Net*100/Heat\n", + "molair=Heat/Hv\n", + "mr=molair*142/M\n", + "Af=1/mr\n", + "#results\n", + "print \"\\n Thermal efficiency = %.1f percent\"%(etat)\n", + "print \"\\n Moles of fuel burned per mol of air = %.5f mol fuel/mol air\"%(molair)\n", + "print \"\\n Mass ratio in pounds = %.5f lbm fuel/lbm air\"%(mr)\n", + "print \"\\n Air fuel ratio = %d lbm air/lbm fuel\"%(Af)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch2.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch2.ipynb new file mode 100644 index 00000000..30c440b6 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch2.ipynb @@ -0,0 +1,107 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 2 Fundamental Concepts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:2.1 Pg:34" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Potential energy = 3217.39 ft-lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "z=100 #ft\n", + "m=32.1739 #lbm\n", + "#calculations\n", + "PE=m*z\n", + "#results\n", + "print \"Potential energy = %.2f ft-lbm\"%(PE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:2.2 Pg:35" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Absolute energy of this mixture = 5.40e+17 ft-lbf\n", + "\n", + " In case b, there is no change in mass\n", + "\n", + " Change in mass = -3.15e-09 lbm\n", + "The answers are a bit different due to rounding off error in textbook.\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "m0=18.016 #lbm\n", + "gc=32.1739 #lbm ft/lbf sec**2\n", + "c=186000*5280\n", + "dU=94.4*10**6 #ft-lbf\n", + "#calculations\n", + "U=m0/gc *c**2\n", + "dm= -dU*gc/c**2\n", + "#results\n", + "print \"Absolute energy of this mixture = %.2e ft-lbf\"%(U)\n", + "print \"\\n In case b, there is no change in mass\"\n", + "print \"\\n Change in mass = %.2e lbm\"%(dm)\n", + "print \"The answers are a bit different due to rounding off error in textbook.\"" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch3.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch3.ipynb new file mode 100644 index 00000000..9ac141c2 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch3.ipynb @@ -0,0 +1,100 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 3 Temperature and the ideal gas" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:3.2 Pg:59 " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Volume = 379.5 ft**3/mol\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "p=14.7 #psia\n", + "R0=1545 \n", + "t=460 +60 #R\n", + "#calculations\n", + "v=R0*t/(p*144)\n", + "#results\n", + "print \"Volume = %.1f ft**3/mol\"%(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:3.3 Pg:59" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "density of nitrogen = 0.0932 lbm/ft**3\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "p=20.0 #psia\n", + "R0=1545.0 \n", + "t=460 +100 #R\n", + "M=28\n", + "#calculations\n", + "v=R0*t/(p*144*M)\n", + "rho=1/v\n", + "#results\n", + "print \"density of nitrogen = %.4f lbm/ft**3\"%(rho)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch5.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch5.ipynb new file mode 100644 index 00000000..576e9b60 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch5.ipynb @@ -0,0 +1,149 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 5 The first law and the dynamic open system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:5.2 Pg:105" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "work done by the system = -9.7 Btu/lbm\n", + "\n", + " Power = -48.6 Btu/s\n" + ] + } + ], + "source": [ + "## Initialization of variables\n", + "rate= 5 #lbm/sec\n", + "Q=50 #Btu/s\n", + "h2=1020 #Btu/lbm\n", + "h1=1000 #Btu/lbm\n", + "V2=50 #ft/s\n", + "V1=100 #ft/s\n", + "J=778\n", + "g=32.2 #ft/s**2\n", + "gc=g\n", + "Z2=0\n", + "Z1=100 #ft\n", + "#calculations\n", + "dw=Q/rate -(h2-h1) -(V2**2- V1**2)/(2*gc*J) -g/gc *(Z2-Z1)/J\n", + "power=dw*rate\n", + "#results\n", + "print \"work done by the system = %.1f Btu/lbm\"%(dw)\n", + "print \"\\n Power = %.1f Btu/s\"%(power)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:5.3 Pg:106" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Area of inlet pipe = 0.75 ft**2\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "V=100.0 #ft/s\n", + "v=15 #lbm/ft**3\n", + "m=5 #lbm/s\n", + "#calculations\n", + "A=m*v/V\n", + "#results\n", + "print \"Area of inlet pipe = %.2f ft**2\"%(A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:5.4 Pg:106" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From table B-4\n", + "Final temperature of the steam = 540 F\n", + "\n", + " Change in temperature = 212 F\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "P=100.0 #psia\n", + "#calculations\n", + "print \"From table B-4\"\n", + "h=1187.2 #Btu/lbm\n", + "t1=328 #F\n", + "t2=540 #F\n", + "dt=t2-t1\n", + "#results\n", + "print \"Final temperature of the steam = %d F\"%(t2)\n", + "print \"\\n Change in temperature = %d F\"%(dt)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch7.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch7.ipynb new file mode 100644 index 00000000..54e86231 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch7.ipynb @@ -0,0 +1,172 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 7 The second law" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:7.2 Pg:192" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Entropy in ab part = 0.1213 Btu/lbm R\n", + "\n", + " Entropy in ac part = 0.1688 Btu/lbm R\n", + "\n", + " Efficiency = 9.80 percent\n", + "The answers are a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "from math import log\n", + "#Initialization of variables\n", + "cv=0.175 #Btu/lbm R\n", + "R0=1.986\n", + "M=29\n", + "T2=1040 #R\n", + "T1=520 #R\n", + "#calculations\n", + "cp=cv+R0/M\n", + "sab=cv*log(T2/T1)\n", + "sac=cp*log(T2/T1)\n", + "dqab=cv*(T2-T1)\n", + "dqca=cp*(T1-T2)\n", + "dqrev=T2*(sac-sab)\n", + "eta=(dqab+dqrev+dqca)/(dqab+dqrev)\n", + "#results\n", + "print \"Entropy in ab part = %.4f Btu/lbm R\"%(sab)\n", + "print \"\\n Entropy in ac part = %.4f Btu/lbm R\"%(sac)\n", + "print \"\\n Efficiency = %.2f percent\"%(eta*100)\n", + "print \"The answers are a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:7.3 Pg:193" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Change in entropy of the process = 0.0192 Btu/R\n", + "The answer is a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log\n", + "#Initialization of variables\n", + "tc=32 #F\n", + "th=80 #F\n", + "mw=5 #lbm\n", + "mi=1 #lbm\n", + "P=14.7 #psia\n", + "cp=1\n", + "#calculations\n", + "t= (-144*mi+tc*mi+th*mw)/(mw+mi)\n", + "ds1=144/(tc+460)\n", + "ds2=cp*log((460+t)/(460+tc))\n", + "dsice=ds1+ds2\n", + "dswater=mw*cp*log((t+460)/(460+th))\n", + "ds=dsice+dswater\n", + "#results\n", + "print \"Change in entropy of the process = %.4f Btu/R\"%(ds)\n", + "print \"The answer is a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:7.4 Pg:194" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Change in available energy = -3.5 Btu/lbm\n", + "\n", + " The available energy of the isolated system decreased in the amount of -36.5 Btu/lbm\n", + "The answer is a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "from __future__ import division\n", + "from math import log\n", + "\n", + "#Initialization of variables\n", + "cp=1\n", + "T2=60 #F\n", + "T1=100 #F\n", + "ta=32 #F\n", + "#calculations\n", + "dq=cp*(T2-T1)\n", + "ds=cp*log((460+T2)/(460+T1))\n", + "dE=dq-ds*(ta+460)\n", + "dec=dq-dE\n", + "#results\n", + "print \"Change in available energy = %.1f Btu/lbm\"%(dE)\n", + "print \"\\n The available energy of the isolated system decreased in the amount of %.1f Btu/lbm\"%(dec)\n", + "print \"The answer is a bit different due to rounding off error in textbook\"" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/ch9.ipynb b/Thermodynamics_by_Gaggioli_and_Obert/ch9.ipynb new file mode 100644 index 00000000..6a516fc0 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/ch9.ipynb @@ -0,0 +1,440 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Chapter 9 Properties of the pure substance" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.1 Pg:304" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From steam tables,\n", + "Internal energy = -0.0002625 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "T=32 #F\n", + "m=1 #lbm\n", + "J=778.16\n", + "#calculations\n", + "print \"From steam tables,\"\n", + "hf=0 \n", + "p=0.08854 #psia\n", + "vf=0.01602 #ft**3/lbm\n", + "u=hf-p*144*vf/J\n", + "#results\n", + "print \"Internal energy = %.7f Btu/lbm\"%(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.2 Pg:305" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "from steam tables,\n", + "Change in entropy = 0.351 Btu/lbm R\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "P=40 #psia\n", + "#calculations\n", + "print \"from steam tables,\"\n", + "hf=200.8 #Btu/lbm\n", + "hg=27 #Btu/lbm\n", + "T=495 #R\n", + "ds=(hf-hg)/T\n", + "#results\n", + "print \"Change in entropy = %.3f Btu/lbm R\"%(ds)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.3 Pg:305" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From table B-14,\n", + "specific enthalpy = 36.0 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "x=0.35\n", + "T=18 #F\n", + "#calculations\n", + "print \"From table B-14,\"\n", + "hf=12.12 #Btu/lbm\n", + "hg=80.27 #Btu.lbm\n", + "hfg=-hf+hg\n", + "h=hf+x*hfg\n", + "#results\n", + "print \"specific enthalpy = %.1f Btu/lbm\"%(h)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.4 Pg:306" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From table B-14,\n", + "Heat required = 49.71 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "x=0.35\n", + "T=18 #F\n", + "T2=55.5 #F\n", + "#calculations\n", + "print \"From table B-14,\"\n", + "hf=12.12 #Btu/lbm\n", + "hg=80.27 #Btu.lbm\n", + "hfg=-hf+hg\n", + "h=hf+x*hfg\n", + "h2=85.68 #Btu/lbm\n", + "dh=h2-h\n", + "#results\n", + "print \"Heat required = %.2f Btu/lbm\"%(dh)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.5 Pg:307" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From mollier chart,\n", + "enthalpy = 120 Btu/lbm\n", + "\n", + " Qulaity = 0.83\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "P=1460 #psia\n", + "T=135 #F\n", + "P2=700 #psia\n", + "#calculations\n", + "print \"From mollier chart,\"\n", + "h=120 #Btu/lbm\n", + "x=0.83\n", + "#results\n", + "print \"enthalpy = %d Btu/lbm\"%(h)\n", + "print \"\\n Qulaity = %.2f\"%(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.6 Pg:307" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From table 3,\n", + "Heat transferred = 11.4 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "m=1 #lbm\n", + "P1=144 #psia\n", + "P2=150 #psia\n", + "T1=360 #F\n", + "J=778.16\n", + "#calculations\n", + "print \"From table 3,\"\n", + "v1=3.160 #ft**3/lbm\n", + "h1=1196.5 #Btu/lbm\n", + "u1=h1-P1*144*v1/J\n", + "h2=1211.4 #Btu/lbm\n", + "u2=h2-P2*144*v1/J\n", + "dq=u2-u1\n", + "#results\n", + "print \"Heat transferred = %.1f Btu/lbm\"%(dq)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.7 Pg:307" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From table 3,\n", + "Work done = -3.0 Btu/lbm\n", + "\n", + " In case 2, work required = -5.0 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "T1=100 #F\n", + "P2=1000 #psia\n", + "x=0.6\n", + "J=778.16\n", + "#calculations\n", + "print \"From table 3,\"\n", + "v=0.01613 #ft**3/lbm\n", + "P1=0.9 #psia\n", + "wrev=-v*(P2-P1)*144/J\n", + "dv=0.000051 #ft**3/lbm\n", + "wcomp=(P2+P1)/2 *dv*144/J\n", + "wact=wrev/x\n", + "#results\n", + "print \"Work done = %.1f Btu/lbm\"%(wrev)\n", + "print \"\\n In case 2, work required = %.1f Btu/lbm\"%(wact)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.8 Pg:308" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "from steam table 2,\n", + "Heat transferred = 1120.8 Btu/lbm\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "pa=1000 #atm\n", + "ta=100 #F\n", + "#calculations\n", + "hf=67.97 #Btu/lbm\n", + "w=3 #Btu/lbm\n", + "ha=hf+w\n", + "print \"from steam table 2,\"\n", + "hc=1191.8 #Btu/lbm\n", + "qrev=hc-ha\n", + "#results\n", + "print \"Heat transferred = %.1f Btu/lbm\"%(qrev)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.9 Pg:309" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From steam tables,\n", + "Work done = 266 Btu/lbm\n", + "\n", + " work done in case 2 = 186.8 Btu/lbm\n", + "\n", + " Final state pressure = 3 psia\n", + "The answer is a bit different due to rounding off error in textbook\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "P1=144 #psia\n", + "T1=400 #F\n", + "y=0.7\n", + "#calculations\n", + "print \"From steam tables,\"\n", + "h1=1220.4 #Btu/lbm\n", + "s1=1.6050 #Btu/lbm R\n", + "s2=1.6050 #Btu/lbm R\n", + "P2=3 #psia\n", + "sf=0.2008 #Btu/lbm R\n", + "sfg=1.6855 #Btu/lbm R\n", + "x=(s1-sf)/sfg\n", + "hf=109.37 #Btu/lbm\n", + "hfg=1013.2 #Btu/#bm\n", + "h2=hf+x*hfg\n", + "work=h1-h2\n", + "dw=y*work\n", + "h2d=h1-dw\n", + "#results\n", + "print \"Work done = %d Btu/lbm\"%(work)\n", + "print \"\\n work done in case 2 = %.1f Btu/lbm\"%(dw)\n", + "print \"\\n Final state pressure = %d psia\"%(P2)\n", + "print \"The answer is a bit different due to rounding off error in textbook\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ex:9.10 Pg:309" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "From steam tables,\n", + "Quality of wet steam = 99.8 percent\n" + ] + } + ], + "source": [ + "#Initialization of variables\n", + "pb=14.696 #psia\n", + "pa=150 #psia\n", + "tb=300 #F\n", + "#calculations\n", + "print \"From steam tables,\"\n", + "hb=1192.8 #Btu/lbm\n", + "ha=hb\n", + "hf=330.51 #Btu/lbm\n", + "hfg=863.6 #Btu/lbm\n", + "x=(ha-hf)/hfg\n", + "#results\n", + "print \"Quality of wet steam = %.1f percent\"%(x*100)" + ] + } + ], + "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 +} diff --git a/Thermodynamics_by_Gaggioli_and_Obert/screenshots/changeInMoisture14.png b/Thermodynamics_by_Gaggioli_and_Obert/screenshots/changeInMoisture14.png Binary files differnew file mode 100644 index 00000000..bc4da4d9 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/screenshots/changeInMoisture14.png diff --git a/Thermodynamics_by_Gaggioli_and_Obert/screenshots/degreeOfSaturation14.png b/Thermodynamics_by_Gaggioli_and_Obert/screenshots/degreeOfSaturation14.png Binary files differnew file mode 100644 index 00000000..7bb12dd0 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/screenshots/degreeOfSaturation14.png diff --git a/Thermodynamics_by_Gaggioli_and_Obert/screenshots/humidityratio14.png b/Thermodynamics_by_Gaggioli_and_Obert/screenshots/humidityratio14.png Binary files differnew file mode 100644 index 00000000..cb399933 --- /dev/null +++ b/Thermodynamics_by_Gaggioli_and_Obert/screenshots/humidityratio14.png |