small logo SETI League Technical Manual -- Software

General Radio Astronomy BASIC Program
contributed by Al Aburto (aburto @ cts.com )

The following program performs many of the more common radio astronomy computations. Click here to download the source code as an ASCII file. Many of these computations are also performed in these spreadsheets.

******************************************************
REM: * General Radio Astronomy Program *
REM: * Al Aburto, 07 Jan 1998 *
REM: * See "Radio Astronomy", John Kraus, 2nd edition, *
REM: * Cygnus-Quasar Books, 1986. *
REM: * The parabolic beamwidth calculation came from: *
REM: * "The Satellite TV Handbook", Anthony T. Easton, *
REM: * Howard W. Sams & Co., Inc, 1983 *
REM: * *
REM: * RHO == star density in stars per cubic LY *
REM: * XSL == Speed of Light (m/s) *
REM: * XML == Meters per Light_Year *
REM: * XMA == Meters per Astronomical Unit *
REM: ******************************************************
DEFDBL A-H, O-Z
DEFLNG I-N
 
10 XSL = 299793000#
XML = 9460530000000000#
XMA = 149600000000#
XBC = 1.38054D-23
XJy = 1D-26
XPC = 3.261633#
XKs = 1#
XLC = 10# / LOG(10#)
secperdeg = 24# * 60# * 60# / 360#
pi = 4# * ATN(1#)
ctr = pi / 180#
Re = 6378140#
 
15 CLS
PRINT
PRINT "The program calulates the following:"
PRINT
PRINT "Parabolic Antenna Beamwidths: 1"
PRINT "EIRP for parabolic antenna: 2"
PRINT "EIRP detectable at a given range: 3"
PRINT "Detection range given the EIRP: 4"
PRINT "Number of Stars in Antenna Beam: 5"
PRINT "Peak detectable flux and density: 6"
PRINT "Earth rotational doppler rate (Hz/sec) 7"
PRINT "Quit: 8"
 
INPUT "Enter choice: ", ic
ic = INT(ic)
IF ic < 1 OR ic > 8 THEN 15
IF ic = 1 THEN 20
IF ic = 2 THEN 250
IF ic = 3 THEN 50
IF ic = 4 THEN 100
IF ic = 5 THEN 150
IF ic = 6 THEN 200
IF ic = 7 THEN 300
GOTO 1000
 
REM: ********************************
REM: * Parabolic Antenna Beamwidths *
REM: ********************************
20 CLS
PRINT
PRINT "Parabolic Antenna Beamwidths"
PRINT
 
INPUT "Frequency (GHz) = ", fGHz
INPUT "Antenna Efficiency = ", effr
INPUT "Beam declination (deg) = ", dec
25 INPUT "Antenna Diameter (ft) = ", dr
 
drm = dr * .3048#
 
Wl = .299793# / fGHz
 
Beamwidth = 52.3 * Wl / (SQR(effr) * drm)

X = 90# - Beamwidth / 2#
 
PRINT
PRINT "Beamwidth (deg) ="; Beamwidth
IF (ABS(dec) < X) THEN
stm = secperdeg * Beamwidth / COS(ctr * dec)
PRINT "Time a star stays in"
PRINT " antenna beam (sec) ="; stm
ELSE
stm = 0#
PRINT "Time a star stays in"
PRINT " antenna beam (sec) = (a very long time!)"
END IF
PRINT

INPUT "Change Antenna Diameter (y,n) ", A$
IF A$ = "y" OR A$ = "Y" THEN 25
INPUT "Quit (y,n) ", A$
IF A$ = "n" OR A$ = "N" THEN 20
GOTO 1000
 
REM: *********************************************
REM: * EIRP detectable at a specified range (LY) *
REM: *********************************************
50 CLS
PRINT
PRINT "EIRP detectable at a specified range (LY)."
PRINT

INPUT "Antenna Diameter (ft) = ", dr
INPUT "Antenna Efficiency = ", effr
INPUT "System Temperature (K) = ", Tsys
INPUT "Frequency (GHz) = ", fGHz
INPUT "Bandwidth (Hz) = ", Br
INPUT "Integration Time (sec) = ", Tr
INPUT "Signal-to-Noise Ratio = ", snr
60 INPUT "Range (LY) = ", RL

