The utility file STATIONS.IN must be in the same directory with SATFIT when it is executed.
SATFIT may be run in the DOS mode, in WINDOWS as a Drag and Drop icon, or called by a batch file.
In DOS mode, an input/output text file containing the elset and the data may have any name. The data lines and elset can be in any order in the text file. Data lines must be in the IOD format. SATFIT will find all the data lines in the file, sort them in chronological order and delete all duplicates. It will use the elset closest to the top of the file if there is more than one.
Run SATFIT with the input/output text file as the command line argument. i.e. satfit 26934.txt. If no command line input file is named, the file name sat.txt is used as the default file.
One approach is to create a shortcut to SATFIT.EXE on the desktop. Satellite text files can then be dragged and dropped onto the shortcut to immediately start the program with that satellite data.
However SATFIT is activated, the sat.txt file needs to be in the same directory with SATFIT for all command functions to work properly.
SATFIT will not be able to process the observations unless a separate file containing the station coordinates of every observer is included in the same directory with SATFIT. This file must be named STATIONS.IN.
If SATFIT runs successfully, a prompt will appear after the elset and observations are loaded. The menu appears as shown below:
Enter command : (I)ncl (N)ode (X)ntrcty (P)erigee (A)nomaly (M)otion (B)star (S)tep (D)isc (T)ime (F)it (V)iew (R)emove (W)rite (Q)uit :
Options are selected by pressing the letter in parenthesis and then ENTER. For example, to select (S)tep, press "s" followed by "ENTER".
(F)it - Select this option to see the fit of the current set of elements. The column headings are as shown below:
(#) STA YYday HHMM:SSsss AZ EL ASP XTRK deltaT Perr
Each observation appears on one line. The observation number, #, is displayed in parentheses along with the observer station number, STA, the observed azimuth, AZ, elevation, EL, and aspect angle, ASP, in degrees. If the aspect is less than 90 degrees, the satellite is coming towards the observer, if the aspect is greater than 90 degrees, the satellite is moving away. XTRK is the topocentric angle in degrees left or right of course with respect to the flight path vector of the satellite. Left of course is positive and right is negative in accordance with the RSW coordinate convention. deltaT is the number of seconds the observation was early or late. Positive values are late and negative are early. Perr is position error in degrees of a topocentric angle. Outlier observations can be identified and the progress of the solution can be monitored for each observation.
The letter (G) is not seen as a menu selection, but when selected, (G) will cause the current (F)it display to be appended to the input/output file.
(S)tep - Select this option to automatically update all orbit parameters except Bstar. Since a change in any element affects the other elements, several applications of (S)tep are required to converge to the optimum orbit. An rms readout (residual root mean square) is updated with each press of the "ENTER" key in the (S)tep mode. The rms will asymptotically approach some nonzero value. Continue until satisfied with the convergence. Press (Q) followed by "ENTER" to (Q)uit and a (F)it listing followed by the updated TLE is displayed.
When the (Z) option is selected, it performs the step operations AND a differential correction. This operation was previously combined within the step mode but sometimes resulted in a infinite loop. To avoid getting stuck in an infinite loop, use (S) step a couple of times to improve the fit and then try (Z) step. When in either (S) step or (Z) step, the particular mode of operation is continued by "ENTER" until you either (Q)uit, or select (S) or (Z) to change the mode of operation.
The "rms" line is the root mean square residual position error in degrees.
(I)ncl - Select this option to adjust the inclination, ii. A submenu appears
(A)uto (ii) (Q)uit :
(A)uto searches for the optimum inclination, ii, and ascending node, om, with respect to the current set of orbital elements. A default search range is offered for each parameter but may be modified by the user. This operation is automatically performed in the (S)tep function, but by selecting this option the user can modify the search ranges.
(ii) If a number is entered instead of (A) or (Q) it will be recognized as the desired value for the inclination. The first digit of the entry must be a number.
(Q)uit - Press "q" to quit (I)ncl
(N)ode - Select this option to adjust the ascending node, om. A submenu appears
(A)uto (X)trk (om) (Q)uit :
(A)uto searches for the optimum ascending node, om, to minimize the overall postion error rms with respect to the current set of orbital elements. A default search range is offered for but may be modified by the user.
(X)trk searches for the optimum ascending node, om, to minimize the overall cross track error rms with respect to the current set of orbital elements. A default search range is offered for but may be modified by the user.
(om) If a number is entered instead of (A), (X), or (Q) it will be recognized as the desired value for the node. The first digit of the entry must be a number.
(Q)uit - Press "q" to quit (N)ode
(X)ntrcty - Select this option to adjust the eccentricity, ec. A submenu appears
(S)earch (A)uto (ec) (Q)uit :
(S)earch suggests values for emax, emin, and estep. Press [ENTER] to accept the default values or enter the desired values. A two column list will be displayed with the eccentricity in the first column and its associated sum in the second column.
(A)uto suggests values for emax and emin. Accept the default limit values offered or enter the desired values. The program will search within the limits for the eccentricity that minimizes the rms. This step is automatically performed in the (S)tep function, but here the user can modify the search ranges.
(ec) If a number is entered instead of (S), (A), or (Q) it will be recognized as the desired value for the eccentricity. The first digit of the entry must be a number, which will be a zero, the second place of the entry will then be a decimal point.
(Q)uit - Press "q" to quit (X)ntrcty
(P)erigee - Select this option to adjust the perigee, ww, A submenu appears
Perigee = 1.040233 (S)earch (A)uto (ww) (Q)uit :
(S)earch suggests values for wmax, wmin, and wstep. Press [ENTER] to accept the default values or enter the desired values. A two column list will be displayed with the perigee in the first column and its associated rms residual sum in the second column. Mean anomaly is adjusted according to the change in perigee so that mean longitude remains constant.
(A)uto - This option will cause the program to search for the perigee, ww, that minimizes the "sum". The optimum eccentricity, ec, mean motion, nn, and anomaly, ma, that go with this perigee value to minimize the rms are also found as all these parameters are interdependent. The (A)uto loop can take several minutes on a slow computer. A scrolling display of the changing perigee and eccentricity shows the progress of the search.
(ww) - If a number is entered instead of (S), (A), or (Q) it will be recognized as the desired value for the perigee. The first digit of the entry must be a number. Mean anomaly is automatically updated according to the change in perigee so that mean longitude remains constant.
(Q)uit - Press "q" to quit (P)erigee
(A)nomaly - Select this option to adjust the mean anomaly. A submenu appears
(S)earch (A)uto (ma) (L)ast (E)_Long (Q)uit :
(S)earch suggests values for amax, amin, and astep. Press [ENTER] to accept the default values or enter the desired values. A two column list will be displayed with the anomaly in the first column and its associated rms in the second column.
(A)uto The program will search for the anomaly that minimizes the rms. This step is automatically performed in the (S)tep function.
(ma) - If a number is entered instead of (S), (A), (L), (E), or (Q) it will be recognized as the desired value for the mean anomaly. The first digit of the entry must be a number.
(L)ast - This option aligns the mean anomaly so that the last observation has zero time error. A (F)it listing appears where the last observation should now have a DeltaT close to 0.00.

(E)_Long - This option displays the east longitude of the satellite at epoch.
(Q)uit - Press "q" to quit (A)nomaly
(M)otion - Select this option to adjust the mean motion, nn. A submenu appears
(A)uto (nn) (Q)uit :
(A)uto The program will search for the mean motion that minimizes the rms. This step is automatically performed in the (S)tep function.
(nn) - If a number is entered instead of (A) or (Q) it will be recognized as the desired value for the mean motion. The first digit of the entry must be a number.
(Q)uit - Press "q" to quit (M)otion
(B)star - Select this option to set the optimum drag coefficient. A submenu appears
(A)uto (b*) (B)atch (Q)uit :
(A)uto suggests values for bmax and bmin. Accept the default limit values offered or enter the desired values. The program will search within the limits for the bstar value that minimizes the "sum". This step is NOT automatically performed in the (S)tep function.

(b*) - If a number is entered instead of (A), (B), or (Q) it will be recognized as the desired value for bstar. The first digit of the entry must be a number, which will be a zero, the second place of the entry will then be a decimal point. To enter the bstar value in the example above you would enter 0.000015957. Note that the bstar exponent is equal to the number of zeros after the decimal point.
(B)atch - Runs a sequence of commands to update Bstar and all the other elements by alternately calling (B)star (A)uto (S)tep and (Z)step.
(Q)uit - Press "q" to quit (B)star
(D)iscover - This mode will let the program search for better values of the eccentricity, ec, argument of perigee, ww, and mean motion, nn. A submenu offers three modes of operation with a default choice displayed in brackets. Press [ENTER] to accept the default choice. The operation is slow but it is only intended for the initial orbit determination process where ec, ww, and nn are not known.
(W)ide (N)arrow [W]
(W)ide mode is primarily used for orbit determination and not orbit improvement. When unsure of the argument of perigee, ww, eccentricity, ec, and mean motion, nn, this mode will do a search by dividing the search range for ec and nn into 80 steps, and dividing the search range for ww into 144 steps. Default search limits are offered but may be modified by the user.
(N)arrow mode is used to redefine parameters for a known orbit that needs updating. All search ranges are divided into 20 steps for a quicker search than (W)ide mode, but the search ranges suggested are narrower.
(Z)oom mode is the default mode for repeated uses of search. All search ranges are divided into 20 steps but each application of the search function narrows the search limits to zoom in on the optimum orbit parameters.
(T)ime - Select this option to re-position the TLE epoch.
Default epoch elements are presented in order; Year, Month, Day, Hour, Minute, Second. Press [ENTER] to select the default element or enter the desired value. The default epoch offered is the epoch of the ascending node just prior to the last observation. Press [ENTER] to accept the default values as you step through the time elements. If there are no observations in the sat.txt file, then the default date is the first ascending node after the time you activate this function.

(V)iewObs - Select this option to show the observations on the screen.

(R)emove - Select this option to remove an observation from the satellite input/output text file. The user will be prompted to enter the line number of the observation to be removed. After the observation is removed the (F)it of the remaining observations is displayed. Lines are only temporarily removed and are restored if you (Q)uit. To permanently remove lines, you must (W)rite and (U)pdate before (Q)uit.
(W)rite - Select this option to write the current TLE. A submenu appears:
(U)pdate (V)iew (A)ppend (O)riginal (R)estore (Q)uit :
(U)pdate will erase the old input/output file contents and write to the file with the new TLE and the sorted observations. The new TLE is also written to the screen.

Note: Update is the only command that will rewrite the entire contents of the output file. If one desires to save only the updated TLE then (A)ppend should be used. Update will also overwrite the observations as modified by the sort and remove functions.
(A)ppend writes the new TLE to the bottom of the input/output file. I use this option to save promising intermediate results.
(V)iew writes the new TLE to the screen only.
(O)riginal - Select this option to display the original TLE.
(R)estore - Select this option to replace the current computed TLE with the original TLE in the sat file and to RESET the working variables. If (U)pdate has been used during the session, (R)estore only resets up to the last (U)pdate.
(Q)uit - Select this option to quit the program.
Hidden Commands - Commands that aren't listed on the menu.
(H)istory
If a history file exists for the currently loaded satellite, invoking this command displays the TLEs listed in the history file immediately followed by the current TLE. This option is very useful for determining the accuracy of reduction results in light of the satellites trends.
(Y)
If a history file exists for the currently loaded satellite, invoking this command opens the history file in a notepad window. This is so that the history file may be edited without exiting SATFIT.
(E)
Edit the satellite input/output file for the currently loaded satellite. Invoking this command opens the file in a notepad window so that the file may be edited without exiting SATFIT.
(G)
This command duplicates the operation of the (F)it command. With the (G) command, the Fit output is printed to the screen and to the output file for easy sharing of fit results.
(C)
If ELCORD is in the same directory as SATFIT it is now possible to exit SATFIT directly into ELCORD. Use the hidden command (C) to change over to ELCORD with the current satellite file already loaded. To save calculations from SATFIT into ELCORD , (W)rite and (U)pdate from within SATFIT before changing over to ELCORD .
ELCORD is great for making fine adjustments to a satellite fit IF the fit is already fairly close. Some pre-processing with SATFIT will normally enable ELCORD to converge to a solution without crashing.
When you exit ELCORD from within SATFIT , you will be back in SATFIT with the original SATFIT elset, unless you (W)rite and (U)pdate your results in ELCORD prior to exiting. So, if ELCORD crashes, just (Q)uit without saving and you will be back in SATFIT with your original TLE.
Suggested Procedures
Situation 1 : Improving a known orbit with new observations
Append the new observations to the bottom of the input/output file. The old TLE may be located anywhere in the file, but the top is recommended.
When the elset and the observations are loaded:
(1) Update the satellite epoch with (T)ime. The default time offered is the ascending node just
before the most recent observation in the sat file. All the elements are
automatically advanced from the given TLE, i.e. node is precessed, perigee is
precessed, anomaly, motion and eccentricity are adjusted according to bstar and
gravitational harmonics.
(2) Use (S)tep to fit the elements to the observations. (S)tep adjusts all
elements except bstar. Hold down or press enter until satisfied with
convergence. Exit (S)tep with (Q)uit.
(3) After completing (S)tep, readjust the (T)ime to the ascending node and
recheck the (F)it.
(4) Results may be saved with (W)rite + (U)pdate.
If the process does not converge to reasonable values, try converging on part of the data.
(R)emove observations from the input file if their errors, as displayed in (F)it,
identify them as outliers.
Situation 2 : Unknown orbit
Two or three observations from a single pass can be used with ELFIND as a good first approximation of the satellite elements. Inclination, ii, and longitude of the ascending node, om, will be very close, mean motion,
If SATFIT is used to open a file containing just observations and no TLE, the file will be opened in ELFIND if ELFIND is in the same directory with SATFIT. After an initial orbit is found by ELFIND, (Q)uit the program and you will be back in SATFIT to complete the orbit determination process. An alternative procedure is to open the file containing observations with ELFIND, save your results, and then re-open the file in SATFIT.
When attempting to discover new orbit parameters using SATFIT, the (S)tep function may not be useful with a very rough orbit. But I would give it a try just to see what happens. If there is not satisfactory convergence with (S)tep, then try (D)iscover mode. Several iterations of (D)iscover may give a better approximation to the orbit parameters. There is also the option to manually enter each parameter. Check the (F)it when you make a change.
When satisfied with the preliminary fit, save the intermediate result with (W)rite so you don't have to repeat these steps. Sometimes I will use ELCORD to further refine an orbit. ELCORD has a tendency to crash if the orbit is not already close to a good fit.
With practice you will develop a feel for the interplay of the orbital elements. I am interested in your suggestions and bug reports. The source code is included so that you may make modifications and improvements. Please share your inventions.
Greg Roberts has written a users manual to walk through the installation and use of SATFIT for the purpose of initial orbit determination.
Scott Campbell
campbel7@hughes.net