The Extended Standard Product 3 Orbit Format (SP3-c) (17 August 2010) Steve Hilla National Geodetic Survey National Ocean Service, NOAA Silver Spring, MD 20910-6233, USA INTRODUCTION The original Standard Product 3 format (SP3-a) was proposed in (Remondi, 1989) and modified and adopted in (Remondi, 1991). The SP3 format is similar to the original NGS Standard Product 1 format described in (Remondi, 1989 and 1985) but includes additional information: satellite clock corrections, orbit accuracy exponents, comment lines, the GPS week and seconds of week associated with the first epoch, and a more flexible header structure (Spofford and Remondi, 1994). In 1998, W. Gurtner and M. Rothacher defined an SP3-b format to allow for the combination of GPS orbits and GLONASS orbits (see IGEX Mail 0042, 27- Oct-1998). All of these SP3-b modifications were backwards compatible with SP3-a, with the exception of the satellite identification labels -- which were changed from an I3 field to an A1,I2 field to accommodate both GPS and GLONASS identifiers in a manner similar to RINEX files (Gurtner, 2000). At the 2000 International GPS Service (IGS) Analysis Center Workshop held at the U.S. Naval Observatory, it was suggested to modify the SP3 format still further so that orbit files distributed by the IGS could include some type of clock accuracy information, and so that separate accuracy information would be available for the observed versus predicted parts of the IGS ultra- rapid orbit files. Rather than just putting two sets of accuracy exponents in the header (one for the observed part and one for the predicted part) it was decided instead to put accuracy information at each epoch (for X, Y, Z, and satellite clock correction). Since the original SP3-a and SP3-b formats were only 60 columns wide, this additional information was easily added using columns 61 through 80 in each Position and Clock Record. This was done in such a way as to remain mostly backwards compatible with SP3-a. As comments were collected from the IGS (orbit) Analysis Centers, additional ideas emerged. It was suggested that a clock event flag be added in column 75 (as currently done by some groups) to denote events like a clock swap on a satellite. It was also suggested to add an orbit event flag, to denote cases where it was known that a satellite went through some type of orbit maneuver. It was also suggested that clock prediction and orbit prediction flags be added. Finally, for the purposes of computing user range errors more accurately for each satellite, it was suggested to add correlation information between the satellite coordinates and the satellite clock correction. These ideas were discussed further at the 2002 IGS Network, Data, and Analysis Center Workshop held in Ottawa (Hilla, 2002). All of these suggestions have been incorporated in this new SP3-c format. As a result, there can now be as many as three different sets of satellite position accuracy indicators in an SP3-c file. The first set, the original accuracy exponents in the header, have been kept in SP3-c to maintain backwards compatibility with the SP3-a format and with existing GPS processing software. These exponents are interpreted as 2**nn millimeters. A zero exponent means the accuracy is unknown. The quoted orbit error should represent one standard deviation and be based on the orbital error in the entire file for the respective satellite. The second set, in columns 62 through 69 of the Position and Clock Record, represent the standard deviation of each position component (X, Y, and Z) at that epoch, in millimeters. These are also exponents but use a floating-point base (for example, 1.25**nn) to achieve better resolution for the standard deviations. A zero exponent here represents a 1 millimeter standard deviation. Blank spaces mean the standard deviation is unknown. These first two sets of standard deviations are expected to be present in all SP3-c files. A third set of standard deviations can be found in the optional Position and Clock Correlation Record (the EP record). This optional record was added to provide high precision users with the correlation coefficients between the X, Y, Z, and satellite clock correction values. In order to be able to construct the full 4-by-4 covariance matrix for a satellite at an epoch, without any loss of precision, the standard deviations for the X, Y, and Z position components are given here to full millimeter precision using a range of 1 to 9999 millimeters. Blank spaces mean a standard deviation or a correlation coefficient is unknown (blanks would probably only occur for the clock information, unless the EP records were being used to store only standard deviations, or only correlation coefficients). In this document the format fields for the SP3-c format are defined. These include all of the changes made for SP3-b. The fields that are defined as "blanks" are reserved fields which must remain blank. All times referred to in an SP3-c file are in the SAME time system, even when they are represented as Gregorian Dates or Modifed Julian Dates. In SP3-c, the Time System code for the entire file (GPS, GLO, GAL, TAI, QZS, or UTC) is now specified in the header on line thirteen. The information to convert between GPS Time and Coordinated Universal Time (i.e., the leap seconds and the fractional error in GPS Time) is not provided as part of the SP3-c format. The basic format of an SP3 file is a Header, followed by a series of epoch times each with a set of Position and Clock Records listed for each satellite. A second, optional record contains satellite velocities and the clock correction rate-of-change. The Position Record Flag, P, in line one indicates that no velocities are included. The Velocity Record Flag, V, in line one indicates that at each epoch, for each satellite, an additional satellite velocity and clock rate-of-change has been computed. SP3-c adds two more optional records: a Position and Clock Correlation Record (EP record), and a Velocity and Clock Rate-of-Change Correlation Record (EV record). Note: On 27 September 2006, this file was updated slightly to add more options for the Time System Indicator. The original version of this file, which was dated 5 September 2002, had only "GPS" and "UTC" as options for the Time System Indicator. This new version adds codes "GLO", "GAL", and "TAI". Also, clarifications were made regarding the EP and EV records, and the order of the satellites and records at each epoch. Note: On 12 February 2007, this file was modified to include a reference to a new list of LEO satellites available at CDDIS (see the documentation below regarding the satellite identifiers found in the third through seventh lines). Note: On 17 August 2010, this file was modified to add satellite system identifiers for J = QZSS and C = COMPASS, and to add "QZS" as a Time System indicator for QZSS Time. Standard Product #3 ASCII SP3 Format Version "c". Columns Description Example Format ----------------- ----------------- ----------------- --------- SP3 First Line Columns 1-2 Version Symbol #c A2 Column 3 Pos or Vel Flag P or V A1 Columns 4-7 Year Start 2001 I4 Column 8 Unused _ blank Columns 9-10 Month Start _8 I2 Column 11 Unused _ blank Columns 12-13 Day of Month St _8 I2 Column 14 Unused _ blank Columns 15-16 Hour Start _0 I2 Column 17 Unused _ blank Columns 18-19 Minute Start _0 I2 Column 20 Unused _ blank Columns 21-31 Second Start _0.00000000 F11.8 Column 32 Unused _ blank Columns 33-39 Number of Epochs ____192 I7 Column 40 Unused _ blank Columns 41-45 Data Used ____d A5 Column 46 Unused _ blank Columns 47-51 Coordinate Sys ITR97 A5 Column 52 Unused _ blank Columns 53-55 Orbit Type FIT A3 Column 56 Unused _ blank Columns 57-60 Agency _NGS A4 SP3 Line Two Columns 1-2 Symbols ## A2 Column 3 Unused _ blank Columns 4-7 GPS Week 1126 I4 Column 8 Unused _ blank Columns 9-23 Seconds of Week 259200.00000000 F15.8 Column 24 Unused _ blank Columns 25-38 Epoch Interval __900.00000000 F14.8 Column 39 Unused _ blank Columns 40-44 Mod Jul Day St 52129 I5 Column 45 Unused _ blank Columns 46-60 Fractional Day 0.0000000000000 F15.13 SP3 Line Three Columns 1-2 Symbols +_ A2 Column 3-4 Unused __ 2 blanks Columns 5-6 Number of Sats 26 I2 Column 7-9 Unused ___ 3 blanks Columns 10-12 Sat #1 Id G01 A1,I2.2 Column 13-15 Sat #2 Id G02 A1,I2.2 * * * Columns 58-60 Sat #17 Id G21 A1,I2.2 SP3 Line Four Columns 1-2 Symbols +_ A2 Columns 3-9 Unused _______ 7 blanks Columns 10-12 Sat #18 Id G23 A1,I2.2 Columns 13-15 Sat #19 Id G24 A1,I2.2 * * * Columns 58-60 Sat #34 Id __0 A1,I2.2 SP3 Line Five Columns 1-2 Symbols +_ A2 Columns 3-9 Unused _______ 7 blanks Columns 10-12 Sat #35 Id __0 A1,I2.2 Columns 13-15 Sat #36 Id __0 A1,I2.2 * * * Columns 58-60 Sat #51 Id __0 A1,I2.2 SP3 Line Six Columns 1-2 Symbols +_ A2 Columns 3-9 Unused _______ 7 blanks Columns 10-12 Sat #52 Id __0 A1,I2.2 Columns 13-15 Sat #53 Id __0 A1,I2.2 * * * Columns 58-60 Sat #68 Id __0 A1,I2.2 SP3 Line Seven Columns 1-2 Symbols +_ A2 Columns 3-9 Unused _______ 7 blanks Columns 10-12 Sat #69 Id __0 A1,I2.2 Columns 13-15 Sat #70 Id __0 A1,I2.2 * * * Columns 58-60 Sat #85 Id __0 A1,I2.2 SP3 Line Eight Columns 1-2 Symbols ++ A2 Columns 3-9 Unused _______ 7 blanks Columns 10-12 Sat #1 Accuracy __7 I3 Columns 13-15 Sat #2 Accuracy __8 I3 * * * Columns 58-60 Sat #17 Accuracy __9 I3 SP3 Line Nine Columns 1-2 Symbols ++ A2 Columns 3-9 Unused _______ 7 blanks Columns 10-12 Sat #18 Accuracy __9 I3 Columns 13-15 Sat #19 Accuracy __8 I3 * * * Columns 58-60 Sat #34 Accuracy __0 I3 SP3 Line Ten Columns 1-2 Symbols ++ A2 Columns 3-9 Unused _______ 7 blanks Columns 10-12 Sat #35 Accuracy __0 I3 Columns 13-15 Sat #36 Accuracy __0 I3 * * * Columns 58-60 Sat #51 Accuracy __0 I3 SP3 Line Eleven Columns 1-2 Symbols ++ A2 Columns 3-9 Unused _______ 7 blanks Columns 10-12 Sat #52 Accuracy __0 I3 Columns 13-15 Sat #53 Accuracy __0 I3 * * * Columns 58-60 Sat #68 Accuracy __0 I3 SP3 Line Twelve Columns 1-2 Symbols ++ A2 Columns 3-9 Unused _______ 7 blanks Columns 10-12 Sat #69 Accuracy __0 I3 Columns 13-15 Sat #70 Accuracy __0 I3 * * * Columns 58-60 Sat #85 Accuracy __0 I3 SP3 Line Thirteen Columns 1-2 Symbols %c A2 Column 3 Unused _ blank Columns 4-5 File Type G_ A2 Column 6 Unused _ blank Columns 7-8 2 characters cc A2 Column 9 Unused _ blank Columns 10-12 Time System GPS A3 Column 13 Unused _ blank Columns 14-16 3 characters ccc A3 Column 17 Unused _ blank Columns 18-21 4 characters cccc A4 Column 22 Unused _ blank Columns 23-26 4 characters cccc A4 Column 27 Unused _ blank Columns 28-31 4 characters cccc A4 Column 32 Unused _ blank Columns 33-36 4 characters cccc A4 Column 37 Unused _ blank Columns 38-42 5 characters ccccc A5 Column 43 Unused _ blank Columns 44-48 5 characters ccccc A5 Column 49 Unused _ blank Columns 50-54 5 characters ccccc A5 Column 55 Unused _ blank Columns 56-60 5 characters ccccc A5 SP3 Line Fourteen Columns 1-2 Symbols %c A2 Column 3 Unused _ blank Columns 4-5 2 characters cc A2 Column 6 Unused _ blank Columns 7-8 2 characters cc A2 Column 9 Unused _ blank Columns 10-12 3 characters ccc A3 Column 13 Unused _ blank Columns 14-16 3 characters ccc A3 Column 17 Unused _ blank Columns 18-21 4 characters cccc A4 Column 22 Unused _ blank Columns 23-26 4 characters cccc A4 Column 27 Unused _ blank Columns 28-31 4 characters cccc A4 Column 32 Unused _ blank Columns 33-36 4 characters cccc A4 Column 37 Unused _ blank Columns 38-42 5 characters ccccc A5 Column 43 Unused _ blank Columns 44-48 5 characters ccccc A5 Column 49 Unused _ blank Columns 50-54 5 characters ccccc A5 Column 55 Unused _ blank Columns 56-60 5 characters ccccc A5 SP3 Line Fifteen Columns 1-2 Symbols %f A2 Column 3 Unused _ blank Columns 4-13 Base for Pos/Vel _1.2500000 F10.7 (mm or 10**-4 mm/sec) Column 14 Unused _ blank Columns 15-26 Base for Clk/Rate _1.025000000 F12.9 (psec or 10**-4 psec/sec) Column 27 Unused _ blank Columns 28-41 14-column float _0.00000000000 F14.11 Column 42 Unused _ blank Columns 43-60 18-column float _0.000000000000000 F18.15 SP3 Line Sixteen Columns 1-2 Symbols %f A2 Column 3 Unused _ blank Columns 4-13 10-column float _0.0000000 F10.7 Column 14 Unused _ blank Columns 15-26 12-column float _0.000000000 F12.9 Column 27 Unused _ blank Columns 28-41 14-column float _0.00000000000 F14.11 Column 42 Unused _ blank Columns 43-60 18-column float _0.000000000000000 F18.15 SP3 Lines Seventeen and Eighteen Columns 1-2 Symbols %i A2 Column 3 Unused _ blank Columns 4-7 4-column int ___0 I4 Column 8 Unused _ blank Columns 9-12 4-column int ___0 I4 Column 13 Unused _ blank Columns 14-17 4-column int ___0 I4 Column 18 Unused _ blank Columns 19-22 4-column int ___0 I4 Column 23 Unused _ blank Columns 24-29 6-column int _____0 I6 Column 30 Unused _ blank Columns 31-36 6-column int _____0 I6 Column 37 Unused _ blank Columns 38-43 6-column int _____0 I6 Column 44 Unused _ blank Columns 45-50 6-column int _____0 I6 Column 51 Unused _ blank Columns 52-60 9-column int ________0 I9 SP3 Lines Nineteen to Twenty two Columns 1-2 Symbols /* A2 Column 3 Unused _ blank Columns 4-60 Comment CC...CC A57 SP3 Line Twenty three (The Epoch Header Record) Columns 1-2 Symbols *_ A2 Column 3 Unused _ blank Columns 4-7 Year Start 2001 I4 Column 8 Unused _ blank Columns 9-10 Month Start _8 I2 Column 11 Unused _ blank Columns 12-13 Day of Month St _8 I2 Column 14 Unused _ blank Columns 15-16 Hour Start _0 I2 Column 17 Unused _ blank Columns 18-19 Minute Start _0 I2 Column 20 Unused _ blank Columns 21-31 Second Start _0.00000000 F11.8 SP3 Line Twenty four (The Position and Clock Record) (See example 1) Column 1 Symbol P A1 Columns 2-4 Vehicle Id. G01 A1,I2.2 Columns 5-18 x-coordinate(km) _-11044.805800 F14.6 Columns 19-32 y-coordinate(km) _-10475.672350 F14.6 Columns 33-46 z-coordinate(km) __21929.418200 F14.6 Columns 47-60 clock (microsec) ____189.163300 F14.6 Column 61 Unused _ blank Columns 62-63 x-sdev (b**n mm) 18 I2 Column 64 Unused _ blank Columns 65-66 y-sdev (b**n mm) 18 I2 Column 67 Unused _ blank Columns 68-69 z-sdev (b**n mm) 18 I2 Column 70 Unused _ blank Columns 71-73 c-sdev (b**n psec) 219 I3 Column 74 Unused _ blank Column 75 Clock Event Flag E A1 Column 76 Clock Pred. Flag P A1 Columns 77-78 Unused __ 2 blanks Column 79 Maneuver Flag M A1 Column 80 Orbit Pred. Flag P A1 If the user wishes to include correlation information between the position components and the clock correction, then an optional Position and Clock Correlation Record can be added after each Position and Clock Record. This record gives the standard deviations for X, Y, Z, and clock correction with greater resolution than the approximate values given in the Position and Clock Record. SP3 Line Twenty five (The Position and Clock Correlation Record) (See example 2) Columns 1-2 Symbols EP A2 Columns 3-4 Unused __ 2 blanks Columns 5-8 x-sdev (mm) __55 I4 Column 9 Unused _ blank Columns 10-13 y-sdev (mm) __55 I4 Column 14 Unused _ blank Columns 15-18 z-sdev (mm) __55 I4 Column 19 Unused _ blank Columns 20-26 clk-sdev (psec) ____222 I7 Column 27 Unused _ blank Columns 28-35 xy-correlation _1234567 I8 Column 36 Unused _ blank Columns 37-44 xz-correlation -1234567 I8 Column 45 Unused _ blank Columns 46-53 xc-correlation _5999999 I8 Column 54 Unused _ blank Columns 55-62 yz-correlation _____-30 I8 Column 63 Unused _ blank Columns 64-71 yc-correlation ______21 I8 Column 72 Unused _ blank Columns 73-80 zc-correlation -1230000 I8 The user can choose to include the optional Velocity and Clock Rate-of-Change Record, V, after each Position and Clock Record. The clock rate-of-change units are 10**-4 microseconds/second for cols. 47-60 below. SP3 Line Twenty six (See example 2) Column 1 Symbol V A1 Columns 2-4 Vehicle Id. G01 A1,I2.2 Columns 5-18 x-velocity(dm/s) __20298.880364 F14.6 Columns 19-32 y-velocity(dm/s) _-18462.044804 F14.6 Columns 33-46 z-velocity(dm/s) ___1381.387685 F14.6 Columns 47-60 clock rate-chg _____-4.534317 F14.6 Column 61 Unused _ blank Columns 62-63 xvel-sdev 14 I2 (b**n 10**-4 mm/sec) Column 64 Unused _ blank Columns 65-66 yvel-sdev 14 I2 (b**n 10**-4 mm/sec) Column 67 Unused _ blank Columns 68-69 zvel-sdev 14 I2 (b**n 10**-4 mm/sec) Column 70 Unused _ blank Columns 71-73 clkrate-sdev 191 I3 (b**n 10**-4 psec/sec) Columns 74-80 Unused _______ 7 blanks If the user wishes to include correlation information between the velocity components and the clock correction rate-of-change, then a separate Velocity and Clock Rate-of-Change Correlation Record can be added after each Velocity and Clock Rate-of-Change Record. This record gives the standard deviations for the X-, Y-, Z-velocities and the clock correction rate-of-change with greater resolution than the approximate values given in the Velocity and Clock Rate-of-Change Record. SP3 Line Twenty seven - The Velocity and Clock Rate-of-Change Correlation Record (See example 2) Columns 1-2 Symbols EV A2 Columns 3-4 Unused __ 2 blanks Columns 5-8 xvel-sdev __22 I4 (10**-4 mm/sec) Column 9 Unused _ blank Columns 10-13 yvel-sdev __22 I4 (10**-4 mm/sec) Column 14 Unused _ blank Columns 15-18 zvel-sdev __22 I4 (10**-4 mm/sec) Column 19 Unused _ blank Columns 20-26 clkrate-sdev ____111 I7 (10**-4 psec/sec) Column 27 Unused _ blank Columns 28-35 xy-correlation _1234567 I8 Column 36 Unused _ blank Columns 37-44 xz-correlation _1234567 I8 Column 45 Unused _ blank Columns 46-53 xc-correlation _1234567 I8 Column 54 Unused _ blank Columns 55-62 yz-correlation _1234567 I8 Column 63 Unused _ blank Columns 64-71 yc-correlation _1234567 I8 Column 72 Unused _ blank Columns 73-80 zc-correlation _1234567 I8 If no Velocity and Clock Rate-of-Change Records or Correlation Records are present, the last line in the file can be computed as follows: SP3 Line 22+NUMEPS*(NUMSATS+1)+1 (i.e., The Last Line) Columns 1-3 End of File EOF A3 Discussion of the SP3-c Format On line one, character two is the format version identification character. This third SP3 version has been designated version 'c'. Subsequent versions will use lower case letters in alphabetical order. The first line comprises the Gregorian date and time of day of the first epoch of the orbit, the number of epochs in the ephemeris file (up to 10 million), the data used descriptor, the coordinate system used descriptor, the orbit type descriptor, and the agency descriptor. The data used descriptor was included for ease in distinguishing between multiple orbital solutions from a single organization. This will have primary use for the agency generating the orbit. A possible convention is given below; this is not considered final and suggestions are welcome. u -- undifferenced carrier phase du -- change in u with time s -- 2-receiver/1-satellite carrier phase ds -- change on s with time d -- 2-receiver/2-satellite carrier phase dd -- change in d with time U -- undifferenced code phase dU -- change in U with time S -- 2-receiver/1-satellite code phase dS -- change in S with time D -- 2-receiver/2-satellite code phase dD -- change in D with time + -- type separator Combinations such as "__u+U" seem reasonable. If the measurements used were complex combinations of standard types, then one could use "mixed" where mixed could be explained on the comment lines. In examples 1 and 2, the file is a combination of orbits from several agencies and so the data used is designated as 'ORBIT'. Orbit type is described by a three character descriptor. At this time only four have been defined: FIT (fitted), EXT (extrapolated or predicted), BCT (broadcast), and HLM (fitted after applying a Helmert transformation). Naturally, others are possible. The computing agency descriptor allows four characters (e.g. _NGS, _IGS, etc.). The second line has: the GPS week; the seconds of the GPS Week elapsed at the start of the orbit (0.0 <= seconds of week < 604800.0); the epoch interval (0.0 < epoch interval < 100000.0) in seconds; the modified Julian Day Start (where 44244 represents GPS zero time -- January 6, 1980); and fractional part of the day (0.0 <= fractional < 1.0) at the start of the orbit. The third line to the seventh lines indicate the number of satellites followed by their respective identifiers. The identifiers must use consecutive slots and continue on lines 4-7, if required. The value 0 should only appear after all the identifiers are listed. Satellite identifiers may be listed in any order. However, for ease in reviewing satellites included in the orbit file it is recommended that alphabetical/numerical order be used. Each identifier will consist of a letter followed by a 2-digit integer between 01 and 99. For example, "Gnn" for GPS satellites, "Rnn" for GLONASS satellites, "Lnn" for Low-Earth Orbiting (LEO) satellites, "Enn" for Galileo satellites, "Cnn" for COMPASS satellites, and "Jnn" for QZSS satellites. For QZSS the nn=PRN-192 rule is applied, for example QZS-1 (PRN=193) is expressed by "J01". Other letters will be allowed for other types of satellites. Lower numbered satellites must always have a preceding zero (e.g., "G09" not "G 9"). The letter, which represents the Satellite System Indicator, must always be present (i.e.," 09" is no longer a valid satellite identifier). This is a significant change from SP3-a and needs to be noted when software is updated to read the new SP3-c format. A list of identifiers created for LEO satellites can be viewed at http://cddis.gsfc.nasa.gov/sp3c_satlist.html . The eighth line to the twelfth lines have the orbit accuracy exponents. The value 0 is interpreted as accuracy unknown. A satellite's accuracy exponent appears in the same slot on lines 8-12 as the identifier on lines 3-7. The accuracy is computed from the exponent as in the following example. If the accuracy exponent is 13, the accuracy is 2**13 mm or ~ 8 m. The quoted orbital error should represent one standard deviation and be based on the orbital error in the entire file for the respective satellite. This may lead to some distortion when orbit files are joined together, or when a file contains both observed and predicted data. On the thirteenth line, columns 4-5 hold the File Type descriptor. This is a single character left-justified in the two-character field. The currently defined values are: "G " for GPS only files, "M " for mixed files, "R " for GLONASS only files, "L " for LEO only files, "E " for Galileo only files, "C " for COMPASS only files, and "J " for QZSS only files. No default values are implied; either "G ", "M ", "R ", "L ", "E ", "C ", or "J " is required. On this same line, columns 10-12 hold the Time System Indicator. In order to remove any ambiguity with respect to which time system is being used in mixed files, this field specifies the time system used in each SP3-c file: use "GPS" to identify GPS Time, "GLO" to identify the GLONASS UTC time system, "GAL" to identify Galileo system time, "TAI" to identify International Atomic Time, "UTC" to identify Coordinated Universal Time, or "QZS" to identify QZSS Time. No default value is implied; either "GPS", "GLO", "GAL", "TAI, "UTC", or "QZS" must be specified. On Line fifteen, columns 4-13 hold the floating-point base number used for computing the standard deviations for the components of the satellite position and velocity. Instead of using 2**nn as is done in lines 8-12 in the header, better resolution can be attained using a number like 1.25**nn. The units for position and velocity are mm and 10**-4 mm/sec, respectively. Likewise, columns 15-26 hold the floating-point base number for computing the standard deviations for the clock correction and the rate-of-change of the clock correction. Again, instead of using 2**nnn, one might use a number like 1.025**nnn. The units for the clock correction and the rate-of- change of the clock correction are picosec and 10**-4 picosec/sec, respectively. Lines 13-18 have been designed so that additional parameters may be added to the SP3 format. Lines 19-22 are free form comments (comments go in columns 4-60). Line 23 is the Epoch Header Record, showing the epoch date and time. Line 24 is the Position and Clock Record; the first character is always 'P'. The positional values are in kilometers and are precise to 1 mm. A precision of 0.5 mm can be accommodated if rounding is used, i.e., the value shown is never more than 0.5 mm from the computed value. The clock values are in microseconds and are precise to 1 picosecond. Bad or absent positional values are to be set to 0.000000. Bad or absent clock values are to be set to _999999.999999. The six integer nines are required, whereas the fractional part nines are optional. Columns 62-69 hold the two digit exponents which represent the standard deviations of the satellite coordinates in units of millimeters. For example, if the base floating point number from line fifteen is 1.25, and the two-digit exponent for the X-coordinate is 18, then the standard deviation of the X-coordinate is 1.25**18 = 55.5112 or approximately 56 mm. In a similar manner, columns 71- 73 hold a three-digit exponent representing the standard deviation for the clock correction in units of picoseconds. As an example, if the base floating point number from line fifteen is 1.025, and the three-digit exponent for the clock correction is 219, then the standard deviation of the clock correction is 1.025**219 = 223.1138 or approximately 223 picoseconds. An exponent value of 99 or 999 would mean that a standard deviation was too large to represent. If a standard deviation is unknown, its field is left blank. Column 75 is the Clock Event Flag (either 'E' or blank). An 'E' flag is used to denote a discontinuity in the satellite clock correction (this might be caused by a clock swap on the satellite). The discontinuity is understood to have occurred sometime between the previous epoch and current epoch, or at the current epoch. A blank means either no event occurred, or it is unknown whether any event occurred. Column 76 is the Clock Correction Prediction Flag (either 'P' or blank). A 'P' flag indicates that the satellite clock correction at this epoch is predicted. A blank means that the clock correction is observed. Column 79 is the orbit Maneuver Flag (either 'M' or blank). An 'M' flag indicates that sometime between the previous epoch and the current epoch, or at the current epoch, an orbit maneuver took place for this satellite. As an example, if a certain maneuver lasted 50 minutes (a satellite changing orbital planes) then these M-flags could conceivably appear at five separate 15-minute orbit epochs. If the maneuver started at 11h 14m and lasted to 12h 04m, M-flags would appear for the epochs 11:15, 11:30, 11:45, 12:00 and 12:15. A maneuver is loosely defined as any planned or humanly-detectable thruster firing that changes the orbit of a satellite. A blank means either no maneuver occurred, or it is unknown whether any maneuver occurred. Column 80 is the Orbit Prediction Flag (either 'P' or blank). A 'P' flag indicates that the satellite position at this epoch is predicted. A blank means that the satellite position is observed. Since not all of the fields in columns 61 through 80 will be used at every epoch, not every Position and Clock Record will be required to contain 80 columns; missing columns should be interpreted as blanks. Any program reading an SP3-c file must be prepared to deal with short records (either by padding with blanks, or by some other method). Line 25 (in example 2) is the optional Position and Clock Correlation Record. This record type always begins with the characters 'EP'. Columns 5-18 give the standard deviations for the X,Y,Z satellite coordinates in units of mm. The standard deviations in this record are given to greater resolution than the approximate values given in the Position and Clock Record. A value of 9999 would mean that a standard deviation was too large to be represented. If a standard deviation is unknown, its field is left blank. Columns 20-26 give the standard deviation of the clock correction in units of picoseconds. A value of 9999999 would mean that the standard deviation was too large to be represented. Columns 28-80 are used to store the correlation coefficients for xy, xz, xc, yz, yc, and zc. Each 8-digit integer would be divided by 10,000,000 to produce a correlation coefficient between -0.9999999 and +0.9999999. If some of the correlation coefficients are omitted, a Position and Clock Correlation Record may contain less than 80 columns. Line 26 (in example 2) is the optional Velocity and Clock Rate-of- Change Record. This type of record always begins with the character 'V'. When the position/velocity mode flag is set to 'V' in line one, then each Position and Clock Record for a satellite will be followed by a corresponding Velocity and Clock Rate-of-Change Record (although in some cases there may be a Position and Clock Correlation Record in between the two). The satellite velocity components are given in columns 5-46 in units of decimeters/second and have a precision of 10**-4 millimeters/second. Columns 47-60 give the rate-of-change of the clock correction in units of 10**-4 microseconds/second. The precision of this parameter is 10**-16 seconds/second. Bad or absent velocity values are to be set to 0.000000. Bad or absent clock rate-of-change values are to be set to _999999.999999. The six integer nines are required, whereas the fractional part nines are optional. In a manner similar to the Position and Clock Record, columns 62-69 hold two-digit exponents for representing the standard deviation of the X-, Y-, Z-velocities (e.g., 1.25**14 = 22.7374 or approximately 0.0022 mm/sec). Columns 71-73 hold a three-digit exponent for representing the standard deviation of the clock correction rate-of-change (e.g., 1.025**191 = 111.7528 or approximately 0.0112 psec/sec). A value of 99 or 999 would mean that a standard deviation was too large to represent. If a standard deviation is unknown, its field is left blank. If one or more fields in columns 61 through 73 are omitted, a Velocity and Clock Rate-of- Change Record may contain less than 73 columns. Line 27 (in example 2) is the optional Velocity and Clock Rate-of- Change Correlation Record. This type of line always begins with the characters 'EV'. Columns 5-18 give the standard deviations for the X-, Y-, Z-velocities in units of 10**-4 millimeters/second. The standard deviations of the velocity components are given to greater resolution than the approximates values given in the Velocity and Clock Rate-of-Change Record. A value of 9999 would mean that a velocity standard deviation was too large to be represented. Columns 20-26 give the standard deviation of the clock correction rate-of-change in units of 10**-4 psec/sec. A value of 9999999 would mean that the clock correction rate-of-change was to large to be represented. If a standard deviation is unknown, its field is left blank. Columns 28-80 are used to store the correlation coefficients between the velocity components and the clock correction rate-of-change (xy, xz, xc, yz, yc, and zc). Each 8-digit integer would be divided by 10,000,000 to produce a correlation coefficient between -0.9999999 and +0.9999999. If some of the correlation coefficients are omitted, a Velocity and Clock Rate-of-Change Correlation Record may contain less than 80 columns. FINAL NOTE: Any software which reads SP3-c files must be prepared to read the 'EP' and 'EV' correlation records if they are present. If the person or agency using the file decides that the correlation information (and the more accurate standard deviations) are not needed, then these 'EP' and 'EV' records might be stripped out to save space, or simply ignored and skipped over. There may be only a few EP and/or EV records placed in an SP3-c file, i.e., it is not necessary to have EP and/or EV records for every satellite at every epoch (as shown in Example 2 below). The only rule is: since no satellite IDs are given in the optional EP and EV records, they must immediately follow their corresponding P or V record for that satellite. The satellite order of the P, EP, V, and EV records (or subset of these) must be the same as the order of the satellite IDs in lines 3 through 7 in the header. Thus the order and the total number of satellites at each epoch must always be the same. This serves as an integrity check on the file -- i.e., satellites must be designated as "bad" or "absent" by intentionally setting their position (and velocity) values equal to zero. There should never be any satellite's Position or Velocity records left out at an epoch. Since not all SP3-c records will contain their maximum number of columns, missing columns should be interpreted as blanks. Any program reading an SP3-c file must be prepared to deal with short records (either by padding with blanks, or by some other method). Example 1. SP3-c file with Position and Clock Record used at each epoch. #cP2001 8 8 0 0 0.00000000 192 ORBIT IGS97 HLM IGS ## 1126 259200.00000000 900.00000000 52129 0.0000000000000 + 26 G01G02G03G04G05G06G07G08G09G10G11G13G14G17G18G20G21 + G23G24G25G26G27G28G29G30G31 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++ 7 8 7 8 6 7 7 7 7 7 7 7 7 8 8 7 9 ++ 9 8 6 8 7 7 6 7 7 0 0 0 0 0 0 0 0 ++ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %c G cc GPS ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc %c cc cc ccc ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc %f 1.2500000 1.025000000 0.00000000000 0.000000000000000 %f 0.0000000 0.000000000 0.00000000000 0.000000000000000 %i 0 0 0 0 0 0 0 0 0 %i 0 0 0 0 0 0 0 0 0 /* ULTRA ORBIT COMBINATION FROM WEIGHTED AVERAGE OF: /* cou esu gfu jpu siu usu /* REFERENCED TO cou CLOCK AND TO WEIGHTED MEAN POLE: /* CLK ANT Z-OFFSET (M): II/IIA 1.023; IIR 0.000 * 2001 8 8 0 0 0.00000000 PG01 -11044.805800 -10475.672350 21929.418200 189.163300 18 18 18 219 PG02 -12593.593500 10170.327650 -20354.534400 -55.976000 18 18 18 219 M PG03 9335.606450 -21952.990750 -11624.350150 54.756700 18 18 18 219 PG04 -16148.976900 8606.630600 19407.845050 617.997800 18 18 18 219 PG05 13454.631450 20956.333700 9376.994100 308.956400 18 18 18 219 PG06 18821.523100 1138.155450 18958.305500 -2.406900 18 18 18 219 . . . * 2001 8 9 23 45 0.00000000 PG01 -11044.805800 -10475.672350 21929.418200 189.163300 18 18 18 219 P P PG02 -12593.593500 10170.327650 -20354.534400 -55.976000 18 18 18 219 P P PG03 9335.606450 -21952.990750 -11624.350150 54.756700 18 18 18 219 P P PG04 -16148.976900 8606.630600 19407.845050 617.997800 18 18 18 219 EP P . . . PG30 -20393.814200 16198.067550 -4138.151700 428.892900 18 18 18 219 P P PG31 -23592.378250 1395.049800 -12524.037100 461.972900 18 18 18 219 P P EOF Example 2. SP3-c file with all record types (P, EP, V, EV) used at each epoch. #cV2001 8 8 0 0 0.00000000 192 ORBIT IGS97 HLM IGS ## 1126 259200.00000000 900.00000000 52129 0.0000000000000 + 26 G01G02G03G04G05G06G07G08G09G10G11G13G14G17G18G20G21 + G23G24G25G26G27G28G29G30G31 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++ 7 8 7 8 6 7 7 7 7 7 7 7 7 8 8 7 9 ++ 9 8 6 8 7 7 6 7 7 0 0 0 0 0 0 0 0 ++ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ++ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %c G cc GPS ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc %c cc cc ccc ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc %f 1.2500000 1.025000000 0.00000000000 0.000000000000000 %f 0.0000000 0.000000000 0.00000000000 0.000000000000000 %i 0 0 0 0 0 0 0 0 0 %i 0 0 0 0 0 0 0 0 0 /* ULTRA ORBIT COMBINATION FROM WEIGHTED AVERAGE OF: /* cou esu gfu jpu siu usu /* REFERENCED TO cou CLOCK AND TO WEIGHTED MEAN POLE: /* CLK ANT Z-OFFSET (M): II/IIA 1.023; IIR 0.000 * 2001 8 8 0 0 0.00000000 PG01 -11044.805800 -10475.672350 21929.418200 189.163300 18 18 18 219 EP 55 55 55 222 1234567 -1234567 5999999 -30 21 -1230000 VG01 20298.880364 -18462.044804 1381.387685 -4.534317 14 14 14 191 EV 22 22 22 111 1234567 1234567 1234567 1234567 1234567 1234567 PG02 -12593.593500 10170.327650 -20354.534400 -55.976000 18 18 18 219 M EP 55 55 55 222 1234567 -1234567 5999999 -30 21 -1230000 VG02 -9481.923808 -25832.652567 -7277.160056 8.801258 14 14 14 191 EV 22 22 22 111 1234567 1234567 1234567 1234567 1234567 1234567 PG03 9335.606450 -21952.990750 -11624.350150 54.756700 18 18 18 219 EP 55 55 55 222 1234567 -1234567 5999999 -30 21 -1230000 VG03 12497.392894 -8482.260298 26230.348459 5.620682 14 14 14 191 EV 22 22 22 111 1234567 1234567 1234567 1234567 1234567 1234567 PG04 -16148.976900 8606.630600 19407.845050 617.997800 18 18 18 219 EP 55 55 55 222 1234567 -1234567 5999999 -30 21 -1230000 VG04 -22859.768469 -8524.538983 -15063.229095 -3.292980 14 14 14 191 EV 22 22 22 111 1234567 1234567 1234567 1234567 1234567 1234567 PG05 13454.631450 20956.333700 9376.994100 308.956400 18 18 18 219 EP 55 55 55 222 1234567 -1234567 5999999 -30 21 -1230000 VG05 392.255680 12367.086937 -27955.768747 -13.600595 14 14 14 191 EV 22 22 22 111 1234567 1234567 1234567 1234567 1234567 1234567 . . . * 2001 8 9 23 45 0.00000000 PG01 -11044.805800 -10475.672350 21929.418200 189.163300 18 18 18 219 P P EP 55 55 55 222 1234567 -1234567 5999999 -30 21 -1230000 VG01 20298.880364 -18462.044804 1381.387685 -4.534317 14 14 14 191 EV 22 22 22 111 1234567 1234567 1234567 1234567 1234567 1234567 PG02 -12593.593500 10170.327650 -20354.534400 -55.976000 18 18 18 219 P P EP 55 55 55 222 1234567 -1234567 5999999 -30 21 -1230000 VG02 -9481.923808 -25832.652567 -7277.160056 8.801258 14 14 14 191 EV 22 22 22 111 1234567 1234567 1234567 1234567 1234567 1234567 . . . PG30 -23592.378250 1395.049800 -12524.037100 461.972900 18 18 18 219 P P EP 55 55 55 222 1234567 -1234567 5999999 -30 21 -1230000 VG30 -13996.847785 -6945.665482 25908.199568 0.364488 14 14 14 191 EV 22 22 22 111 1234567 1234567 1234567 1234567 1234567 1234567 PG31 17353.533200 15151.105700 -13851.534050 -1.841700 18 18 18 219 P P EP 55 55 55 222 1234567 -1234567 5999999 -30 21 -1230000 VG31 -16984.306646 -2424.913336 -23969.277677 -14.371692 14 14 14 191 EV 22 22 22 111 1234567 1234567 1234567 1234567 1234567 1234567 EOF ACKNOWLEDGMENTS The idea for using floating-point base numbers (1.25**nn and 1.025**nnn, rather than 2**nn) to improve the resolution of the standard deviations was suggested by Benjamin Remondi. The author would also like to thank the several members of the IGS community who offered comments and suggestions on the design of the SP3-c format: Henno Boomkamp, Gerd Gendt, Werner Gurtner, Urs Hugentobler, Jan Kouba, Stephen Malys, Tomas Martin Mur, Jim Ray, Ignacio Romero, Markus Rothacher, Mark Schenewerk, Victor Slabinski, Tim Springer, Everett Swift, and Robert Weber. REFERENCES 1. Remondi, B. W. 1985: Distribution of Global Positioning System Ephemerides by the National Geodetic Survey, Presented at the First Conference on Civil Applications of GPS - Institute of Navigation, September 12, 1985, 8 pp. 2. Remondi, B. W. 1989: Extending the National Geodetic Survey Geodetic Orbit Formats, NOAA Technical Report 133 NGS 46, 85 pp. 3. Remondi, B. W., 1991: NGS Second Generation ASCII and Binary Orbit Formats and Associated Interpolated Studies, Proceedings of the Twentieth General Assembly, International Union of Geodesy and Geophysics, Vienna, Austria, August 11-24, 1991, 28 pp. 4. Gurtner, W., 2000: RINEX: The Receiver-Independent Exchange Format, GPS World, Volume 5, Number 7, 48-52. Also available from: ftp://igscb.jpl.nasa.gov/igscb/data/format/rinex210.txt 5. Hilla, S., 2002: Extending the Standard Product 3 (SP3) Orbit Format, Proceedings of the International GPS Service Network, Data, and Analysis Center Workshop, Ottawa, Canada, April 8-11, 2002. 6. Spofford, P. R. and Remondi, B. W., 1994: The National Geodetic Survey Standard GPS Format SP3. (SP3-a format) available from the IGS website: http://igscb.jpl.nasa.gov/igscb/data/format/sp3_docu.txt 7. The NIMA SP3 format can be viewed at http://164.214.2.59/GandG/sathtml/sp3format.html 8. The IGEX98 SP3-b format [IGEX Mail-0042, SP3 Modifications (corrigenda)] can be viewed at http://igscb.jpl.nasa.gov/mail/igexmail/1998/msg00041.html 9. A list of identifiers for Low-Earth Orbiting satellites can be viewed at http://cddis.gsfc.nasa.gov/sp3c_satlist.html