IF (Tr < 0#) THEN Tr = 1# / Br

IF (RL < 0#) THEN RL = XPC
 
drm = dr * .3048#
 
Aer = effr * pi * drm * drm / 4#

twp = Br * Tr
IF twp < 1# THEN twp = 1#
twc = SQR(twp)

RM = RL * XML

EIRP = (RM * RM * 4# * pi * snr * Br * XBC * Tsys) / (Aer * twc)
EGWatt = EIRP / 1000000000#
 
PRINT
PRINT "EIRP (GW) ="; EGWatt
PRINT
 
INPUT "Change Range (y,n) ", A$
IF A$ = "y" OR A$ = "Y" THEN 80
PRINT
GOTO 60
 
80 INPUT "Quit (y,n) ", A$
IF A$ = "Y" OR A$ = "y" THEN 1000
GOTO 50
 
REM: ***************************************************
REM: * Detection range (LY) given the EIRP (Gigawatts) *
REM: ***************************************************
100 CLS
PRINT
PRINT "Detection range (LY) given the EIRP (Gigawatts)."
PRINT

INPUT "Antenna Diameter (ft) = ", dr
INPUT "Antenna Efficiency = ", effr
INPUT "System Temperature (K) = ", Tsys
INPUT "Frequency (GHz) = ", fGHz
INPUT "Bandwidth (Hz) = ", Br
INPUT "Integration Time (sec) = ", Tr
INPUT "Signal-to-Noise Ratio = ", snr
110 INPUT "EIRP (Gigawatts) = ", EGWatt

IF (Tr < 0#) THEN Tr = 1# / Br

drm = dr * .3048#
 
Aer = effr * pi * drm * drm / 4#

twp = Br * Tr
IF twp < 1# THEN twp = 1#
twc = SQR(twp)

EIRP = 1000000000# * EGWatt
X = EIRP * Aer * twc
Y = 4# * pi * snr * Br * XBC * Tsys
RM = SQR(X / Y)

RL = RM / XML

RA = RM / XMA
 
PRINT
IF (RL > .01#) THEN
PRINT "Detection Range (LY) ="; RL
ELSE
PRINT "Detection Range (AU) ="; RA
END IF
PRINT

INPUT "Change EIRP (y,n) ", A$
IF A$ = "n" OR A$ = "N" THEN 120
PRINT
GOTO 110
 
120 INPUT "Quit (y,n) ", A$
IF A$ = "n" OR A$ = "N" THEN 100
GOTO 1000

REM: ***********************************************
REM: * Number of stars in a radio telescopes beam. *
REM: ***********************************************
150 CLS
PRINT
PRINT "Number of stars in a radio telescopes beam."
PRINT
 
INPUT "Antenna Diameter (ft) = ", dr
INPUT "Antenna Efficiency = ", effr
INPUT "Frequency (GHz) = ", fGHz
160 INPUT "Search Distance (LY) = ", dist
PRINT
 
RHO = .01#

IF (dist < 0#) THEN dist = XPC
 
drm = dr * .3048#

Aer = effr * pi * drm * drm / 4#
 
TStars = RHO * 4# * pi * dist * dist * dist / 3#
 
Wl = .299793# / fGHz
 
Dir = 4# * pi * Aer / (Wl * Wl)
 
BStars = TStars / Dir
 
PRINT
PRINT "Antenna Diameter (ft) = ", dr
PRINT "Frequency (GHz) = ", fGHz
PRINT "Search Distance (LY) = ", dist
PRINT "Number of Stars = ", TStars
PRINT "Stars in Antenna Beam = ", BStars
PRINT
 
INPUT "Change Search Distance (y,n) "; A$
IF A$ = "n" OR A$ = "N" THEN 170
PRINT
GOTO 160
 
170 INPUT "Quit (y,n) ", A$
IF A$ = "y" OR A$ = "Y" THEN 1000
GOTO 150
 
REM: ***************************
REM: * Detectable flux (W/m^2) *
REM: ***************************
200 CLS
PRINT
PRINT "Detectable flux (W/m^2)."
PRINT
 
INPUT "Antenna Diameter (ft) = ", dr
206 INPUT "Antenna Efficiency = ", effr
208 INPUT "System Temperature (K) = ", Tsys
210 INPUT "Bandwidth (Hz) = ", Br
212 INPUT "Integration Time (sec) = ", Tr
214 INPUT "snr (in the band Br) = ", snr
 
220 drm = dr * .3048#

Aer = pi * drm * drm / 4#

REM: *******************************************
REM: * This calculates the time-bandwidth (TW) *
REM: * product (twp). The program does not *
REM: * allow a TW product (twp) less than one. *
REM: * If twp is < 1 the program will reset *
REM: * twp to 1 which in effect respecifies *
REM: * Tr to 1/Br. *
REM: *******************************************
twp = Br * Tr
IF twp < 1# THEN twp = 1#
twc = SQR(twp)
 
St = snr * (XBC * Tsys) / (effr * Aer * twc)
 
StJy = St / XJy
 
Ft = St * Br
 
PRINT
PRINT "Flux density (Jy) ="; StJy
PRINT "Flux (W/m^2) ="; Ft
PRINT
 
INPUT "Change Integration Time (y,n) ", A$
IF A$ = "n" OR A$ = "N" THEN 240
PRINT
GOTO 212
 
240 INPUT "Quit (y,n) ", A$
IF A$ = "y" OR A$ = "Y" THEN 1000
GOTO 200

 
REM: *********************************************
REM: * Effective Isotropic Radiated Power (EIRP) *
REM: *********************************************
250 CLS
PRINT
PRINT "Effective Isotropic Radiated Power."
PRINT
 
INPUT "Frequency (GHz) = ", fGHz
INPUT "Isotropic power (Watts) = ", pt
INPUT "Antenna Efficiency = ", efft
260 INPUT "Antenna Diameter (ft) = ", dt
 
dtm = dt * .3048#

Aet = efft * pi * dtm * dtm / 4#

Wl = .299793# / fGHz
 
dirt = 4# * pi * Aet / (Wl * Wl)
 
EIRP = pt * dirt
 
EGWatts = EIRP / 1000000000#
 
gt = XLC * LOG(dirt)
 
PRINT
PRINT "Gain (dB) re isotropic = "; gt
PRINT "EIRP (Gigawatts) = "; EGWatts
PRINT
 
INPUT "Change antenna diameter (y,n) ", A$
IF A$ = "n" OR A$ = "N" THEN 290
PRINT
GOTO 260
 
290 INPUT "Quit (y,n) ", A$
IF A$ = "y" OR A$ = "Y" THEN 1000
GOTO 250


REM: *******************************************
REM: * Earths rotational doppler rate (Hz/sec) *
REM: *******************************************
300 CLS
PRINT
PRINT "Earths rotational doppler rate (Hz/sec)."
PRINT
 
omega = 2# * pi / 86164#
 
INPUT "Antenna latitude (deg) = ", xlat
INPUT "Source Declination (deg) = ", dec
310 INPUT "Frequency (GHz) = ", fGHz

fHz = 1000000000# * fGHz

X = omega * omega * Re / XSL

dfdt = -fHz * X * COS(ctr * dec) * COS(ctr * xlat)
 
PRINT
PRINT "Earths doppler rate (Hz/sec) = "; dfdt
PRINT

INPUT "Change frequency (y,n) ", A$
IF A$ = "n" OR A$ = "N" THEN 340
PRINT
GOTO 310
 
340 INPUT "Quit (y,n) ", A$
IF A$ = "y" OR A$ = "Y" THEN 1000
GOTO 300
 
1000 END


Click to email the Webmaster
email
the
Webmaster
| Home | General | Memb Svcs | Publications | Press | Technical | Internet | Index |
entire website copyright © The SETI League, Inc.
this page last updated 23 November 2002
Click for top of page
Top of Page