summaryrefslogtreecommitdiff
path: root/Satellite_Communications
diff options
context:
space:
mode:
authornice2014-08-27 16:12:51 +0530
committernice2014-08-27 16:12:51 +0530
commitf873023db6ddb02bba555fb650a4b4c90340f56a (patch)
treeb866cee9b099fe202c72538b5be2a099d0320a24 /Satellite_Communications
parent728bf707ac994b2cf05a32d8985d5ea27536cf34 (diff)
downloadPython-Textbook-Companions-f873023db6ddb02bba555fb650a4b4c90340f56a.tar.gz
Python-Textbook-Companions-f873023db6ddb02bba555fb650a4b4c90340f56a.tar.bz2
Python-Textbook-Companions-f873023db6ddb02bba555fb650a4b4c90340f56a.zip
adding book
Diffstat (limited to 'Satellite_Communications')
-rwxr-xr-xSatellite_Communications/Chapter_10.ipynb200
-rwxr-xr-xSatellite_Communications/Chapter_12.ipynb932
-rwxr-xr-xSatellite_Communications/Chapter_13.ipynb302
-rwxr-xr-xSatellite_Communications/Chapter_14.ipynb398
-rwxr-xr-xSatellite_Communications/Chapter_16.ipynb186
-rwxr-xr-xSatellite_Communications/Chapter_2.ipynb1002
-rwxr-xr-xSatellite_Communications/Chapter_3.ipynb268
-rwxr-xr-xSatellite_Communications/Chapter_4.ipynb124
-rwxr-xr-xSatellite_Communications/Chapter_5.ipynb83
-rwxr-xr-xSatellite_Communications/Chapter_6.ipynb271
-rwxr-xr-xSatellite_Communications/Chapter_9.ipynb295
-rwxr-xr-xSatellite_Communications/README.txt10
-rwxr-xr-xSatellite_Communications/screenshots/arrayfactor.pngbin0 -> 50405 bytes
-rwxr-xr-xSatellite_Communications/screenshots/polararray.pngbin0 -> 42925 bytes
-rwxr-xr-xSatellite_Communications/screenshots/tita.pngbin0 -> 39617 bytes
15 files changed, 4071 insertions, 0 deletions
diff --git a/Satellite_Communications/Chapter_10.ipynb b/Satellite_Communications/Chapter_10.ipynb
new file mode 100755
index 00000000..3886255a
--- /dev/null
+++ b/Satellite_Communications/Chapter_10.ipynb
@@ -0,0 +1,200 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:e0d184d1729c611848b690830ee717bb5bc71942466a1adef15c51a942411c9c"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 10: Digital Signal"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 10.1, Page 272"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "PR=0.01 #The Average power received(watts)\n",
+ "Tb=0.0001 #Bit period(seconds)\n",
+ "N0=10**-7 #Noise power(joule)\n",
+ "\n",
+ "#Calculations\n",
+ "\n",
+ "\n",
+ "Eb=PR*Tb #Energy per bit received (joule)\n",
+ "x=math.sqrt(Eb/N0)\n",
+ "\n",
+ "from scipy import integrate\n",
+ "f=lambda t:math.exp(-t**2)\n",
+ "erf=integrate.quad(f,0,x)\n",
+ "erf1=erf[0]*(2/math.pi**0.5)\n",
+ "BER=(1-erf1)*(10**6)/2\n",
+ "BER=round(BER,2)\n",
+ "\n",
+ "print \"The Bit error rate is\", BER,\"*10^-6\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Bit error rate is 3.87 *10^-6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "EXample 10.2, Page 274"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "Rb=61 #Transmission rate (Mb/s)\n",
+ "ENR=9.5 #Required Energy to noise ratio(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "Rb=10*math.log10(61*10**6) #Converting Transmission rate to dB\n",
+ "CNR=Rb+ENR #Carrier to noise ratio\n",
+ "CNR=round(CNR,2)\n",
+ "#Results\n",
+ "\n",
+ "print \"Required Carrier to noise ratio is\", CNR,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Required Carrier to noise ratio is 87.35 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 10.3, Page 275"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "BER=10**-5 #Maximum allowable bit error rate\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "import math\n",
+ "from pylab import*\n",
+ "%pylab inline\n",
+ "x=linspace(8,10,11) #Eb/N0 ratio represented by x\n",
+ "x1=x**0.5\n",
+ "for i in range(0,11):\n",
+ " x[i]=10*math.log10(x[i]) #Converting x into decibels\n",
+ "\n",
+ "\n",
+ "erf=linspace(0,0,11) #Initialization for erf function\n",
+ "Pe=linspace(0,0,11) #Initialization for Probablity of error\n",
+ "\n",
+ "from scipy import integrate\n",
+ "f=lambda t:math.exp(-t**2)\n",
+ "for i in range(0,10):\n",
+ " k=integrate.quad(f,0,x1[i])\n",
+ " erf[i]=k[0]*(2/math.pi**0.5) \n",
+ " Pe[i]=(1-erf[i])/2 #Probability of error\n",
+ "\n",
+ "y=linspace(9,9.59,5)\n",
+ "z=linspace(BER,BER,5)\n",
+ "a=linspace(9.59,9.59,5)\n",
+ "b=linspace(0,BER,5)\n",
+ "plot(x,Pe)\n",
+ "plot(y,z)\n",
+ "plot(a,b)\n",
+ "xlabel('xdB')\n",
+ "ylabel('Pe(x)')\n",
+ "show() \n",
+ "x=9.6 #The Eb/N0 ratio for Maximum BER(dB) from the graph\n",
+ "EbN0=x+2 #Eb/N0 ratio with implementation margin\n",
+ "#Results\n",
+ "\n",
+ "print \"The Eb/N0 ratio with allowable BER of 10^-5 and implementation margin of 2dB is\",EbN0,\"dB\"\n",
+ "\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Populating the interactive namespace from numpy and matplotlib\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stderr",
+ "text": [
+ "WARNING: pylab import has clobbered these variables: ['linalg', 'draw_if_interactive', 'random', 'power', 'info', 'fft']\n",
+ "`%pylab --no-import-all` prevents importing * from pylab and numpy\n"
+ ]
+ },
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "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\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x3733c90>"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Eb/N0 ratio with allowable BER of 10^-5 and implementation margin of 2dB is 11.6 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_12.ipynb b/Satellite_Communications/Chapter_12.ipynb
new file mode 100755
index 00000000..17f2b0db
--- /dev/null
+++ b/Satellite_Communications/Chapter_12.ipynb
@@ -0,0 +1,932 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:7a06e4236eec67757bd708fe8b0da2c40e097cf72b93ac25eb7d44065acbeff1"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 12: The Space Link"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.1, Page 306"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "P=6 #Transmit power(Watts)\n",
+ "G=48.2 #Antenna Gain(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "EIRP=10*math.log10(P)+G #Equivalent isotropic radiated power(dB)\n",
+ "EIRP=round(EIRP)\n",
+ "#Result\n",
+ "\n",
+ "print \"Hence the Equivalent isotropic radiated power is\",EIRP,\"dBW\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Hence the Equivalent isotropic radiated power is 56.0 dBW\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.2, Page 306"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "\n",
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "D=3 #Antenna size(m)\n",
+ "f=12 #Operating Frequency(GHz)\n",
+ "n=0.55 #Aperture efficiency\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "G=n*(10.472*f*D)**2 #Antenna Gain\n",
+ "G=10*math.log10(G) #Converting Antenna gain to dB\n",
+ "G=round(G,1)\n",
+ "#Result\n",
+ "\n",
+ "print \"The Antenna gain with given parameters is\", G,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Antenna gain with given parameters is 48.9 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.3, Page 308"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "r=42000 #Range between ground station and satellite\n",
+ "f=6000 #Frequency(MHz)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "FSL=32.4+20*math.log10(r)+20*math.log10(f) #Free space loss(dB)\n",
+ "FSL=round(FSL,1)\n",
+ "#Result\n",
+ "\n",
+ "print \"The free space loss at given frequency is\", FSL, \"dB\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The free space loss at given frequency is 200.4 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.4, Page 311"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "FSL=207 #Free space loss(dB)\n",
+ "RFL=1.5 #receiver feeder loss(dB)\n",
+ "AA=0.5 #Atmospheric Absorption loss(dB)\n",
+ "AML=0.5 #Antenna Alignment loss(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "LOSSES=FSL+RFL+AA+AML #Total link loss (dB)\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"The total link loss is\", LOSSES,\"dB\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The total link loss is 209.5 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.5, Page 312"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "TAn=35 # Antenna Noise Temperature(Kelvin)\n",
+ "TRn=100 # Receiver Noise Temperature(Kelvin)\n",
+ "k=1.38*10**-23 #Boltzman constant(joules)\n",
+ "B=36*10**6 #Bandwidth\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "N0=(TAn+TRn)*k #noise power density(10**-21 joules)\n",
+ "PN=N0*B/10**-12 #Noise power for given bandwidth(picoWatts)\n",
+ "\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"The noise Power density is\", N0,\"Joules\"\n",
+ "print \"The noise power for given bandwidth is\",PN,\"pW\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The noise Power density is 1.863e-21 Joules\n",
+ "The noise power for given bandwidth is 0.067068 pW\n"
+ ]
+ }
+ ],
+ "prompt_number": 5
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.6, Page 317"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "TRn=12 #Receiver Noise figure(dB)\n",
+ "G=40 #Gain of LNA(dB)\n",
+ "T0=120 #Noise temperature(Kelvin)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "F=10**(TRn/float(10)) #Converting noise power to ratio\n",
+ "Te=(F-1)*290 #Noise Temperature of the amplifier\n",
+ "G=10**(G/10) #Converting Gain of LNA to ratio\n",
+ "Tn=T0+Te/G #Overall Noise Temperature(Kelvin)\n",
+ "Tn=round(Tn,2)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The overall noise temperature is\", Tn, \"Kelvin\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The overall noise temperature is 120.43 Kelvin\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.7, Page 319"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "Tant=35 #Antenna noise temperature(kelvin)\n",
+ "Te1=150 #Receiver noise temperature(kelvin)\n",
+ "L=5 #Cable Loss (dB)\n",
+ "T0=290 \n",
+ "G1=10**5 #LNA Gain\n",
+ "F=12 #Receiver Noise figure(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "L=10**(L/float(10)) #Converting L into ratio\n",
+ "F=10**(F/float(10)) #Converting F into ratio\n",
+ "Ts=Tant+Te1+(L-1)*T0/G1+L*(F-1)*T0/G1 #Noise Temperature referred to the input(Kelvin)\n",
+ "Ts=round(Ts)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The noise temperature referred to the input is\",Ts,\"Kelvin\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The noise temperature referred to the input is 185.0 Kelvin\n"
+ ]
+ }
+ ],
+ "prompt_number": 7
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.8, Page 320"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "Tant=35 #Antenna noise temperature(kelvin)\n",
+ "Te1=150 #Receiver noise temperature(kelvin)\n",
+ "L=5 #Cable Loss (dB)\n",
+ "T0=290 \n",
+ "G1=10**5 #LNA Gain\n",
+ "F=12 #Receiver Noise figure(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "L=10**(L/float(10)) #Converting L into ratio\n",
+ "F=10**(F/float(10)) #Converting F into ratio\n",
+ "\n",
+ "\n",
+ "Ts=Tant+(L-1)*T0+L*Te1+L*(F-1)*T0/G1 #Noise Temperature referred to the input(Kelvin)\n",
+ "Ts=round(Ts)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The noise temperature referred to the input is\",Ts,\"Kelvin\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The noise temperature referred to the input is 1137.0 Kelvin\n"
+ ]
+ }
+ ],
+ "prompt_number": 8
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.9, Page 322"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "FSL=206 #Free space loss(dB)\n",
+ "APL=1 #Antenna Pointing loss(dB)\n",
+ "AAL=2 #Atmospheric Absorption loss(dB)\n",
+ "RFL=1 #Receiver feeder loss(dB)\n",
+ "EIRP=48 #Equivalent isotropically radiated power(dBW)\n",
+ "f=12 #Frequency(GHz)\n",
+ "GTR=19.5 #G/T ratio(dB/K)\n",
+ "k=-228.60 #Value of k(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "LOSSES=FSL+APL+AAL+RFL #Total loss(dB)\n",
+ "CNR=EIRP+GTR-LOSSES-k #Carrier to noise ratio(dBHz)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The carrier to noise ratio is\",CNR,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The carrier to noise ratio is 86.1 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 9
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.10, Page 324"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "f=14 #Frequency(GHz)\n",
+ "Ps=-120 #Flux density required to saturate the transponder(dBW/m2)\n",
+ "LOSSES=2 #Propogation Losses(dB)\n",
+ "FSL=207 #Free-space loss(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "A0=-21.45-20*math.log10(f) #Effective antenna aperture(dB)\n",
+ "EIRP=Ps+A0+LOSSES+FSL #Equivalent isotropically radiated power(dB)\n",
+ "EIRP=round(EIRP,2)\n",
+ "\n",
+ "#Result\n",
+ "print \"The earth station EIRP required for saturation is\",EIRP,\"dBW\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The earth station EIRP required for saturation is 44.63 dBW\n"
+ ]
+ }
+ ],
+ "prompt_number": 10
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.11, Page 325"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "Ps=-91.4 #saturation flux density(dBW/m2)\n",
+ "f=14 #uplink frequency(GHz)\n",
+ "GTR=-6.7 #G/T (dB/k)\n",
+ "BO=11 #Input Back off(dB)\n",
+ "k=-228.6 #Value of k(dB)\n",
+ "RFL=0.6 #receiver feeder loss\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "A0=-21.5-20*math.log10(f) #Effective antenna aperture(dB)\n",
+ "A0=round(A0,1)\n",
+ "CNR=Ps+A0-BO+GTR-k-RFL #carrier to noise ratio(dB)\n",
+ "\n",
+ "#Result\n",
+ "print A0\n",
+ "print \"The carrier to noise ratio is\",CNR,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "-44.4\n",
+ "The carrier to noise ratio is 74.5 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 11
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.12, Page 326"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "B=36 #Transponder Bandwidth(MHz)\n",
+ "CNR=22 #Carrier to noise ratio(dB)\n",
+ "LOSSES=200 #Total transmission losses(dB)\n",
+ "GTR=31 #Earth station G/T (dB/K)\n",
+ "k=-228.6 #Value of k(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "B=10*math.log10(B*10**6) #Converting Bandwidth to dB\n",
+ "EIRP=CNR-GTR+LOSSES+k+B #Equivalent isotropically radiated power(dB)\n",
+ "EIRP=round(EIRP)\n",
+ "#Result\n",
+ "\n",
+ "print \"Satellite EIRP required is\",EIRP,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Satellite EIRP required is 38.0 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 12
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.13, Page 327"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "B=36*10**6 #Transponder Bandwidth(Hz)\n",
+ "R=0.2 #Roll off factor \n",
+ "GTR=31 #Earth station G/T(dB/K)\n",
+ "LOSSES=200 #Total transmission losses(dB)\n",
+ "k=-228.6 #Value of k(dB)\n",
+ "BER=10**-5 #Value of Bit error rate\n",
+ "EbN0R=9.6 #Value of Eb/N0 from fig.10.17\n",
+ "#Calculation\n",
+ "\n",
+ "Rb=2*B/(1+R) #Bit rate(sec^-1)\n",
+ "Rb=10*math.log10(Rb) #Converting Rb into decibels\n",
+ "CNR=EbN0R+Rb #Carrier to noise ratio(dB)\n",
+ "EIRP=CNR-GTR+LOSSES+k #Equivalent Isotropically radiated power(dBW)\n",
+ "Rb=round(Rb,1)\n",
+ "EIRP=round(EIRP,1)\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"Bit rate that can be accommodated is\",Rb,\"dB\"\n",
+ "print \"The EIRP required is\",EIRP,\"dBW\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Bit rate that can be accommodated is 77.8 dB\n",
+ "The EIRP required is 27.8 dBW\n"
+ ]
+ }
+ ],
+ "prompt_number": 13
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.14, Page 328"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "EIRP=25 #Satellite saturation value(dBW)\n",
+ "BO=6 #Output Backoff loss(dB)\n",
+ "FSL=196 #Free space loss(dB)\n",
+ "DL=1.5 #Downlink losses(dB)\n",
+ "GTR=41 #Earth station G/T(dB/K)\n",
+ "k=-228.6 #Value of k(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "CNR=EIRP-BO+GTR-FSL-DL-k #Carrier to noise ratio(dB)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The Carrier to noise density ratio at the earth station is\",CNR,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Carrier to noise density ratio at the earth station is 91.1 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 14
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.15, Page 329"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "EIRP=56 #Equivalent Isotropically radiated power(dBW)\n",
+ "BO=6 #Output Backoff(dB)\n",
+ "TFL=2 #Transmitter feeder loss(dB)\n",
+ "GT=50 #Antenna gain(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "PTWTA=EIRP-GT+TFL #Power output of TWTA(dBW)\n",
+ "PTWTAS=PTWTA+BO #Saturated power output of TWTA(dBW)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"Power output of the TWTA required for full saturated EIRP is\",PTWTAS,\"dBW\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Power output of the TWTA required for full saturated EIRP is 14 dBW\n"
+ ]
+ }
+ ],
+ "prompt_number": 15
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.16, Page 332"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "alpha=1.9 #Rain attenuation(dB)\n",
+ "CNR=20 #Downlink carrier to noise ratio(dB)\n",
+ "Tn=400 #Effective Noise temperature(Kelvin)\n",
+ "Ta=280 #Reference temperature(Kelvin)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "alpha1=10**(alpha/10) #Converting alpha to ratio\n",
+ "Trn=Ta*(1-1/alpha1) #Equivalent noise temperature of rain(kelvin)\n",
+ "Trn=round(Trn,1)\n",
+ "Ts=Tn+Trn #New system noise temperature\n",
+ "delp=10*math.log10(Ts/Tn) #Decibel increase in noise power\n",
+ "CNRN=CNR-delp-alpha #Value below which CNR falls(dB)\n",
+ "CNRN=round(CNRN,2)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The value below which C/N falls for 0.1 percent of time is\",CNRN,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The value below which C/N falls for 0.1 percent of time is 17.14 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 16
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.17, Page 333"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "CNR=17.4 #Clear sky input C/N (dB)\n",
+ "T=10 #Threshold level for FM etector(dB)\n",
+ "Ta=272 #Value of Ta(Kelvin)\n",
+ "Tscs=544 #Value of Tscs(Kelvin)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "TM=CNR-T #Threshold margin at FM detector(dB)\n",
+ "CNR=10**(CNR/10) #Converting CNR to ratio\n",
+ "NCR=1/float(CNR)\n",
+ "\n",
+ "import scipy\n",
+ "import scipy.optimize\n",
+ "def f(A):\n",
+ " y=0.1-NCR*(A+(A-1)*Ta/Tscs)\n",
+ " return y\n",
+ "A=scipy.optimize.fsolve(f,2)\n",
+ "\n",
+ "A=10*math.log10(A) #Converting A into decibels\n",
+ "A=round(A)\n",
+ "\n",
+ "# Getting the value of probablity of exceeding A from the curve\n",
+ "\n",
+ "if (A==6):\n",
+ " P=2.5*10**-4 \n",
+ "else:\n",
+ " print \"error\"\n",
+ "\n",
+ "Av=100*(1-P) #Availability(percentage)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The time system stays above threshold is\",Av,\"percentage\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The time system stays above threshold is 99.975 percentage\n"
+ ]
+ }
+ ],
+ "prompt_number": 17
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.18, Page 336"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "Nu=100 #Noise spectral density for uplink(dBHz)\n",
+ "Nd=87 #Noise spectral density for downlink(dBHz)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "N0CR=10**(-Nu/10)+10**(-Nd/10) #Noise to carrier ratio\n",
+ "CNR=-10*math.log10(N0CR) #Combined c/N0 ratio(dBHz)\n",
+ "CNR=round(CNR,2)\n",
+ "#Result\n",
+ "\n",
+ "print \"The combined carrier to noise ratio is\",CNR,\"dBHz\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The combined carrier to noise ratio is 89.59 dBHz\n"
+ ]
+ }
+ ],
+ "prompt_number": 18
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.19, Page 337"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable declaration\n",
+ "\n",
+ "#For uplink\n",
+ "\n",
+ "Ps=-67.5 #Saturation flux density(dB)\n",
+ "A0=-37 #Antenna aperture at 6GHz(dB)\n",
+ "IBO=-11 #Input Backoff(dB)\n",
+ "GTRs=-11.6 #Satellite saturation G/T (dB)\n",
+ "k=-228.6 #Value of k(dB)\n",
+ "\n",
+ "#For Downlink\n",
+ "\n",
+ "EIRP=26.6 #Satellite EIRP(dB)\n",
+ "OBO=-6 #output Backoff(dB)\n",
+ "FSL=-196.7 #Free Space loss(dB)\n",
+ "GTRe=40.7 #Earth station G/T(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "CNRu=Ps+A0+IBO+GTRs-k #Carrier to noise ratio for uplink(dB)\n",
+ "CNRd=EIRP+OBO+FSL+GTRe-k#Carrier to noise ratio for downlink(dB)\n",
+ "N0CR=10**(-CNRu/10)+10**(-CNRd/10) #Noise to carrier ratio\n",
+ "CNR=-10*math.log10(N0CR) #Combined c/N0 ratio(dBHz)\n",
+ "CNR=round(CNR,2)\n",
+ "#results\n",
+ "\n",
+ "print \"The Carrier to noise ratio for uplink is\",CNRu,\"dB\"\n",
+ "print \"The Carrier to noise ratio for downlink is\",CNRd,\"dB\"\n",
+ "print \"The combined carrier to noise ratio is\",CNR,\"dBHz\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Carrier to noise ratio for uplink is 101.5 dB\n",
+ "The Carrier to noise ratio for downlink is 93.2 dB\n",
+ "The combined carrier to noise ratio is 92.6 dBHz\n"
+ ]
+ }
+ ],
+ "prompt_number": 19
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 12.20, Page 338"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "CNRu=23 #carrier to noise ratio for uplink(dB)\n",
+ "CNRd=20 #carrier to noise ratio for downlink(dB)\n",
+ "CNRm=24 #carrier to noise ratio for intermodulation(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "NCR=10**(-CNRu/float(10))+10**(-CNRd/float(10))+10**(-CNRm/float(10)) #Combined Noise to carrier ratio\n",
+ "\n",
+ "\n",
+ "CNR=-10*math.log10(NCR) #Combined carrier to noise ratio(dB)\n",
+ "CNR=round(CNR,2)\n",
+ "#Result\n",
+ "\n",
+ "print \"The combined carrier to noise ratio is\",CNR,\"dB\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The combined carrier to noise ratio is 17.21 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 20
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_13.ipynb b/Satellite_Communications/Chapter_13.ipynb
new file mode 100755
index 00000000..7a2ded04
--- /dev/null
+++ b/Satellite_Communications/Chapter_13.ipynb
@@ -0,0 +1,302 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:15f18d4eac7b181ba51c6696eba06fa436baa89f07a517b2b2096748a0e3b407"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 13: Interference"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 13.1, Page 350"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "EIRP1=34 #desired carrier EIRP from satellite(dB)\n",
+ "G1=44 # ground station receiving antenna gain(dB)\n",
+ "G2=24.47 #Gain in desired direction(dB)\n",
+ "EIRP2=34 #EIRP by interfering satellite(dB)\n",
+ "PD=4 #Polarization discrimination(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "CIR=EIRP1-EIRP2+G1-G2+PD #Carrier to Interference ratio(dB)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The Carrier to interfernce ratio at the ground receiving antenna is\",CIR,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Carrier to interfernce ratio at the ground receiving antenna is 23.53 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 13.2, Page 350"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Decalration\n",
+ "\n",
+ "PA=24 #Transmit power by station A(dBW)\n",
+ "G1=54 #Antenna Gain(dB)\n",
+ "PC=30 #Transmit power by station C(dBW)\n",
+ "G2=24.47#off-axis gain in the S1 direction(dB)\n",
+ "PD=4 #Polarization discrimination(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "CIR=PA-PC+G1-G2+PD #Carrier to Interference ratio(dB)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The Carrier to interfernce ratio on uplink is\",CIR,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Carrier to interfernce ratio on uplink is 27.53 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 13.3, Page 351"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "CIR1=27.53 #Carrier to interference ratio from Example 13.1(dB)\n",
+ "CIR2=23.53 #Carrier to interference ratio from Example 13.2(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "ICRu=10**(-CIR1/10) #Interferece to carrier ratio for uplink\n",
+ "ICRd=10**(-CIR2/10) #Interferece to carrier ratio for downlink\n",
+ "\n",
+ "ICRant=ICRu+ICRd #Overall Interferece to carrier ratio\n",
+ "CIRant=-10*math.log10(ICRant)#Overall Carrier to interference ratio (dB)\n",
+ "CIRant=round(CIRant,2)\n",
+ "#Result\n",
+ "\n",
+ "print \"The overall carrier to interference ratio is\",CIRant,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The overall carrier to interference ratio is 22.07 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 13.4, Page 352"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "SSi=4 #Initial satellite spacing(degrees)\n",
+ "SSl=2 #Later Satellite spacing(degrees)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "IIR=(29-25*math.log10(SSl))-(29-25*math.log10(SSi)) #Increase in Interference(dB)\n",
+ "IIR=round(IIR,1)\n",
+ "#Result\n",
+ "\n",
+ "print \"The degradation in downlink C/I is\",IIR,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The degradation in downlink C/I is 7.5 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 13.5, Page 356"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "f=4.2 #modualating frequency(MHz)\n",
+ "m=2.571 #Modulation index\n",
+ "QIF1=4.2 #Quality Impairment factor(a)\n",
+ "QIF2=4.5 #Quality Impairment factor(b)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "Dv=2*m*f #Peak to peak deviation(MHz)\n",
+ "\n",
+ "PR1=12.5-20*math.log10(Dv/12)-QIF1+1.1*QIF1**2 #Protection ratio for case(a)\n",
+ "PR1=round(PR1,1)\n",
+ "PR2=12.5-20*math.log10(Dv/12)-QIF2+1.1*QIF2**2 #Protection ratio for case(b)\n",
+ "PR2=round(PR2,1)\n",
+ "#Results\n",
+ "\n",
+ "print \"The protection ratio for quality impairment factor of 4.2 is\",PR1,\"dB\"\n",
+ "\n",
+ "print \"The protection ratio for quality impairment factor of 4.5 is\",PR2,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The protection ratio for quality impairment factor of 4.2 is 22.6 dB\n",
+ "The protection ratio for quality impairment factor of 4.5 is 25.2 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 5
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 13.6, Page 363"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Decalration\n",
+ "LU=200 #Uplink propogation loss(dB)\n",
+ "LD=196 #Downlink propogation loss(dB)\n",
+ "GE=25 #Receiving gain of earth station(dB)\n",
+ "GE1=25 #Transmit gain of E1 in the direction of S(dB)\n",
+ "GS=9 #receive gain of S in the direction of E1(dB)\n",
+ "GS1=9 #Transmit gain of satellite S1 in the direction of E(dB)\n",
+ "GTE=48 #Transmit gain of E(dB)\n",
+ "GRE=48 #Receive gain of E(dB)\n",
+ "GRS=19 #Receive gain of S(dB)\n",
+ "GTS=19 #Transmit gain of S(dB)\n",
+ "US=-60 #Maximum power spectral density(dBJ)\n",
+ "US1=1 #Maximum power spectral density(uJ)\n",
+ "UE1=10 #Maximum power spectral density transmitted by earth station(uJ)\n",
+ "UE=-50 #Maximum power spectral density transmitted by earth station(dBJ)\n",
+ "k=-228.6\n",
+ "#Calculation\n",
+ "\n",
+ "URS=UE+GTE+GRS-LU#Received power spectral density at satellite S(dB)\n",
+ "URE=US+GTS+GRE-LD#Received power spectral density at satellite E(dB)\n",
+ "y=URE-URS #Transmission gain for network R(dB)\n",
+ "\n",
+ "I1=US+GS1+GE-LD #Interference received by earth station(dB)\n",
+ "I2=UE+GE1+GS-LU #Uplink Interference(dB)\n",
+ "\n",
+ "delTE=I1-k #Earth station receiver input(dBK)\n",
+ "delTE=10**(delTE/float(10)) #Earth station receiver input(K)\n",
+ "delTS=I2-k #Noise temperature at satellite receiver input(dBK)\n",
+ "\n",
+ "delTSE=y+delTS #Noise Temperature rise(dBKelvin)\n",
+ "delTSE=10**(delTSE/10) #Noise Temperature rise(Kelvin)\n",
+ "delT=delTSE+delTE #Equivalent noise temperature rise\n",
+ "delT=round(delT,2)\n",
+ "\n",
+ "print URE,URS\n",
+ "#Results\n",
+ "\n",
+ "print \"The transmission gain is\",y,\"dB\"\n",
+ "print \"The interference levels I1 an I2 are\",I1,I2,\"dBJ respectively\"\n",
+ "print \"The equivalent temperature rise overall is\",delT,\"Kelvin\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "-189 -183\n",
+ "The transmission gain is -6 dB\n",
+ "The interference levels I1 an I2 are -222 -216 dBJ respectively\n",
+ "The equivalent temperature rise overall is 9.14 Kelvin\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_14.ipynb b/Satellite_Communications/Chapter_14.ipynb
new file mode 100755
index 00000000..1688a7bb
--- /dev/null
+++ b/Satellite_Communications/Chapter_14.ipynb
@@ -0,0 +1,398 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:d9b4ccf4f2a187fd084eba547fc42fa3dd2f9e48328d5cbf1ac129f9eacc40d0"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 14: Satellite Access"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 14.1, Page 381"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "Btr=36 #Transponder Bandwidth(MHz)\n",
+ "B=3 #Carrier Bandwidth(MHz)\n",
+ "EIRP=27 #saturated EIRP(dBW)\n",
+ "BO=6 #Back off loss(dB)\n",
+ "LOSSES=196 #Combined losses(dB)\n",
+ "GTR=30 #Earth station G/T ratio(dB)\n",
+ "k=228.6 #Value of k(dB)\n",
+ "#Calculation\n",
+ "\n",
+ "Btr1=10*math.log10(Btr*10**6) #Converting transponder Bandwidth into decibels\n",
+ "B1=10*math.log10(B*10**6) #Converting carrier Bandwidth into decibels\n",
+ "\n",
+ "CNR=EIRP+GTR-LOSSES+k-Btr1 #Carrier to noise ratio for single carrier operation(dB)\n",
+ "CNR=round(CNR)\n",
+ "alpha=-BO\n",
+ "K=alpha+Btr1-B1 #Fraction of Bandwidth actually occupied(dB)\n",
+ "K=10**(K/10) #Converting decibels to ratio\n",
+ "K=round(K)\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"The downlink carrier to noise ratio is\",CNR,\"dB\"\n",
+ "print \"Fraction of Bandwidth actually occupied is\",K\n",
+ "print \"No. of carriers that would be accommodated without backoff is\",Btr/B\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The downlink carrier to noise ratio is 14.0 dB\n",
+ "Fraction of Bandwidth actually occupied is 3.0\n",
+ "No. of carriers that would be accommodated without backoff is 12\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 14.2, Page 396"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable decalration\n",
+ "\n",
+ "N=40 #No.of bits\n",
+ "E=5 #Maximum number of errors allowed\n",
+ "p=10**-3 #Average probability of error in transmission\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "Pmiss=0\n",
+ "for i in range(E+1,N):\n",
+ " Pmiss=Pmiss+(math.factorial(N)/float((math.factorial(i)*math.factorial(N-i))))*(p**i)*((1-p)**(N-i))\n",
+ "\n",
+ "Pmiss=Pmiss*10**12\n",
+ "Pmiss=round(Pmiss,1)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The probability of miss is\",Pmiss,\"*10^-12\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The probability of miss is 3.7 *10^-12\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 14.3, Page 397"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable decalration\n",
+ "\n",
+ "N=40 #No.of bits\n",
+ "E=5 #Maximum number of errors allowed\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "Pfalse=0\n",
+ "for i in range(0,E+1):\n",
+ " Pfalse=Pfalse+(math.factorial(N)*2**-N)/float((math.factorial(i)*math.factorial(N-i)))\n",
+ "\n",
+ "\n",
+ "\n",
+ "Pfalse=Pfalse*10**7\n",
+ "Pfalse=round(Pfalse,1)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The probability of miss is\",Pfalse,\"*10^-7\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The probability of miss is 6.9 *10^-7\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 14.4, Page 399"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable ecalration\n",
+ "Lf=120832 #Total frame length\n",
+ "Tb=14 #Traffic burts per frame\n",
+ "Rb=2 #Reference bursts per frame\n",
+ "T=103 #Guard interval(symbols)\n",
+ "P=280 #Preamble Symbols\n",
+ "R=P+8 #Reference channel symbols with addition of CDC\n",
+ "#Calculation\n",
+ "\n",
+ "OH=2*(T+R)+Tb*(T+P) #Overhead Symbols\n",
+ "\n",
+ "nF=1-(OH/float(Lf)) #Frame Efficiency\n",
+ "nF=round(nF,3)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"Hence the frame efficiency of INTELSAT frame is\",nF"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Hence the frame efficiency of INTELSAT frame is 0.949\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 14.5, Page 400"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "Lf=120832 #Number of symbols per frame\n",
+ "Tf=2 #Frame period(ms)\n",
+ "nF=0.949 #INTELSAT fram efficiency from Example 14.4\n",
+ "#Calculation\n",
+ "\n",
+ "Rs=(Lf/float(Tf))*10**-3 #Symbol rate(megasymbol/s)\n",
+ "Rt=Rs*2 #Transmission Rate\n",
+ "n=nF*Rt*10**3/64 #Voice channel capacity\n",
+ "n=round(n)\n",
+ "#Result\n",
+ "\n",
+ "print \" The voice channel capacity for the INTELSAT frame is\",n,\"Channels\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ " The voice channel capacity for the INTELSAT frame is 1792.0 Channels\n"
+ ]
+ }
+ ],
+ "prompt_number": 5
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 14.6, Page 408"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "CNR=87.3 #Downlink Carrier to noise ratio(dBHz)\n",
+ "BER=10**-5 #Bit Error Rate Required\n",
+ "R=0.2 #Roll off factor\n",
+ "EbN0R=9.5 #Eb/N0 ratio(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "Rb=CNR-EbN0R #Maximum Transmission Rate(dBb/s)\n",
+ "Rb1=10**(Rb/10) #Maximum Transmission Rate(b/s)\n",
+ "BIF=Rb1*1.2*10**-6/2 #IF Bandwith required\n",
+ "BIF=round(BIF,2)\n",
+ "#Result\n",
+ "\n",
+ "print \"The Maximum Transmission rate is\",Rb,\"dBb/s\"\n",
+ "print \"The IF bandwidth required is\",BIF,\"MHz\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Maximum Transmission rate is 77.8 dBb/s\n",
+ "The IF bandwidth required is 36.15 MHz\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 14.7, Page 410"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "T1=1.544 #Bit rate from sec.10.4(Mb/s)\n",
+ "R=62 #Bit rate from sec.10.4(dBMb/s)\n",
+ "EbN0R=12 #Required Eb/N0 ratio for uplink(dB)\n",
+ "LOSSES=212 #Transmission losses of uplink(dB)\n",
+ "GTR=10 #G/T ratio for earth station(dB/K)\n",
+ "G1=46 #Uplink antenna gain(dB)\n",
+ "Rd=74 #Downlink Transmission Rate(dBb/s)\n",
+ "#Calculation\n",
+ "CNR=EbN0R+R #Carrier to noise ratio for uplink(dB)\n",
+ "EIRP=CNR-GTR+LOSSES-228.6 #EIRP of earth station antenna\n",
+ "P=EIRP-G1 #Transmitted Power Required(dBW)\n",
+ "P=10**(P/float(10)) #Transmitted Power Required(Watts)\n",
+ "P=round(P,2)\n",
+ "\n",
+ "Ri=Rd-R #Rate increase with TDMA operation(dB)\n",
+ "P1=1.4+Ri #Uplink power increase required for TDMA operation(Watts)\n",
+ "P2=10**(P1/float(10))\n",
+ "P2=round(P2,1)\n",
+ "#Results\n",
+ "\n",
+ "print \"Earth station transmission power required for transmission of T1 baseband signal is\",P,\"Watts\"\n",
+ "\n",
+ "print \"Uplink power increase required for TDMA operation is\",P1,\"dBWatts or\",P2,\"Watts\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Earth station transmission power required for transmission of T1 baseband signal is 1.38 Watts\n",
+ "Uplink power increase required for TDMA operation is 13.4 dBWatts or 21.9 Watts\n"
+ ]
+ }
+ ],
+ "prompt_number": 7
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 14.8, Page 429"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "BIF=36 #Bandwidth of channel over which carriers are spread(MHz)\n",
+ "R=0.4 #Rolloff factor for filtering\n",
+ "Rb=64 #Information bit rate(kb/s)\n",
+ "BER=10**-5 #Bit error rate required\n",
+ "EbN0R=9.6 #Eb/N0 ratio for BER given from Fig.10.18\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "Rch=BIF*10**6/(1+R) #Rate of unspreaded signal(chips/s)\n",
+ "Gp=Rch/(Rb*10**3) #Processing gain\n",
+ "Gp1=round(10*math.log10(Gp)) #Processing gain(dB)\n",
+ "EbN0R1=10**(EbN0R/float(10)) #Converting Eb/N0 into ratio\n",
+ "K=1+(1.4*Gp/EbN0R1) #Number of channels\n",
+ "K=math.floor(K)\n",
+ "\n",
+ "#Result\n",
+ "print \"The Processing Gain is\",Gp1,\"dB\"\n",
+ "print \"An estimate of maximum number of channels that can access the system is\",K\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Processing Gain is 26.0 dB\n",
+ "An estimate of maximum number of channels that can access the system is 62.0\n"
+ ]
+ }
+ ],
+ "prompt_number": 8
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_16.ipynb b/Satellite_Communications/Chapter_16.ipynb
new file mode 100755
index 00000000..8a1e81ed
--- /dev/null
+++ b/Satellite_Communications/Chapter_16.ipynb
@@ -0,0 +1,186 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:4b08bbb242b14bb2e9d6b297d6c2efe9724a5525d0e315485c89f280e01ac4b8"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 16: Direct Broadcast Satellite Services"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 16.1, Page 474"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Varaible Declaration\n",
+ "\n",
+ "EIRP=55 #EIRP for satellite(dBW)\n",
+ "fD=12.5 #Downlink frequency(GHz)\n",
+ "Pss=-101 #Receiving at ground station direction(degrees west)\n",
+ "Rb=40*10**6 #Transmission Rate(Hz)\n",
+ "D=18 #Diameter of antenna(inches)\n",
+ "n=0.55 #Efficiency of antenna\n",
+ "Tant=70 #Antenna noise(Kelvin)\n",
+ "Teq=100 #Equivalent noise temperature at LNA(Kelvin)\n",
+ "R=6371 #Radius of earth(Km)\n",
+ "L=2 #Transmission losses(dB)\n",
+ "aGSO=42164 #Circumference of earth(km)\n",
+ "k=-228.6 #Boltzmann's constant (dB)\n",
+ "PE=-90 #Longitude of Earth station(degrees west)\n",
+ "LE=45 #Latitude of Earth station(degrees north)\n",
+ "f=14 #Frequency(GHz)\n",
+ "#Calculation\n",
+ "B=PE-Pss\n",
+ "b=math.acos(math.cos(B*3.142/180)*math.cos(LE*3.142/180))\n",
+ "b=b*180/3.142\n",
+ "A=math.asin(math.sin(abs(B)*3.142/180)/math.sin(b*3.142/180))\n",
+ "A=A*180/3.142\n",
+ "Az=180+A #Azimuth angle of antenna(degrees)\n",
+ "d=(R**2+aGSO**2-2*R*aGSO*math.cos(b*3.142/180))**0.5 #Range of antenna(km)\n",
+ "El=math.acos(aGSO*math.sin(b*3.142/180)/d) #Elevation angle of antenna(radians)\n",
+ "El=El*180/3.142 #Elevation angle of antenna(degrees)\n",
+ "Az=round(Az,1)\n",
+ "El=round(El)\n",
+ "d=round(d)\n",
+ "FSL=32.4+20*math.log10(d)+20*math.log10(f*10**3) #Free space loss(dB)\n",
+ "LOSSES=FSL+L #Total Transmission Losses\n",
+ "Ts=Teq+Tant #Total system noise temperature(Kelvin)\n",
+ "T=10*math.log10(Ts) #Total system noise temperature(dBK)\n",
+ "G=n*(3.192*f*(D/float(12)))**2\n",
+ "G=10*math.log10(G) #Antenna Gain(dB)\n",
+ "GTR=G-T #G/T ratio(dB)\n",
+ "CNR=EIRP+GTR-LOSSES-k #Carrier to noise ratio(dB)\n",
+ "Rb=10*math.log10(Rb) #Transmission Rate(dBHz)\n",
+ "EbN0R=CNR-Rb #Eb/N0 ratio at IRD(dB)\n",
+ "EbN0R=round(EbN0R,1)\n",
+ "#Results\n",
+ "\n",
+ "print \"The Azimuth angle of antenna is\",Az,\"degrees\"\n",
+ "print \"The Elevaation Angle of Antenna is\",El,\"degrees\"\n",
+ "print \"The Range of Antenna is\",d,\"km\"\n",
+ "print \"The Eb/N0 ratio at IRD is\",EbN0R,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Azimuth angle of antenna is 195.4 degrees\n",
+ "The Elevaation Angle of Antenna is 37.0 degrees\n",
+ "The Range of Antenna is 38020.0 km\n",
+ "The Eb/N0 ratio at IRD is 10.3 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 16.2, Page 480"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Varaible Declaration\n",
+ "\n",
+ "R01=42 #Rainfall at earth station(mm/hr)\n",
+ "p=0.01 #Percentage of time for which rain exceeds\n",
+ "LE=45 #Latitue of earth station(degrees)\n",
+ "hR=3.5 #Rain Height(km)\n",
+ "h0=0 #Mean Sea level(km)\n",
+ "Ta=272 #\n",
+ "El=37 #Elevation angle of the antenna(degrees)\n",
+ "Ts=170 #Total system noise temperature(Kelvin)\n",
+ "NCR=2.3*10**-9 #Carrier to noise ratio\n",
+ "fD=12.5 #Frequency of operation(GHz)\n",
+ "f12=12 #Frequency 12GHz(GHz)\n",
+ "f15=15 #Frequency 15GHz(GHz)\n",
+ "#Coefficients for horizontal and vertical polarizations at 12GHz and 15GHz as given in Table 4.2\n",
+ "\n",
+ "ah12=0.0188\n",
+ "av12=0.0168\n",
+ "bh12=1.217\n",
+ "bv12=1.2\n",
+ " \n",
+ "ah15=0.0367\n",
+ "av15=0.0335\n",
+ "bh15=1.154\n",
+ "bv15=1.128\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "#Using Interpolation to find coefficients at 12.5 GHz\n",
+ "\n",
+ "ah=round(ah12+(ah15-ah12)*(fD-f12)/(f15-f12),3)\n",
+ "bh=round(bh12+(bh15-bh12)*(fD-f12)/(f15-f12),3)\n",
+ "av=round(av12+(av15-av12)*(fD-f12)/(f15-f12),3)\n",
+ "bv=round(bv12+(bv15-bv12)*(fD-f12)/(f15-f12),3)\n",
+ "\n",
+ "#Coefficients for circular polarization\n",
+ "\n",
+ "ac=(ah+av)/2\n",
+ "ac=round(ac,3)\n",
+ "bc=(ah*bh+av*bv)/(2*ac)\n",
+ "bc=round(bc,3)\n",
+ "Ls1=(hR-h0)/math.sin(El*3.142/180) #Slant Path Length(km)\n",
+ "Ls=round(Ls1,1) #Slant Path Length(km)\n",
+ "LG=round(Ls*math.cos(El*3.142/180),1) #Horizontal projection of slant path length(km)\n",
+ "r011=90/(90+4*LG) #Reduction Factor\n",
+ "r01=round(r011,1) #Reduction Factor\n",
+ "L=round(Ls1*r01,1) #Effective path length(km)\n",
+ "alpha=round(ac*R01**bc,3) #Specific attenuation(dB/km)\n",
+ "A=round(10**(alpha*L/float(10)),1) #Total Attenuation(dB)\n",
+ "Trn=Ta*(1-1/A) #noise temperature with effect of rain\n",
+ "Tscs=Ts\n",
+ "NCrain=NCR*(A+(A-1)*Ta/Tscs) #Noise to carrier ratio due to rain\n",
+ "CNrain=-10*math.log10(NCrain)#Noise to carrier ratio due to rain(dB)\n",
+ "Rb=10*math.log10(40*10**6) #Transmission rate(dB)\n",
+ "EbN0rain=round(CNrain-Rb,1) #Upper limit of Eb/N0 ratio in prescence of rain(dB)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"Hence the upper limit for Eb/N0 for given conditions is\",EbN0rain,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Hence the upper limit for Eb/N0 for given conditions is -2.1 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_2.ipynb b/Satellite_Communications/Chapter_2.ipynb
new file mode 100755
index 00000000..b62cd703
--- /dev/null
+++ b/Satellite_Communications/Chapter_2.ipynb
@@ -0,0 +1,1002 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:9c5b783b7af2e7759af05c065786293bfda0657b22d7595e2418aaa43901e7b0"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 2: Orbits and Launching Methods"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.1, Page 23"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "u=3.986*(10**14) #Earth's Gravitational constant(m^3/sec^2)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "n=(2*3.14)/(24*60*60) #Mean Motion(rad/sec)\n",
+ "a=((u/n**2)**(0.33333))/1000 #Radius of the orbit by kepler's 3rd law(km)\n",
+ "a=round(a,2)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The Radius of the circular orbit with 1 day period is:\", a,\"km\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Radius of the circular orbit with 1 day period is: 42247.94 km\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.2, Page 29"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "NN=14.22296917 #Mean Motion (1/day)\n",
+ "u=3.986005*(10**14) #Earth's Gravitational COnstant(m^3/sec^2)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "n0=(NN*2*3.142)/(24*60*60) #Mean Motion(rad/sec)\n",
+ "a=((u/n0**2)**(0.33333))/1000 #Radius of the orbit by kepler's 3rd law(km)\n",
+ "a=round(a,2)\n",
+ "#Result\n",
+ "\n",
+ "print \"The Semimajor axis for given satellite parameters is:\", a,\"km\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Semimajor axis for given satellite parameters is: 7193.97 km\n"
+ ]
+ }
+ ],
+ "prompt_number": 5
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.3, Page 29"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "R=6371 #Mean Earth's radius(km)\n",
+ "e=0.0011501 #Eccentricity\n",
+ "a=7192.3 #Semimajor axis(km)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "ra=a*(1+e) #Radius Vector at apogee(km)\n",
+ "rp=a*(1-e) #Radius Vector at perigee(km)\n",
+ "ha=round(ra-R,2) #Apogee height(km)\n",
+ "hp=round(rp-R,2) #Perigee height(km)\n",
+ "\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The Apogee height for given orbital parameters is:\", ha,\"km\"\n",
+ "print \"The Apogee height for given orbital parameters is:\", hp,\"km\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Apogee height for given orbital parameters is: 829.57 km\n",
+ "The Apogee height for given orbital parameters is: 813.03 km\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.4, Page 31"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "aE=6378.141 #Earth's equitorial radius(km)\n",
+ "e=0.002 #Eccentricity\n",
+ "p=12 #period from perigee to perigee (hours)\n",
+ "K1=66063.1704 #Constant (km^2)\n",
+ "u=3.986005*(10**14) #Earth's Gravitational constant(m^3/sec^2)\n",
+ "\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "n=(2*math.pi)/(12*60*60) #Mean Motion(rad/sec)\n",
+ "anp=((u/n**2)**(0.3333))/1000 #Radius of the orbit by kepler's 3rd law(km)\n",
+ "k2=(1-e**2)**1.5\n",
+ "# Solving for perturbed value of semimajor axis\n",
+ "import scipy\n",
+ "import scipy.optimize\n",
+ "def f(a):\n",
+ " y=(n-((u/a**3)**0.5)*(1+K1/a**2*k2))\n",
+ " return y\n",
+ "a=scipy.optimize.fsolve(f,2)\n",
+ "a=a/1000 #Converting a into km\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The nonperturbed value of semimajor axis is\", anp,\"km\"\n",
+ "print \"The perturbed value of semimajor axis is\", a,\"km\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The nonperturbed value of semimajor axis is 26564.7679852 km\n",
+ "The perturbed value of semimajor axis is [ 26610.22410209] km\n"
+ ]
+ }
+ ],
+ "prompt_number": 7
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.5, Page 34"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "i=98.6328 #Angle(degrees)\n",
+ "e=0.0011501 #eccentricity\n",
+ "n=14.23304826 #Mean Motion(1/day)\n",
+ "a=7192.3 #Semimajor axis(km)\n",
+ "K1=66063.1704 #Known constant(km^2)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "n0=(2*180*n) #Mean Motion (deg/sec)\n",
+ "K=(n0*K1)/((a**2)*((1-e**2)**2)) #Constant (deg/day)\n",
+ "w=-K*math.cos(i*3.142/180) #Rate of regression of nodes(deg/day)\n",
+ "W=K*(2-2.5*(math.sin(i*3.142/180))**2) #Rate of rotation of line of apsides(deg/day)\n",
+ "w=round(w,3)\n",
+ "W=round(W,3)\n",
+ "#Results\n",
+ "\n",
+ "print \"The rate of regression of nodes is:\", w,\"deg/day\"\n",
+ "print \"The rate of rotation of line of apsides is:\", W,\"deg/day\"\n",
+ "\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The rate of regression of nodes is: 0.984 deg/day\n",
+ "The rate of rotation of line of apsides is: -2.902 deg/day\n"
+ ]
+ }
+ ],
+ "prompt_number": 8
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.6, Page 34"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "w=0.982 #rate of regression of nodes from Example 2.5(deg/day)\n",
+ "W=-2.903 #rate of rotation of line of apsides from Example 2.5)deg/day)\n",
+ "n=14.23304826 #Mean Motion(1/day)\n",
+ "W0=113.5534 #Argument of perigee(deg)\n",
+ "w0=251.5324 #Right ascension of the ascending node(deg)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "PA=1/n #Period \n",
+ "w=round(w0+w*PA,2) #New value of rate of regression of nodes(deg)\n",
+ "W=round(W0+W*PA,2) #New Value of rate of rotation of line of apsides(deg)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"New value of rate of regression of nodes is:\", w,\"deg\"\n",
+ "print \"New value of rate of rotation of line of apsides is:\", W,\"deg\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "New value of rate of regression of nodes is: 251.6 deg\n",
+ "New value of rate of rotation of line of apsides is: 113.35 deg\n"
+ ]
+ }
+ ],
+ "prompt_number": 9
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.7, Page 38"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Calculation\n",
+ "\n",
+ "ndays=400*365 #Nominal number of days in 400years\n",
+ "nleapyrs=400/4 #Nominal number of leap years\n",
+ "gregoriandays=ndays+nleapyrs-3 #number of days in 400 years of Gregorian calendar\n",
+ "gregavg=round(gregoriandays/float(400),2) #number of days in 400 years of Gregorian calendar\n",
+ "\n",
+ "#Result\n",
+ "print gregoriandays\n",
+ "print \"The average length of the civil year in gregorian calender is:\", gregavg,\"days\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "146097\n",
+ "The average length of the civil year in gregorian calender is: 365.24 days\n"
+ ]
+ }
+ ],
+ "prompt_number": 10
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.8, Page 38"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Calculation and Results\n",
+ "\n",
+ "if 1987%4==0:\n",
+ " print \"1987 is a leap year\"\n",
+ "else:\n",
+ " print \"1987 is not a leap year\"\n",
+ "\n",
+ "\n",
+ "if 1988%4==0:\n",
+ " print \"1988 is a leap year\"\n",
+ "else:\n",
+ " print \"1988 is not a leap year\"\n",
+ "\n",
+ "\n",
+ "if 2000%400==0:\n",
+ " print \"2000 is a leap year\"\n",
+ "else:\n",
+ " print \"2000 is not a leap year\"\n",
+ "\n",
+ "\n",
+ "if 2100%400==0:\n",
+ " print \"2100 is a leap year\"\n",
+ "else:\n",
+ " print \"2100 is not a leap year\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "1987 is not a leap year\n",
+ "1988 is a leap year\n",
+ "2000 is a leap year\n",
+ "2100 is not a leap year\n"
+ ]
+ }
+ ],
+ "prompt_number": 11
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.9, Page 38"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Calculation\n",
+ "days=324 #Number of days\n",
+ "hours=math.floor(24*0.95616765) # Number of hours\n",
+ "decimalfraction1=24*0.95616765-hours\n",
+ "minutes=math.floor(60*decimalfraction1) # Number of minutes\n",
+ "decimalfraction2=60*decimalfraction1-minutes\n",
+ "seconds=round(60*decimalfraction2,2) # Number of seconds\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print decimalfraction1,decimalfraction2\n",
+ "print \"An Epoch day has\", days,\"days\",hours,\"hours\",minutes,\"minutes\",seconds,\"seconds\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "0.9480236 0.881416\n",
+ "An Epoch day has 324 days 22.0 hours 56.0 minutes 52.88 seconds\n"
+ ]
+ }
+ ],
+ "prompt_number": 12
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.10, Page 39"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "\n",
+ "#Variable Declaration\n",
+ "\n",
+ "y=2000 #year\n",
+ "mon=12 #month\n",
+ "dy=18 #day\n",
+ "hours=13 #hours of the day\n",
+ "minutes=0 #Minutes of the day\n",
+ "seconds=0 #Seconds of the day\n",
+ "\n",
+ "\n",
+ "#Calculation\n",
+ "d=dy+(hours/24)+(minutes/(24*60))+seconds #Days in December \n",
+ "if mon<=2:\n",
+ " y=y-1\n",
+ " mon=mon+12\n",
+ "else:\n",
+ " y=y\n",
+ " mon=mon\n",
+ "\n",
+ "A=math.floor(y/100) #Converting years to days\n",
+ "B=2-A+math.floor(A/4) #Converting years to days\n",
+ "C=math.floor(365.25*y) #rounding the days \n",
+ "D=math.floor(30.6001*(mon+1)) #Converting months to days\n",
+ "JD=B+C+D+d+1720994.5 #Adding reeference to number of days\n",
+ "\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The Julian day of given day is:\", JD,\"Days\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Julian day of given day is: 2451896.5 Days\n"
+ ]
+ }
+ ],
+ "prompt_number": 13
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.11, Page 41"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "JDref=2415020 #Reference Julian days\n",
+ "JC=36525\n",
+ "JD=2451897.0417 #Julian days with reference from Example 2.10\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "T=round((JD-JDref)/JC,4) #Time in julian Centuries\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The time for given date is:\", T,\"Julian Centuries\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The time for given date is: 1.0096 Julian Centuries\n"
+ ]
+ }
+ ],
+ "prompt_number": 14
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.12, Page 43"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "n=14.23304826 #Mean Motion (rev/day)\n",
+ "M0=246.6853 #Mean Anomaly (degrees)\n",
+ "t0=223.79688452 #Time of anomaly\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "T=round(t0-(M0/(n*360)),3) #Time of perigee passage\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "\n",
+ "print \"The time of perigee passage for NASA elements is:\", T,\"days\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The time of perigee passage for NASA elements is: 223.749 days\n"
+ ]
+ }
+ ],
+ "prompt_number": 15
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.13, Page 44"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "M=205 #Mean anomaly(degrees)\n",
+ "e=0.0025 #Eccentricity\n",
+ "E=math.pi #Initial guess value for eccentric anomaly\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "import scipy\n",
+ "import scipy.optimize\n",
+ "def f(E):\n",
+ " y=M-E+e*math.sin(E)\n",
+ " return y\n",
+ "E=scipy.optimize.fsolve(f,3.142)\n",
+ "E=round(E,3)\n",
+ "\n",
+ "print \"The Eccentric anomaly is:\",E,\"degrees\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Eccentric anomaly is: 204.998 degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 16
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.14, Page 45"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "n=14.2171401*2*math.pi/86400 #Mean motion (rad/sec)\n",
+ "M=204.9779+0.001*180*5/math.pi #Mean anomaly(rad)\n",
+ "e=9.5981*10**-3 #Eccentricity\n",
+ "a=7194.9 #Semimajor axis(km)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "v=(M*math.pi/180)+2*e*math.sin(M*math.pi/180)+(5*e**2*math.sin(2*M*math.pi)/(4*180)) #True Anomaly (radians)\n",
+ "v=v*180/math.pi #True anomaly(degrees)\n",
+ "r=a*(1-e**2)/(1+e*math.cos(v)) #Magnitude of radius vector after 5s(km)\n",
+ "v=round(v,2)\n",
+ "r=round(r,2)\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"The true anomaly is:\",v,\"degrees\"\n",
+ "print \"The magnitude of radius vector 5s after epoch is:\",r,\"km\"\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The true anomaly is: 204.79 degrees\n",
+ "The magnitude of radius vector 5s after epoch is: 7252.02 km\n"
+ ]
+ }
+ ],
+ "prompt_number": 17
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.15, Page 46"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "v=204.81 #True anomaly(degrees) from Example 2.14\n",
+ "r=7257 #Magnitude of radius vector(km) from Example 2.14\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "rP=r*math.cos(v*math.pi/180) #P coordinate of radius vector(km)\n",
+ "rQ=r*math.sin(v*math.pi/180) #Q coordinate of radius vector(km)\n",
+ "rP=round(rP,2)\n",
+ "rQ=round(rQ,2)\n",
+ "#Result\n",
+ "\n",
+ "print \"r in the perifocal coordinate system is\", rP,\"Pkm\", rQ,\"Qkm\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "r in the perifocal coordinate system is -6587.21 Pkm -3045.11 Qkm\n"
+ ]
+ }
+ ],
+ "prompt_number": 18
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Exanple 2.17, Page 50"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "T=1.009638376 #Time in Julian centuries from Example 2.11\n",
+ "UT=13 #Universal time(hours)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "GST=(99.6910+36000.7689*T+0.004*T**2)*3.142/180 #GST(radians)\n",
+ "UT=2*math.pi*UT/24 #Universal time converted to fraction of earth rotation (radians)\n",
+ "\n",
+ "GST=GST+UT \n",
+ "\n",
+ "\n",
+ "GST=(math.fmod(GST,2*math.pi))*180/math.pi#using fmod multiplr revolutions are removed (degrees)\n",
+ "GST=round(GST,2)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The GST for given date and time is \", GST,\"degrees\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The GST for given date and time is 287.18 degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 19
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.18, Page 51"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declararion\n",
+ "\n",
+ "WL=-89.26 #Expressing the longitude in degrees west\n",
+ "GST=282.449 #GST from Example 2.17 (degrees)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "EL=2*math.pi+WL #Longitude in degrees East \n",
+ "LST=(GST+EL)*math.pi/180 #LST(radians)\n",
+ "LST=(math.fmod(LST,2*math.pi))*180/math.pi #fmod removes multiple revolutions(Degrees)\n",
+ "LST=round(LST,2)\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"LST for Thunder Bay on given day is:\" ,LST,\"Degrees\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "LST for Thunder Bay on given day is: 199.47 Degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 20
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.19, Page 52"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "LST=167.475 #LST(degrees)\n",
+ "LE=48.42 #Latitude at thunder bay(degrees)\n",
+ "H=200 #Height above sea level(metres)\n",
+ "aE=6378.1414 #Semimajor axis(km)\n",
+ "eE=0.08182 #Eccentricity\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "l=(aE/math.sqrt(1-eE**2*math.sin(LE*3.142/180)**2)+H/1000)*math.cos(LE*3.142/180) \n",
+ "\n",
+ "z=((aE*(1-eE**2))/math.sqrt(1-eE**2*math.sin(LE*3.142/180)**2)+H/1000)*math.sin(LE*3.142/180) \n",
+ "\n",
+ "RI=round(l*math.cos(LST*3.142/180),2) #I component of radius vector at thunder bay(km)\n",
+ "\n",
+ "RJ=round(l*math.sin(LST*3.142/180),2) #J component of radius vector at thunder bay(km)\n",
+ "\n",
+ "RK=round(z,2) #Z component of radius vector at thunder bay(km)\n",
+ "\n",
+ "R=math.sqrt(RI**2+RJ**2+RK**2)\n",
+ "R=round(R,2)\n",
+ "\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"The Radius vector components are\" ,RI,\"ikm+\",RJ,\"jkm+\",RK,\"kkm\"\n",
+ "print \"The Magnitude of radius component is\" ,R,\"km\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Radius vector components are -4139.81 ikm+ 918.02 jkm+ 4748.46 kkm\n",
+ "The Magnitude of radius component is 6366.21 km\n"
+ ]
+ }
+ ],
+ "prompt_number": 21
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.20, Page 55"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "PI=-1280 #I component of range vector for a satellite(km)\n",
+ "PJ=-1278 #J component of range vector for a satellite(km)\n",
+ "PK=66 #K component of range vector for a satellite(km)\n",
+ "GST=240 #GST(degrees)\n",
+ "LE=48.42 #Latitude(Degrees)\n",
+ "PE=-89.26 #Longitude(Degrees)\n",
+ "H=200 #Height above mean sea level(metres)\n",
+ "aE=6378.1414 #Semimajor axis(km)\n",
+ "eE=0.08182 #Eccentricity\n",
+ "\n",
+ "import math\n",
+ "#Calculation\n",
+ "\n",
+ "l=(aE/math.sqrt(1-eE**2*math.sin(LE*3.142/180)**2)+H/1000)*math.cos(LE*3.142/180) \n",
+ "\n",
+ "z=((aE*(1-eE**2))/math.sqrt(1-eE**2*math.sin(LE*3.142/180)**2)+H/1000)*math.sin(LE*3.142/180) \n",
+ "\n",
+ "SE=(math.atan(z/l))*180/3.142 #Geocentric latitude angle (degrees)\n",
+ "LST=240+PE\n",
+ "\n",
+ "from numpy import matrix\n",
+ "from numpy import linalg\n",
+ "a=math.sin(SE*3.142/180)*math.cos(LST*3.142/180)\n",
+ "b=math.sin(SE*3.142/180)*math.sin(LST*3.142/180)\n",
+ "c=-math.cos(SE*3.142/180)\n",
+ "d=-math.sin(LST*3.142/180)\n",
+ "e=math.cos(LST*3.142/180)\n",
+ "f=0\n",
+ "g=math.cos(SE*3.142/180)*math.cos(LST*3.142/180)\n",
+ "h=math.cos(SE*3.142/180)*math.sin(LST*3.142/180)\n",
+ "i=math.sin(SE*3.142/180)\n",
+ "\n",
+ "D = matrix( [[a,b,c],[d,e,f],[g,h,i]]) \n",
+ "\n",
+ "P=matrix( [[PI],[PJ],[PK]] )\n",
+ "\n",
+ "R=D*P #Components of range of earth station\n",
+ "Ro=math.sqrt(R[0,0]**2+R[1,0]**2+R[2,0]**2) #Magnitude of range of earth station(km)\n",
+ "Ro=round(Ro,2) \n",
+ "El=math.asin(R[2,0]/Ro) #Antenna elevation angle for the earth station(radians) \n",
+ "El=round(El*180/3.142,2) #Converting El to degrees\n",
+ "alpha=(math.atan(R[1,0]/R[2,0]))*180/3.142\n",
+ "if (R[0,0]<0 and R[1,0]>0):\n",
+ " Aza=alpha\n",
+ "else:\n",
+ " Aza=0\n",
+ "if (R[0,0]>0 and R[1,0]>0):\n",
+ " Azb=180-alpha\n",
+ "else:\n",
+ " Azb=0\n",
+ "if (R[0,0]>0 and R[1,0]<0):\n",
+ " Azc=180+alpha\n",
+ "else:\n",
+ " Azc=0\n",
+ "if (R[0,0]<0 and R[1,0]<0):\n",
+ " Azd=360-alpha\n",
+ "else:\n",
+ " Azd=0\n",
+ "Az=round(Aza+Azb+Azc+Azd,2) #Azimuth angle (degrees)\n",
+ "\n",
+ "print \"The magnitude of range of earth station is\" ,Ro,\"km\"\n",
+ "print \"The antenna elevation angle for the earth station are\",El,\"degrees\"\n",
+ "print \"The Azimuth angle for the earth station is\",Az,\"degrees\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The magnitude of range of earth station is 1809.98 km\n",
+ "The antenna elevation angle for the earth station are 12.03 degrees\n",
+ "The Azimuth angle for the earth station is 102.24 degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 22
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 2.21, Page 58"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "rI=-4685.3 #I component of radius vector from Example 2.16(km)\n",
+ "rJ=5047.7 #J component of radius vector from Example 2.16(km)\n",
+ "rK=-3289.1 #K component of radius vector from Example 2.16(km)\n",
+ "aE=6378.1414 #Semimajor axis (km)\n",
+ "eE=0.08182 #Eccentricity\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "r=math.sqrt(rI**2+rJ**2+rK**2)\n",
+ "a=math.pi #Guess value for LST(radians)\n",
+ "b=math.atan(rK/rI) #Guess Value for latitude(radians)\n",
+ "c=r-aE #Guess value for height(km)\n",
+ "\n",
+ "from scipy.optimize import fsolve\n",
+ "\n",
+ "\n",
+ "def equations(p):\n",
+ " L,h,LST = p\n",
+ " return (rI-((aE/math.sqrt(1-eE**2*math.sin(L)**2))+h)*math.cos(L)*math.cos(LST),rJ-((aE/math.sqrt(1-eE**2*math.sin(L)**2))+h)*math.cos(L)*math.sin(LST),rK-((aE*(1-eE**2)/math.sqrt(1-eE**2*math.sin(L)**2))+h)*math.sin(L))\n",
+ "\n",
+ "L,h,LST = fsolve(equations, (b,c,a))\n",
+ "L=round(L*180/3.142,2) #Converting L into degrees\n",
+ "h=round(h)\n",
+ "LST=round(LST*180/3.142,1) #Converting LST into degrees\n",
+ "\n",
+ "print \"The latitude of subsatellite is\",L,\"degrees\"\n",
+ "print \"The height of subsatellite is\",h,\"km\"\n",
+ "print \"The LST of subsatellite is\",LST,\"degrees\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The latitude of subsatellite is -25.65 degrees\n",
+ "The height of subsatellite is 1258.0 km\n",
+ "The LST of subsatellite is 132.9 degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 23
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_3.ipynb b/Satellite_Communications/Chapter_3.ipynb
new file mode 100755
index 00000000..0f386934
--- /dev/null
+++ b/Satellite_Communications/Chapter_3.ipynb
@@ -0,0 +1,268 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:cf5342643c702b9d8304367e59517c8b40b2c0d171b088582d18b96d8620a619"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 3: The Geostationary Orbit"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 3.1, Page 71"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "Pss=-90 #Location of geostationary satellite(degrees)\n",
+ "PE=-100 #Longitude of the earth station antenna(degrees)\n",
+ "LE=35 #Latitude of the earth station antenna(degrees)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "B=PE-Pss #Angle between planes containing a and c(degrees)\n",
+ "b=math.acos(math.cos(B)*math.cos(LE)) #Angle of plane containing b(radians)\n",
+ "A=math.asin(math.sin(abs(B*3.142/180))/math.sin(b)) #Angle between planes containing b and c (radians)\n",
+ "\n",
+ "A=A*180/3.142 #Converting A into degrees\n",
+ "#LE>0 and B<0 by observation\n",
+ "Az=round(180-A,2) #Azimuth angle(degrees)\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "print \"The azimuth angle for the given earth station antenna is\", Az,\"degrees\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The azimuth angle for the given earth station antenna is 164.55 degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 3.2, Page 73"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "R=6371 #Radius of earth (km)\n",
+ "aGSO= 42164 #Circumference of earth(km)\n",
+ "b=0.632 #values of b from Example 3.1 (radians)\n",
+ "#Calculation\n",
+ "import math\n",
+ "d=math.sqrt(R**2+aGSO**2-2*R*aGSO*math.cos(b)) #Range of earth station antenna (km)\n",
+ "El=math.acos(aGSO*math.sin(b)/d)*180/math.pi #Elevation angle(degrees)\n",
+ "d=round(d)\n",
+ "El=round(El)\n",
+ "#Results\n",
+ "\n",
+ "print \"The range of earth station antenna is\", d,\"km\"\n",
+ "print \"Elevation angle is\", El,\"degrees\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The range of earth station antenna is 37214.0 km\n",
+ "Elevation angle is 48.0 degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 3.3, Page 77"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "LE=49 #Latitude of earth station(degrees)\n",
+ "aGSO=42164 #Circumference of earth(km)\n",
+ "R=6371 #Radius of earth(km)\n",
+ "\n",
+ "#Calculation\n",
+ "d=(R**2+aGSO**2-2*R*aGSO*math.cos(LE*3.142/180))**0.5 #Range of earth station antenna\n",
+ "\n",
+ "El0=math.acos(aGSO*math.sin(LE*3.142/180)/d) #Elevation angle(radians)\n",
+ "\n",
+ "El0=El0*180/3.142 #Converting El0 to degrees\n",
+ "\n",
+ "delta=round(90-El0-LE) #Angle of tilt required for polar mount\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "\n",
+ "print \"The Angle of tilt required for polar mount is\", delta,\"degrees\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Angle of tilt required for polar mount is 7.0 degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 3.4, Page 78"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "LE=48.42 #Latitude of earth station(degrees)\n",
+ "PE=-89.26 #Longitute of earth station(degrees)\n",
+ "Elmin=5 #Minimum angle of elevation(degrees)\n",
+ "aGSO=42164 #Circumference of earth(km)\n",
+ "R=6371 #Radius of earth(km)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "Smin=90+Elmin\n",
+ "S=math.asin(R*math.sin(Smin*3.142/180)/aGSO)*180/math.pi #Angle subtended at the satellite(degrees)\n",
+ "\n",
+ "b=180-Smin-S #Angle of plane containing b(degrees)\n",
+ "B=math.acos(math.cos(b*3.142/180)/math.cos(LE*3.142/180))*180/math.pi#Angle between the planes containing a and c(degrees)\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"The satellite limit east of the earth station is at\", round(PE+B),\"Degrees approximately\"\n",
+ "print \"The satellite limit west of the earth station is at\", round(PE-B),\"Degrees approximately\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The satellite limit east of the earth station is at -20.0 Degrees approximately\n",
+ "The satellite limit west of the earth station is at -158.0 Degrees approximately\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 3.5, Page 80"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "y=2000 #year\n",
+ "d=223.153 #day\n",
+ "n=1.002716 #mean motion(1/day)\n",
+ "w=272.5299 #rate of regression of nodes(degrees)\n",
+ "e=0.000352 #Eccentricity\n",
+ "W=247.9161 #Rate of regression of line of apsides(degrees)\n",
+ "M=158.0516 #Mean Anomaly at given time\n",
+ "JD00=2451543.5 #Julian days for Jan 0.0 2000\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "JD=JD00+d #Julian days for given day\n",
+ "JDref=2415020 #Reference Julian days\n",
+ "JC=36525\n",
+ "T=round((JD-JDref)/JC,4) #Time in julian Centuries\n",
+ "UT=d-223 #Universal Time, fraction of the day\n",
+ "GST=(99.6910+36000.7689*T+0.004*T**2)*3.142/180 #GST(radians)\n",
+ "UT=2*math.pi*UT #Universal time converted to fraction of earth rotation (radians)\n",
+ "\n",
+ "GST=(GST+UT)*180/3.1421\n",
+ "\n",
+ "\n",
+ "GST=(math.fmod(GST,360))#using fmod multiplr revolutions are removed (degrees)\n",
+ "GST=round(GST,3)\n",
+ "v=M+2*e*M #True Anomaly(degrees)\n",
+ "\n",
+ "Pssmean=W+w+M-GST #longitude for INTELSAT(degrees)\n",
+ "Pssmean=math.fmod(Pssmean,360) #fmod removes multiple revolutions\n",
+ "Pss=w+W+v-GST#longitude for INTELSAT(degrees)\n",
+ "Pss=math.fmod(Pss,360)#fmod removes multiple revolutions\n",
+ "\n",
+ "#Results\n",
+ "print \"The longitude of INTELSAT 805 is\", round(Pss,3),\"Degrees\"\n",
+ "print \"The average longitude of INTELSAT 805 is\", round(Pssmean,3),\"Degrees\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The longitude of INTELSAT 805 is 304.625 Degrees\n",
+ "The average longitude of INTELSAT 805 is 304.514 Degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_4.ipynb b/Satellite_Communications/Chapter_4.ipynb
new file mode 100755
index 00000000..7f767a84
--- /dev/null
+++ b/Satellite_Communications/Chapter_4.ipynb
@@ -0,0 +1,124 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:3889f080e541059ccdb3a0ca28e3a8926a614c5d9e6ab3f2de315570240fb716"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 4: Radio Wave Propagation"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 4.1, Page 97"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "El=50 #Elevation Angle(degrees)\n",
+ "h0=0.6 #Earth station altitude(km)\n",
+ "hr=3 #Rain height(km)\n",
+ "R01=10 #Point Rain Rate(mm/hr)\n",
+ "f=12 #frequency(GHz)\n",
+ "ah=0.0188\n",
+ "bh=1.217\n",
+ "av=0.0168\n",
+ "bv=1.2\n",
+ "#Calculation\n",
+ "Ls=(hr-h0)/math.sin(El*3.142/180) #Slant path length(km)\n",
+ "LG=Ls*math.cos(El*3.142/180) #Horizontal projection(km)\n",
+ "r01=90/(90+4*LG) #Reduction factor\n",
+ "L=Ls*r01 #Effective path length(km)\n",
+ "alphah=ah*R01**bh #Specific Attenuation\n",
+ "AdBh=round(alphah*L,2)#Rain Attenuation for horizontal polarization\n",
+ "alphav=av*R01**bv #Specific Attenuation\n",
+ "AdBv=round(alphav*L,2)#Rain Attenuation for vertical polarization\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print\"Rain Attenuation for given conditions and horizontal polarization is\",AdBh,\"dB\"\n",
+ "print\"Rain Attenuation for given conditions and vertical polarization is\",AdBv,\"dB\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Rain Attenuation for given conditions and horizontal polarization is 0.89 dB\n",
+ "Rain Attenuation for given conditions and vertical polarization is 0.77 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 4.2, Page 99"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "ah=0.0188\n",
+ "bh=1.217\n",
+ "av=0.0168\n",
+ "bv=1.2\n",
+ "R01=10 #Point Rain Rate(mm/hr)\n",
+ "L=2.8753812 #Effective path length calculated in Example 4.1(km)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "#Factors depending on frequency and polarization\n",
+ "ac=(ah+av)/2 #a for circular polarization\n",
+ "bc=(ah*bh+av*bv)/(2*ac) #b for circular polarization\n",
+ "\n",
+ "alpha=ac*R01**bc #Specific Attenuation(dB)\n",
+ "AdB=round(alpha*L,2) #Rain Attenuation(dB)\n",
+ "\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"The Rain Attenuation for circular polarization is\",AdB,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Rain Attenuation for circular polarization is 0.83 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_5.ipynb b/Satellite_Communications/Chapter_5.ipynb
new file mode 100755
index 00000000..aeb7af0d
--- /dev/null
+++ b/Satellite_Communications/Chapter_5.ipynb
@@ -0,0 +1,83 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:7a8d496ef0b6af4e2ff18bbc317ae6cd0dcf6c23c6e6b55a17cef7eadf262706"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 5: Polarization"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 5.1, Page 112"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declararion\n",
+ "\n",
+ "L=18 #Latitude of earth station(degrees)\n",
+ "PE=-73 #Longitude of earth station(degrees)\n",
+ "Pss=-105 #Satellite location(degrees)\n",
+ "aGSO=42164 #Circumference of earth (km)\n",
+ "R=6371 #Radius of earth(km)\n",
+ "\n",
+ "import math\n",
+ "#Calculation\n",
+ "\n",
+ "B=PE-Pss #Angle between the planes containing a and c (degrees)\n",
+ "Rx=R*math.cos(L*3.142/180)*math.cos(B*3.142/180) #Geocentric-equitorial coordinate(km)\n",
+ "Ry=R*math.cos(L*3.142/180)*math.sin(B*3.142/180) #Geocentric-equitorial coordinate(km)\n",
+ "Rz=R*math.sin(L*3.142/180) #Geocentric-equitorial coordinate(km)\n",
+ "import numpy as np\n",
+ "r=np.array([Rx,Ry,Rz]) #Coordinates for local gravity direction\n",
+ "k=np.array([Rx-aGSO,Ry,Rz])#geocentric-equitorial coordinates for propagation direction\n",
+ "e=np.array([0,0,1]) # #geocentric-equitorial coordinates for polarization vector\n",
+ "\n",
+ "f=np.cross(k,r) #Direction of normal to reference plane\n",
+ "modf=(f[0]**2+f[1]**2+f[2]**2)**0.5\n",
+ "g=np.cross(k,e)# Direction of normal to plane contaning e and k\n",
+ "h=np.cross(g,k) #Direction of polarization of the plane \n",
+ "modh=(h[0]**2+h[1]**2+h[2]**2)**0.5\n",
+ "p=(h/modh)\n",
+ "p[0]=round(p[0],3)\n",
+ "p[1]=round(p[1],3)\n",
+ "p[2]=round(p[2],3)\n",
+ "E=round(math.asin(np.dot(p,f)/modf)*180/3.142,2)\n",
+ "\n",
+ "print \"The Angle of polarization at given location is\",E,\"degrees\"\n",
+ "\n",
+ "\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Angle of polarization at given location is -58.67 degrees\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_6.ipynb b/Satellite_Communications/Chapter_6.ipynb
new file mode 100755
index 00000000..cafbce7e
--- /dev/null
+++ b/Satellite_Communications/Chapter_6.ipynb
@@ -0,0 +1,271 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:d4f3edf7b06c27dae9c3606668732bde107181b7fbb92b919da02c632b969fc0"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 6: Antennas"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 6.1, Page 137"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "from pylab import *\n",
+ "%pylab inline\n",
+ "#Variable Decalration\n",
+ "a=3\n",
+ "b=2\n",
+ "dB=1\n",
+ "\n",
+ "#Calculation\n",
+ "#Initializations\n",
+ "tita=arange(-90,92,2)\n",
+ "tita[45]=1\n",
+ "tita1=arange(-90,92,2)\n",
+ "Y=linspace(0,0,91)\n",
+ "E=linspace(0,0,91)\n",
+ "gE=linspace(0,0,91)\n",
+ "GE=linspace(0,0,91)\n",
+ "X=linspace(0,0,91)\n",
+ "E1=linspace(0,0,91)\n",
+ "gH=linspace(0,0,91)\n",
+ "GH=linspace(0,0,91)\n",
+ "for i in range(0,size(Y)-1):\n",
+ " Y[i]=math.pi*b*math.sin(tita[i]*3.142/180)\n",
+ " X[i]=math.pi*a*math.sin(tita[i]*3.142/180)\n",
+ " E[i]=(math.sin(Y[i]))/Y[i] \n",
+ " E1[i]=math.cos(tita1[i]*3.142/180)*(math.sin(X[i]))/X[i]\n",
+ " gE[i]=(E[i])**2 #Raiation pattern in E-Plane\n",
+ " gH[i]=E1[i]**2 #Raiation pattern in H-Plane\n",
+ " GE[i]=10*math.log10(gE[i]) #Raiation pattern in E-Plane(dB)\n",
+ " GH[i]=10*math.log10(gH[i]) #Raiation pattern in H-Plane(dB)\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "figure(0)\n",
+ "plot(tita,GE) #Plotting E-Plane radiation pattern\n",
+ "ylim([-30,0])\n",
+ "xlim([-90,90])\n",
+ "xlabel('tita degrees')\n",
+ "ylabel('GE(tita)')\n",
+ "figure(1)\n",
+ "plot(tita1,GH) #Plotting H-Plane radiation pattern\n",
+ "ylim([-30,0])\n",
+ "xlim([-90,90])\n",
+ "xlabel('tita degrees')\n",
+ "ylabel('GH(tita)')\n",
+ "show()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Populating the interactive namespace from numpy and matplotlib\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stderr",
+ "text": [
+ "WARNING: pylab import has clobbered these variables: ['linalg', 'draw_if_interactive', 'random', 'power', 'info', 'fft']\n",
+ "`%pylab --no-import-all` prevents importing * from pylab and numpy\n"
+ ]
+ },
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAEPCAYAAACgFqixAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtYlNXaP/DvCOIpC0VFZfBQHpDTgAcUJIUMUQLNtoal\nZZltLdNM7bVftT0f0k67k6ZvuTPNEtN2Gr4kqXhIDUVEETVTUCARkAoRZEDW748lEwjDDDPPM+t5\nZu7PdXElzDBzB8Pcz7rXvdbSMMYYCCGEOLQmogMghBAiHiUDQgghlAwIIYRQMiCEEAJKBoQQQkDJ\ngBBCCBSaDBISEuDn5wdvb2+sXLlSdDiEEGL3NEpbZ1BeXg4vLy8cOnQI7u7uCA4Oxrp16xAYGCg6\nNEIIsVuKGxn88ssv8PHxgYeHB5ydnREbG4v4+HjRYRFCiF1TXDLIycmBp6en4XOtVoucnByBERFC\niP1TXDLQaDSiQyCEEIfjLDqAu2m1WmRnZxs+z87OrjVSAICAgACkpaXZOjRCCFE1nU6HkydP1n8j\nU5iysjLWtWtXlpOTw/R6Pevfvz9LSUmpdR8Fhq1YCxYsEB2CXdm1i7GuXRkLCWHsq68Yu3Wr7n3u\n/pkXFDD21lv8+4YOZey332wQqIOh17lp+/Y1/N6puDJR8+bNsWbNGkRGRkKn0+Gxxx5D3759RYdF\nHFxZGTBjBjBtGrB+PfDzz8CTTwLNmpn+3nbtgHnzgIsXgTFjgEGDgP/8B1BWHx+xd1VVDd+uuDIR\nAIwcORIjR44UHQYhAIC0NP7G7+cHnDwJtGlj2eM4OQEvvww89BAwYQIQHw+sWwe0bSttvITUx1Qy\nUNzIgEgrLCxMdAiqdugQEBHBr+y//tq8RGDqZ+7nByQnA507A0OGAPn50sTqyOh1bpqpZKC4RWfm\n0Gg0UGHYRGV+/pmXdb76iicEOSxYAGzfDuzdC7RvL89zEAIACQnAyJHG3zsVWSYiRLTDh3ki2LRJ\nvkQAAAsX8iu2YcOAPXsoIRD5qHLOgBCRfvkFePRRYONGYPhweZ9LowEWL+aTycOGAUlJNIdA5EFz\nBoQ0Qn4+8I9/AJ99BkRG2uY5NRpgyRIgPByYNMn0Hy0hlqBkQIiZbt/mXT6TJgGjRtn2uTUa4J13\ngOvX+X8JkRqViQgx07JlQEUFsGiRmOdv2hTYsgUYMAAICQFCQ8XEQewTjQwIMcOePcCnnwKbNwPO\nAi+RPD35orYnngAKCsTFQewPJQNCTLh2DXjqKT5h3Lmz6GiAqCgez8SJtEqZSIeSASEmzJ3L33iH\nDRMdyd8WL+bzB5s2iY6E2AuaMyCkAQcOAPv3AxkZoiOpzdkZWL0aGD0aiIkBXF1FR0TUjkYGhBhR\nUQFMnw689x5wzz2io6krKIgnggULREdC7AElA0KM+PhjoFMnvq5AqZYv53si0fEdxFqUDAipx++/\n81bSjz7iPf5K1a4dsHQpH8HQYjRiDUoGhNTj1VeBf/4T6N1bdCSmPfccoNfzbidCLEUTyITc5eRJ\nYN8+4MIF0ZGYx8kJ+PBD4PHHgfHjzTtQh5C70ciAkLssXcrbSVu1Eh2J+QYNAry9gQ0bREdC1IqS\nASE1pKfzA2umThUdSePNnw+sWMG7oAhpLEoGhNSwbBnwyivqGhVUCwkB7r+fFqIRy1AyIOSOc+f4\nHkQvvig6EsvNn8/bTSsrRUdC1IaSASF3LF8OzJwJtG4tOhLLDR3K10Z8843oSIjaUDIgBMBvvwG7\ndgEzZoiOxHrz5/Ny1+3boiMhakLJgBAAK1fyhVv33Sc6EusNGwa0aQNs3y46EqImlAyIw/vzT+Db\nb3kysAcaDZ8EX71adCRETSgZEIe3cSM/z7hDB9GRSGf0aODsWT4pTog5KBkQh8YYP8Fs2jTRkUjL\nxQWYPBlYu1Z0JEQtKBkQh/bzz3yidehQ0ZFI7/nn+ainrEx0JEQNKBkQh/bpp3y1sZJ3JrVU9+7A\ngAHA1q2iIyFqoLpksHDhQmi1WgQGBiIwMBAJCQmiQyIqVVgI/PADMGmS6EjkM20alYqIeVSXDDQa\nDWbPno3U1FSkpqZixIgRokMiKrVhAzBqFNC2rehI5PPII8Dly8Dp06IjIUqnumQAAIwx0SEQlWOM\nXzHb28Tx3ZydgSlTaHRATFNlMvjkk0/Qp08fTJw4EUVFRaLDISqUlMT3/Q8OFh2J/KZMATZvBm7e\nFB0JUTJFJoOIiAj4+fnV+dixYwemT5+OixcvIiMjAw888ABmzpwpIkSicl99BTzzjH1OHN9NqwWC\ngoD4eNGRECUzlQw0TME1md9//x3h4eE4f/58ra9rNBosWLDA8HlYWBjCwsJsHB1RqooKvpnbiRNA\nly6io7GN9ev53kvffis6EqIkSUlJSEpKAgD89BPw88+LjJbhFZcM8vPz0eHOUtGPPvoI+/btw/a7\nNmHRaDQ0r0CMSkgAFi8GDh8WHYntFBXxVtPcXOCee0RHQ5Tof/4HePtt4++dijsDec6cOTh16hT0\nej26du2Kzz//XHRIRGXi4vh5wY6kbVtg8GDeSjt+vOhoiBKpukxkDI0MiDF6PS8RpaXxWroj+eIL\nYMcO2s2U1G/2bOD9942/dyqym4gQS+3ZA3h5OV4iAPjmdXv2ADduiI6EKJEiu4kIkYsjloiqtWkD\nhIbyUhEhd6NkQByGXg98/z0wdqzoSMR5/HGeEAm5GyUD4jASEwEfH8DDQ3Qk4oweDezdCxQXi46E\nKA0lA+IwHLlEVM3VFRgyBNi5U3QkRGkoGRCHUF7OO2n+8Q/RkYg3bhyVikhdlAyIQzh4kHcRde4s\nOhLxYmJ4qejWLdGRECWhZEAcwu7d/JxjwruK/PyAQ4dER0KUhJIBcQg//ggMHy46CuWIjOQ/E0Kq\nUTIgdu/qVeDKFb5zJ+GGD6dkQGqjZEDsXmIiMGwYP+iFcAMGADk5PFESAlAyIA6ASkR1OTvzBLl7\nt+hIiFJQMiB2raqKjwxo8riu4cMpGZC/UTIgdu3kSb59c9euoiNRnshInihNvQkQx0DJgNg1KhEZ\n16UL4OYGpKaKjoQoASUDYtdofUHDqFREqlEyIHarpAQ4fhwYOlR0JMpF6w1INUoGxG7t28dbKOnM\nX+OGDgVSUujAG0LJgNgxKhGZ1qoVMHAgkJQkOhIiGiUDYrd++gmIiBAdhfJFRPCuIuLYKBkQu3T9\nOpCbC+h0oiNRvtBQ4PBh0VEQ0SgZELt09CifL3ByEh2J8vXrB5w9C5SWio6EiETJgNilI0eAkBDR\nUahD8+Z8S+vjx0VHQkSiZEDs0pEjQHCw6CjUIziY/8yI46JkQOxOZSWQnAwMGiQ6EvUIDqZ5A0dH\nyYDYnfR0wMOD70lEzFM9MmBMdCREFEoGxO5QiajxPD0BFxfg0iXRkRBRKBkQu0PJwDI0b+DYKBkQ\nu0OdRJYJCaFk4MgUmQy2bt0KHx8fODk54cSJE7VuW7FiBby9veHn54fdtN0iuUt+PlBQAHh7i45E\nfWgS2bGZSgZCTo318/PDd999h6lTp9b6ekpKCrZv347Tp08jLy8PoaGhOH/+PFxcXESESRTo6FF+\n8H0TGtM2WmAg8OuvfLdX2tzP8ShyZODl5YVevXrV+Xp8fDzGjx8PJycneHh4wMfHB8nJyQIiJEpF\n8wWWa9aMb99x7JjoSIgIikwGxuTm5kKr1Ro+12q1yMnJERgRURpKBtahSWTHJaxMFBERgby8vDpf\nX758OWJiYqx+/IULFxr+HRYWhrCwMKsfkyhbZSXfm3/gQNGRqFdwMLBhg+goiK0kJSUh6c7+5Vev\nNnxf2ZJBogV75mq1WmRnZxs+z8nJgaenZ733rZkMiGM4dYr3y7dpIzoS9QoOBqZN44vPNBrR0RC5\n1bxQ3rYNyM9fZPS+wstErMaSyKioKGzZsgWVlZXIyclBeno6goKCBEZHlOTwYWoptZaHBz/w5sIF\n0ZEQW1PknMF3330HT09PHD16FI888ghGjhwJAOjXrx/GjBkDf39/jBgxAmvXrkXTpk1FhEgUKCWF\nb1tNrBMURDuYOiJTyUDDmPp2K9FoNFBh2MRK/fsDH31EE8jWWrwYuHULWL5cdCTElnr3Bn791fh7\np/AyESHmuH2bH9Di4yM6EvXz9eWb/RHHosgyESGNdekS0L49cO+9oiNRPz8/4PRp0VEQW6NkQOzC\n6dP8TYxY7/77+bYeN26IjoTYEiUDYhfS03l5g1jPyQno0wc4c0Z0JMSWKBkQu0AjA2n5+lKpyNFQ\nMiB2gUYG0vLzo0lkR0PJgKjerVtAVhbg5SU6EvtBk8iOh5IBUb1z5/ikJ+1kLh1qL3U8lAyI6tF8\ngfQ6deJrN65dEx0JsRVKBkT10tMpGUhNo6HRgaOhZEBU7/RpmjyWA80bOBZKBkT1aGQgDxoZOBZK\nBkTV/vwTKCoCunUTHYn9oZGBY6FkQFTtzBm+OV0TeqVKzscHyMgw/SZB7AMlA6Jq1EkkH1dXfmpc\nVpboSIgtWHUGckVFBXbv3o0DBw4gKysLGo0GXbt2xZAhQxAZGQlnZ9lOzSQEAK08llv1vMH994uO\nhMjN4pHBkiVLMGDAAPzwww/w8vLC5MmTMWnSJPTu3Rs7d+5E//79sXTpUqnjJaQWGhnIi+YNHIfF\nIwOdToc333wTmnpOzZ48eTKqqqrwww8/WB0gIcYwRm2lcvPzA+jP2DHQsZekXiUlQGYm0LWrcg+M\n+f13ICCA771P5HHyJDBxonJbTBnjv//CQn5sI1WmLcev642/d5r80V69ehXLly/HuXPnUFlZeedB\nNdi7d6+UcRIbOHIESEgA9uzhbwJaLZCdDbRqBfToAURHA3PmAM2aiY6UO3OGRgVy69MH+O03oKIC\naNpUdDTc1avAggVAcjJw8SJ/PbZpAxQUAEOGAMOGAaNGAd27i45UPcy5djbZTRQbGwudTofs7Gws\nXLgQ999/P/r37y9FfMRGsrKAMWP4FaBez//Q8vP5BnAlJUBaGrBiBXD0KL8S379fdMTcpUvAAw+I\njsK+NWsGuLsDOTmiI+FljDVrAH9/wM0N+PxzfrFSWAhcuACcPw9MmMAvEgYMAF5/Hbh5U3TU6lBV\nZUZ7NjPB19e31n8ZYywoKMjUt8nKjLAJY6ysjLElSxhzc2Ns6VL+eUOqqhjbvp0xrZaxZ55hrLjY\nNnEa89prPG4iryFDGNu7V2wMZ88yNnAgY4MHM5aebvr+ubmMPfkkY126MLZtG3/tEuP0esacnRt+\n7zQ5MmjZsiUAwM3NDbt27cKJEyeQl5dnfaoissrLA0JCgOPH+ccbbwDNmzf8PRoNH0FkZADl5cBT\nT4ldkJSVRSuPbaFbN7FrDfLzgchIftV/4ABfDGdK587AV18BGzYAb74JTJkC3Klik3qYMzIwmQze\nfPNNFBcX47333sPSpUsxZcoU/Pvf/5YqRiKDCxeAwYOBxx4Dvvuu8W+orVsDX3zBh+eLF8sRoXko\nGdiGyGSg1wNjx/ILjxkzGr/SPCwMOHaMNxuMGQOUlsoSpupJkgzatGmDe++9F3379sXhw4dx4sQJ\ntG/fXqoYicSOHweGDgX+3//jV0z1dAabxcUF+PZbYP16YPt2aWM0V2YmTRLaQvfu/GctwqxZwH33\nWXfR0aoVsGMHn2R++GG+lxWpTZJkMGPGjDpfe+mllywOisjn4EEgKopPwk2ZYv3jdezIE8HUqbZv\nPSwr45vUdexo2+d1RKJGBv/7v8DevcCmTdbvPdW0KR/Nhobyj4ICSUK0G+YkA6OtpUeOHMHhw4dR\nUFCA9957z9CbWlpaivLyckkDJda7cAEYN47XUSMipHvc/v2B997jQ/D0dNu1nV6+DHTpQhvU2YKI\nZHDqFJ/HOniQjwyk0KQJsGoVX4vw6KO8hdrUPJmjsGpkoNfrcePGDdy+fRs3btxASUkJSkpK0KxZ\nM2wXVTcg9Soq4msEFi+WNhFUe+op3uL55ZfSP7YxNF9gO1otP/5Sr7fdcy5ZArz2Gl9IJrWlS/kE\n85Qp5vXXOwJJWkuzsrKk7HBijDEWFxfHvL29WZMmTVhKSorh65mZmax58+YsICCABQQEsBdeeKHe\n7zcjbIdRXs5YeDhjs2fL+zwHDzJ2//2MVVTI+zzVVq9m7J//tM1zEca6dWPst99s81wZGYx16MBY\nSYl8z3HzJmMDBjC2eLF8z6EmhYWMtW3b8Hun0TLRyy+/jA8++KDe+QGNRoMdO3ZYnKX8/Pzw3Xff\nYerUqXVu69GjB1JTUy1+bEfCGPDii8A99/DhsZxCQwFPT+Cbb/jiNbnRyMC2qktFtljkt2IF8PLL\nfOJXLi1b8knlgQOBXr2A2Fj5nksNrJozePrppwEAc+bMqXNbfZvXNYaXl5dV30+4jRv5quGjRwEn\nJ/mf7803efvfk0/KX8vPyuJ1X2Ibtpo3uHgR2LUL+Ogj+Z+rY0eeEB5+GOjXj2+54qismjPo168f\nAODkyZMICwur9SHnlXtWVhYCAgIQEhJC+x814PJlvo/QV1/xkYEtDBvGN7WzxZQRjQxsy1bJYOVK\n4IUXpJs0NkWnA+bP5/NejrwozaqRQbUNGzZg1qxZtb72+eef1/na3SIiIupdqbx8+XLExMTU+z2d\nO3dGbm4u7r33XqSmpiI6OhpnzpyBq6trnfsuXLjQ8O/qJOUoqqqASZOAV1/lL3Zb0Wj46OBf/wL+\n8Q/L1zCYIzOTkoEtdesGJCbK+xzZ2Xztyq+/yvs8d5s+nY8QVq7kHUyOJCkpCUlJSSgu5vuQNcTo\nFtZff/01Nm/ejIMHD+LBBx80fL20tBR6vR4HDx60OtDw8HC8++676Nu3b723R0ZGYtGiRRg0aFDt\noB18C+t33wW+/x7Yt8825aGaGAMCA3nHRnS0PM9x8ybQrh1fTSpnwiF/O3CAb/x26JB8zzFzJm9N\nfvtt+Z7DmJwcXiratYv/19FkZ/PtaXJyLNjCOiQkBJ06dUJBQQHmzp1reICWLVsiICBAsiBrBlZU\nVARXV1c0adIEWVlZSE9PRw9HLvTV4/Rp4K23+BJ8WycCgL85z5sHfPCBfMng8mV+zgIlAtuRu0x0\n8ybfR+jcOfmeoyFaLX/NTpwInDgBtGghJg5RrGotrTJjG0Bz7lOf7du3M61Wy5o3b87c3d3ZiBEj\nGGOMbd26lfn4+DA/Pz/m6+vLvv3223q/v4Gw7VplJWOBgYytXy82jhs3GLvnHsb+/FOex4+PZywy\nUp7HJvWrqGDMxYWxW7fkefz//pe3QIs2fjxjc+aIjsL2Ll3i7cMNvXcaLRMNHToU0dHRGD16NHr1\n6lXrtvPnz+O///0v4uPjceDAAWlSVyM4aplo9Wpg61a+hF/0VXNUFPDMM8Djj0v/2J98wkdAn34q\n/WMT4+6/H/jxR6BnT+kfe8oUflCRialG2eXn811R9+8HvL3FxmJLFy8Cw4cDly4Zf+80OnDYvXs3\n3NzcMH36dHTq1Am9evVCz5490alTJ7z00ktwd3fHTz/9JFvwpLaCAmDhQt6SJzoRAEBMDLBzpzyP\nnZVFG9SJ0L27PKWiqiogPp6/ZkTr0IF3F82c6Virk63qJmrWrBkmT56MyZMn4/bt2ygsLAQAtGvX\nDk4iitUO7o03eH+/Uo6BjI7mXUWVldKfS5uVxfdEIrYl17zB8eN8R1GlnFr3wgt8k7xt2/j22Y7A\nqnUGe/bsMfz7ypUrcHd3h7u7O5ycnGhvIhs7fpxfhdfophXO05N/HDki/WNTW6kY3brJs5X1zp3K\nGBVUc3bmI+w5cxzn/AOrksHcuXMN/37sscdq3bZkyRLrIiNmq6oCXnqJL+GvZ7mFUHKVimjBmRhy\njQyUlgwAfubH4MH878oRSHKeARHryy/5HMGd3UEUZdQovphHSjdu8Ku1Dh2kfVximhxzBpcvA7m5\nQHCwtI8rhbff5md/XLokOhL5UTJQufJyPtn13nvK3Ne/b1+guJifpSCVy5f5FaoSJskdjRwjgx9+\n4J1nSpxm9PDge20pqfwqF6smkC9dumTYNiIzM7PWFhKZos7IczDr1gH+/sq8qgL4iys6mpcBZs+W\n5jFpvkCcTp2A69f5KXNSLcrauVOaU/fk8sorvJU2I8O+W03NSQZG1xkkJSXV6ue/e6fSoUOHShOl\nBRxhnUFpKd9lMT6eb/+gVDt38pHLvn3SPN5HHwFnz/I1FcT2ql9zUhw6c+MGv/rOyeEbHCrV228D\nycl8DY+9SkkB/vlP4MQJC7ajKCgowLVr1wznGQQFBaHgzsGiNIEsv48/5hNcSk4EAN/JdMIE4I8/\nePugtWiNgVjV8wZSJIPERGDQIGUnAoBvZPf++0BqqvL/3ixl1ZzBqlWrMGrUKMPner0ex48fx8GD\nB7F27VrJgiR1FRcD77zDj7FUupYteWfGjz9K83jUSSSWlPMGSlloZkrLlnyTvn/9S3Qk8rH6DOQu\nXboYPg8NDYWbmxu0Wi3KysokC5LU9f77wIgRQJ8+oiMxz+DBfOM8KdCcgVhSrjVITuavDTV4/nm+\nBYoc62aUwKpkUHnXSRAff/yx4d+ljrJSQ4CiIl43X7BAdCTm8/cHTp2S5rFoZCCWVCOD8nLgt9/U\nMynbrBnv3LPX8w6sSgY6nQ6bNm2q8/WNGzdCZ8sTVRzMxx8Do0crZ+m+OXQ6IC3N+r1ebt36+ywD\nIoZWy9cFWOvsWb7xXfPm1j+WrUyaxEdF9jg6sKq19P3330dkZCQ2bdqEwDuzKidOnEBeXh5+lKpA\nTGopLeU7du7fLzqSxuncGbh9G8jL4+2JliosBNzcaI2BSG5uvL3UWmlpfMSoJs7OfIuKt9+2zdGu\ntmTVyMDd3R0pKSmYOXMmXF1d0aZNG8yaNQsnTpxAx44dpY6VgB/+MWgQ4OUlOpLG0Wj46MDaUtH1\n6zQqEK1dO2mSwalTtj2SVSrPPstPe7P10Zxys/oMZCcnJ0RFRSEqKkrKuEg9bt/mHURffik6EstU\nl4oiIy1/jOqRARGnbVs+b8WYdSO0tDR+la02rVrxXU3ffRewp6ZJ2o5CRbZvBzp2VE/3xd38/fkb\ngDVoZCCeiwtvtfzrL8sfgzF1lomqvfQSX4B27ZroSKRDyUAlGON1yldfFR2J5aQoExUWUjJQgnbt\n+O/CUnl5/DXdubN0MdlS+/bA+PG8q89eUDJQif37+ZVYjTV+quPtzVsJy8stfwwqEymDm5t1ySAt\njV8cqLkRYPZsXiYqKREdiTQoGajEqlV8VKDEnUnN1bw5byXMyLD8MahMpAzWTiKruURUrUcPIDwc\n+Owz0ZFIg5KBCvz6K99EauJE0ZFYz9pSEY0MlMHakYFaO4nuNmcOLxVVVYmOxHqUDFTg00+ByZPV\ntTjHmOqOIkvRyEAZpBgZ2EMyCAripwvu3i06EutRMlC40lLeSjp1quhIpGFtRxGNDJTBmpHBrVvA\nxYvq2VerIRoNbzO1h+3UKRko3JYtwMCB9rMXj7XbUtDIQBmsGRmcPcu3UrGHkS4APPEE8PPPwJUr\noiOxDiUDhVuzBnjxRdFRSKdTJ341dfWqZd9PraXKYE1rqb2UiKq1asXn89atEx2JdSgZKNjx40B+\nPt+q2l5oNJaXisrL+Ufr1tLHRRrHmjKRPXQS3W3aNN5VpNeLjsRylAwUbM0aPlegxIPCrWFpR9H1\n67RJnVJYUyayl06imvr04etovvtOdCSWo2SgUH/8AWzbBjz3nOhIpGdpRxFNHiuHpSOD6m0o7C0Z\nAHwiec0a0VFYrqrK9IWWkGQwe/ZseHt7w9vbG9HR0bhe4zJkxYoV8Pb2hp+fH3bbQ09XPTZsAKKi\ngA4dREciPUsPuqHJY+Vwc/t7s7rGuHqVv+HY46bGjz7K1wSdOSM6EssodmQQExOD9PR0ZGRkwNfX\nF0uXLgUApKSkYPv27Th9+jQSEhIwdepU6NVcqKsHY7z+aC/tpHfz9uathbduNe77aGSgHM2a8Y/i\n4sZ9nz1sQ2FM06Z8PdDnn4uOxDKKTQbh4eFocieywYMHI/fO0Urx8fEYP348nJyc4OHhAR8fHyQn\nJ4sIUTYnTvD1BQ8+KDoSeTRrBnh6Nv4cXRoZKIsl8wYXLqjvLI7GmDQJ2LwZqKgQHUnjKTYZ1LRu\n3TqMHj0aAJCbmwutVmu4TavVIicnR1RostiwAXj6aXXvQ2RKp05858rGoLZSZbGkvfTqVetOulO6\nnj35/ltqPOjR6sNtrBEREYG8et4Rli9fjpiYGADAsmXL4OLiggkTJjT68RcuXGj4d1hYGMLCwiwN\n1Wb0euDrr4GjR0VHIq+OHS1LBl26yBMPaTxLJpHz8oDQUHniUYpJk/gFXXS06EjMk5SUhKSkJKSk\nmD7bWrZkkJiY2ODtGzZsQHx8PPbu3Wv4mlarRXZ2tuHznJwceHp61vv9NZOBWuzaxYfRajrs3hKW\nJIPr14G+feWJhzSeJWWivDz7nDyuKTYWmDePT7C3bSs6GtOqL5TXreNrm1JTFxm9r5BiRUJCAlat\nWoUdO3ageY1161FRUdiyZQsqKyuRk5OD9PR0BAUFiQhRFhs28CsLe2dpmYgmkJXD0pGBvScDV1d+\ntOuWLaIjaRzFzhnMmDEDJSUliIiIQGBgIF68sydDv379MGbMGPj7+2PEiBFYu3YtmjZtKiJEyRUW\nAnv3AuPGiY5EfpaODGjOQDksHRnY85xBtepSkZoInTNoyIULF4ze9vrrr+P111+3YTS28fXXwCOP\nAPfdJzoS+Vk6Z0DJQDnatWvc4sHbt/nvsH17+WJSiuHD+YLR8+eB3r1FR2MexY4MHJGjlIgAy0cG\nVCZSDje3xo0MCguBNm14P769c3YGnnxSXaMDSgYKceYMb7t7+GHRkdhGY5OBXs/XXjjCqEktGtta\n6gjzBTVNmgRs3MhHRGpAyUAhNm/mVxL2timdMe3b826Lykrz7n/9Ou/MsMeVq2rV2Ankq1cdKxn4\n+/PX7MGDoiMxDyUDBWAMiIvjLWmOwsmJX1nm55t3f5o8Vp7GTiA72sgA4H/TW7eKjsI8lAwUIC2N\nDyX79RMwjiH6AAASbElEQVQdiW01plREbaXKUz0yMHezOkdMBuPG8d2H1VAqomSgAHFx/EXjaCWQ\nxiQDGhkoT/PmgIsLUFJi3v0dpa20pp49+f+zGkpFlAwEqy4RPf646Ehsr7EjA0oGytOYSWRHHBkA\n/G87Lk50FKZRMhDs5EmeEBxxm4XGjgyoTKQ8jWkvddRkMG4csH278ktFlAwEc9QSEUAjA3tAIwPT\nevQAOncGDhwQHUnDKBkIxBjvNHDEEhHAa6lXr5p3X5pAVqbGtJc6WmtpTY8/rvyuIkoGAqWm8oQQ\nGCg6EjFoAln9zG0vLS3lJ9u5usofkxJVdxWZu65GBEoGAlVPHDtiiQig1lJ7YO7I4No1/vt21Nf6\nAw8AWq2yS0WUDARx9BIRQCMDe2DuyMAR20rvpvRSESUDQap3ewwIEBuHSK1b8w4Lc/rUaQJZmcyd\nQHbUyeOaxo7lXUVVVaIjqR8lA0F27ABGjXLcYTPA/987duQlhIZUVAA3b9ImdUpkbmspJQNeKmrX\nDkhOFh1J/SgZCLJzJ08Gjs6cE8+KivjWx6ZeqMT2aGTQOKNG8b99JaJkIMDvvwMXL9r/weDm6NjR\ndHspTR4rl7kTyI7cVlpTTAwlA1JDfDw/I9URDvkwxZxJZJo8Vq7qMpGpzepoZMANHMh/FllZoiOp\ni5KBADt28CsEYl4yoJGBcrVsyd9Abt5s+H6UDDgnJyAqSpmjA0oGNlZaCuzfD4wcKToSZaCRgfqZ\n015KraV/U+q8ASUDG9uzh59b0KaN6EiUwdyRASUD5TI1icwY7xhzd7ddTEo2fDhw9ChQXCw6ktoo\nGdjYzp1UIqrJnG4i2rFU2Uy1l/7xBy8nNW9uu5iU7J57gJAQYPdu0ZHURsnAhqqqgB9+oGRQE40M\n1M/UyIDmC+pSYlcRJQMbSkkB7r2Xn35EuA4d+DnIDa3KvH6dHyxOlMlUeym1ldYVHc27CpV0xgEl\nAxuihWZ1ubjwBNlQmaG8nEoMStasGaDXG7+dRgZ1de3KN647ckR0JH+jZGBDVCKqn6lSkTkvUiJO\nkyYNj+woGdRPaaUiSgY2cu0acOkSMGiQ6EiUx5xk4ORku3hI4zg5mU4G1FZa14gRyppEpmRgI3v2\nAGFhtOq4PqY6im7fppGBkjVp0nDtm0YG9QsKAjIz+ZyZEig2GcyePRve3t7w9vZGdHQ0rt8pKmdl\nZaFFixYIDAxEYGAgXnzxRRHhNVpiIhARIToKZaIykbpRmcgyTZsCQ4fyC0UlUGwyiImJQXp6OjIy\nMuDr64ulS5cabuvRowdSU1ORmpqK1atXiwivURjjyWD4cNGRKBOVidTNnDIRJYP6DR/O3xuUQLHJ\nIDw8HE3uRDZ48GDk5uaKCEMSZ88Czs5Ajx6iI1EmUzuXUplI2UyViai11LiICD5vYGqjP1tQbDKo\nad26dRg9erTh86ysLAQEBCAkJAR79+4VGJl5qktEjnyQTUOoTKRuDZWJ9Hrgr79oBbkxPXvykdW5\nc6IjMe/vzFmuJ4+IiEBePe8Cy5cvR8ydHsxly5bBxcUFEyZMAAB07twZubm5uPfee5Gamoro6Gic\nOXMGrq6ucoVptcRE4OmnRUehXO7uDZ92RmUiZWuoTFS94yz9/uqn0fALxcREoE8fsbEITQaJJopl\nGzZsQHx8fK2rfxcXF7i4uAAAAgMD4evri3PnzmFQPT2bCxcuNPw7LCwMYWFhksTdGHo9cPAgsGGD\nzZ9aNVxc+NGWxlCZSNkaKhPp9XxRGjFu+HBg40Zg5kwxz5+UlISkpCRkZABxcQ3fV7Zk0JCEhASs\nWrUK+/fvR/May0+Liorg6uqKJk2aICsrC+np6ehhpBhfMxmIcuQI0KsXDZMbYmoCkspEytZQmYhG\ndaYNGwY8/zxPnHeuc22q+kL5xAngySeBLVsWGb2vkD/DGTNmoKSkBBEREbVaSPfu3Qt/f3/4+/sj\nJiYGH374IdopeBczaik1zdQEJL2hKFtDyZxGdaa5ufG5g6NHxcYhtEzUkAsXLtT79bFjx2Ls2LE2\njsZyiYnAW2+JjkLZTI0M6A1F2RpK5pTIzVM9bzBkiLgYVNFNpFZFRbytNCREdCTKZs7IgJKBcjVU\nJqJEbh4lrDegZCCjvXuB0FCaQDPF1ApWurpUtoZGdpTIzRMSAmRk8IOARKFkIKM9e4CHHxYdhfJR\nmUjdqExkvWbNgMGDgaQkcTFQMpDRgQN87xHSMCoTqRuViaQxZAh/zxCFkoFMCguBnBxApxMdifJR\nmUjdTJWJ6HdnHkoGdurQIV4HdBbSi6UuTk4Njwzo6lLZGhrZ0e/OfP37A+fPA8XFYp6fkoFMDhwA\nHnxQdBTqYM7IgN5QlMvUojP63ZmnWTNgwADg8GExz0/JQCYHDojtGVYTc1YgU6lBuahMJJ0HHxRX\nKqJkIIMbN/guhAMGiI5EHUxNIFOpQdmoTCSdIUP4XmYiUDKQweHDQL9+tL7AXFQmUjfam0g6wcFA\naipQVmb756ZkIAMqETWOqQlkekNRNtqbSDqtWgG+vkBysu2fm5KBDCgZNI6pkQG9oSgbLTqTlqh5\nA0oGErt1iw/zgoNFR6IeGg0/9s/Y0X9UJlI26iaSlqh5A0oGEktOBry9gXvuER2Jemg0VHdWMyoT\nSSs0lG9n3dCBT3KgZCAxKhFZhrY0UC8qE0mrTRuge3deYbAlSgYSo2RgmYYmkanUoGyUyKUnYt6A\nkoGEKiv58G7wYNGRqA+VidSLFp1JT8S8ASUDCaWmAl260HnHljCWDBijkYHSmSoT0e+u8R58kCeD\nhrrspEbJQEI0KrCcsTJRdYeRRmPbeIj5qEwkvU6dAFdXwMjpv7KgZCChX34BgoJER6FOxt5QqMyg\nfFQmkkdQEH9PsRVKBhJKTqZkYCljIwO6slQ+2ptIHkFBtl2JTMlAIkVFwNWrfI0BabyGRgb0ZqJs\nNPkvj4EDKRmo0rFjfHM6euFbhspE6mWqTETJ3DKBgcCZM3xXA1ugZCCR5GSeyYllqEykXlQmkkfL\nlkCvXkBamm2ej5KBRGi+wDpUJlIvKhPJx5alIkoGEmCMOomsZezqkt5MlI/2JpKPLTuKKBlI4PJl\nfvC9Vis6EvUy9oZCbybKR3sTyceWHUWUDCRQPSqghVGWozKRetEW1vLp0wfIy+PdinJTbDJ48803\nodPp4OvriyFDhuDSpUuG21asWAFvb2/4+flh9+7dIsKrhSaPrWdsApmuLJWPykTycXLiXYrHjsn/\nXIpNBq+99hrS0tKQnp6OcePGYdGiRQCAlJQUbN++HadPn0ZCQgKmTp0KvV4vIkQDtU8eJyUliQ7B\n6NWlvb6ZKOFnLhW1lInU+jO3ValIscngnhqnw5SUlKBTp04AgPj4eIwfPx5OTk7w8PCAj48PkkUc\nGHpHRQXfoK5/f2EhWE0JfyQNTSBTMlA2texNpNaf+cCBtplENudvzVn+MOr3xhtvYOPGjWjRooXh\nDT83NxcPPfSQ4T5arRY5OTmiQsSZM3yn0vvuExaCXTBWalDSlSWpH+1NJK+gIGDaNN61KOe8pNCR\nQUREBPz8/Op87Ny5EwCwbNkyXLlyBc8++yxmzZolVxhWUXuJSCkcbWRgT2gLa3l5ePBuxawseZ+n\nqsqMZMMEu3z5MuvduzdjjLHFixezt99+23DbI488wg4dOlTne3Q6HQNAH/RBH/RBH4340Ol0Rt+L\nhZSJMjMz0b17dwDA999/Dz8/PwBAVFQUpk2bhlmzZiEvLw/p6ekIqufS/OTJkzaNlxBC7J2QZDBn\nzhxcvHgRFRUV6N69Oz777DMAQL9+/TBmzBj4+/ujSZMmWLt2LZo2bSoiREIIcSgaxqrPmyKEEOKo\naPrHDi1cuBBarRaBgYEIDAzE//3f/xluU9qiPnuSkJAAPz8/eHt7Y+XKlaLDsVvdunWDv78/AgMD\nDWXkoqIiREREwN/fH5GRkfjzzz8FR6k+NDKwQ4sWLULr1q0xe/bsWl9PSUnBtGnTcPToUeTl5SE0\nNBTnz5+Hi4uLoEjtR3l5Oby8vHDo0CG4u7sjODgY69atQ2BgoOjQ7E737t2RkpKCtm3bGr42Y8YM\nPPDAA5g1axb+/e9/IzMzEx988IHAKNWHRgZ2qr4cr7RFffbkl19+gY+PDzw8PODs7IzY2FjEx8eL\nDstu3f363rVrF5566ikAwMSJE+lnbwFKBnbqk08+QZ8+fTBx4kQU3dkJKzc3F9oa26+KXtRnT3Jy\ncuDp6Wn4nH628tFoNIaS0McffwwAKCgogJubGwCgXbt2yM/PFxmiKglbgUysExERgby8vDpfX7Zs\nGaZPn4758+cD4PMHM2fOxKZNm2wdokPR0La2NnP06FF06NABBQUFGDFiBLy8vESHZBcoGahUYmKi\nWfebOnUqwsPDAfCr1ezsbMNtd1/NEsvd/bPNzs6mn61MOnToAABo3749xo4di2PHjqF9+/YoLCxE\nu3btUFBQYLgPMR+ViexQzSHytm3b4OPjA4Av6tuyZQsqKyuRk5NjdFEfabwBAwYgPT0dubm5qKio\nQFxcHEaOHCk6LLtTWlqK0tJSAMDNmzeRkJAAHx8fREVFGUa/mzZtQlRUlMgwVYlGBnZozpw5OHXq\nFPR6Pbp27YrPP/8cAC3qk1Pz5s2xZs0aREZGoqqqCk899RT69u0rOiy7c+3aNTz66KPQaDQoLS3F\n+PHjMWrUKISGhiI2Nhbr169Hx44dERcXJzpU1aHWUkIIIVQmIoQQQsmAEEIIKBkQQggBJQNCCCGg\nZEAIIQSUDAghhICSAbFjf/31F9asWWP4/Pfff8e4ceMAAGlpabW29rbEM888g23btln1GIQoBSUD\nYrf++OMPrF692vB5586dsXXrVgBAamoqdu3aZdXjazQaSfYkum3sxHlCbIiSAbFbr732Gi5evIjA\nwEDMmzcPly9fhp+fHyoqKjB//nxs2bIFgYGBiIuLw7FjxxAcHAydTod+/fohIyOjzuNVVVXh+eef\nR+/evTFixAjk5+cbtlI+cuQIgoOD4e/vj/DwcOTm5gIAfv75Z3h5eSEoKAivvvqq4bzvL774AqNG\njUJkZCSGDx+Omzdv4oknnoBOp4OPj48haVVWVuKll16CTqdDnz598OGHHwLg+0oNGTIEgYGB8PPz\nw8GDB23xIyX2jBFip7Kyspivr6/h88zMTMPnX3zxBZsxY4bhths3brCqqirGGGOJiYksOjq6zuNt\n3ryZjRgxgjHG2LVr15irqyvbtm0bKy8vZ3379mWFhYWMMca++eYbNmHCBMYYYz179mTHjh1jjDH2\nxhtvMD8/P8YYY//5z3+YVqtlxcXFjDHGXnnlFbZp0ybGGGN//PEHe+CBB1hxcTH74IMP2NKlSxlj\njN26dYv17duX/frrr2zVqlVs5cqVhthKSkqs/XERB0d7ExG7xRrYaYUxVuv2goICxMbG4vLly2jS\npAnKysrqfM+hQ4cQGxsLgO+c+dBDDwEATp06hd9++w0PP/wwAF72cXd3R0FBAfR6Pfr37w8AiI2N\nxffff294vIiICLRu3RoAsHv3biQmJuKdd94BwEcEV65cwe7du3HhwgV8++23AIDi4mJcunQJgwYN\nwnPPPYeysjLExMTQPkjEapQMCAHwxhtv4JFHHsGLL76Iy5cvIywsrM59NBqN0QSj0+lw4MCBWl+7\n+4CVu7+3VatWtT7fsWMHunfvXuexP/30U8M25DUdOHAA8fHxmDJlCmbNmoWnn3663tgIMQfNGRC7\n1aJFC8N2x3dr2bJlrdtu3bqFjh07AgC+/PLLer8nNDTUUMsvKCjAvn37AAD+/v64cuUKUlNTAfCr\n+vPnz6NDhw5wcXFBSkoKABi+tz6RkZG1JrvT09MNX1+7di2qqqoAAJmZmSgrK0NOTg46dOiA5557\nDs899xyOHz9u+gdCSAMoGRC75e7ujoCAAHh7e2PevHm1un/Cw8ORkpICnU6HuLg4zJ07F3PnzsWA\nAQOg1+vr7RKKjY2Fh4cHevfujaeffhohISEAABcXF2zduhXTpk1DQEAAAgICsH//fgDA+vXrMXHi\nRAwcOBA3btxAixYtANTtRFqyZAny8/Ph7e0Nf39/zJs3DwAwffp0w3nVOp0Ozz77LCoqKrBnzx7o\ndDr07dsXcXFxePnll2X9WRL7R1tYEyKjsrIyQwJ46623cOXKlVojAEKUguYMCJHRjh07sGLFCpSV\nlcHT0xObN28WHRIh9aKRASGEEJozIIQQQsmAEEIIKBkQQggBJQNCCCGgZEAIIQSUDAghhAD4/6v9\nzEWLuf4iAAAAAElFTkSuQmCC\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x230e550>"
+ ]
+ },
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "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\nEEIA/x/QySImXNYyRgAAAABJRU5ErkJggg==\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x331be90>"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 6.2, Page 159"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "from pylab import *\n",
+ "%pylab inline\n",
+ "#Varable Declaration\n",
+ "\n",
+ "N=5 #Number of elements of dipole\n",
+ "s=0.25 #Space between dipole elements(wavelengths)\n",
+ "phi0=0#Angle between array factor and array(degrees)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "alpha=-2*3.142*s*math.cos(phi0) #Current phase(radians)\n",
+ "phi=arange(-180,182,2)\n",
+ "Si=linspace(0,0,181)\n",
+ "for k in range(0,180):\n",
+ " Si[k]=alpha+2*3.142*s*math.cos(phi[k]*3.142/180)\n",
+ "AFR=linspace(0,0,181)\n",
+ "AFI=linspace(0,0,181)\n",
+ "for i in range(0,180):\n",
+ " for j in range(0,N-1):\n",
+ " AFR[i]=AFR[i]+math.cos(j*Si[i]) #Real part of Array factor\n",
+ " AFI[i]=AFI[i]+math.sin(j*Si[i])#Imaginary part of Array factor\n",
+ "\n",
+ "teta=linspace(-3.142,3.142,181)\n",
+ "AF=linspace(0,0,181)\n",
+ "for k in range(0,180):\n",
+ " AF[k]=AF[k]+(AFR[k]**2+AFI[k]**2)**0.5\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "polar(teta,AF)\n",
+ "title('Polar plot of Array Factor')\n",
+ "show()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Populating the interactive namespace from numpy and matplotlib\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stderr",
+ "text": [
+ "WARNING: pylab import has clobbered these variables: ['power', 'draw_if_interactive', 'random', 'fft', 'linalg', 'info']\n",
+ "`%pylab --no-import-all` prevents importing * from pylab and numpy\n"
+ ]
+ },
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "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\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x35cfc10>"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 6.3, Page 160"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "from pylab import *\n",
+ "%pylab inline\n",
+ "#Varable Declaration\n",
+ "\n",
+ "N=5 #Number of elements of dipole\n",
+ "s=0.25 #Space between dipole elements(wavelengths)\n",
+ "phi0=90*math.pi/180 #Angle between array factor and array(radians)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "alpha=-2*math.pi*s*math.cos(phi0) #Current phase(radians)\n",
+ "phi=arange(-180,185,5)\n",
+ "Si=linspace(0,0,73)\n",
+ "for k in range(0,73):\n",
+ " Si[k]=alpha+2*math.pi*s*math.cos(phi[k]*math.pi/180)\n",
+ "\n",
+ "AFR=linspace(0,0,73)\n",
+ "AFI=linspace(0,0,73)\n",
+ "\n",
+ "for i in range(0,73):\n",
+ " for j in range(0,N):\n",
+ " AFR[i]=AFR[i]+math.cos(j*Si[i]) #Real part of Array factor\n",
+ " AFI[i]=AFI[i]+math.sin(j*Si[i])#Imaginary part of Array factor\n",
+ "\n",
+ "teta=phi*math.pi/180\n",
+ "AF=linspace(0,0,73)\n",
+ "for k in range(0,73):\n",
+ " AF[k]=AF[k]+(AFR[k]**2+AFI[k]**2)**0.5\n",
+ "\n",
+ "#Result\n",
+ "\n",
+ "polar(teta,AF)\n",
+ "title('Polar plot of Array Factor')\n",
+ "show()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Populating the interactive namespace from numpy and matplotlib\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stderr",
+ "text": [
+ "WARNING: pylab import has clobbered these variables: ['power', 'draw_if_interactive', 'random', 'fft', 'linalg', 'info']\n",
+ "`%pylab --no-import-all` prevents importing * from pylab and numpy\n"
+ ]
+ },
+ {
+ "metadata": {},
+ "output_type": "display_data",
+ "png": "iVBORw0KGgoAAAANSUhEUgAAARMAAAEXCAYAAACOOKCuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXdY09f3x99hKCpbZYM4EZVhAevAjXtb/am1rtZvW1u7\na7fVtlp3HbVaJw60jjoAt6KouAUUXKgoIls2BAgZ5/dHmpRAgIzPTYDm9Tw++lnnnMTk5N5zzz2H\nR0QEAwYMGNASI30bYMCAgYaBwZkYMGCAEwzOxIABA5xgcCYGDBjgBIMzMWDAACcYnIkBAwY4weBM\nOMDd3R0RERE60bVw4UJMmzZNJ7ouXLiAVq1awcLCAmFhYTrRaaD+YnAmFXB3d0fTpk1hYWEBGxsb\nvPnmmygoKKj1OR6PBx6PpwMLoZYed3d3nD9/XmNdCxYswJdffomioiKMHj262vv69esHW1tblJeX\na6yLC3bs2AFjY2NYWFjI/3z88ccay+vXrx+2bdvGoYUNG4MzqQCPx8OxY8dQVFSE+/fvIz4+HgsW\nLGCmTyQSqf2MOjmGPB5Prfsrk5qaik6dOtV4T1JSEm7evAk7O7taRy8SiUThWJPXXxu9evVCUVGR\n/M+6des0lqXNDwQRafXe10cMzqQanJycMHToUDx8+BAA8Ndff6FNmzawsLBAjx49cPfuXaXP3bhx\nAwEBAbCysoKtrS1mz54NgUAgv25kZIQNGzbAw8MDHTt2rPJ8UlISjIyMsGXLFri6usLW1haLFi2q\n1s7q7Jo2bRqSk5MxatQoWFhYYOXKlUqfX7NmDVxcXGBpaYnBgwfjxYsXAIC2bdsiKSkJo0aNgqWl\nJYRCodLnd+3ahaCgIEybNg07d+5UuDZz5kzMmTMHw4cPh6WlJS5cuAB3d3csX74cPj4+sLS0hFgs\nxqJFi9C6dWuYm5ujXbt2+OuvvwAA5eXlaN68Oe7duyeXmZWVhWbNmiEnJ0epPcq+wFu3boWHhwfM\nzc3h4uKCNWvWKFzfu3cvPD09YWFhgdatW+PkyZP4/vvvcfnyZcydO1dhhBMREYEuXbrAwsICXl5e\nCiO/fv364YcffkCvXr1gYWGB58+fK7WxwUIG5Li7u9O5c+eIiCg5OZk6depE8+bNozt37pC5uTlF\nRUUREdHatWvJ2dmZBAKB/LmIiAgiIoqNjaWYmBgiIkpNTSUvLy9asmSJXAePx6NRo0ZRUVGR/PmK\nPH/+nHg8Hs2aNYvKy8vpyZMn5ODgQGFhYUREtGDBAnrrrbeIiNSySxnh4eFkZ2dHDx8+JJFIRF9+\n+SX5+fkpvB81PU9E1LZtWwoJCaHHjx+TqakpZWZmyq/NmDGDbG1tKTo6moiIBAIBubu7U7du3Sgr\nK4vKy8uJiOjo0aOUnZ0t/3fjxo0pJSWFiIg++OAD+vrrr+Uy16xZQ6NHj1ZqS3BwMAUGBlY5f/r0\nabm8q1evkrm5OV27do2IiM6fP082NjZ0+fJlIiLKzMykhIQEIiLq168fbdu2TS4nPT2dLCws6ODB\ng0REdPjwYbK0tKSMjAwiIurbty+1adOGEhMTSSKRkEgkqvG9a2gYnEkFWrVqRebm5mRtbU0ODg40\ne/ZsKi4upu+++07+Ba547+nTp4mo5i/d77//TsOGDZMf83g8+ZdfGTJn8uzZM/m5H374gaZOnUpE\nis5EG7uIiN5880364Ycf5MelpaVkZmYm/zLV9vzly5fJzMyMCgsLiYjIx8eHVq9eLb8+c+ZMmj17\ntsIz7u7uFBISUq1MIiJ/f3/av38/ERFdv36d3Nzc5Nf8/PzkX+bKBAcHk4mJCVlbW8v/3Lhxo8p9\nEyZMoGXLlhER0bRp0+ibb75RKq9fv360detW+fHmzZurOKs+ffrQn3/+Kb9/0aJFNb62hoxhmlMB\nHo+H0NBQ5OXlIT09HVu2bEGzZs2QlZUFV1dXhXtdXV2RmZlZRcb9+/cxePBgtGjRAtbW1vj666/B\n5/MV7nF0dKzVFhcXF/m/nZ2dlepSxy5lZGVlwc3NTX5sZmaGFi1aqPz8zp07MXjwYFhYWAAAJk6c\nWGWq4+DgUOW5yq9/8+bN6NKlC6ysrGBjY4M7d+7I37PXX38dTZo0QWRkJB49eoTExMQag8Hdu3dH\nXl6e/E+3bt1w5MgR+Pn5wdraGjY2NggLC5PLz8jIQJs2baqVVzFukpmZWeX9dnNzQ1ZWVrWv7b+E\nib4NqA/Y29sjKSlJ4VxKSgrs7e2r3Pvee++hb9++CAsLg5mZGdavX4/9+/errTMlJQWtW7eW/1vZ\nl7I2u2oLINrb28tjJABQVlaG7Oxspa+rMqWlpThw4AAkEon8CyQQCJCfn4+4uDh4e3vXKgMAnjx5\ngk8//RQXL15EQEAAACAgIEAh9jFjxgyEhITA3t4eEydORKNGjVSSDQDFxcWYMmUKDh06hGHDhsHI\nyAgTJ06Uy3dycsKzZ8+UPlv5/XNwcMCpU6cUziUnJ6N3794q29OQMYxMVGDChAkIDQ3F1atXQURY\nv349hEIh+vbtW+XekpISmJmZoXHjxnj27Bk2btyokc7FixejvLwcT58+xfbt2/F///d/attla2tb\nYxBw0qRJ2Lp1Kx49egSRSIQff/wRnTt3RocOHWq17+jRozAxMcHDhw9x9+5d3L17Fw8fPkTv3r2x\na9cuAKqtPJWUlICIYGVlBSLC3r17qwS333rrLRw+fBh79uzB9OnTa5VZEaFQCKFQCAsLCxgZGSEi\nIgKnT5+WX585cyY2b96Mq1evApCOPp48eQKg6vs3cuRIxMXF4fDhw/L3IDY2VmGkpMprbqgYnIkK\n+Pr6YtOmTXjrrbdgaWmJkJAQHDt2DI0bN65y74oVK7Bjxw5YWlpi5syZmDBhgsIvnKrLjd27d0fb\ntm0REBCA999/H6NGjZI/L5NRm13z5s3D/PnzYW1tjd9++62KjlGjRuGrr77CwIEDYWNjg9jYWBw6\ndEgl+3bt2oW3334bLi4usLOzg52dHezt7TF37lzs3bsXYrFYpfwbHx8ffPjhh/D394eDgwOio6PR\nq1cvhXtcXV3x2muvwcjICIGBgdXKUqbPxsYGK1aswPjx42Fra4udO3di5MiR8uv9+vXDunXrMHPm\nTPmKmGyk8tFHHyEkJARWVlb49NNP4eDggEOHDuHHH3+Eubk55s+fjyNHjiiMGnWVb1Qn0V+4xoAy\nZAFYsVisVzuWLFlC7du3p86dO9OaNWuIiCgnJ4eCgoLIy8uLBg8eTHl5efL7p02bRp06daLDhw8z\nseftt9+m+fPnM5FtgBsMIxMDVYiOjkZISAji4uJw9+5dHDt2TJ7AN2LECMTFxWHYsGHyhL579+6h\nTZs2iIuLQ0hICOf2pKWl4ciRI5g1axbnsg1wh8GZ1EH0PVROSEhA9+7dYWZmBmNjY3lA+cSJE/J9\nQW+99RaOHz8OADAxMQGfz4dAIICJCbcx/fnz58PT0xOff/65PCBtoG7CI/oPR4wMKCU+Ph7jx4/H\njRs3YGZmhqCgIHh7e2Pv3r0oLCyU32dpaSk/njt3LqKiorBmzRr069dPT5Yb0CeGpWEDVfDy8sLn\nn3+Ofv36oUmTJvD19a11tLR+/XodWWegrmKY5hhQypw5cxAXF4cbN27AyckJHTt2RMuWLZGdnQ0A\nePXqFezs7PRspYG6hMGZGFCKzGlkZGRg//79mDRpEoYPHy4PsIaEhGD48OH6NNFAHcMQMzGglN69\ne6OwsBCmpqZYsWIF+vfvj9zcXEyaNAmZmZlwcHDAgQMHYG1trW9TDdQRDM7EgAEDnGCY5hgwYIAT\nDM7EgAEDnGBwJgYMGOAEgzMxYMAAJxiciQEDBjjBkAFroFaICCKRSP6HiGBqagoTExOYmJjofS+R\ngbqBwZn8B5FIJMjJyUF6ejrS0tLkf6empiItLQ2ZmZnyv4VCISQSCYyNTcDjGYPHM/mnhYYIEokI\nYrEIRkZGaNSoEWxsbODi4gJnZ2c4OTnB0dFR/rfs3y1atICRkWFA3BAx5Jk0cDIzMxEdHY3o6Gjc\nuHED8fHxSE9Ph4WFBaytreHs7IzWrVvDyckJVlZWcHd3R6NGrnj61BGxsfa4eNEMJiZGCAriYeBA\nYMAAwNgYOH8eiIgAzp0jlJRI0LevAH5+WWjXLg2A1Dndv38fhYWFcseVnJyMkpISODo6wsfHB6+9\n9hr8/f3h5+f3n66d2lAwOJMGREXHER0djZs3b4LP5yMgIAB+fn7w8vJCt27d4ObmBjMzM4VnCwqA\nH38ETp4E8vKkTkPmPNq2BWqayTx/LnUsERFSJ2NuDgwZAvzyC9C8ueK9AoEAKSkpuHPnDo4dO4YX\nL17g7t27MDMzg5eXF7p3725wMPUUgzOpx+Tk5ODEiRMIDw/HtWvXUFhYCA8PD/Tv3x9+fn7w8/ND\nmzZtao1pJCUBI0YAgYHABx8AXl5ATTORyMjIassMEAH37gFbtgCnTgHHjwPt29f8OogIL168wPXr\n1xEbG4vY2FhER0fD2NgYgYGBGD16NEaMGIGWLVvWLMiAftFDdTcDWpCQkEArVqygPn36kIWFBfXq\n1Yu2bdtGT58+JYlEora869eJHB2J1q5V/ZkLFy6odN/mzUT29kQXL6ptFkkkEkpMTKQdO3bQG2+8\nQZaWluTn50dLly6lBw8eaPRaDbDFMDKp44jFYly7dg1hYWEIDQ1FTk4OJkyYgNGjR6N///5o0qSJ\nxrL//huYMwcIDgYq1FjmlLNngalTgVWrgH+KtGmEQCDAhQsXEB4ejrCwMDRu3BijRo3CmDFjEBgY\nyHmFNwPqY3AmdRAiwqVLlxAcHIzQ0FC0atUKo0ePxujRo+VV2rWTDyxbBvzxBxAWBnTtypHh1XD/\nvtRZTZ8OLFxYc/xFFYgIsbGx2LdvHyIiIpCUlIShQ4di1qxZGDhwoGGpWk8YnEkdorCwELt27cKG\nDRsAAO+++y7GjRuHVq1acaZDKJSORmJigPBwwNlZfRk1xUyqIzMTGDNGGszdtg2oFP/VipSUFGzZ\nsgV79+6FkZER5syZg5kzZxrKI+ga/c2wDMiIi4uj999/n6ytrWnw4MF0+vRpJjGB3FyiAQOIRo0i\nKirSXI6qMZPKlJQQTZhA1KsXUVaW5vqrQyKR0OXLl2nKlClkYWFB77zzjrxpugH2GJyJnigrK6O9\ne/dSjx49yM7Ojn766SdKTU1lpi8piahjR6JPPiESiZipqRWxmOibb4jatiV68oSdnoyMDFq8eDG5\nurpS9+7daefOnVRaWspOoQGDM9E1mZmZ9O2335K9vT0NHDiQDh06ROXl5Ux1SiREQUFEP/3EVI1a\nrFwpHaGwXpQRCoV0+PBheu2116hFixY0b948SktLY6v0P4rBmeiIwsJCWrBgAdna2tKQIUPo4cOH\nOtMdFkbk6UnElc/SdJpTEZGIqGtXon37tLdHVR4/fkwff/wxWVtb0zfffKPQkdCA9hg2STBGIBBg\n7dq1aNeuHRITE3H79m2cOnUKHTt21In+8nLgiy+A1asBU1OdqFQJY2Ng7Vrgq6+A0lLd6Gzfvj3W\nrl2LO3fuIDk5GR06dMDKlStRqisDGjr69mYNFZFIRLt27SJ3d3fq378/xcbG6sWOlSuJhg/Xi2qV\nmDiR6Oef9aP7/v37NHbsWHJwcKCtW7eSUCjUjyENBIMz4RiJRELh4eHk6elJPXr0oIuapH9yRGYm\nUYsWRI8e6c2EWnn+nKh5c6KUFP3ZEBUVRX379iVPT086fPiwIbtWQwzOhEOuXr1KgYGB5OnpSXv3\n7tX7h/K994g+/ZR7uVzETCry3XdE06ZxKlJtJBIJnThxgjw9PcnPz48iIyP1a1A9xOBMOKC4uJg+\n/PBDcnBwoODgYBLpc+31H+7eJbKzk+aWcA3XzqSoiMjJSbpPSN+IxWIKCQkhV1dXevfdd6mgoEDf\nJtUbDAFYLbl48SK8vb2RmZmJe/fuYebMmTA2NtarTUTAp58CCxYANjbcy+e6Mbm5OfDrr1Kb9Z2P\nbWRkhKlTpyI+Ph4SiQSenp44e/asfo2qL+jbm9VXZKMRJycnCg0N1bc5Chw+TNSlC1F9iieKxUT+\n/kQhIfq2RJFjx44ZRikqYhiZaMClS5fg4+OD58+fIz4+HqNHj9a3SXIEAuDLL4HffgNYbaSNjIzk\nXKaREbBmDfDNNwCfz7l4jRkxYoR8lNK5c2ecO3dO3ybVXfTtzeoTxcXF9NFHH9XJ0YiMZcuke29Y\nwnXMpCKTJxMtWMBMvFYcPXqUXFxc6N1336XCwkJ9m1PnqFfOZNasWWRnZ0ddunSRn/v+++/J29ub\nOnfuTL1796bExEQiInr+/DmZmZmRr68v+fr60pw5c+TPHDlyhDw9PWmaGksIly5dojZt2lBQUBDl\n5ORw96I4RCKRBjLj4/VtieY8e0Zka6vf/UM1kZ+fT7NnzyY3Nzc6e/asxnJEIhH5+vrSyJEjiYho\nwYIF5OzsLP+8njhxQn7vtGnTqFOnTnT48GGt7WdJvXImly5dopiYGAVnUlRh++u6deto+vTpRCR1\nJhXvq8ikSZNILBbT/Pnz6c6dOzXqlEgktGrVKnJwcKizoxEZ9+8TtWql3X6XgoICKisrkx+fOXOG\nMjIy5Mf79++nlApJIUePHlW4npaWRgKBQHMDiKhTJ6KbN7USwZx9+/aRnZ0dLVq0SKMUgFWrVtGb\nb75Jo/4ZRi5cuJBWrVpV5b74+HhasGABiUQiGj9+vNZ2s6RexUx69+4Nm0rLE+bm5vJ/FxcXq1SE\nWCKRQCAQoKSkBE2bNq32vrKyMsyYMQNbtmzBjRs36lRsRBnnzgGDBtVcfIiIIBQK5ce7d+/G06dP\n5cdnzpxBTk6O/NjDwwNWVlby42HDhuHRo0fy4169eilcj46ORm5urvz4zz//RHp6uvw4PT0dVMuS\nzaBB0tdSl5k0aRJiY2MRFhaGKVOmoKSkROVnU1JScOLECcyePVv+XpD0h73KvSYmJuDz+RAIBHW/\nmpxeXZkGKBtxfPfdd+Tq6koeHh7yzVvPnz8nc3Nz8vHxoR49elBERIT8/tOnT5O3tzd9/vnn1epJ\nS0uj7t2704QJE6i4uJjNi+GYUaOqbpzLzs6mzMxM+fG+ffsoISFBKz3axEwOHDhA2dnZ8uOIiIgq\nu6bDw6V1V+oDpaWlNGXKFPLy8qLk5GSVnpkwYQLFxMRQZGSkfJqzcOFCat26NXXs2JGmTp2qMJX+\n8MMPycfHh2msigsahDORsWTJEpo5cyYREQkEAvlSXkxMDDk5Oam8S/TmzZvk7OxMv/zyi96zWFWl\nvJzI0pIoKalY4UN95coVev78uf4Mq4Xr16/L98QIhUIKDQ2lwkIic3MiPl/PxqmIRCKhZcuWkZOT\nE125cqXGe8PDw+mDDz4gIqlTljmTV69ekUQiIYlEQj/++CNNnTqVud1c06CcyYsXL8jDw0PptcGD\nB9O1a9dqlb9nzx6ysbGhkLqW8FAD+fn5FBUl3dIfGxtLDx480LdJGiEWi+nu3btERBQYSHT4cEG9\nei0nTpygli1b0tatW6u959tvvyUXFxdyd3cnBwcHatq0aZWFgNTUVOrQoQNrczmn3juTZ8+eyf+9\nbt06mjBhAhER5eTkkFgslj/j5OREr169qlauSCSir7/+mlq3bk1xcXGMrOeex48fU2hoKC1YQPTV\nV7rRqYvh9sKFRB9/XKygqz6MEu/fv08uLi70ySef1LoLueI0p+JUdN26dTRu3DimdrKgXjmTyZMn\nk6OjI5mampKLiwtt27aNxo0bR97e3uTp6UnDhw+XV9H6+++/qXPnzuTl5UVdunShv//+u1q5BQUF\nNGTIEOrRo0eNDqcuUF5eTr/88kuV8716EZ05oxsbdOFMrlwh8vVVPHft2jWFJdO6Sm5uLg0ZMoSC\ngoIot4bNURcuXJCv5kydOpW8vb2pY8eONGTIEIUVs/rCf746fW5uLoYMGYIuXbpg8+bNMK1LFYT+\nISUlBRYWFgqrJhUpLJRWmc/KArRoo1OnEAqBFi2AJ08AOzvl9xw+fBi9e/euk53+RCIRPv/8c5w7\ndw6RkZGwq+5FNCDq1dIw12RlZaF///7o168ftm/fXicdCQDEx8fX2Cvn4kXg9dcbjiMBpFXh+vaV\n9i6ujqCgoCo9k+sKJiYmWLt2LYYPH46+ffsiLS1N3yYx5z/rTNLS0hAYGIjevXtj+fLldapxU1xc\nHMLDw+XHw4YNg4WFRbX3nz0rzc3QFSz25ihj0CDpa6sOS0tL+ftSXl6OxYsX68QuVeHxeFi5ciVm\nzJiBvn37Ijk5Wd8msUXf8yx9kJycTO3ataNFixbp2xSllJWVqRVs9PQkun2boUGV0FW+w4MHRK6u\nmmX01rW2FkuXLiUXFxf5do+GyH/OmaSmplLbtm1p+fLl+jZFjkQioZ9//lmjGqQpKdKyh3V1L4s2\nSCREzs5Ejx+r/+yVK1fqXLW09evXU6tWrejFixf6NoUJ/6kAbFZWFvr06YPBgwdj3bp1kEgkKC0t\nRbNmzfRtGohIo6nWzp3A8ePAgQMMjKoDzJwJdOsGfPCBdnLy8vKqbMXQFSUlJWjcuDGMjY2xZs0a\n/PHHH7h48SKcnJz0Yg8r/jMxk9zcXAwaNAj/93//h3Xr1gEA+Hw+du/erRd7bt68iRMnTsiPNY3Z\nJCQAPj5cWaUauoqZAICvL1BhK5BGSCQS7N69u9Y9Qaz466+/UFhYCAD49NNPMXbsWPTr1w9ZWVl6\nsYcVdXznEDcUFhZi0KBBGDJkCH766Sf5eQsLC7z//vt6sSkgIICToG9hIdDAfuAUsLQEioq0k2Fk\nZISPP/5YfiwSiXS6ae6dd95ROF6xYgWaNWuGoKAgREZGwtbWVme2sKTBj0zEYjGmTJkCBwcHLFu2\nrNovcEZGBgoKCpjasn79euTn5wPQfCRSmcJC6RdOl3BdA7YmLC2lr5FLTpw4gbt373IrtBJ8Ph+p\nqanVXl+wYAGCgoIwceJEhV3c9ZkG70y+//57lJaW4ujRozV+gRs1aoSrV68yteXdd9+FtbU1pzKL\nioAaVo3rPVyMTCozevRo+DCeG169erXGvCUej4cVK1agoKAAn3/+OVNbdEWDdiYhISE4cOAADhw4\nUGtCmq2tLYYNG8apfiLCmTNn5MeNGjXiVD6gn5GJLmMmFhbcj0wq8vjxYxxgEL0eNGhQrVmvxsbG\nOHfuHM6ePYstW7ZwboOuabDO5NatW/j4449x5MgRtGjRQq1nb968ycmURyQScT4SqYw+nIkuYTHN\nqUiHDh0wbtw4TmTx+Xy1R7fW1tYICwvDDz/8gKioKE7s0BcN0pmkp6dj/PjxCA4O1mg4265dO6Sk\npGisXzYHNjU1Rbdu3TSWowr6mOboOmbC9TSnMrJRq0AgwM2bNzWWk5qairZt26r9XIcOHRAcHIzx\n48fX6yzZBudMysrKMHbsWLz33nsYM2aMRjJsbW3RuXNnjZ5NTU3V6XKzYWTCHY0aNUKRFp6rQ4cO\nsLe31+jZ4cOH45tvvsGYMWPAr0u9PtSgQSWtERFmzJiB5ORkXLhwgZMVk4MHD2Lw4MHV7tjVN+bm\nQEaG9G9dERkZqbPRiVgMNGok3UVcw15HvcHn8+V1YLWFiDBr1izw+XwcOHCgTu0XU4U6+N+jOatX\nr0Z8fDyOHz/O2X/EwIEDa233WVpaigsXLnCiTx3EYqC0FGCdwFtcXAyRSCQ/fvXqFQQCAVul/2Bs\nLN0Nresfa7FYrNLGQSMjIwQFBXGik8fj4c8//8S9e/fwyy+/cCJTlzQYZ3Lx4kWsWLECoaGhnKbH\n29raKlTAV0Z2djY6dOjAmU5VKS6Wjki09ZuPHz9WCDhv2rRJoaL84cOH5fkxANC4cWOFofiGDRuQ\nmZkpP/7999+RnZ0tP5ZIJFrZp4u4SWWMjY3xzTff1HpfkyZNOK2nYmZmhnPnzmHr1q04deoUZ3J1\ngt52BXFIcXExubm50f79+5nqWbFihdY9YbgkOZnIxUX95yIiIhQq1F+6dEnlYtuasGrVKoUOeLJq\neKri4UH08CHXVqmORCJRqJgmEoloyZIlTHVGRESQq6sr5efnM9XDJQ3CmcydO1et7nyaUrE5VVZW\nFm3fvp25zpq4d0/asKo24uPjKTo6Wn6cnp6u0Q5lGdqUIJBIJLRp0yZ5fV6RSFSrg/b3J7pxQ2OV\nWlNeXk6///67wrmKnwVWzJo1i2bMmMFcD1fUe2dy4cIFcnZ2rrHWJgsEAoHea2ZcvUr0+utVz4vF\nYkpNTZUfp6SkUElJCWd6uaxnkp+fT+vXr6/xngEDiLToxMkZMgeoKwoLC8nNza1e1L0lqmcd/SrD\n5/MxY8YM/PnnnzrbXk5EkEgkWLZsmd5LBhYVKV8WTkhIQGJiovzY2dkZTTis6cjlSo6VlRU+/PBD\n+fGdO3dw5MgRhXv0ETNRxpIlS5Cdna3Q0ZAlFhYWCA4OxrvvvqsQs6qz6NubacOHH35IEydO1Jm+\n8vLyOlWd7dQpooED/7WrPrSCUIWKryM1NZVGj5bQoUN6NKgCIpFI5yOF999/v15Md+qtM9HX9Kby\nF1YkEikEF3WFtGGVgNq3V24XS3TZpjIiIoI8PR9ThZCPTikuLq7SvlTXFBYWkpOTU52f7tTLaQ6f\nz8esWbN0Nr2puLRZOX+luLiYyUax2ti/fz9MTVORnAxIJNyVNKhrDBgwAOnp7eHuLs3nqVhQShf8\n/fff1e7Tio2NVathuaZYWFhg9+7ddX66Uy8zYOfOnYunT5/qbB1+9erVeOedd2Cp57z1rKysKjtR\nHRyAmJiGWyApPx9wcwOk32dCfHw8vL299W0WAGkNnKysLJ3ZM2fOHJSVlSE4OFgn+tRG30MjdYmK\nitLL9EYVkpOTmeUFZGdn019//VXlfLdu0u53DZU7d4iqaS1NZ86coezsbM51FhcXK7SdrSsUFhZS\ny5Yt6YyuWjeqSb2a5hAR5s2bhyVLluhkekNqDtqaNWuGW7ducapflrbevHlzTJ48uco97u5AUhJn\nKlVCl/Uz3dgaAAAgAElEQVRMkpKkr1EZAQEBKC8v51znrVu30LRpU7WeiY6O5tyOylhYWGDDhg34\n6quvtM4qZkG9cibh4eFIS0vDm2++yVxXUlISdu7cqdYztra2nO3TAKSv98mTJzXeow9noktqcibW\n1tZwdHQEIN0vpE3ZiIr069dP7d2/qampOilY/cYbb8DU1FQvcbpa0e/ASHVEIhF17tyZjh49qhN9\nEolEqySly5cv6yQVesMGov/9j7kavfHpp0QrV9Z+X0lJCZ08eVJjPcXFxTpdpdKGiIgIcnd3r1Nb\nO4jq0TQnJCQENjY2GD16tE708Xi8Gvv71kanTp00amWwdu1aFBcXq3z/f3lkUpEmTZpg6NCh8mN1\npwFZWVno1KmTesYpITMzE2KxWGs5NTFgwAA4OTlh69atTPWojb69mSqUlpaSi4sLRUVFMde1efNm\nKi4uZq6nOtT9tXnwgKhDB0bGVIMuf8F9fdVvfSoSiejnn39mY1At3L9/ny5dusRcT3R0NDk6Our1\ns1qZejEy2bBhA1q3bo1evXox1/XGG29w3uFvz5498iZMykhKSpLPt9UtOt2qFeS5Jg0RVUcmFTE2\nNsb8+fNrvY/P52PXrl0a2VUdnTp1Qu/evTmVqYzXXnsNffr0werVq6tcc3d3h7e3N7p27cq8bKgC\n+vZmtVFQUEB2dnYUFxenb1M0Jjc3t8ZNgTt27NAqPmNnR6Tmrv56QV4ekbm5Zo3LZUgkErp48aLS\na+Xl5UyWlivqZsnjx4/Jysqqymtwd3ennJwcprqVUedHJitXrsTQoUPh5eXFVM/FixeZybaxsalx\nU+CMGTO0is801LjJixfS16ZNci+Px4NIJFK60mJqaormzZtrLrwGCgoK5G1oWdG+fXtMnjwZS5Ys\nqXJN2etlTZ12JpmZmVi7dq1CS08WEBHzoJmMpUuXQiQSYd++fQqlELVB185EV3kmmkxxlDFgwAD5\ndgOJRIJff/1Ve6G1YGVlhblz5zLXs2DBAgQHBytUtefxeBg0aBC8vb2xfv165jbIqNPOZM2aNZgy\nZQrcufhE1QCPx8OAAQOY6pDxxRdfwMTEBH5+fpz1u22oIxOunIkMoVCIrVu3Yt68edwJrYHaagdz\ngaOjI6ZPn47ly5fLz12/fh0xMTGIiIhAcHAwzp07x9wOoA47E4FAgO3btzNvnVhWVsZUfmVkPVra\nt2/P2WioQwfg3j1ORKmErirT378PtG/PjSyxWAxTU1OMGTOm1u6OXEJECAsLY6rjk08+QUhIiDyl\nQLZ/q2XLlpgwYQKnWdk1UWedyd9//w0vLy+mhZqFQiF+//13ZvIrs2/fPnmhZpFIhKVLl3Iid9Ag\n4MwZabX6hgIRcPIkMHgwN/JWrlwJgUCgcV8bTeHxeHBxcWGqw93dHf369cPevXtRUlIi38nM5/Nx\n6tQpjXtAqY3OQ74qEhAQQHv37tW3GZzCsmizl5e0jCNXHD16VMHe1atXyzdXXrhwQeGYiGjdunWc\n1nW5e5eoTRvtVnJqIiEhgUJDQ9kI1wOnT58mb29vSkxMJG9vb/Lx8aH27dvT/PnzdWZDnXQmsbGx\n5OLiolXR4/qEQCCggoICrWR8/TXR999r/vzmzZspOTlZfpyUlFTt+68saU0gECgsby9atEirdO9f\nfyWaO1fjx4lImiJf05K8tu+5urBMMBOLxeTi4kJX9LiFvE5OczZs2ID33nuPswBlZYgIBw8eZCK7\nMpmZmdi/f3+N95SUlODo0aNa6RkxAlCnbtDx48dx584d+fH//vc/uLq6yo9btWpV7fuvLGbSqFEj\nheXt77//Xp6AV1paqvaU7vhx6WvShrCwsBrbfeqyPg0RYePGjdVeF4vF6Nq1K0aNGqWRfCMjI7z/\n/vv4448/NDVRa+pccaT8/Hy0atUKCQkJcHBwYKJDKBTi2bNn8PDwYCK/IqWlpZBIJJxn1VZGJALs\n7YH4eOWFkogIGRkZ8l225eXlamfbcsWjR4+QkZFRbSA3Jwdo3RrIygJ0UbM7ODgYb775Jho3bsxe\nWTX89ttviI6ORlFRkcYB29zcXLRp0waPHz+uUkRLF9S5kcnOnTvRs2dPZo4EkK6o6MKRANINaOo4\nkmfPnlVbJrAmTEykwcrqRicPHjzA06dP5cfaOBJt80w8PDxqDKyfPg3066eZI+Hz+Xj8+LFaz4wY\nMUKrpEFtSUlJwYkTJzB79mytks1sbW0xfvx4bNu2jUPrVKdOORPZUPDbb79lpoOrRLHaOH36tFq7\nf2VYW1srTD/UYcQI6fRAxtGjRyEUCgEAnTt31smeEVXg8XhwqjB82rFjB54/fy4/1maKc/fuXVhb\nW6v1jJ2dnc6Wi/Py8nD16lWFc5999hlWrFjBiUN77733sH79ep0lYVakTjmTCxcuwMTEhOmHfunS\npTpJNXZwcKi1R7EybG1t0bdvX410Dh0KnD8PyHqKt23blsmXhOs8k5kzZ8oTE8Vi6chk+HDNZPXs\n2VPjIf6jR484K7BUHdbW1grJbMeOHYOdnR26du3Kyefy9ddfh7OzM06ePKm1LLXRW+hXCZMnT6aF\nCxcy1VGfesucP39erQJLfD6funS5QnW0RKhKHDnykpydt6j1THFxMSd1UUtKSujWrVtay1GHb7/9\nllxcXMjd3Z0cHByoadOmWre63bp1K40bN44jC1WnzgRghUIhHBwccOfOHYVVhfrG8+fP0bp1a05k\n5ebmorCwUOXtBM+ePcPGjY0gFLpgzRpOTFBKZGQksyzY778HxGLC0qWq7+5LTU2FqampXoKOmkJE\nVdqTXLx4EStXrkR4eLhWsrOzs9GmTRtkZWXptOtknZnmXLlyBa1bt2bmSFJSUpCWlsZEtgwiwqVL\nlziTZ2trW6sjISJ5UeU2bdrgzTddFOIm9Y3jx4GRI6VfMiLC3r17ax3+Ozs7c+pIxGJxjfVnuODw\n4cN4+PBhlfNc9D9q0aIF3N3dcf78ea1lqUOdcSahoaFMSzI+e/aM+fIsj8fDjBkzmMjesWOH0pyJ\n48eP48GDB/JjX1+gpARQc0FDLViNSlJSgJcvge7dpcc8Hg8BAQFK7y0pKWFWtrC0tBT79u2rcr6s\nrAwBAQHo2rUrOnTogM8++0xjHWPGjEHHjh0VzvXt25ezfTzTp09nvieoCjqfWClBIpGQq6srxcbG\n6tuUOkteXp7KbSpnzyZavZqxQQzYtIloypTqr1eMd4lEIr0UACopKSEiIqFQSK+//jqdP39e5zao\nQkJCAjk5Oek0RlgnRiayrvI+Pj56tkQziAgrV65kqsPa2lq+MpOTk6N0iCxjzBhg3z7pZjkWsKpn\nsn8/UNPg9Oeff5YXijY2NoatrS0TO2qiSZMmAKRJf2KxWKuNg0SEly9fcmWaAh06dEDjxo0RExPD\nRL4y6oQzCQsLw6hRo5j1y929ezcTuTJ4PB7ee+89pjoq8t1338kzWZUxbJg0i/TyZZ2ZpDXR0dKp\n2fjx1d8zf/58LFq0SGdVxAoLCxEaGqpwTiKRwNfXF/b29ujfv79WFe15PB7TFrcDBgyoYj9TdDYG\nqoEePXrQqVOnmMiWSCT05MkTJrL1hUgkqvWeTZuIhg/XgTEcMXEi0W+/1X6fSCQiiURCfD6fvVFE\n1X528vPz6fXXX6/TvXYuXbpEvr6+OtOn95FJVlYW4uPjmQX1eDwe2rVrx0Q2IF0K1kWrxvLycpw+\nfRqAYgUvWYZrZaZPB2JjpXt16jpPnwIXLgD/+5/y6xVfo7GxMUpKSrB9+3ad2FbdZ8fKygojRozA\n9evXdWKHJvTo0QMvX75UKOnIEr07k+PHj2Po0KF63WSlDZcvX2Y2PatIfn5+lf1E5eXl+O2335Te\nb2YGfPIJUKGaH2dwHTNZuRKYMweoLmF47dq18oI/gLSnsy7qq8ooKyuDRCJBTk6OfEWttLQUZ8+e\n5aTQeVRUlNYylGFiYoKePXtqnbeiMjobA1XDuHHjaOfOnUxkv3jxgnbv3s1Edn0gP5/I1pbo+XNu\n5XI5tE9PJ7KxIcrK0ux5VaZ82hIVFUWXLl2iuLg48vX1JR8fH/Lw8KCffvqJE/mXLl2qse6KNgQH\nB9OgQYOYyK6MXjNgiQiOjo64ceMGWrVqxbl8iUQCoVBYb0c9gHS3r5ubW637fEpKSiAUCmFlZaVw\n/uuvgdJSgHHXBY359lugqAioXESdz+dDIpHAwsKixuf37NmD7t27o23btgytrL+8evUK7du3R25u\nLvOd0Xqd5qSlpaGsrAxubm5M5BsZGTFzJMnJybh58yYT2RV5/vw5mjZtWut9AoEAJ5TUH/j0UyAk\nBMjOZmGddhQUAFu2AF98UfXayZMnUVpaWquMqVOnKnUkL1++RJ8+feDl5QUPDw+F6u3/JVq2bAkr\nKyskJiYy16VXZxIdHY3u3bsziTmUl5fL08xZwbLYtQxVa23Y2NhgypQpVc47OgITJgBc1s3mKmay\naRMwZIi0EFJlJkyYoFWKfKNGjbBhwwbEx8cjOjoaW7duxd27d7WwFrh9+7ZWz9fEtWvXmOWctG7d\nGtHR0UxkV0TvzsTPz4+J7MjISNy/f5+JbABwc3NTu26GOlS3SqMKCQkJCgWWvvwS2LgR4PO5sIwb\nBAJgzRrgq6/+Pcfn8zX+P3v48KFCINPe3h5dunQBAJibm8Pb21vrvVmyzgIsaNu2LbPKd4GBgUwd\noQy9OpObN28ycyaDBw9G165dmcjWBcuXL9c4Oatly5YK+3U6dAD69gW03cry+++/o7S0VL6Mv2fP\nHo1Hf7t3S/cRVUx6fvDgAVq0aKGRvI4dO1a7WzspKQm3bt1CYGCgRrJlaFqfVRXs7OyYteEIDAzU\nTSasTsK8SpBIJNSyZUtKSkrSlwkas3z58npVF4WI6NYtIldXIhW39xAR0cqVKxXqqRQVFSm87qSk\nJHlFeqFQSIsWLVLpfRGJiNq3J4qMVN0WTSkqKiJ/f386cuQIe2V1lKysLLKyslLoHsACvTmTlJQU\nat68OZMvZXFxsUJPF64pKipiJptrTp06JXcIAwcS/fFH9fcePXqU7t27V6vM6paGK35YCwoKql3u\n3LmTqHt3aU+c4uJiOn78eK06VSUrK4vKysqIiKi8vJwGDx5Mv6mSWqsix44dY7aMe/LkSYV2I1xi\nZ2dHjx8/ZiJbht6mObJ4CYvga3x8PLNgFgCNyjGqSmRkJKeB44CAAPD/CZasXQssWAC8eKH83iFD\nhmjV/a1ioLioqEhp6cCMDGDePOCPPwAeTxon4XKqm52djZs3b4KI8M4776BTp05alQqoTKdOnSCQ\n1cXkmO7duzOLw3Xr1o19EJapq6qB+fPn08cff6wv9RrD6ldJxuXLl5nKX7yYaNAg6aiAz+fTah3V\nKuDz+SSREI0Zo12zMFW5fPky8Xg88vHxIV9fX/L19aWTJ0+yV1xHWbRoEX355ZdMdejNmQwdOpRZ\n5itLFi9erG8TNGbz5s2Ul1dEfn5EW7ZI41asnaOM5cuXU0iIiDp3JsrPL6WNGzcqXJ81axbZ2dlR\nly5ddGLPf42TJ09S//79merQmzNxcXGhZ8+ecS5XIpFQQkIC53IbAgUFBSQWi+nChQxq0YJI0+m5\nJun0GRlEdnbSQLBEIqlSKPvSpUsUExPDmTM5duwYJ3KUcfLkSXrO9R6Ff1i7di2TQGlmZiZZWlpy\nLrcieomZiMViZGRkMOkOz+fzFZZF6wtpaWm1thHVFktLS/D5fLx8eQaffAK8+y67AkoVIZJu5Hvn\nHcDPj3Dx4sUqaf+9e/eGjY0NZzrt7OyY1T3p0aOHxkvYtTF9+nQmclu2bIny8nJ5/IwFenEmWVlZ\nsLKyYtLTxdzcHGPHjuVcLiDtG8yK5s2bY+TIkczky7CwsMBbb70FofBnZGQQduxQX4a65SIOHAAe\nPSKYmPwMQLoni9UXXUZAQACz3dxWVlbMgvDW1tZM9tDweDw4OjoyTbzTizNJT09n5tlZcujQIWay\nGzduzLTgdU5OjrybIY/Hw4IFP2DnTh6+/lpayJkVWVnSUgg7dvCwcOEP4PF46N+/v07KNhhQpME6\nkzZt2jCRHc+wGtAHH3zARK5IJGL+Sx0aGqqQom9kZARvb2DuXGD2bIFa0x119ua8/74AM2YQunVD\nlV/cZ8+eMS0sdeLECWaFgTZs2ICysjImslltSjQ2Nm54ziQtLa3GGqbakJCQwEQuS44dO4Z79+4x\n1fH222/LiyFX5LPPyhAf/wd27eJe58GDwJUrm/Hll8p7Lufk5DD9/woMDGRWdHr69OnM+hOzKvzk\n5eXFtHeU3pyJpaUlE9kTJkxgIjc9PZ3ZLuSxY8fKN6XpGgsLMxw//jm+/BJQdS+YKjGT+HjpqCc0\n9CO0bKm8JklAQAA8PT0BAFOmTEHPnj3x+PFjuLq6Ijg4WNWXUC2WlpbMYhvm5uYK5TO5RJWSE5rg\n4uLS8EYmqampcHZ21odqjTl//jzTqQirGMJff/2F4mLlIwMZvr7SuiIjRhQiJqagxntV4cEDPoYM\nycOaNf821FLFzrS0NAgEArx8+RKzZs3S2g4Dijg5OTW8kUlmZiaTylilpaXyHjxcM3XqVCaFloRC\nodJOfVzRu3dvlX6dx44FvvtOhKFDz6G2z1tNMZNXr4BBgyLw4YdCKCmvopTg4GCIxWLVblaTbdu2\nIScnh4nsJUuWMJG7fft2ZGRkcC7XwcEBSUlJnMuVwzSLpRr8/f3p+vXrnMvNyspino7ONQ8ePKhT\nad6LFxN5eRHl5VV/T3VJa4WFRP7+6qfLp6amqtytUF1KSkqY1YmVdffjGoFAwCRxLT4+njw9PTmX\nK0MvNWBldV9ZlWtkQWJiYr2rM0pECtOnoiJpS4n8fMDEBDA1BZo1A3r2BGT7y4iAzz4DLl2Kx4kT\nbnBwsKpGuiK5uXwMH/4E3t6+2LRJuokPAAoLgatXpbpFIukfCwugf3/ASjXRBjgiJycH7dq1Q15e\nHhP5enEmjRo1QlFRUb0q9Lxr1y5m2Yms+Pnnn/Hjjz/i5ElpVbOrV6UxDEdHQCiUfrHz8oCbNwEv\nL2kJxaFDgddeAyZPzsWrV88QEeEPE5Oa9UgkwLBhd2Fi4oijR+0QFwecPg2cOiXt3RMQADRvLnVg\nJibSqdDVq0C3btIgLaMcQwOVICI0atQIfD6fTVU3ZmOeahCLxQSASR2TJ0+eUEFBAedyWZKZmclM\ndmmpiL78UloUad8+ouremtJSojNniD7/nKhTJ6LWrYm2bZPuLn77bekO44pUnOZIJERz5xL16UMU\nHCwteuThQfTJJ0QnTxJV13ivqIjo0CGprrlziYKDQ5gVymK1OXPDhg2UnZ3Nudzs7GzasGED53KJ\niMzMzJjV46nRmSjbyRkVFUU+Pj7UuXNn8vb2pitXrsiv/frrr+Tp6UldunSh06dPy88fOXKEPD09\nadq0aVReXk4mJiYMXop02/mrV6+YyGbF+vXrmcn+6iuiAQOI1P28R0YS9ehB5O5OBBCNHRtOeXn/\nbsyTOZPi4mKaNOkoAVKn4O9PdPZsVedTE3l5RMOGEc2ZI2AW25AVS+Ka8vJyJj+KEomEWQzJysqK\n8moIiJ08eZK6dOlCnp6etHTpUiIiSkxMJF9fXwoMDKzRedboTJTt5OzVq5e8L/CJEycoMDCQiIhu\n375N/v7+JBKJKCUlhdzd3eVvyKRJk0gsFtP8+fPp2rVr1LhxYxVfet2gpKSEXr58qW8z1CImRkAt\nWkgoI0Oz5yUSovBwIhcXIiCH/P2zqjiJoKBcAjLJ1lY6ytD0e5WTQ+TgIN1RbIAtzZs3r/YHt6ys\njNzd3SklJYWEQiH5+/tTTEwMffnll5SUlEQRERG0Zs2aamXXuDSsbCenq6urvPJ5fn6+vHnW8ePH\nMXnyZBgbG8PZ2RmdO3fGjRs3AEibYQkEApSUlKBx48bMMgdZUVBQgIcPH+rbDLWYN2893n67DJrW\nKObxgJEjpVXZ1q61xe3bLZGa+u/1nBzg3Dkb/PqrHbKygPHj/w26qoutLfDxx2CShWtAERMTE/ke\nrcrcuHEDnTt3hrOzM0xMTDBp0iQcP34cJiYmKC4uRnFxcY0JdWrnmSxduhRffPEF3NzcMG/ePPla\ne2pqqkJJARcXF6T8s4Ns9uzZ6N69O4gIrVq1YuZMYmJimCSWOTg4YNCgQZzLBdjtRI6I+Bzt2lVN\nn1cXIyPpF50IcHEBfvvtN/zvf/9D8+bSc99+C3CRCBoQAISHL9ZekBIWLVrERO7Zs2flP5hcw8pm\nkUhUrTNJSUmBq6ur/Fj2Hf7ggw/w7rvv4s8//8TUqVOrlV1LnL4q77zzDtatW4dx48bh4MGDePvt\nt3H27Nkanxk8eDAGDx4MAFUSiGQJULIUbW2OX758iYKCAvB4PE7k6eJ4yZIlGDt2LOfygX4g4t7e\ne/fu4cqVK4iMjOTU5vh4oEWLGZy+B7JjKysrzu0FpDVCmjRpwuQzUjFTlUv5PB6v2s2V1WVhu7q6\n4sqVK0qvKVDbHOv58+cKMZNmzZrJ/y2RSOTHP//8M61YsUJ+bcSIERQVFVVFXkFBgYKM+kB9jJl8\n/rmAFi7UPjgokRAdPCgNxKakSM9duHCBsrOl53bt0jxWUpGVK4k++EB7OQZqxs7OjtLS0pReu3Tp\nEo0YMUJ+vHz5clq0aJHKstWe5rRq1QoXL14EIN2vImt8NHz4cOzfvx8ikQgpKSm4d+8eunXrVuV5\nExMTZqnTrODz+UxLG7CgadPd+OOPLGiTn3TtmjQXZOJEPpo3L4STk/R8v379YGsLtG3Lx/TpBfDy\nAv75SGhEUZE0D2bSJM1lGFANsVhcbZghICAA9+7dQ2pqKoRCIQ4cOIBhw4apLrwmTzN58mRydHQk\nU1NTcnFxoe3bt9OVK1fIx8eHOnXqRF27dqUbN27I71+8eDF5enpS586d5Ss+lREIBMyWhhMSEqiw\nsJCJbFZkaLrcogJz5kirwaubVhAXRzRqFJG9vXT00bfv35SeXjUfJjs7hwYN2keAdDVmyBCi6Gj1\ndJWUEE2aRDRyZCxdu3ZNvYdVpGKaApckJiYySakXiUTMPse1LQ2fOHGCOnfuTJ6envTrr7+qJbtB\nJa1dvXqVaRIYC1glJxFJE8ZmzSLq2JHo3DkioVD5fWKx1AksXixNPrO3J1q1SuqIxo2TduCrSMWk\nNbGYaOpUoqFDidasIXJ0JOrZk+jnn4lu3Kj6rAyRiOjiRSJvb6IpU4hSUwuouLiYmxdeCWXTbS44\nefJklcLYXJCenk4hISGcyyUiatKkCbOkNb2k05uYmKCkpIRZo2YWPHnyBO3bt9e3GWqRl5cHGxsb\nhIQAq1cDz59LU+YdHKSp9EKhNJ0+MhKwsfk3nb5vX+Czz/iIjn6GqCgvmJkpyq0YzASA8nJg4MCH\naNXKCVu2WOHy5X/T6TMzpftwmjeX7gWSpdOfPg04OwMffQS8/bbmy8oGVIeI0LhxY2ZbWfTiTBwc\nHHD79m0m1elZsWfPnhqXxeoia9aswSeffCKP0qemSr/E+fn/frGbNQP69AHc3f997pdfgN27b+P4\ncVe0b69aosrLl7kYOvQxRo3qjqVLK56XxlMqb/QbMgSosAppQAfk5eXB3d1dnifGOUzGO7Xw2muv\n0c2bNzmXW1hYSI8ePeJcLktKS0vr1NRs40aitm2J0tPVfzY7WzqlWrVKveeioqLo/Pnz6itUgfj4\neGY9buLj45nILSoqYpJOf//+ffLw8OBcrgy9FEdiWfGJZSUpFgiFQpw/f17fZgAAQkL4+P77Yzh9\nWjoVqo7qiiM1by4d+SxZcgqbNqn+69e9e3f06dNHTWtVw9TUlFn/XlaFuI4dO4bs7GzO5aampjLt\nCqF20hoX2NnZITExkXO5FhYW6N+/P+dyAWnMxN3dnfPsXQsLC0yePJlTmRVJS0uDWCxWyGxUxvnz\nwKeflmL//gBoU7bFzQ0IDe2G0aNL4OZmBVVWFlnVUgUADw8PZrJZ1Rtm9XlIT0+v9XOgDXoZmbAu\nbMuClJQU5Obm6tsMtbG2tq7VcSckAJMnA3//3QJBQbXHSGorKN2zpy3Cwx0xfToQF1ezrKdPn9aq\nzwA3pKenM41T6m2ak5+fz0T2zZs3mcjt378/7DXdNVcL2dnZyMrKYiK7adOmNX75+fwyDBv2B+bP\nB9Rs1FcjPXoAy5YBI0duQn6+8paUQqEQt1Utia8BKSkpiIqKYiL7yZMnKCwsZCKbVc3a9PR0Zi1m\nAD05E5adxV69esVELkvKy8uZzb8romxPxqZNjeHo+BY+/FB1Oao24Zo1C+jQYQp+/135hkNTU1Om\nUzwzMzNm05wXL17ApLYSdBqyd+9eJnLj4uKYOhO9rObcunWLaVSZFTExMfo2QWPS09Np48aNCuce\nPyZq3pzoyRP1ZFVXUFoZyclELVoQVV74YFUIyUD19OjRgyIjI5nJ19vIpD7GH168eKFvEzTGwcEB\n7733HgBp8tKCBT9h5kzC/PlAu3bqyVKncbmrK7BkCTBjhlQnEeHq1at1ZgXrv0RWVlbDm+bY29sj\nLy+v2roK2iAQCJjVmBjLsPKxWCxGREQEM/nAv1vMJRIJrK3nw8iIh48+YqoSAPDOO0Dz5jw0ajQf\nPB4PPXv2ZFYfRsaePXuYpQmkp6fj8ePHTGRnZmYy+V4QEdO2vICenImJiQlatmzJ5D+7UaNGtXaw\nq4sYGxszr9YvEAhARPjzz1D89NN9bN8uLX6kLuo0LgekqfJbtgC//ZaP+/el51g1/ZYxevRoOMm2\nOXNMUVERsxae4eHhTLo75ubmwtjYGBYWylu1coFenAkAdOrUiUmkncfjYeDAgZzLlXHhwgVmsgMD\nA5nJBoDNmzejoKAIBw6Mx4IFXtDlViOJ5DkmTYrC228DRUWl2LhxI1N9LL80HTp0YLbEOnv2bCZ5\nNwTf9xEAACAASURBVLGxsfD19eVcbkX05ky6deuGO3fu6Eu9xrDqCawLPvroI4SEWEIolJZiBIDb\nt28jrrZkkEqoEzOR0bp1a/zxx2iYmwMbNzbBZ599prYMVWG1zF6fiY6Ohr+/P1MdenMm/v7+uC8b\n83JMQkICnj17xkS2Jl8kdTh27BgePHjAmTw+ny/PW3j2DFi4EAgO/rdua9euXasUDeeK0NBQREdH\ny495PGDbNmDFCkBWn7ugoIDTjWd8Ph/Hjx/nTF5l7t27h4SEBCayc3NzmaTRA1Jn4ufnx0S2HGbr\nRLWQlJRE9vb2TOqavHr1ihISEjiXqwsEAgGnfV7CwsLkGwlHjSJatqzm+1etWlVrXZHqloYlEgkl\nJyfXatP69dJ+PkREOTk5dOjQoVqfqSs8efKEWd2Vy5cv07Nnz5jIdnBwoAcPHjCRLUNvzkQikZCN\njQ2lyAqL1iP27t3LpLE0S+LjpdXQSktrvk8oFModfGlpKe3Zs6fKPTJnUl5ervABTU5OrrbCXkXK\ny4nc3KTFkwywJzc3lywsLJjn9uhtmsPj8eDv768wDK4vdO/encnyXUXu37+vcdsOPp+PmJgYhXPL\nl0vjJJULHVXGxMREHhdq3LixQlC4sLAQq1atkk/1BAIBkpKS5NddXV0xZMiQWu0zNQW++EKabl+R\nuLg4jac8RMQsc7S+Ex0dDV9fX6YbKgE9xkwAaQFbVs4kJiaGWS5A69atmVeJKywslPcdUpfExESF\n1YYXL4Djx4E5c9STw+Px4ObmJj+2tLTEF198IT82NzdXr+BwBd55B7h8WbrJUIaLi4vGG/8kEgkC\nAgI0elZV1q1bx6wYemZmJrOkyNu3b7OPl0DPzsTPz4+ZM2nTpg3T5UEATBp+yejRo4fG28W9vb1h\nZ2cnP/7tN+mXl6uyHurmmSijWTPgww+lwVgZtra2Gn/ojY2NmZfVnDZtGrNf94yMDGYrhceOHftv\nOJNr164x+VJaW1szzfZLTU1FcHAwM/kyJBKJSu8Pn8/HkSNHqpzPyQF27wY+/ZSFddoxdy5w+DCg\nLHcxPDxc5SnPkydPOLZMOaxWvQDAx8dHYRTIJenp6TpxJnqpASuDiNCyZUvcvXsXzs7O+jJDY4RC\nIfO+yTExMUhLS8PIkSNrvK+goAACgUBhRAIAP/0krcO6dStLKzXnk0+Axo2lMZ2K5ObmQiKR1FoZ\nLCMjA/Hx8czT8wsKCmBlZcVUBwvy8vLQqlUr5OXlMY+Z6G01R8bIkSPpr7/+YiI7MzOTdu/ezUS2\nLtF0+by4mKhlS6K6XBY3KYnI1paohlYueufly5e0b98+ZvIvXLhABQUFTGT//fffNEC2Ds8YvU5z\nAGDkyJEIDw9nItvOzg4jRoxgIluGLobY1c2ly8vLsXbt2mqf27YN6N0b4LqkBxcxExmtWgEjRgA1\nZdevX78eJSUlCueKioqq7ZnLNS4uLpjEsN2gubk5s/jetm3bmH8H5OjEZdVASkoKWVhYMKnGrQuO\nHTtGOTk5OtG1ePHiKrkC1SVQsczlUKeeiSrIcmCqa45XXFxcZXT2559/Mmsm1VAQi8Vkb29PT58+\n1Yk+vTsTIiJ/f39mrQ6IiNOMUn0i/KclnyrTnl27iPr3Z20Rd4wcKW2zURssMqZrQpUkvLrK9evX\nqVOnTjrTp/dpDiDdLs5qqgMAq1atYiZbl8jKBC5atKjGpDkiaUDz6691ZZn2fP01sHIlUFMah0Ag\nwFdffcV0Sb4iRARLS0umOtavX89M9v79+zFq1Chm8qugM7dVA3fu3KG2bdvq/FeHSzZv3qwz+0tK\nSmjp0qXVXj9zhsjHh4iVOVxPc2T07El05Ej118+ePcts74q+ePXqFTPZbdu2patXrzKTX5k6MTLx\n9vYGn8/HQ9lW0nrIyJEjmf5ilpaWygOOTZo0wdc1DDuOHgXefLP+9e99802p7dURFBSE1q1bA5CO\nGioHZblEKBQyk10RVk2xnj9/jqKiInTr1o2JfGXUCWfC4/HwxhtvICwsjJmOxMRE8PnKWy5wgaOj\nI4w0KVumIrt371baWkEgECiUciCSps6zDOCzKsMwfDhw8iRQcZHm/v37StuX8Pl8ZkmDRIRllTcO\ncYxQKIRAIGAmPzw8HCNGjGCfW1IRnY2BauH06dPUo0cPZvITEhIoLi6OmXwZjx8/Zq6jImKxmI4e\nPSo/vndPuopTX2eMnp6KK1BJSUkNspL9uXPn6Pbt28zkv/7663SkpjkjA/SaAVsRWfbmkydPqmRx\n1icOHjyIUaNGway27bkqwOfzUVRUBIeaGv9WYulSCZKTjbBhg9bqqyUyMpLZ6GTePMDYuBA//dRY\n5Zq42dnZMDU1rZcZqiwoKCiAs7MzMjMz0axZM53prRPTHEC63T0oKAh79uzRtylaMXHiRE4cCQBc\nvnxZ7c1fmzevxMCB7GIJrBkxAjhwIAylpaUqP2NkZIRLly5prbu8vLxBlDE4duwY+vbtq1NHAqDu\nTHOIiI4fP07+/v5MdWzfvl0nqy76WJnKyyOysCDi8/Vng6YUFhYSkTTZztqaKD1d9zaUlpZSamoq\ncz0sG2EREfXp04cOHjzIVIcy6szIBACGDBmCnJwc3Lp1i5mOoKAgneQphIaGIjY2Vu3n+Hy+xn1/\nzpyRps/LujDcunWLaT1UrsjKypLveDY1BYKCpIFYTYiOjta4wJKZmRmz9hgyysrKmG4OjYuLQ0JC\nAsaMGcNMR3XUmZiJjGXLluHKlStMV3Z0BRGpPU15+PAhbG1tNWqSPmMG8PrrwAcfKL+emprKye5s\nLmImd+/ehZubm9Jt/Tt2AMeOAX//rb7c3NxcpKamwsvLS+VnMjIyUFxcjHbqtjasg7z//vuwt7fH\nTz/9pHvlOh8L1cKrV6/I0tKSsrOzmemQSCTMdmnqC7FYukP4+fPq7zl06BAn7ysXSWuXL18mgUCg\n9FpGBpGVFVE1lzknKiqKWZFoXVJYWKjXusp1apoDSJN4xowZgx07djDVs2XLFqbyZYhEIqxcubLG\ne/h8Pvbv36+Vnlu3gJYtAXf36u8ZP348mjdvDkA63F6yZIlGujQZlZw9e1ah6VpgYGC1pS/t7YEO\nHQBte7QdOnRIpSlPr169dBKsXLx4MVP5u3fvxoABA/RXG0gvLqwWrl27Rm3btq13FeCrgy+LiFZD\ncXGxvB2Fpvz4I9G8eZo/n5KSQps2bZIfi8VitQK4EomESiuUvo+OjlbIf1GXhQuJvvhC48eJSNpG\no6YRaHx8vHYK1ITlhlOJREJubm4UERHBTEdt1ElnIpFIqEuXLhQWFqZvU+oNfn5EXC4SJCYm0q5d\nu+THCQkJFBISQkTSaU5CQoJCG4wHDx5wmiR18yZRx46ciauCQCDQeVIXSy5dukQeHh56XcGrk86E\niGjLli00atQopjokEolOK7FFRUXRxYsXiUhaTmD58uWcyE1LI7KxkS6r6gJWG/0qIhYT2dsTJSZy\nI2/VqlV6K0Whi812kydPprVr1zLXUxN11pkUFxeTra0tJSUlMdXz5MkTpvIrU1KhAlBJddWA1GTH\nDqKJEzkRVaeYMYPojz+4kSV7r+Pi4mqddnLNyZMnmcpPS0sjKysrytNz7cs6F4CV0axZM7z11lvM\na5HoejlQlh1LRGjSpAknMh89Ary9ORFVp/DxUeyrow2y9/rly5ecZSirytChQ5nKX7VqFd544w1Y\nc9XLREPqrDMBgC+++AI7d+5Eeno6c12JiYnMdQD/Fjbau3cvZ/Vjk5JqXsXhGi5rwNaEu7v0tXHJ\n0KFDsWjRIm6FVoMuyhjk5ORgx44d+Oabb5jrqo067Uzc3Nwwe/Zs/PLLL8x1XblyRSeZsT/88ANM\nTEwwdepUzkZFunYmuqJVK26cyenTp+XdEY2MjDB//nzthdaCQCDA6tWrmetZsmQJJk6cyLwBmSrU\nuQzYyuTk5MDDwwPXr1+vtxmKJSUlaNSokbzsYmUSExPRpk0bjTu6OTpK80wqdARtEOTmAq1bAxpm\nx8tJSkqCuxJvK5FIUFJSAnNzc+0U6Ink5GR4e3vj4cOHTBvOqUqdHpkAQPPmzfHJJ5/gg+pyxDmG\nhW/dt29fjclTGRkZePbs2f+3d+5RTdxZHP+CipaCCC5kCUitgEDkKah1BVtLRcW3rou1atsjtsd2\n3Wqrdde2bj1QrfaxdXVdrbVabesbKOILLQdUCqjEF4JWNIoQECUiSXgl4e4fKbNEBEmYzCR0Pud4\nZCaZ370Dk29+j/u716S26+v1HzoLeJZYx9lZn+yputr4a3U6HfO3fJyQAIBKpbLqXcIff/wxFixY\nYBFCAsAyg9YeRaVSkUgkovz8fLPb2rhxI1VUVJjdDltcu0bk7c2tTS6WhpsJCiI6f9746zZs2MBZ\nCZKWyGQyOnjwoNntXLlyhVxdXXlfwWmJxfdMAP3KzooVK/CPf/zD7LaaN0p1FrVajZKSEqOvO3Lk\niFHF3LvqfEkzpk7Cvv3223Bxcenw++Vyucm7jVvi4uKCmJiYTrfzJJYuXYr333+f9xWclliFmABA\nfHw8iouLcezYMbPaYasSfW5uboczhbVk3LhxRu145UNMzJVl7XF0VEyICP/9739NrvLXq1cv5Obm\nmnRtS3r37t3mniO2yM3NhVQqxdtvv21WO8ZiNWJiZ2eHxMRELFq0iJNVF4VCgW86Ue07Ojra5B5O\n88NYUlKCixcvtvteoWeix8bGBtOmTTM5qbeLiwvGjBlj0rUAkJKSwslSMBHh73//OxITE1mLU2IL\nqxETAIiLi0OvXr2QlJRkdlsuLi6YOXOmUdeo1WqDnbGdxcPDA7r2qlKBHzHhKs4EaF9M6urqDH7f\nbAxPASAnJ8foIY+Pj49Zkx41c/ToUdy9exevvvqq2W0Zi1WJia2tLdauXYulS5dCpVKZ3Z6xS4bl\n5eUYOHAga/a7deuGwYMHM8fnz59v1Su7dUsfj9FVaU9M7t27h379+rFu08/Pz+hAycDAQNb9eJT6\n+nq8+eabWL16dZthBnxi8XEmj2Pu3LlQq9U4cOAAJ/Z+/PFHxMTEmK1gUkc5duwYRo4cadC9FYuB\nvDzADJ8pi0ChAAYM+P/ycH5+Pvr378/kZeGTBw8eoLCwECNGjODE3rJly3Djxg3sNyUFHRfwuZRk\nKgqFgsRiMWdLlEql0iBXR0tUKhWzNZ9Lrl69SlLpFbKzI+qCZWUYmpr0SbKbV0B/+eUXTuvo7Nq1\ni6qrqx/72rVr1zhbms3JySGRSNTpvDfmxCrFhIgoLS2NBgwYQEqlklc/6uvrzVovti0aGhro4MHL\nNGAA56Y5jTO5ceMGeXklmxRrwgYKhYLzXcaPUldXR97e3rRnzx5e/XgSVjVn0pLx48cjMjISf/3r\nXzmzSUSt9lv07NmTl+GPnZ0devYMZOZLtm/fDplMxrkf5oBajLzd3NwQGDiB9Q1/HcXZ2Rn2zen+\nofctpb2CyGbgo48+QnBwMP7yl79watdoeBazTqFQKOiPf/wjp9+UCoWCdDodrV69mjObbXH0KFFM\nzP+Pm7NsNTU1kVQqtaq6Oc1oNBpKSEgw8H3qVKIDB3h06jfWrFlDKpWK03SP1jC8acaqxYSIv+FO\nQ0MD7x/W7Gyi555rfV6n09FPP/3E5NDVarUWnU93y5YtVN5O1a3oaKL0dA4daoO2sumbi7q6OvL3\n97f44U0zVjvMaaZ5uLNs2TKz22oZXanVavHZZ5+Z3WZ79O4NKJWtz9va2mLSpElMAFdVVRW+/vpr\n5nVTo0Sb6WycSWZmJi5fvswcz507t916ykql/l75gojwxRdfGMSRdPZ32BHeeecd+Pv7W/7wphm+\n1YwNFAoFubm50YkTJ8xqZ9WqVQbfTnz3TG7fJurXz/jrioqKaPfu3cxxZWWlUZsbjR1WHj9+nE6f\nPs0c37t3z6jfnb8/UWGhUSZZp2WWe61WSwkJCWa1Z03Dm2a6hJgQ6Yc7Xl5evPzyGxoaSKFQcG73\nwQN9sarOcuvWLcrLy2OOs7Oz6ejRo8xxYWEhXbx4kTm+ceMGFbb4dOfm5tLx48eZ48zMTIOSC50d\nYonFRHzUldJoNNwbJf2Xo4+PD+3du5cX+6bSZcSEiOjDDz+kyMhIVse2KpXqiVnNHz58aFAWgis0\nGqJu3fSxGOakqqqK5HI5cyyXy+n27dvMcWNjo1nnZBwciPgowPjJJ588MaZFo9EwRdfZQKPRUEhI\nCC1atIi1NrnCKiNg26KpqQmTJ09G9+7dkZSUxMoO4O+//x5jx47lPfq1LZ5+Gqis1P/PFWzUGu4o\nTU36YuYaDWDiHj6zUl1djeTkZLz++uustLd48WJcuXIFhw8ftsiQ+fawwD+P6dja2jKJmjdu3MhK\nm7NnzzZKSFQqFXbs2MGK7Y7QuzdQU8OZOc5RqfRCyZWQpKenG7UrvU+fPqwJybZt23Do0CHs2bPH\n6oQE6GJiAgCOjo5ITU1FQkICMjIyTGpDrVabnK3ewcEBo0ePNulaU3B0fPyKjjnhMp9JTY3+HrmA\niODo6Ghyj/b27dsmJ1jKysrCkiVLkJqaCmdnZ5Pa4JsuJyYAMGDAAOzatQszZswwSRSkUikcO/EE\nt8zJae4yHV29Z1JTY/5l4cbGRgD6nCjDhw83uR1HR0ejsuQ1c+fOHcyaNQs7d+6Ev7+/yfb5pkuK\nCQCMGjUKK1euxOTJk6E08qs7KioKbm5unfaBiJCWlmbWmAQ+xITLfCbmjjGpqqrC1q1bWWnLxcUF\nL774olHX1NbWYsqUKVi0aBFiY2NZ8YMvuqyYAPo8oCNGjMDs2bOf+IFWq9UmD4vawsbGBvPnzzc5\n+1dHaCtwratg7p5J3759sWDBAtbbPXny5BOHPESE2NhYBAQEYMmSJaz7wDVdWkxsbGywfv16KBQK\nzJ49u933VlVVYdCgQWb1Z8eOHaxXDnR05L5nYu1zJtnZ2ax/cTxKYGAg7t+/3+57EhMToVar8c03\n37CWe5hPrG/K2Ejs7OyQlJSEyMhIrFmzps2wey8vL7P7MnfuXNbbFOZMjGfo0KFmT7Ho4uLSbnb8\n9evXY/v27Th16hTntY/NRZfumTTj6uqKjIwMbNmyBevWrWPO19bWYtu2bbz4dOPGDfzwww+dbkeY\nM+kYmzZtQl1dHQBwkqu1JTt37kRNiz9SQkIC1q5di4yMDIjFYk59MSddvmfSjIeHB37++WdERkZC\nqVTiww8/hJ2dHSZNmsSLP97e3m1WmjOuHYDDzzbnFBQAbIw+4+LieMvmPmHCBKb3sWPHDmzatAlZ\nWVl4pqsl7+Uz/JYPiouLydPTk7Zu3cq3KwZ89dVXJlWgk8mIRCLzh9TzQVMTUf/+RAUFxl979epV\nOmAJSVBasGvXLnJ3dzfY19SV+N2JCZH+QfP09KRNmzbx7QpDU1OTybuQfXyILl1i2SELoLiYyN3d\nNKGsq6vjfVd3S9atW0dubm50qSv+oX7jdzFn8ih+fn7IzMxEQkICVq1axbc7APQrT80z+jKZDNu3\nb+/wtS+9BBw/bibHHgNXcybHj+vvraMLHZ988gkaGhoA6Cv0WcoKyddff421a9ciMzPTqGqNVgff\nasYnt27dogEDBtCnn37KtyvtUlhY2GZ2fCJ9SsNx47jzh6s0mdOnE7W3GbuhoYGX4uTG8K9//Yu8\nvLzo+vXrfLtidrrUrmFTKCsrQ3R0NGJjY/H555+bNcDMVIqKimBjY9NmqPWDB/pCXPfuASaUN7ZI\ndDrA1VU/AdvWgsexY8fg4+MDb29vbp3rAESEFStWYMeOHcjKymJlst3i4VnMjKKkpISioqIoMDCQ\nBg4cSGvWrCEiosWLF1NAQAAFBATQ+PHj6f79+0REJJPJqFevXhQaGkqhoaG0YMECpq3k5GQKCAig\nOXPm0N27d2nYsGE0ceJE3ktndIRVq1a16qkMGUKUmcmTQ2bgzBkiicTw3PXr12nnzp38OGQEarWa\nZs6cSUOGDKGysjKqq6ujiIgICg0NJV9fXyZXyd69e0kikZCtrS3l5+cz13f0ubU0rEpMKioqmMzg\nSqWSfH196cKFC5SRkcEk51m2bBnzx5LJZBQYGPjYtuLi4kin09FHH31EFy5coPr6epo3bx4FBQXR\nzZs3ubkhFnjw4AEdOXKEli8n+uADbmxyMcxZtYpo4UItZWVlMecsOSl2MyUlJTRo0CB65ZVXqLa2\nljnf/LNGo6Fhw4ZRRkYGFRUV0bVr1+iFF15oJSYdfW4tCcvr07eDSCRiaro6ODggODgYcrkco0aN\nYoYnI0aMQFlZ2RPbampqQkNDA2pra2Fvb4+ePXtiy5YtmD9/PoYMGYL09HSz3gtb9O7dG/3798dL\nLwEnTgAVFRWsh+xzyc2bN6HVanH8OBAdDYNJVEscgrYkJycHw4YNw5w5c7Bz506DuJbmnxsbG6HT\n6SASieDv7290bepHn1uLgm81MxWZTEZeXl6tUuZNmDCBKdcpk8nIwcGBQkJCaPjw4QZ5SY8dO0bB\nwcH07rvvtmr7xIkT5ObmRhs3bjTvTbBIfb2+jObNmwrKzc1lzstkMiopKeHRs/a5efOmwd9w7969\npFDU09NPE7GYDdHsfPvtt+Tq6kqHDh167Os6nY5CQkLIwcGBli5davDa43ompjy3fGOVYqJUKiki\nIoKSk5MNzicmJtK0adOY44aGBiaruFQqJbFY3OHasMXFxSSRSOiNN97gvF6KqYwZQ5SUZHhOLpcb\nFI06efIkp0WkHiU7O5tu3brFHKenp7eq5Xv0KFFkJNeemYZGo6H4+Hh69tlnqaio6Invr66upmHD\nhhkMFR8Vk848t3xi2f3Gx6DRaDB9+nTMmjULU6ZMYc5/9913OHTokMF+Fzs7O/T+bWNHWFgYAgMD\ncfXq1Q7Z8fb2Rk5ODkpLS/H888/j3r177N6IGRg9unW8ibu7OzM0BPSb3Dw8PJjjw4cPIy8vjzk+\nc+aMQZlRtVoNrVZr0GbLOBOtVsskFwL0iaVutajluX//fhQUFBj4IxKJWvg8Gk5OTgbtnzihvxdL\n58GDB4iNjUVJSQny8/M7lNjIyckJ48ePR25ubpvv6cxzyyt8q5kxNDU10Zw5c1pl7j5y5AhJJJJW\nBcSrqqqYSTuZTEZisdjoIuM6nY6WL19O/fv3p1OnTnXuBszMhQtEvr6da6O8vJxZDSPS9xxalrlI\nSUmhzZs3M8dpaWkGPR2ZTNbpb9HQUH21QksmIyODnnnmGXr33XefWBLj/v37zFCutraWoqKiKC0t\njXn9hRdeoHPnzjHHbDy3fGBVYnLq1CmysbGhkJAQZtns8OHD5OPjQ15eXq2W0vbt20eDBg2ioKAg\nCgwMpP3795tsOyUlhUQiEb388sukVqvZuiVW0emI3NyIrDk+qqxMXwuosZFvTx5PXV0dLVu2jFxd\nXTtctvPSpUsUGhpKISEh5OfnRytXriQioqSkJPL09KRevXqRSCSisWPHEhG7zy2X/O6D1oyhqqoK\nCxcuxLlz5/Dtt98iMjKSb5dasWIFUFwM/Pgj356Yxvz5gJMT8PnnfHvSml9++QXx8fEICAjAxo0b\nDYZrArCuYY6lkJycTO7u7jR79myL66WoVEQeHuYdJpgrzkQq1e+AfmQ+lneaeyN/+MMfaPfu3Ra1\ngdCSsLoJWEtgypQpuHz5MjQaDUJDQ3H69Gm+XWJ4+mlg9WrgnXf0BaysBSJg0SJg5Up9z8RSOHPm\nDAYPHozr16+joKAAcXFxFrOB0OLgW82sneZeSnx8vMX0UnQ6oqFDib77jm9POs6+fUTBwURPqMbJ\nGXV1dbR06VLq27ev0BvpIELPpJM091KUSiWCg4ORlpZmVEU4c2BrC6xbByxfrq+IZ+nU1wNLlwJf\nfQV068avL0SE9PR0hIeH48aNG7hy5YrQG+kofKtZVyItLY0kEgkNHz6cMjIy+HaHXnnFPPt12J4z\nWbWKaOpUVps0iby8PAoPDydvb286cOCA0BsxEkFMWEar1dK2bdvIw8ODJk6cyGu0aUkJkYsLUYuA\nU1ZgU0zkcqK+ffVZ1fji6tWrNH36dPLw8KDNmzc/MW5E4PEIwxyW6datG1577TUUFxdj1KhRiI6O\nxrRp0wyiQrmiXz/gb38D3n+f3XbZrJuzfDkwb54+MTbXlJaWIj4+Hs899xwiIiLw66+/4o033rDK\nouEWAd9q1tWprq6mDz74gFxcXGjRokVUWVnJqX21mqhfP6KTJzk12yHOntXneP1tGwpnVFVV0Xvv\nvUcuLi60bNkyUigU3DrQRRF6JmbGyckJiYmJKCwshEajgZ+fH1599VWzFzRvxt4eWLNGv+zK1lIx\nGzlgm5eCExLMX5i8mcrKSiQmJsLHxwcPHz7EpUuX8Omnn8LZ2ZkbB7o4gphwhEgkwoYNG3D27Fn0\n7NkTEokEcXFxyMrKMvvqz8yZ+nSO//mPWc0YxbZtgFoNvPaaee0QEbKysjB+/HgMHDgQN2/eRE5O\nDrZs2WKw4VGABfjuGv1eqa6upvXr15Ovry/5+PjQhg0bmG3n5qCoiMjLiyghgd8aO01NRJ99RiQW\nE7XYP8g6SqWSNm/eTCEhIeTt7U1ffPGFMJwxM4KY8ExTUxNlZGTQn//8Z3J2dqYZM2aYLR2fXE4U\nEUE0d64+mRLXNDYSvfkmUVAQ0e3b5rFRWFhICxcuJEdHR5o8eTKlp6dbRbrHroAwzOEZGxsbjBo1\nCvv27UNBQQEkEgliY2MxcuRI/PDDD3j48CFrttzd9aVElUogJgZQKExrx5Q5k4cPgfHjgdu3gdOn\nATbrxCuVSmzYsAGRkZF48cUX4eTkhCtXriAlJQWjR4+2+HSPXQa+1UygNY2NjbR//36KjY0le3t7\nio6OpnXr1rGW6FqnI1qyRJ/7xJR0BcbGmchkRIMGEb31FhFbIRy3b9+mf//73xQTE0MODg709oGk\nJgAABVBJREFU0ksv0a5du6wmK15XREhBYOGo1WocP34cqampOHjwIJycnDBz5kxMmjQJERERnfrW\n3bwZ+Oc/gX37gKgoFp1uQV4eMHWqPtblnXc6Xp3vUYgIUqkUqampSE1NRUlJCcaNG4epU6ciJiYG\njo6O7DouYDSCmFgROp0OeXl5OHjwIFJTU1FZWYmoqCi8/vrriIqKQp8+fYxuMz0dmD0b+PJL/f9s\nsn8/sGABsHUrMGmS8dfX1NTg9OnTSE1NxU8//YSnnnoK06dPx6RJkzB8+HAhuMzCEMTEiikuLkZq\nairS0tJw5swZODs7IyQkBM8//zzCw8MxePDgDglMQQEwYQIwaxbw1luAp2f778/MzGw3ClYuB7Zs\n0f9LTQUGD37yvdTU1EAqlSI/Px/5+fk4e/YsSktLMXToUEycOBETJ06En5/fkxsS4A1BTLoIOp0O\nV69eZT6M+fn5kEqlEIlEGDp0KMLDwxEaGoohQ4Y8NkirogJ47z3g2DGgb199zZroaGDUKMDFxfC9\nj4pJdbV+Yvfnn/XJoO/e1Rcc//LLxwvTw4cPcf78eRw+fBglJSWQSqUoKyuDv78/hg8fjoiICISH\nhyMgIEDofVgRgph0YXQ6Ha5du4Zz584hPz8fOTk5KCoqAqDPEv/UU0/Bx8cH/fv3h7u7O1xdXeHp\n6YWaGncUFopx+rQjsrNt4Ov7f3GJjNSnOMjO1ovHzz8DRUXAn/4EREYqIZHI0adPOe7elaOoqAhq\ntRoVFRUoLy/H9evXUVNTA51Oh5CQEISFhWHIkCGCcHQRBDH5nUFEqKmpQXl5OeRyOcrLy5mfS0pK\nUFlZiYqKCsjlcmg0GvTq9RS6desOou7QaJpgY2MPGxsb2NpqodPVont3gEiHhoYGAICHhwfEYjHE\nYjFEIhE8PT3h7u4Od3d3iMViuLu7w8nJScgP0gURxESgTWpra9HY2AitVguNRgOtVgutVgsiQo8e\nPdC9e3d0794dPXr0QI8ePWBvby+IxO8YQUwEBARYQQgNFBAQYAVBTAQEBFhBEBMBAQFWEMREQECA\nFQQxERAQYAVBTAQAAHfu3MHIkSMRFBQEPz8/rF27FgAQFxeHsLAwhIWF4dlnn0VYWBhzzerVqyGR\nSBAUFIT09HTmfEpKCiQSCebOncv5fQjwhxByKAAAsLOzw8aNGxEYGAiVSoXBgwdjzJgx2LNnD/Oe\nJUuWMHt98vPzkZSUhMuXL6OiogKRkZH49ddf0aNHD+zevRsFBQX4+OOPcfHiRYSEhPB1WwIcIvRM\nBADoc9QGBgYCABwcHBAcHAy5XM68TkTYu3cvXn75ZQDAoUOHMHPmTHTr1g0eHh4YNGgQ8vLyAABN\nTU1oaGhAbW0t7O3tub8ZAV4QxESgFbdu3cLZs2cRGRnJnDt16hREIhG8fytwU1ZWBs8Wu/g8PT1R\nWloKAEwtGiKCr68vt84L8IYwzBEwQKVSYcaMGVi3bp1BwqFdu3Zh1qxZHWojJiYGMTEx5nJRwEIR\nxESAQaPRYPr06Zg1axamTJnCnNdqtUhOToZUKmXOeXp64s6dO8xxaWkp+vXrx6m/ApaFMMwRAKCf\nE5k3bx4kEgkWL15s8NqJEycQEBAAsVjMnIuNjcWePXug1WpRWlqKgoICDB06lGu3BSwIoWciAADI\nzs7G999/j+DgYGb5d/Xq1Rg7diz27NnDTLw2Ex4ejqlTpyI4OBi2trbYvHkzevTowYfrAhaCsGtY\nQECAFYRhjoCAACsIYiIgIMAKgpgICAiwgiAmAgICrCCIiYCAACsIYiIgIMAKgpgICAiwwv8A1vcV\nkih+9IgAAAAASUVORK5CYII=\n",
+ "text": [
+ "<matplotlib.figure.Figure at 0x23250d0>"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/Chapter_9.ipynb b/Satellite_Communications/Chapter_9.ipynb
new file mode 100755
index 00000000..2c093f32
--- /dev/null
+++ b/Satellite_Communications/Chapter_9.ipynb
@@ -0,0 +1,295 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:784ed0940f5ca0d7641a379ee4884ada589406f7ce20917d271026274ac607a6"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 9: Analog Signals"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 9.1, Page 235"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "Bs=4.2 #Signal Bandwidth(MHz)\n",
+ "delf=2.56 #Deviation Ratio\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "delF=Bs*delf #Peak Deviation(MHz)\n",
+ "BIF=2*(delF+Bs) #Signal Bandwidth(MHz)\n",
+ "BIF=round(BIF,1)\n",
+ "#Results\n",
+ "\n",
+ "print \"The peak deviation is:\" , delF,\"MHz\"\n",
+ "print \"Signal Bandwidth is\" , BIF,\"MHz\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The peak deviation is: 10.752 MHz\n",
+ "Signal Bandwidth is 29.9 MHz\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 9.2, Page 236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "delF=200 #Peak Deviation(kHz)\n",
+ "f=0.8 #Test tone frequency (kHz)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "m=delF/f #Modualtion index\n",
+ "B=2*(delF+f) #Bandwidth of the signal(kHz)\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"The modulation index is\" , m\n",
+ "print \"Bandwidth of the signal is\", B,\"kHz\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The modulation index is 250.0\n",
+ "Bandwidth of the signal is 401.6 kHz\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 9.3, Page 236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "#Variable Declaration\n",
+ "\n",
+ "Bs1=4.2 #Signal Bandwidth(MHz) of Example 9.1\n",
+ "delf=2.56 #Deviation Ratio of Example 9.1\n",
+ "\n",
+ "delF2=200 #Peak Deviation(kHz) of Example 9.2\n",
+ "Bs2=0.8 #Test tone frequency (kHz) of Example 9.2\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "delF1=Bs1*delf #Peak Deviation(MHz) of Example 9.1\n",
+ "\n",
+ "BIF1=2*(delF1+2*Bs1) #Signal Bandwidth(MHz) of Example 9.1 according to Carson's rule\n",
+ "BIF1=round(BIF1,1)\n",
+ "BIF2=2*(delF2+2*Bs2) #Signal Bandwidth(kHz) of Example 9.2 according to Carson's rule.\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"Signal Bandwidth of Example 9.1 by Carson's rule is\",BIF1,\"MHz\"\n",
+ "\n",
+ "print \"Signal Bandwidth of Example 9.2 by Carson's rule is\",BIF2,\"kHz\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Signal Bandwidth of Example 9.1 by Carson's rule is 38.3 MHz\n",
+ "Signal Bandwidth of Example 9.2 by Carson's rule is 403.2 kHz\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 9.4, Page 241"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "delf=5 #Deviation frequency (kHz)\n",
+ "Bs=1 #Test Tone Frequency (kHz)\n",
+ "CNR=30 #Carrier to noise ration(dB)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "m=delf/Bs #Modulation Index\n",
+ "Gp=3*(m**2)*(m+1) #Processing gain for sinusoidal modulation\n",
+ "Gp=10*math.log10(Gp) #Converting Gp into dB\n",
+ "SNR=CNR+Gp\n",
+ "\n",
+ "Gp=round(Gp,1)\n",
+ "SNR=round(SNR,1)\n",
+ "\n",
+ "#Results\n",
+ "\n",
+ "print \"The receiver processing gain is\",Gp,\"dB\"\n",
+ "print \"The Signal to noise ratio is\", SNR,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The receiver processing gain is 26.5 dB\n",
+ "The Signal to noise ratio is 56.5 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 9.5, Page 245"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "n=24 #Number of channels\n",
+ "g=13.57 #Peak/rms factor(dB)\n",
+ "b=3.1 #Channel Bandwidth(kHz)\n",
+ "P=4 #Emphasis improvement (dB)\n",
+ "W=2.5 #Noise weighting improvement(dB)\n",
+ "CNR=25 #Carrier to noise ratio (dB)\n",
+ "delFrms=35 #rms value of Peak Deviation(kHz)\n",
+ "fm=108 #Baseband frequency (kHz)\n",
+ "#Calculation\n",
+ " \n",
+ "L=10**((-1+4*math.log10(n))/20)\n",
+ "g=10**(g/20) #Converting process gain to ratio\n",
+ "delF=g*delFrms*L #Peak Deviation(Hz)\n",
+ "BIF=2*(delF+fm) #Signal Bandwidth(kHz) by Carson's rule\n",
+ "Gp=(BIF/b)*((delFrms/float(fm))**2) #Processing Gain\n",
+ "Gp=10*math.log10(Gp) #Converting Gp to dB\n",
+ "SNR=CNR+Gp+P+W #Signal to noise ratio for top channel in 24-channel FDM basseband signal\n",
+ "SNR=round(SNR,1)\n",
+ "#Results\n",
+ "\n",
+ "print \"Signal to noise ratio for top channel in 24-channel FDM Baseband signal is\", SNR,\"dB\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Signal to noise ratio for top channel in 24-channel FDM Baseband signal is 45.7 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 5
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Example 9.6, Page 246"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "import math\n",
+ "#Variable Declaration\n",
+ "\n",
+ "delF=9 #Peak Deviation (MHz) \n",
+ "fm=4.2 #Baseband frequency(MHz)\n",
+ "SNR=62 #Signal to noise ration(dB)\n",
+ "M=11.8 #Noise weighing(P)+emphasis improvement(W)-implementation margin(IMP)\n",
+ "\n",
+ "#Calculation\n",
+ "\n",
+ "D=delF/fm #Modulation Index\n",
+ "GPV=12*(D**2)*(D+1) #Processing Gain for TV\n",
+ "GPV=10*math.log10(GPV) #Converting GPV into dB\n",
+ "CNR=SNR-GPV-M #carrier to noise ratio(dB)\n",
+ "CNR=round(CNR,1)\n",
+ "#Results\n",
+ "\n",
+ "print \"The Carrier to noise ratio required at the input of FM detector is\",CNR,\"dB\""
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The Carrier to noise ratio required at the input of FM detector is 27.8 dB\n"
+ ]
+ }
+ ],
+ "prompt_number": 6
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file
diff --git a/Satellite_Communications/README.txt b/Satellite_Communications/README.txt
new file mode 100755
index 00000000..f1f45fe2
--- /dev/null
+++ b/Satellite_Communications/README.txt
@@ -0,0 +1,10 @@
+Contributed By: Edulakante Nagarjun Reddy
+Course: be
+College/Institute/Organization: Sardar Vallabhbhai National Institute of Technology
+Department/Designation: Electronics & CommunicationsEngg
+Book Title: Satellite Communications
+Author: Dennis Roddy
+Publisher: McGraw-Hill
+Year of publication: 2001
+Isbn: 0-07-137176-1
+Edition: 3rd \ No newline at end of file
diff --git a/Satellite_Communications/screenshots/arrayfactor.png b/Satellite_Communications/screenshots/arrayfactor.png
new file mode 100755
index 00000000..a9ff70d1
--- /dev/null
+++ b/Satellite_Communications/screenshots/arrayfactor.png
Binary files differ
diff --git a/Satellite_Communications/screenshots/polararray.png b/Satellite_Communications/screenshots/polararray.png
new file mode 100755
index 00000000..28ea8bf0
--- /dev/null
+++ b/Satellite_Communications/screenshots/polararray.png
Binary files differ
diff --git a/Satellite_Communications/screenshots/tita.png b/Satellite_Communications/screenshots/tita.png
new file mode 100755
index 00000000..907983f3
--- /dev/null
+++ b/Satellite_Communications/screenshots/tita.png
Binary files differ