Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
29 views57 pages

Report One

Technical Content

Uploaded by

schultz
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
0% found this document useful (0 votes)
29 views57 pages

Report One

Technical Content

Uploaded by

schultz
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
You are on page 1/ 57
NPS55-8! NAVAL POSTGRADUATE SCHOOL Monterey, California A SATELLITE SIMULATION PROGRAM REX H. SHUDDE SEPTEMBER 1989 Approved for Public Release; Distribution Unlimited Prepared for: Naval War College Wargaming Department Newport, RI 02841-5010 NAVAL POSTGRADUATE SCHOOL Monterey, California Rear Admiral Ralph W. West, Jr. Superintendent Harrison Shull Provost, This work was supported by the Naval War College and was funded by the Naval Post- graduate School. Reproduction of all or part of this report is authorized. This report was prepared by: Reviewed by: Ze ? eles PETLR*URDUE, Chairman Department of Operations Research REX'H. SHUDDE, Associate Professor Department of Operations Research Released by: wae KNEALE T. MAR! ‘Acting Dean of Informatin and Policy SSSFCAL OW AEE REPORT DOCUMENTATION PAGE Ta REPORT SECO CaS Ca OW To RESTATE MARRNGS Unclassified Ta SECURITY CASE CATION Ac THORTY T_DSTREUTON AVALABUTY OF RESORT Approved for public release; distribution is unlimited. Te SECAEEFICATION SOWNGHASNG SCREOUE TT PERFORVING ORGANIZATION REPORT NUMBERS] 3 WONTORNG ORGANTATION REFORT NOMBERGT NPS55-89-10 Ta NAME OF PERFORMING ONGANTATION Naval Postgraduate School [se OFFCE SVMBOT (if appicable Code 55 ADDRESS “Cy, State, ana ZipCode) Te ADORESS (ony, State, and ZIP Code) Monterey, CA 93943-5000 Newport, RI 02841-5010 Ta NAME OF WONTORNG ORGANEATION Naval War College, Wargaming Department 3 PROCUREMENT INSTRUWENT DENTIFICATION NUVBER O&MN, Direct Funding Ge ADDRESS ony, Stare and 2 Code) PROGRAM ELEMENT NO. PRolECT Xo frome ONT Monterey, CA 93943 TTTTTE treads Secunty Casaeanony A SATELLITE SIMULATION PROGRAM PERSONALAUTVORS) po chugge TRE AEST Te Coven fa Dave OF RENOAT (Yeas Mom Bon) 3 ‘fechnicat Report ai a Tosa cooEs 3 SUBIECT TERMS (Continue On reverse Tf hecesTany and Wentihy by Bleck umber) Satellite, Satellite Simulation, Satellite Vulnerability, Satellite Tracking, Satellite Orbit, Satellite Culmination, ABSTRACT (Continue on reverse Th nevesiary and identify By Block number This report presents a satellite simulation algorithm written for the IBM PC and Clones in Microsoft QuickBASIC 4.5. The program can either generate an ephemeris of satellite ground-track position and location with respect to a fixed ground station, or determine the position and time the satellite is above the horizon of a specified ground station. Provision is made for the program to handle multiple satellites and multiple ground stations. Input is either by way of the computer keyboard or by separate files for satellites and ground stations. Output is written both on the screen and to an ASCII output file which can be accessed by a data based management program. 2_OsTRAUTION AVAUABIITY OF ABSTRACT Guaciassineounumreo Ol same as 27 Conic users Tia_ NAME Or REPONTELE NOWDUAL Rex H. Shudde DD FORM 1473, sa van TEAP? Caton may be vieG Univ eTTaUHTeS Bt agsTaACT SecuMTY CIA UNCLASSIFIED UNCLASSIFIED A SATELLITE SIMULATION PROGRAM by Rex H. Shudde NAVAL POSTGRADUATE SCHOOL Monterey, California September 1989 DISCLAIMER The reader is cautioned that the computer program presented in this report may not have been exercised for all cases of interest. While every effort has been made to ensure that the program is free from computational and logic errors, it cannot be considered validated. Any application of this program without additional verification is at the risk of the user. ABSTRACT This report presents a satellite simulation algorithm written for the IBM PC and clones. in Microsoft QuickBAsIC 4.5. The program can either generate an ephemeris of satellite ground-track position and location with respect to a fixed ground station, or determine the position and time the satellite is above the horizon of a specified ground station. Provision is made for the program to handle multiple satellites and multiple ground stations. Input is either by way of the computer keyboard or by separate files for satellites and ground stations. Output is written both on the screen and to an ASCII output file which ean be accessed by a data based management program. CONTENTS I. INTRODUCTION oe: B06 Il. OPERATING INSTRUCTIONS A. Overview B.Input 2... | nnn C. Output ee III. SOURCES IV. DISCUSSION APPENDICIES A. The Simplfied Kinematies [gorithm Rise and Set E. The High Accuracy Kinematics Routine REFERENCES DISTRIBUTION 10 a 13 19 21 43 49 Intentionally blank ii I. INTRODUCTION This report presents a satellite simulation algorithm written for the IBM PC and clones in Microsoft QuickBASIC 4.5, The program can either generate an ephemeris of satellite ground-track position and location with respect to a fixed ground station, or determine the position and time the satellite is above the horizon of a specified ground station. Provision is made for the program to handle multiple satellites and multiple ground stations. Input is either by way of the computer keyboard or by separate files for satellites and ground stations. Output is written both on the screen and to an ASCII output file which can be accessed by a data based management program. ‘Two versions of the satellite kinematics subroutine pos update are presented. These algorithms were provided by NAVSPASUR [Ref. 1]. The first is a very accurate algorithm based upon a paper by Brouwer (Ref. 2] and is contained in NAVSPASUR’s FORTRAN pro- gram called SHOWALL. A listing of the BASIC version of this algorithm is presented in Appendix E. The second algorithm is a much simplified approximation to the Brouwer ix A, and the BASIC model. Equations for the simplified model are contained in Appen mplemention is embedded in the listing of the full simulation rogram in Appendix D. The next sections contain program operating instructions, structure of the input/ output files, and suggestions for future improvements. The computation of the times of culmination, rise and set are in Appendix B, and the computation of satellite heading is in familiar with the nomenclature of satellite orbital elements should Appendix C. Readers consult any standard work such as Escobal (Ref. 3, Ch. 3] II. OPERATING ID ‘STRUCTIONS A. Overview. The source code is named satsta.sAs and the executable code is named sitsth.exe, To run, enter SATSTA at the DOS prompt and press the W key. The first menu (Fig. 1) requests a data input mode. Pressing 1 or 2 will require the data for one satellite and one ground station to be input from the keyboard. Pressing 3 or 4 assumes that two data files are accessible: either ELENENTS.DAT oF ELENENTS.wSS containing the orbital elements for one or more satellites, and station.0aT containing the location of one or more ground stations—the structure of these files is discussed in the next section No matter which of these four options is chosen, a simulation starting time, ending time and time-step increment will be required input from the keyboard in the third menu, The second menu (Fig. 2) requests a run mode. Option 1 creates an ephemeris of satellite geographic position and satellite position with respect to the ground station for -omputes the satellite equally spaced times for the entire simulation duration, Option 2 1 ion only for those geographic position and satellite position with respect to the ground sta times during the simulation duration at which the satellite is above the horizon of the ground station. The third menu (Fig. 3) requests the simulation-times, consisting of a starting time, an ending time, and a time-step increment (At). The fourth and fifth menus (Figs. 4 and 5, respectively) appear only if the first menu (data input mode) options 1 or 2 were chosen. Menu four requests the satellite epoch and elements, and menu five requests the station coordinates, No matter which options are chosen, output is directed to the screen and is appended to file ovrput.pat. If the file does not exist, it is created. This ASCII file is structured so that it can be used as input to @ data base management program, if desired. The structure of this file is discussed in a later section. B. Input. Menu 1 requests the selection of a data input mode, Depending upon the source of satellite elements, there are two ways in which these data can be input. The first is using standard “epoch of date” elements in which the time of perigee passage is the epoch. The second is the NAVSPASUR “One-Line Charlie” elements in which the longitude (or right ascension) of the ascending node has been referenced to 0000 hours, 1 January 1985. The “One-Line Charlie” option has been added for those users who may obtain satellite elements from NAVSPASUR. An example of “epoch of date” input is shown in Fig. 3. Select data input mode 1, 2, 3 or 4: Keyboard input for satellite & ground station 1. Epoch of dat. 2. NAVSPASUR Reference Date Data file input for satellite # ground station 3. Epoch of date 4) WAVSPASUR One-Line Charlie Figure 1. Menu 1—Select data input mode. If data file input Option 3 is chosen from Menu 1, two ASCH data files, ELEMENTS DAT and sTaTION.D4T, must have been previously created. The eLexents.p4r file must contain a single line of for each satellite of interest. Each line must contain 10 entries, each enclosed in double quotations and separated by a blank space (Fig. 6). The entries are: (1) a satellite identification consisting of at most five alphanumeric characters; (2) the epoch date (date of perigee passage) in the form yyyy.mndd, where yyy is the year, mm is the month, and ad is the day; (3) the epoch time (time of perigee passage) in the form bh.mnss, where hh 5) the is the hour, mm is the minutes, and ss is the seconds; (4) the orbital eccentricit 2 longitude (or right ascension) of the ascending node in degrees; (6) the orbital inclination in degrees; (7) the argument of perigee in degrees; (8) the mean anomaly in degrees (9) the mean motion in revolutions per day; and (10) the orbital decay in revolutions per day-squared. If data file input Option 4 is chosen from Menu 1, two ASCII data files, ELEMewTs.xss and statton.par, must have been previously created. The eLenzwrs.xss file must contain a single line of for each satellite of interest in the NAVSPASUR format. Each line must contain 10 entries starting in column 1 and ending in column 65 (Fig. 7). The entries are: (1) satellite identification consisting of at most five alphanumeric characters (columns 1-5): (2) the mean anomaly in revolutions (columns 6-13); (3) the mean motion in radians per Herg! (columns 14-21); (4) the orbital decay in radians per Herg-squared (columns 22- 27); (3) the orbital eecentricity (columns 28-35); (6) the argument of perigee in revolutions (columns 36-43); (7) the longitude (or right ascension) of the ascending node in revolutions (columns 44-51); (8) the orbital inclination in revolutions (columns 52-59); and (9) the epoch date (date of perigee passage) in the form yynmdd, where yyyy is the year, nm is the month, and dd is the day (columns 60-65). A decimal point must be present in columns 6, 28, 36, 44 and 5 Select run mode t or 2 1. Create an ephemeris 2. Find times gatellite is above the horizon. Figure 2. Menu 2—Select run mode. The statroy.v4r file must contain a single line of for each ground station or geographical location of interest. Each line must contain 5 entries, each enclosed in double quotations and separated by a blank space (Fig. 8). The entries are: (1) a station identification consisting of at most three alphanumeric characters; (2) the station latitude in the form 44.nnss (minus if south), where dd is degrees, mn is minutes, and ss is seconds; (3) the sta- tion longitude in the form ddd.mnss (minus if west); (4) the station altitude in feet (minus if below sea level); and (5) the name of the station or station location (alphanumeric) If a data file input option is chosen, then SATSTA will open the two files described above and compute either an ephemeris or the times that each satellite is above the horizon (Option 1 or 2 of the second menu) for each ground station. Otherwise, keyboard input for one satellite and one ground station will be requested from the fourth and fifth menues, respectively. 1 The Herg—a unit of time named after the astronomer Paul Herget—is defined as the period, divided by 2x, of a fictitious satellite at zero altitude over a smooth spherical earth with no atmosphere 3 Simulation-Time Data: Starting date (yyyy.mndd) 7 1983.0201 Starting time (hk.muss) 7 00.00 Ending date (yyy amdd) 7: 1983.0202 Ending time (hk mass) 7 00.00 Time increment (minutes) 7 01 Pross any key to continue Figure 3. Menu 3—Select simulation times. Five pieces of information regarding the simulation are requested from the third menu (Fig. 3): (1) the simulation starting date in the form yyyy .mmdd, (2) the simulation starting time in the form hh.mmss; (3) the simulation ending date in the form yyy nda; (4) the simulation ending time in the form hh.mmss; and (5) the simulation time-step increment in minutes. The screen will display sample data for each entry in the appropriate format. If any ample entry is to be changed, it should be completely overwritten in order for it ing to be read in properly. When each entry is correct, enter it into the computer by pre: the w key. If the keyboard ntry option was chosen from the first memu, then two more menues will appear, otherwise the simulation will commence with input being obtained from the two data files. Epoch date (yyyy-mndd) 7 1983.0201, Epoch time (hh.amss) 7 00.00 elements of epoch: 10 Mazber Psat ey 7 0.000ss4s nding node (deg) 7 272.43497 Inclination (deg) 2 65.06057 2 296.4470 7 258, 10682 7 18.44196 Decay (rev/day"2 70 Prose any key to continue Figure 4. Menu 4—Input satellite data, Menu 4 (Fig. 4) requires ten separate entries: (1) the epoch date (date of perigee passage) in the form yyyy-mndd, where yyyy is the year, mm is the month, and dd is the day; (2) the epoch time (time of perigee passage) in the form hh.anss, where hh is the hour, mm is the minutes, and ss is the seconds; (3) a satellite identification consisting of at most five alphanumeric characters; (4) the orbital eccentricity; (5) the longitude (or right ascension) of the ascending node in degrees; (6) the orbital inclination in degrees; (7) the argument of perigee in degrees; (8) the mean anomaly in degrees; (9) the mean motion in 4 revolutions per day; and (10) the orbital decay in revolutions per day-squared. The screen will display sample data for each entry in the appropriate format. Again, if any sample entry is to be changed, it should be completely overwritten in order for it to be read in properly. When each entry is correct, enter it into the computer by pressing the 4 key. Station Coordinates: Station Identification Number 2 001 Station Location or Name 7 Daisy, Tenn Station latitude (dd.mmss, South minus) 7 35.12 Station longitude (ddd.mmea, Vest minus) ? [email protected] Station altitude (feet) 7 500.0, Pr any key to continue. Figure 5. Menu 5—Input ground station data, Menu 5 (Fig, 5) requires five separate entries: (1) a station identification consisting of at most three alphanumeric characters; (2) a station location or name; (3) the station lati tude in the form dd.mnss (minus if south); (4) the station longitude in the form ddd.mnss nus if west); and (5) the station altitude in feet (minus if below sea level), C. Output. Output is written to the screen and is appended to the data file ovrput.pat if it exists, otherwise file ourput.par is created. A sample from the output.vat file is shown in Fig. 9—the structure of this file is discussed later. 0. The spogee/perigee output is approximately valid only for the frst orbit. In particular Sample output from the “create an ephemeris” option screen is shown in Fig. the longitude is not corrected for the earth’s rotation during the current orbit. Also, the ascending node and argument of perigee are not corrected for their rates of change during ight of the current orbit, It should be further noted that for nearly circular orbits, the the satellite will probably get lower than the perigee value and higher than the apogee value at locations other than the perigee and apogee positions—this is an effect of the earth's oblateness The main body of the ephemeris output consists of date, time, satellite latitude, longitude and height, followed by the elevation angle, azimuth, and range (in kilometers) of the satellite from the station. The satellite “look angle” is the angle between the satellite “ground-zero” point (usually called the satellite “sub-point”) and the station. The last column of output is the satellite heading. A sample of the output from the “times satellite is above the horizon” option screen for a time-step (At) of 1 minute is shown in Fig. 11. First the time of culmination for the current orbit is computed and saved. The culmination time is then incremented and until the satellite is below the horizon. The time of rise and set is decremented by Ai 5 avep jo oly dep woraeae ajduigg “g aunty, yey ‘OTH, ues *haye aly a squomeye ajduing *) aunty Tozocaoer vost sztepst ‘crest9s“¥90ec00" 9s¥ez sso¥e¥6'se9RTSE-zeeze FovoesBezoes “ee91981" 4963028" 3¥s5000 00000 0920906" FEDEOTL" FTTTT IY dup eauemere ajdureg “9 aundig Satellite: 11111 Station: 001 Daisy, Tena Apogee Height. = 442.8 ke. Latitude = -55.1540 Longitude = 100.2039 Poriges Height 450.4 km. Latitude = 85.1539 Longitude = 280.2099 Tue 1 Feb 1983 height Look year mo da bran sec lat long (km) elev azim_ range angle head 1983 2 1 0 0 0.0 -12.26 327.86 434.0 -31.60 123.20 7437 52.90 157.82 1983 2 1 010 010 -45.84 347.68 441.5 -50.59 136.29 10382 36.56 145.02 1983 2 1 0 20 010 -65119 48.39 446.4 -69.07 351.85 12354 19.68 88.46 1983 2 1 0 30 0.0 44.71 106.99 439.1 -83.25 221.39 12089 6.45 34.07 1983 2 1 0 40 0.0 -10.95 126.85 430.7 -70.51 302.87 12481 18.11 22.04 1983 2 < 050 010 24.08 141.07 435.9 -51.76 316.67 10574 35.26 24.38 4983 2 1 f 0 0.0 55.55 168.97 449.2 -a2106 224.49 7561 52.31 46.47 Figure 10. Output from ephemeris option. Epoch of date. Satellite: 11:1 Station: 001 Daisy, Tenn height Look year mo da hr nn sec lat long (km) elev azim_ range angle head 1989 2 1 113 19.4 $4.37 263.10 450.1 0.00 340.48 2436 69.23 195.43, 3983 2 1 1134211 $3135 268.76 449.7 1.39 341.68 2285 69.19 136.92 3983 2 1 1 14 42.1 $0.53 268.75 448.7 5.55 345.74 1892 68.57 140.46 3983 2 1 135 42.1 47.58 272.27 447.6 10.78 381.87 1514 66.79 143.50 3983 2 1 136 42.1 46.51 275.37 446.4 17.70 2115 1167 63.08 146.09 3983 2 1 147 42:1 41.35 278.14 445.1 26148 21.39 92 56.95 148.32 1983 2 1 $18 421 38.22 280.62 443.8 32.24 55.33 773 52.38 150.23 1953 2 1 419 42/1 34.83 262.88 442.6 27/03 90.21 875 56.40 151.86 1983 2 1 1 2042:1 31.49 284.94 44113 18/10 110.45 1142 62.69 153.26 1983 2 1: 214211 28111 286.84 440.1 10.97 121.17 1484 66.60 154.46 3983 2 1 1 22.42.1 24/69 288.61 438.9 5.61 127.48 i862 68.51 165.46. 3983 2 1 1 23 42:1 21.25 290.27 437.9 1.36 131.58 2255 69.20 156.31 4983 2 1 124 318 19.99 290.85 437.5 -0.00 132.74 2400 69.25 166.58 Figure 1, Output from “times above horizon" option. At = 1 minute. Epoch of date. iterated until the time at which the satellite is on the horizon. All of these times and positions are then output to the screen. Note that the information printed out in this option, with the exception of the apogee/perigee positions, is identical to that printed out in the “ephemeris” option. By making At large, say 10 minutes, in the “times above horizon” option, then only the times of satellite rise, culmination, and set are computed and output (see Fig, 12) Each line in the ovrput.par file consists of the station identifier and the satellite iden- tifler followed by the same data, and in the same order, as that printed to the screen. This can be seen by comparing the first six lines of Fig. 12 with the same lines in Fig. 9. 7 Satellite: 11111 Station: 001 Daisy, Tenn. height Look year moda hr mn sec lat long (ka) elev aim range angle head 1983 2 1 113 19.4 54.37 263.10 450.1 0.00 340.48 2436 69.23 135.43, 1083 2 1 118 42:1 38.12 280.62 443.8 32.24 55.33 773 52.35 150.23 1983 2 1 124 3.8 19.99 290.85 437.5 -0.00 132.74 2400 69.25 186.58 1983 2 1 249 40.9 45.38 250.95 446.7 0.00 306.66 2428 69.23 145.41 1983 2 1 254 12.9 30.63 261.84 441.0 11.96 261-45 1429 66.15 153.58, 1983 2 1 258 44.7 15.05 269.44 436.2 -0.00 195.12 2394 69.26 187.45 1983 2 4 4447 13.6 16.76 285.33 433.6 0.00 150.29 2387 69.32 22.83 1983 2 1 14 50 58.0 29.64 291.62 437.9 6.44 106.44 1792 68.35 26.06. 1983 2 4 14 54 43.3 42.02 300.04 443.2 -0.00 63.10 2419 69.28 32.12 1983 2 1 16 20 48.3. 17.88 262.22 433.9 0.00 216.51 2389 69.32 23.02 1983 2 1 16 26 16.7 36.50 272.26 440.8 55.22 303.76 528 32.33 28.96 1983 2 1 16 31 46.6 53.37 289.30 448.2 -0.00 24.72 2431 69.26 43.12, 1989 2 117 59 49.3 37.38 249.28 441.2 0.00 203.77 2414 69.29 29.38 3983 2 118 251.4 47.05 257.60 445.5 3.50 317.85 2066 69.01 36.02 3983 2 118 5 55.6 5.73 269.75 449.2 -0.00 351.87 2433 69.26 46.77 Figure 12, Output fcom “times above horizon” option. At = 10 minutes, Epoch of date Fig. 13 is a sample output obtained using the NAVSPASUR reference time. A compar- ison of Fig. 10 and Fig, 13 shows that the satellite latitude, height, and heading is the same but the longitude differs because of the difference of the earth’s rotation between the two different reference times. The satellite-station relationships differ for the same rea- son. Figures 12 and 14 are completely dissimilar because of the differing satellite-station relationships. Satellite: 1111 Station: 00L Daiey, Tenn. Apoge Height 442.8 km. Latitude = -55.1540 Longitude = 230.8483, 450 55 50.8483, Longitude Tue 1 Feb 1983, height Look year mo da hr mn sec lat long (km) elev azim range angle head 1983 2 1 0 0 0,012.26 98.20 434.0 -77.96 961.78 12919 11.09 187.82 1983 2 1 010 010 45.64 118.32 441.5 -79.40 232.53 12965 10.02 145.02, 1983 2 1 0.20 0.0 65.19 170.03 446.4 -60.98 210.44 11620 27.15 58.46 1983 2 1 0.30 0.0 44.71 237.62 439.1 -41.32 205.69 9023 44.80 34.07 1983 2 1 0 40 0.0 -10.95 257.18 430.7 -20.38 203.40 5458 61.42 22.04 1983 2 1 050 0.0 24.08 271.70 435.9 12.73 194.92 1373 65.77 24.38 1983 2 1 1 0 0.0 88.88 299.61 449.2 6.07 32.07 2062 68.64 46.47 Figure 13. Output from ephemeris option. NAVSPASUR reference time. 8 te: 11111 Station: 001 Daisy, Tena. height Look year mo da bran sec lat long (km) elev azim range angle head 1983 2 1 047 32.1 15.54 267.79 433.2 0.00 199.8 2385 69.32 22.63 3983 2 1 052.59.8 34.24 277.36 439.8 58.70 112/56 509 29.01 27.87 4983 2 1 0 58 28.6 51.41 293.03 447.4 0.00 33.16 2429 69.27 40.56 1983 2 1 2 2457.1 29.86 261.15 438.0 0.00 262.00 2405 69.30 26.14 4983 2 1 229 10.7 43.72 260.91 443.9 8.69 312.74 1641 67.65 33.31 4983 2 1 233 25.7 $5.99 276.83 449.3 -0.00 3.07 2433 69.26 47.22 1983 2 1 8 58 59.6 56.01 272.80 450.7 0.00 356.78 2437 69.23 132.74 1983 2 1 9 3 16.0 43.68 288.80 446.0 8.83 47.32 1637 67.55 146.72 4983 2 1 9 731.7 29.71 298.62 440.7 -0.00 98.40 2412 69.26 153.92 1983 2 1 1033 57.2 51.41 449.0 0.00 326.74 2433 69.23 139.48 4983 2 1 10 39 26.8 34.21 442.3 68.17 247.39 514 29.48 152.14 4983 2 1 10 44 55.7 15.45 436.3 -0100 160.33 2594 69.26 167.39 4983 2 1 12 13 31.5 34.47 260.42 441.3 0.00 266.88 2614 69.26 153.27 256.89 2379 69.24 154.29 2 5 1983 2 112 1427/8 28:30 25220 440. A 2 0:00 247/03 2407 69.25 155.34 4983 2 142 15 23:2 25115 253.65 439, Figure 14, Output from “times above horizon” option. At = 10 minutes. NAVSPASUR reference time. III. SOURCES As mentioned in the introduction, the high resolution and simplified satellite kinematics ed from NAVSPASUR (Ref. 1]. The high resolution model is models were obtain based upon a paper by Brouwer [Ref. 2}. The code for the high resolution model is given Appendix E, while the code for the simplified model is contained in the pos.update subroutine in Appendix D. Both of these routines require a solution of Kepler's equation. A non-iterative state-of-the-art solution of Kepler equation, based upon a paper by Mikkola [Ref. 6] is contained in subroutine kepler listed in Appendix D. £.3, Ch. 10.3. ‘The ground track determination is essentially that given by Escobal (Ri inor improvement described by Shudde (Ref. 7 ‘The method of computation of the times of satellite culmination, rise, and set are given but with a in Appendix B, and the computation of the satellite heading is contained in Appendix C. Additional references are given there. The IAU (1976) System of Astronomical Constants [Ref. 10, pg. $7] is used in SaTSTA as well as the J2000.0 reference frame (Ref. 10, pg. Ll]. Satellite positions computed by NAVSPASUR’s SHOWALL (Ref. 1] use the WGS 72 constants and the 3190.0 reference frame. For this reason, the agreement between SATSTA and SHOWALL is not exact. IV. DISCUSSION Although the position updating in SATSTA is based upon the satellite kinematics model of Brouwer [Ref. 2], other models are currently in use, Most notable is the work of Hoots 9 and Roehrich (Ref. 5]. SATRAK [Ref. 4] is a FORTRAN program implementing their models and is available from the Aerospace Defense Command, Peterson AFB. Unfortunately, the source code is not available for modification, The program presented here can be used as a basis for a more sophisticated model. The input scheme could be improved by using an input editor to catch improper types of entry and to allow corrections or changes to be made to previous entries. File management programs can be used to select satellite elements and station parameters from master files and insert them into “working” files for program input. Various sensor types have not been modelled and no provision has been made for including them in the program. Also, satellite-satellite visablity has not been modelled. If such features are desirable, they could be included by modifying the existing program. 10 APPENDIX A. THE SIMPLIFIED KINEMATICS ALGORITHM. The computation of the perturbed satellite orbit about the earth is performed using a method which is an approximation of that used by NAVSPASUR [Ref. 1]. According to NAVSPASUR, this approximation will yield satellite positons with a random error of about 10-15 nautical miles for a 20 day interval around epoch. ‘The mean elements at epoch, which must be input, are: Eccentricity eo Right ascension of the ascending node % Inclination ip Argument of perigee w» Mean anomaly Mo Mean motion M,, and Decay Mz Using the mean elements, the following auxillary quantities are computed: (A-1) (30s? ig = 1)" Coens] (A-la) a (A-2) oa and (A-3) (A-4) where C = 3/4J2 is related to the oblateness of the earth. NAVSPASUR states the following: For optimal accuracy, ao from Equation A-1 is used in Equation A-la to obtain a final value for ao. This latter ao is then used throughout. Where program size is a major consideration and additional errors of some ten miles in satellite height can be tolerated the user may choose to leave out Equation A-1a and/or Equation A~4 Using the mean values of the elements at epoch Jy and the results of the above calculations, the mean values of the elements for any time ¢ are: M = My + Mi(t To) + Ma(t - To), e, w = wo + o(M — Mo), ul 2 = M% +H i=ip, and — Mo) —we(t - To), a= a9 +a(t-T), where w, is the earth's sidereal rotation rate. 12 APPENDIX B. THE TIME OF CULMINATION, RISE AND SET ALGO- RITHM. In this program the earth is considered to be non-rotating, i.e., the codrdinates of a station are given by latitude and longitude with the longitude unaffected by the earth's rotation. Rotation is accomplished by subtracting the accrued rotation from the right ascension of the ascending node of the satellite. Although this departs from realism, the benefit is that the rectangular codrdinates of the station need to be calculated only once Fig. B-1. Satellite/Station Geometry. Referring to Fig, B-1, culmination of the satellite, S, with respect to a ground station, P, occurs when the elevation angle, h, of the satellite is a maximum, which is equivalent to the minimization of the of the zenith angle, 90° — h, which is also equivalent to the minimization of the angle 7 between z, the unit vector normal to the station location, and 1, the vector from the earth’s center, O, to the satellite. The equation for 7 is cosy = 2% (B-1) where z is given by cos $ cos cos dsin\ | , (B-2) sing and ¢ and J are the station geodetic latitude and longitude, respectively. The satellite position vector r is obtained from (Ref. 3, Equ. (3.57)} r=2.P+y.Q, (B-3) 13 where z,, and y, measure the satellite position in the orbital plane.’ P and Q are the first two columns of the Euler matrix (Ref. 3, Equs. (3.43) and (3.44)|—they transform the in-plane z, and y,, codrdinates to the equatorial rectangular system and are given by P, cosw cos’ — sinw sinI cosi P,| = | coswsinT + sinw cosP cosi (B-4a) P, sinwsini Q: —sinwcosT ~ cosw sin I’ cos i Q=|% dee tag t Ett eae (B-7a) and @r dz, det ~ GE? where (Ref. 3, Equ. (3.69)] de, dP GP dy, dy, dQ PQ ‘GE dB * "age + Ge 8+ ae ae tae P +2: (B-7b) =a(cosE—e) and ye =aV1—esinE, with first and second derivatives (B-8a) ee : (B-8b) and aE? (B-8e) The first and second derivatives of Equations (B-4) are dP, a aE Pag Py av TE* Pape aP, eee dQ, Ge = ~%5p @Qy _ 9 at ae aE 4Q: dE (B-9a) 15 and @P, aE? @P, dE? ~ @P, dE ~% £0. _ ay? er (B-9b) det ~~ 9 (ae) ~ Wag BQy _ ar\? er dgr = ~@y (E +Q:tp and #Q, dE: ~° Also required is [Ref. 3, Equ. (3.67)] r = a(1-ecosE) (B-10a) and it’s derivatives 4 = aesinE, and & (B-10b) Sp = ae cos E. Finally, using Kepler's equation (Ref. 3, Equ. (3.79)], 0 Eacsnk +0, (B11) where n is the rate of orbital motion and T is the time of last perifocal passage, the equation for P can be written as T=2-« (22 +7-1) (B-12a) Then, < (B-12b) “ OT _ xuelesinE) (B-12c) aE 7 ‘To solve Equation (B-5), an initial estimate of E is made and the right-hand side of Equation (B-13) is evaluated. The result, the left-hand side of Equation (B-13), is an improved estimate of E, _ FE) B= E- Toy (B-13) 16 This iteration is continued until |F(B)/F'(E)| is less than some prescribed amount. The value of E obtained will either maximize or minimize n. The desired value of 1 will be the one for which cosy > 0. Once the eccentric anomaly for culmination, E., is found, the time of culmination is determined directly from Equation (B-11). Perturbing E. by plus or minus about 10°, it is possible to obtain good starting values for the determination of the satellite set and rise times, respectively. The procedure for finding the rise and set times is very similar to finding the time of culmination. The rise/set equations are developed by Escobal (Ref. 3, Sec. 5.4], but the algorithm presented here is somewhat simplified since, unlike Escobal, the time of culmination is available. In fact, many of the same equations can be used. Again, the eccentric anomaly will be used as the independent variable. Referring to Fig. B-1, satellite rise or set occurs when the elevation angle h is equal to zero, where h can be found from the equation : . = ct pe (B-14) where p=r-R (B-15) In Equation (B-15), R is the station coordinate vector and p is the slant range vect from the station to the satellite. For the spheroid earth (Ref. 3, Equ. (5.54)], Gy cos sind Grsing (B-16) Gy cmon where ¢ and \ are the station geodetic latitude and longitude, respectively. G; and G2 are factors which account for the earth’s oblateness, and are given by OG, = ——* +H and /1 = (2f - f?)sin? ¢ @, = Pe se, /1 -(2f - f2)sin? ¢ (B-17) where a, = earth’s equatorial radius, f =earth’s flattening factor, and H = station elevation above the ellipsoid. 17 Write Equation (B-14) as p-2=psinh. When the satellite is on the horizon, h = 0 and sinh = 0. Since the resulting equation, p-%=0, cannot be solved explicitly for B, set GE) =p: and find E such that G(E) = 0 by the Newton-Raphson method. Using Equation (B-15), write G(E) as G(B) =2-(r-R). (B-18) The Newton-Raphson procedure also requires G'(E), the derivative of G(E) with respect to E. Since the earth is being treated as non-rotating with the sidereal rotation subtracted from the satellite's ascending node, R is independent of E, hence / dr Cb) =u In Equations (B-18) and (B-19), 2, r, dr/dE, and the additional needed derivatives have all been given previously in this section. To solve Equation (B-18), and initial estimate of E is made and the right-hand side of Equation (B-20) is evaluated. The result, the left-hand side of Equation (B-20), is an improved estimate of E, (B-19) Ge) E=E- a (B-20 oe) ) The iteration is continued until |G(£)/G'(E)| is less than some prescribed amount. The corresponding time of rise or set is then obtained from Equation (B~11). 18 APPENDIX C. THE SATELLITE HEADING COMPUTATION. A satellite can be located by a position vector x = zi + 22j + 73k in a rectangular coordinate system with origin at the earth’s center. In matrix form, and with x1, 22 and 5 expressed in spherical coordinates, r cos ¢cos x= | reos¢sin rsing where ¢ is the latitude, ) is the longitude at the point, and r = |x| is the distance of the point from the earth’s center. Let z be the unit vector in the direction of r. Then x [2 cos cos A z= = |x| =| cosdsind | . Pl [as sind It is convenient to define two other unit vectors in the plane tangent to 2. These are local north n and local east e, defined by — sin ¢cos \ . —sind —singsind and e= 2X =] cosd ae * Taol en al | where 7 _ on a mam ap a= Ox The vectors 2, n and e provide the basis for a right-handed orthogonal coordinate system. If a satellite's velocity vector v = vi + v2j + usk is known at position x then it is easily shown [Ref. 8] that n-v=cosa and e-v=sina, where a is the course angle or heading. From these relations, a is found to be @ = qatn(e-v,n-v) where qatn(y, 2) is arctan(y/) corrected to the proper quadrant. Since the position and velocity component’s are in rectangular coordinates, it will be necessary to convert them to spherical coordinates in order to determine the components of n and e. However, the spherical coordinate step can be circumvented as follows: First, cosa = n-v = ~v, singcos A — v sin gsin A + v5 cos ¢. 19 Multiply both sides by cos ¢ to give cos $ cosa = —v; sind cos ¢cos A ~ vz sing cos dsin A + v3 cos? = —sin d(z101 + 2202) + vs cos? p + 2505 sing — zava sind —sin o(2101 + z2v2 + zav3) + v3. cos? d+ 2503 sing —25(z-v) + v3 cos? ¢ + v3 sin? ¢ = 4) -n(2-v). Similarly, sina =e-v = —v, sind + v2 cos A, so that cos ¢sina = v2 cos ¢cos A — v; cos ¢sin A Sam — 290 Then, a = gatn(cos sina, cos ¢ cos a). Since cos > 0 for all ¢ € (~7/2,x/2), the cos ¢ term effectively “cancels out” [Ref. 9] and so the heading is determined by a = gatn(sina,cosa) = gata(2y02 — 2201, v3 — 23(2-v)). This equation is used by NAVSPASUR [Ref. 1] in SHOWALL. In SATSTA, the equivalent form, cots (BBM BE 2), is used. 20 APPENDIX D. THE SATSTA PROGRAM LISTING. *SATSTA W’Satellite Track. 03-03-88 Rev. 09-26-89 @ 0830. DECLARE FUNCTION acon# (x8) DECLARE FUNCTION asing (x8) DECLARE FUNCTION atanzs (y@, x8) DECLARE FUNCTION decimal” (v8) DECLARE FUNCTION dnod# (x8, 38) DECLARE FUNCTION dots (aa(}, b8()) DECEARE FUNCTION gast# (tu®, tné) DECLARE SUB apo.peri.gee (elens(), elemut()) DECLARE SUB culnnate (zva(), wef, t08, ea, coseta®, elemus()) DECLARE SUB euler (peri#, nodes, ‘inclé, paas(), vel&()) DECLARE SUB ground. track (r8, sut.de#, sat.1t8, sat-ht8) DECLARE SUB frmin.sec (time of days, hri, mini, sect, 2X) DECLARE SUB ja.to.date (jé8(), mk, dé, yk, 6, oS, day) DECLARE SUB Julian.day.number (a, d¥, yk, ute, ja80), dje, tj) DECLARE SUB Kepler (at, ec8, oaf) DECLARE SUB outpeté (ki, yrk, nok, dak, time.of day, 108, Inf, nef, elf, _ azé, rag, langles, head#, sta-id8, sat-id8) DECLARE SUB pos.upaate (2k, eleme(), times, sat-z8(), sat -xd8(), lemue(), - #8, ead) DECLARE SUB rise.set (2v8(), ata.Ra() 208, eat, oleme()) DECLARE SUB sat head (re, satex8(), aatixd8(), heads) DECLARE SUB sat sphere.ccord (sat.x8(), F8, ¢}8, tm, sat de#, sat inf, sat.ra) DECLARE SUB sea picocra (Ite, Inf, hea, x8()) DECLARE SUB sta.sat (sta.z8(), sat.x8(), rage, at, ol8, langlet) DECLARE SUB time.update (kL, deltas, tms, jdb, 3d8(), ¢58, time-of days, _ nk, dk, yf, h8, mo$, day$) DECLARE SUB yrmoday (u$) yk, wok, dye) *couoR 7, *SCAEEN 0, 4 DEFDBL AZ OPTION BASE 1 DIM jdepech(2), jdstart(2), jdend(2) DIM elen(9), elemu(9), py(3), q¥(3), j4(2), sat-x(3), eat .xa(3), ata.x(3, 4) a-2(3), eta.R(S), jd-chariie(2) CONST pi = 3.1415926525697938, rad = pi / 1808, twopi = pi + pi CONST $2 = .0010826a168 CONST ani.tt = .30¢88 / 18528 * n.mi/foot CONST ao = 6378.148 jarth?s equatorial radius km.) CONST GE = 398600.58 * geo. grav. const. (kn)"3/(sec)"2 X= 608 = SQR(GE / a6) / a0’ (eru)"(3/2)/ain Horg.min = k const #1 = 1s / 298.2578 » aarth’s flattening factor CONST e-aqgr = (28 - £1) * £1 ° earth's ellipticity equared rotation (radians/minu CONST ve = 1.002737909350795" * twopi / 14408" earth’ CONST sixty = 608 ' Sample input (NORAD Project Spacetrack Rpt. #3, 1980): anajor$ = "1.04050189": ecet = "0.0086731": aincl$ = 72.8435" per:$ = "52.6988": anode$ = "115.9689": manomaly$ = "110.5714" hotion$ = "16.05824518": decay$ = "0" epochdates = "1980. 100 o$ = "23.41241138" startdates = "1980. 100 oS = "234124113 enddates = "1980,1003": endtime$ = "0000" deltar$ = "4" » Sample input of arbitrary higher altitude, higher ecc orbit ece$ = "0.020000"; aincl$ = "6.94868" peri = "'202.277268": anode$ = "S5.552464": manomaly$ = “126.670896" Bat motion$ = "12,0000": decay$ = "4.2810984-3" spockdate$ = "1983.0201": epochtimes = "00.00" startdate$ = "1983.0201": starteimes = "00,00" enddate$ = "983.0208": endtime$ = "00.00" dettars = "45: sta.dat$ = "38.42" sta.lon$ = "85.12": ataalté = "500.0" > Sample input (NAVSPASUR: Sat. 22222 data from SHOWALL, private comm. » Mr. Fred Lipp, July 1988): ct id= "23022" sce = "0.0023064": aincl$ = peris = "202.277268": anodet = "55. manomaly$ = "'126.670896" Rotion$ = "'16.06302": decay$ = "4.2811194-3" $= "00.00" "$= "00.00" spochdatet = "1983.0201": startdates = "19630201": atartei enddates = "1983.0203": endtime$ = "00.00" deitars = "01" sta.id$ = "001": ata.names = “Daisy, 7 ataalts = "500.0" staat = "35.12": eea.long = "96/12": + Samplo input (NAVSPASUR: Sat, 11111 data from SHOWALL, private comm. » i. Fred Lipp, July 1988) sat -id$ = "ian" ace’ = "0.000845": aincl$ = "65.06057" peris = "295.41470": anode$ = "272.43497": manomaly$ = "258. 10682" Rotion$ = "5.44194": decay$ = epochdate$ = ""1963.0201": epochtines startdates = "19830201": etarttines enddates = "1983.0202": andtined deltar$ = "20" ta.idS = "001": ta.names = "Daisy, staclat$ = "38.12": eta.lon$ = "85/12": eta.alté 100.00" 500.0" start: cus PRINT "Select data input mode 1, 2, 3 or 4: PRINT PRINT SPC(5); "Keyboard input for eatellite & ground station" PRINT $PC(10); "1. Epoch of date.” PRINT SPC(10); "2. NAVSPASUR Reference Date. PRINT PRINT SPC(S); “Data file input for satellite & ground station PRINT SPC(10); "3. Epoch of dat PRINT SPC(i0); "4. WAVSPASUR One-Line Charlie datas = WHILE datas < "1" OR data$ > "4" datas = INPUTS(1) END cus PRINT "Select run mode 1 or PRINT PRINT SPC(5); "4. Create an epheneri: PRINT SPC(5); "2. Find times satellite is above the horizon.” cases = WHILE case$ © "2" AND cas cases = INPUTS(3) END) 82" GOSUB input.sim.times SELECT CASE datas case ens ge cus: PRINT "Satellite Data" PRINT PRINT "Epoch date (yyyy.nndd) 7"; epochdates LOCATE 3,29: INPUT v8! IF vb =" THEN ¥8 = spochdates epochdates = v8: CALL yrnoday(v$, yrk, mod, ay) PRINT “Epoch time (hh.mase) 7; epochtimes LOCATE 4, 29: INPUT v$: IF v$ = "™ THEN v8 = epochtines epochtime$ = v8: epochtine = decimal#(v$) CALL julian.day.namber(mok, dy8, yrk, epochtine, jdepoch(), epoch, tjepoch) LOCATE 6, 1: PRINT "Input moan elements of epoch: PRINT "Satellite ID Nusber 2%; ant .ias LOCATE 7, 29: INPUT v$: IF v8 =" THEW vE = wat.ias sat .ids 2 vs PRINT “Eccentricity aces LOCATE 8, 29: INPUT v$: IF vé WEE ecet scef = vd: ece = VALCWS) PRINT “Long. ascending node (deg) 7"; anodes Locate 9, a3: INPUT ves IF WS coe" THEM 48 = anodes srotes "v8: anode = VALG8) = rad PRINT "Inclination (deg) 7"; ainers LOCATE 10, 29: INPUT v$: IF v$ =" THEN v8 = aincl® ainclé = v8: ainc) = VAL(W$) = rad Pi rg-_of perigee (deg) 2; pera LOCATE 11, 29: INPUT v$: IF v$ =" THEW v8 = pers pers = v$: peri = VAL(WS) + rad PRINT "Mean anomaly (deg) Tom LOCATE 12, 29: INPUT v8! IF v$ =" THEN nanonaly$'= v$: manomaly = VAL(vs) * rad onaly$ ‘= manonaly$ PRINT "Mean motion (rev/day) 7"; motions LOCATE 13, 29: INPUT v8: IF v$ =" THEN v§ = motions motion$ ='v@: motion = VAL(v$) » twopi / 14408" convert to radiant/ninute PRINT "Decay (rev/day"2) 7; decays LOCATE 14, 29: INPUT v$: IF vf =" THEN v8 = decay$ convert to radians/minute™?: decay$ = v8: decay = VAL(wS) + twopi / (14408) > 2 LOCATE 16, 1: PRINT "Press any key to continue, FOR a4 = i 10 10: ¢$ = INKEYS: NEXT cf = INPUTS(1) cus LOCATE 1, 1: PRINT "Station Coordinate PRINT PRINT "Station Identification Musber 75 wtacies LOCATE 3, 42: INPUT v8: IF v$ = "™ THEN v$ = sta.idé staids 2 v8 PRINT "Station Location or Name sta.namet LOCATE 4, 42: INPUT v8: IF v$ =“ THEN v8 = ata.nane$ sta.name$ = v$: sta.lat = VAL(v8) * rad PRINT "Station latitude (4d.mnss, South minus) 7"; eta.lat$ LOCATE §, 42: INPUT v$: IF v=" THEN vf = eta.latt sta.lat$'= v8: stalat © VAL(W$) © rad PRINT "Station longitude (ddd.muss, West minus) 7"; sta.lont 23, LOCATE 6, 42: INPUT v$: IF vg = “" THEN v8 = sta.lon$ sta-ton$’= v8: sta.ton = VAL(¥$) © rad PRINT "Station altitude (t LOCATE 7, 42: INPUT v$: IF sta.alt$'= v8: sta.alt = VAL(¥$) ) ? THEN vé. jsta.ales LOCATE 9, 1: PRINT "Prose any key to contin FOR 4% ="1 10 10: c$ = INKEY$: NEXT ef = TNPUTS(1) OPEN “output dat" FOR APPEND AS #3 G0SUB compute CASE "3" OPEN “station.dat” FOR INPUT AS #1 OPEN “output.dat” FOR APPEND AS $3 DO UNTIL EOF(1) INPUT #1, sta-id$, sta.tat$, sta.lon$, sta.alts, sta-nanes staclat = VAL(sta‘lat$) + rad staldon = VAL(sta-lon$) © rad stacalt = VAL(etacales) OPEN “olemonts.dat” FOR INPUT AS #2 Do UNTIL EOF(2) INPUT #2, sat.id$, epochdates, epochtine$, ecc$, anode$, ain: peri8, nanomaly$, notions, decays CALL yrnoday(epochdateS, yrt, mot, dyt) epochtine = decimals(epochtine$) CALL julian.day.number(nok, dyk, yrk, epochtime, jdepoch(), epoch, _ tjepoch) ece = VALCeces) anode = VAL(anode$) * rad ainel = VAL(ainel$) © rad peri = VAL(peri$) + rad anomaly = VAL(ranomaly$) * rad motion = VAL(motion$) * twopi / 14408) convert to radiane/minu! decay = VAL(decay$) * twopi / (14408) * 2? convert to rad/min"2 ja(s) = jastare(s) Ja(2) = Jastare(a) ja = jaCh) + 34) Fime.of day = starttine GOSUB compute ‘Loop CLOSE 2 LOOP case "4" OPEN "station.dat" FOR INPUT AS #1 OPEN “output .dat" FOR APPEND AS #3 Do UNTIL EOF(1) INPUT #1, sta.id8, stalat$, ata.lon$, sta.alt$, sta.nanes sta-lat + VAL(sta‘lat$) + rad jta.lon = VAL(sta.lon$) = rad stalalt = VAL(sta-alts) OPEN “olements.nes" FOR INPUT AS #2 ry DO UNTIL EOF(2) INPUT #2, c$ satid$ = MIDS(c$, 1, 5) Benonaly$ = MIDS(C8, 6,9) Botioné = WIDS(e8, 14,9) decays = MID8(c8, 22,7) $= MIDS(c8, 38, 8) peris = MID8(c4, 38, 9) anodes © AIDS(ed, 44, 9) Bincl$ = MIDS(c8, 52, 9) Spochdates = "19% » HIDS(e$, 60, 2) + "." + MIDB(eS, 62, 4) spocktines = "00.00" CALL yracday(epochdates, yr, mok, dy) epochtine = decimals(epochtines) CALL julian.day.number(not, tjepoch) c = VAL(ace$) anode = VAL(anode$) * twopi ainel = VAL(aine1$) * teopi yk, YF, epochtine, jdepoch(), epoch, _ peri = VAL(peri$) » tyopi anomaly = VAL(wanomaly$) * twopi motion = VAL(motions) * Herg.min ' convert to radians/minute decay = VAL (decays) IF decay > .58 THEN decay = decay - 18 decay = decay * .00001 = Herg.min ~ 2’ convert te rad/min-2 JAG) = jastare(1) 5aC2) = ddseare(2) ja = jah) + 3402) Eine of day = atarttine GOSUB compute Loop. CLOSE 2 Loop END SELECT CLOSE END compu! initialize times tj 2 tjetare > julian ce begin.time = (startd (d.time = Conddate uries from 3200.0 major axis veccentricity (3) ‘time of peritocal pi m4) Hinelination (radians) =(5) Hlongitude of ascending node (radians) 3(8) vargument of perifocus (radians) (7) ’mean notion (revolutions/day) elen(8) ’mean anomaly (radians) olen(9) rdecay constant (radians/minute"2) SELECT CASE di CASE "1", "9 + Sifce the earth is treated as non-rotating, el > ‘the accrued rotation from epoch to 2000.0 elen(S) = elen(S) = 158 * gust(tjepoch, 08) + rad (5) must be corrected for 25 » WAVSPASUR one-Line Charlie correction CALL julian.day.number(1, 1, 1985, 0, jd.charlie(), dummy, tj.charlie) wote = (tjepoch ~ tj charlie) + 365258 - (18 - guet(tj.charlie, #) / 248) _ ‘99726956648 ic * 14408 = we, twopi) elen(5) + wate elem(S) - 158 © gnst(tjepoch, 08) # rad END SELECT CALL sta.p.coord(sta.lat, sta.ton, sta.alt, sta.c()) FOR AM = 1703 sea.2(i2) = sta.x(it, 2) RGN) = stale(it, 1) NEXT CALL pos update(1, elem(), begia.tis CALE pos update(2, elen(); degin.tine, us PRINT "Satellite: "; sat.ia$; PRINT Station: "; eta.ids; j stananes SELECT CASE cas case "1" tm = starteime 'UT in houre CALL apo.perd og O, edema) CALL jd.to.date(jd(), mk, at, yk, he, mo$, days) parr’ PRINT day$; at; mo$; ye CALL outpus4(O, yrk, mob, dat, time.of.day, sat.it, satin, sat ht, 6, az, ing, langle, head, sta.idS, sat-idé) » eime-Loop FOR time = begin.tine TO end.time STEP delta.t ea) CALL pos.upeate(2, elen(), tim nO, satexQ), sat.xa(), vcompute spherical coordinates CALL sat.sphere.coord(sat.x(), r, tj, tm, sat.de, satin, sat.ra) vancentite headin CALL tatcheadés, aat.g(), aat.xd(), head) Poarth ground track CALL ground.track(r, sat.de, sat.lt, aat.ht) ‘compute station-satellite relations CALL eta.sat(sta.x(), sat.x(), rng, az, ol, langle) rng = rng ¢ a6 CALL outputa(t, yk, mk, dk, time.of day, eat.1t, eatin, sat bt, ol, az, mg, _ langle, head, ata.id8, wat id8) vupdate time CALL time.update(o, delta.t.nr, tm, jd, jd(), tj, timeof.day, me, dk, yt, n#, mo$, day$} NEXT time 26 PRINT : PRINT "Press any Key to continu FOR iM = 1.70 10: e$ © INKEYS: WEIT ef = INPUTS(1) case "2" CALL output4(o, yt, mk, db, time.of day, sat it, dangle, head, ‘sta.id$, wat ids) tlm, sate, ol, az, mg, — tas period = teopi / motion ° begin.tine initializ CALL pos -upda ea oa pi CALL culanate(sta.z2(), we, tim END IF time = (ea - elem(2) * SINCea)) / motion + elemi(3) atuhr = (time ~ begin.time) / sixty CALL time.update(O, dt.hr, tm, jd, j4(), tj, time.of.day, me, at, yk, ht, _ mo8, day8) IF time > bogin.time'+ period THEN time = time ~ period CALE tine-update(i, ~period, t he, nof, day$) a, consta, 02 Ja. 340, 4), timeof day, mb, ae, yk, GoTD initialize END IF Fin ik = 1102 CALL por-pdate(2, elem(), time, sat.20), AIL fulenateCota.z(), ver tine, oa, coset dtenin = (en srelea(2) © $1(es5) 7 notion 6 GAIL tape nupdate(s, de.min, em, fd, §€0), tf, thmecof day, ab, abs yt, - Be, nat, days) sxdQ), elem(), r, ea) ‘alemu()) nu(3) = time NEXT tine.cul = time CALL ota.cat(sta.x(), sat.xQ, mg, az, IF 01> 0 AND time 92 begin.time THE CALL pos.updace(2, elem(), time, sat.x(), aat.zd(), elemu(), r, a) eas ta 1338, For it's 1702 langle) CALL rise eet(ata.z(), eta.R(), w dt.min = (ea SIM(ea)) time = time + dt CALL time-update(1, dtmin, tm, jd, ja(), t), time.ofday, mk, dk, yk, be, mo$, days) CALL pos.update(2, elen(), time, sat Next time.rise = time .xQ, sat.xd0, elemu(), r, 0a) cant, CALL CALL 3 sar(staz0, sat.x(, mg, az, 1, langle) coord(eat 20, 4 ide, sat.ln, #at.za) x(e, aatede, aa! eau pet.x0, satrdQ), head) EAL jactocdate(jaQ), Bey ae, ye, 8, no8, day$) GALL Qucpucats, ye, a8, dk, tinecofeday, tateie, sata, aat.he, ol, . az, ang * ae, langle, head, staciaé, wat a8) timeiner = dmod(time time = ti CALL time.update(1, time-incr, tm, jd, jd(), tj, ti yk, h€, mo$, day$) CALL pos.update(2, elen(), ca t(ata.z0, sat -xC of day, mt, at, _ uO, Fy 0a) CALL im, aat.ra) CALL ground track(r, CALL sat head(r, sat.x(), sat.ad(), head) CALL jd.to.date(jd(), mi, de, y8, Le, mo$, day$) CALL cutpute(t, yk, mk, dk, timesof day, sat.1t, sat.1s az, rig *'ae, langle, head, atasidé, eat.id8) DO WHILE «1 > 0 ‘tine = time + delta.t CALL timevupdate(0, delta.t.hr, tm, jd, jd(), ty, ti yh, M8, mo8, day$) CALL pos -update(2, lent ppat.x(), satxd(), « CALL staceat(sta.s0, satcx0, Fag, az, ol, langle) Fel ¢0 THEN ‘EXIT Da END IF CALL sat sphere.coord(eat.x(), r, tj, tm, sat.de, satin, sat.ra) CALL ground.track(r, sat.de, satlt, ‘sat be) CALL Sat hoad(r, sai.x@), eat adi), head) CALL jd.to.date(jd(), mt, db, yt, h8, 08, days) CALL outputa(t, yk, nt, dk, time-of day, satie, az, rag *'ae, langle, head, st of-day, mk, au), F, 0a) satin, eae.ht, el, — Loo save.time = tine FOR if = 1 702 CALL pow.update(2, elen(), tise, sat-x(), sat.x4(), elemu(), r, 0a) CALL Fise.sot(sta.2(), sta.R(), we, time, on, elemu()) NEXT, en time atnr = G CALL, IF time < end.tis at.min = (ea - elom(2) * SIN(ea)) / motion + elemu(3) - time time = time + de.min CALL time.update(t, dt.min, tm, jd, jd(), tj, timeof.day, mk, dk, yb. nd, mo$, day8} CALL pos-update(2,. le aatxO, sat.xa() CALL Stareat(ota.z0, ng, az, ol, langle: CALL sat.ephore.coord(satz()) 7, tj, tm, oat de, CALE ground. track(z, sae-de, satsie, sat nt) CALE Sat-head(r, eat.x@, satxa), head) CALL Ja.tocdate(jaQ), mB, ak, y2, a8, oS, day$) CALL outpata(s, yh, mk, dk, tine of day, sat-It, satin, sat.he, ol, az, rag *'ao, langle, head, atacidé, eat .id$) PRINT IF # time.cul + period = begin.time) / sixty - tm paate(O, dtbr, tm, jd, jd(), tj, tis mo8, day$) time of day, at, dt, yk, be, _ ‘THEN GOTO again END SELECT RETURN impo cus. PRINT “Simolation-Tis ¢-2im, Data: PRINT PRINT "Starting date (yyyy.nndd) 7 "; startdates 28 LOCATE 3, 29: INPUT v$: IF v$ = "™ THEN v$ © atartdates startdates = v8: CALL yrmoday(v$, yri, mok, 4k) PRINT "Starting time (hanes) LOCATE 4, 29: INPUT v$: IF ve startrines starttine = decimals(v$) CALL julian.day.number(mok, dys, yrk, starttine, jdetarc(), atartdate, _ ‘tjetare) Jaa) = janeare(s) aC) = jaaeare(2) aca) +5802) startti PRINT "Ending date (yyyy.mndd) 7"; anddates LOCATE §, 29: INPUT v8: IF v8 = “" THEN vo = enddates, enddates'= v8: CALL yrmoday(v$, yrk, mot, dy8) PRINT “Ending LOCATE 6, 292 ondtines'= vf. CALL julian.day.nunber(mok, dyk, yrk, endtin jdend(), enddate, tjena) PRINT "Time increment (minutes) 7 ; deleat$ LOCATE 7, 29: INPUT v: IF v$ =" THEN vs = deltaté doltats = v8: delta.t = VAL(v$): dolta.t.br = delta.t / sixty LOCATE 9, t: PRINT "Prass any key to continue.” FOR i% 2°31 70.10: o$ = IWKEYS: NEXT c$ = INPUTS(1) RETURN FUNCTION acos# (x8) 02-10-88. Rev, 02-24-88 ) The arccosine function derived from the ATN function with no singularities ) The angle is returned in the (0,pi) interval Mote that in re) ‘tional comparisons, ~1 ie “true” and 0 is "Zales". CONST pi = 3.1415926595897538, eps = 10-33 TF aBs(xs) co 38 THEN cost = ATN(SQR(I# = x8 + x8) / (x8 - ope * (xB = 08))) ~ pi + (xt < 08) ELSE PRINT PRINT “Error in aco function. ABS(arg) > 1” PRINT as PRINT END TF END FUNCTION SUB apo.peri.gee (elen#(), elenut()) * "Compute location and height of apog bove oblate earth ) MOTE: (1) The output from this routine is approximately valid for the , current orbit only. In particular, the longitude is not corrected : for the earth's rotation during the current orbit, Also, the > ascending node and argument of periges are not corrected for > their rates of change during the current orbit. (2) For nearly circular orbite, the height of the satellite will probably get lover than the periges value and higher than the at locations other than the perigee and apogee ‘this is an effect of the earth's oblatens 29 coust pi = 3.1415926538897938, rad = pi / 1908, twopi = pi + pi » spherical earth values po.deS = asinS(eperi® * sincls) apo.Inf = elemus(S) + atan2#(COS(elent(4)) * speris, COSCelemus(6))) apo.iné = dnods(apo.1as, twopi) IP apo.1n8 > pi THEN apo.1n# = apo.in# ~ twopi * next are approximations should updat + tor 1/2 revolutio: peri.det = -apo.de® peri.In8 = dnod(apo.1n8 + pi, teopi) IF peri.iaé > pi THEN peril = peri.1nt - twopi by peri- & nodal-rates CALL ground.track(apogee®, apo.dc#, apo.it#, apo.bte) CALL ground.track(perigeet, pera-dc#, peri.it#, peri bee) PRINT PRINT “Apogee: PRINT USING "E sa88.8 2%; PRINT USING "k #88. e488"; PRINT USING " #88. 8892" PRINT PRINT "Periges:" PRINT USING "E S888. 8"; "Height PRINT USING “k a88.¢888"; “Latitude PRINT USING "& se8.4888"; “Longitude PRINT jeight ="; apo.hte latitude ="; apo.ltl “Longitude = "; dnod(apo.ins / rad, 3608) IF apo.ht® < 0 THEN PRINT "WARNING: Satellite is suborbital and will impact earth." PRINT "Do you want to continue? Yes or Ho." PRINT WHILE cf © "y" AND ef © e$ = LoaSE$(INPUTS(1)) END IF cS = END IF END SUB FUNCTION asing (x8) * 02-10-88 Rev. 02-26-88 ) The arcsine function derived from the ATW function with no singularities ) The angle ie returned in the (-pi,pi) interval. ‘Mote that in relational comparisons, -1 ia “true” and 0 ie "fale: CONST eps = 10-33 ) <= 18 THEN asing = ATH(x8 / (SQR(18 - x8 * x) - ope © (ABS(x#) = 48))) PRINT “Error in asin function. ABS(arg) > 1" PRINT “arg ="; x8 PRINT END IF END FUNCTION FUNCTION atan2e (y#, x8)’ 02-10-88 Rev. 02-24-08 30 > The two argu > The angle is PNote that in re! wi ie Merue” and 0 is "talae”, tional comparison CONST pi = 3.1415926535097998, ope = 10-33 ntan26 = ATN(y® / (x8 - apa + (x8 = 08))) - pi (xB < 08) © (SOM(y®) _ = Ges 08) END FUNCTION SUB culnnate (2v8(), + Compute eccestric anomaly for the time of culmination of a satellite + 01-30-89. Rev. 02-02-89 @ 1000. | MOTE: This particular form of the culminate function vas eritten from the , development of 30 Jan 89. Tt assumes a non-rotating earth eo that the , station longitude is fixed, Rotation is accomplished by subtracting the , Accumulated rotation from the right ascension of the ascending node of the satellite. This is the method used to compute the ephemeris and is also equivalent to the m fed. by AVSPASUR odetic longitu station geodetic latitudi earth's Fotation (sidereal rate of change) Eime the elements, elenu(), vere last updated capt = T <= tine of latest perifocal passage = eccentric anomaly E eccentricity = soninajor axis (cancels out in all formulas, 60 not included) CONST pi = 3.141s926525897938, rad = pi / 1808, twopi = pi + pi ecet = ot capt nels = elemua(4) node = elemt(5) 8 = elems(6) omut(7) DIM pva(3), pvde(3), pvdda(s), qve(3), qvds(s), qvada(s) rvecda(3), rvecdda(3) a tor, unit normal at the station py Quvector (first two columns of the Euler matrix) + Pree lite position), rvecd = dR/aE, rvecdd = d2R/dE2 ow magnitude of the Revactor, rvd = dr/dE, rvdd = d2r/de2 > gamma = node ~ accrued rotational motion conus = cOS(peri#) sinus = SINCperi8) conis = COSCincl#) sinis = SINGncl#) corr# #4 (corr#) > .0001 cosCeas) econ acct + coneat sineat = SINCoa#) ineat = eccB + eineat gammat = nodot - ves + ((eat ~ exineat) / mott + captt - c0#) Banmad# = -ves = (18 - ecoeas) / mote 31

You might also like