Dennis Milbert
Updated: 2006-jul-28 (more output digits, SP3c, and odds and ends...)
The program, ppos, takes a RINEX observation file and a RINEX navigation file
(broadcast orbit),
and computes a point position for every epoch. Optionally, one can also process with
precise orbits in the SP3 format. The program also provides for options in processing;
such as use of a simple troposphere model, and vertical angle cutoff of low satellites.
Operation
First, you will need to compile this puppy. The compiler (and run time environment) is available (for free) at www.javasoft.com. Use the standard edition (SE) (micro is for tiny devices, and enterprise is for business). After download, installation is a two-click operation. To compile, put the Java source in a subdirectory, and compile ppos.java in a DOS window:
> javac ppos.java <------- WARNING -- case sensitive
To execute in the DOS window, type:
> java ppos <------- WARNING -- do not add .java extention here
Two files are needed for input, and one file is optional for input. First, the program will prompt for the RINEX observation file name. Next, it will ask for the RINEX navigation file name. Then, it will ask if you have a precise orbit file. It's optional, but if you have an SP3 format file, go for it.
The program will ask if you want to use 2 frequency pseudoranges for ionosphere correction. Don't say "Y" unless you really have dual frequency RINEX data to begin with. If the answer was "N", then the program will ask if you want to use the broadcast ionosphere model, instead. You can say yes (Y), but you may want to check your RINEX navigation file to make sure it has two lines of ionosphere model coefficients in the header. The program will ask if you want to apply a simple troposphere model. (This is a good thing, it reduces systematic error in heights.) And, finally, it asks what to use as a vertical angle cutoff in degrees. 10 to 15 degrees is a good choice. 89.9 degrees will likely throw away all of your data.
One file is generated as output. It's name is outfile. The files must be in the subdirectory where you are working.
Input Files:
An ASCII, RINEX format observation file.
An ASCII, RINEX format navigation file. This file is also used as a source for broadcast ionosphere model. Believe it or not, not all RINEX navigation files out on the net have the ionosphere coefficients. Also, believe it or not, for a very long time, IGS distributed incorrect ionosphere coefficients. This was due to a long dormant bug in TEQC based on beta documentation of the placement of the iono coefficients in the broadcast message.
(optional) An ASCII, SP3 format, precise orbit.
Output File:
outfile -- ASCII, "outfile" format. This is the coordinate solution of the L1 phase center (also, receiver clock bias is solved) for each epoch of data. DOP's are also output.
Discussion:
Every effort was made to adhere to the ICD-GPS-200. Of course, the ICD does not
document use of SP3 precise orbits. On the other hand, while the ICD does indicate
use of a troposphere model, one is not specified. ppos uses a generic
seasonal model (Tom Herring, MIT) for temperature, pressure, humidity; which feeds
the Saastamoinen model for zenith delay; which goes into the Herring mapping
functions (wet and dry) to get total delay along a given slant path.
RINEX Format
The RINEX version 2.10 format (25jan2002) can be obtained from the
International GPS Service
and the 8jun2001 version from the
National Geodetic Survey.
SP3 Format
Precise orbits are distributed in a format called SP3. The format is available from NGS and here. If you need the orbits themselves, they are easy to get from NGS at their CORS site.
Here is a sample igs10711.sp3 (316K) SP3 orbit. It is a precise orbit solution computed by the International GPS Service (IGS). (It was also concatenated with the next day's orbit.) Note that if there is an entry of "999999.999999" in the clock field, then that satellite can't be used for that epoch.
Partial support is now provided for the new SP3c format.
However, ppos still requires that only GPS satellites be present in the
navigation and observation files.
outfile Format
This is a simple ASCII, flat file. One record per epoch. Position of the L1 phase center.
01-10 time, seconds past midnight, GPS time 12-13 number of satellites in solution 16-27 geodetic latitude, decimal degrees, positive north 30-42 geodetic longitude, decimal degrees, positive east 45-54 ellipsoidal height, meters, positive up 57-60 PDOP, unitless, computed with all satellites in view 63-66 HDOP, " " 69-72 VDOP, " "
Here is a sample outfile. It was
extracted from the first hour of results from the CORS station ERLA
for 9jul2006. The data were processed with single frequency, broadcast
ionosphere, the troposphere model, and precise SP3 format orbits from IGS.
Shortcomings
This is "no frills" software. There are no warranties of any sort. No Windows GUI. Just the core function.
You must have the 2 input files with the names above. The program will overwrite any existing "outfile" file in the working directory.
If there is significant GPS receiver clock drift, the program will eventually degrade in performance. How bad? The GPS sats travel at around 4,000 m/s. So, to keep clock drift orbit error under 1 m, you don't want more than 0.25 millisecond. Handhelds, even with temperature calibrated oscillators, really drift. So, I like to correct the time tags and observables in the RINEX file. Some receivers, such as the CMC Superstar, do this automatically (depending on collection mode). Sometime in the future, I may alter ppos to make it robust against major clock drift in the RINEX file. (So much fun, so little time...)
The program does not currently apply solid Earth tide corrections. This is below pseudorange noise level (about 1 meter peak-to-peak), but could show up if some long time series at a static site were analyzed. (Also on my list of things to do.)
The program does use all satellites in view, but it does not apply any
robust estimation to drop outliers. It does not downweight low elevation angle
satellites (low satellites are subject to ionosphere, troposphere, multipath error).
However, such satellites can be withheld from the solutions.
The software does not use a Kalman filter to refine position (or estimate velocity).
And, no carrier-aided smoothing is applied. The program does not apply the
geometric corrections for difference between L1 and L2 phase centers, nor
the variation of phase center with vertical angle.
Source Code
The Java source code (2006jul28) is ppos.java.
Links to Other Pages
Sources of RINEX GPS base station data and coordinates
National Geodetic Survey: National CORS.
International GPS Service: IGS Data Holdings.
Sources of SP3 GPS precise orbit data
National Geodetic Survey: National CORS.
International GPS Service: IGS Products.
The links here are for some other sites that talk about GPS accuracy.
Sam Wormley: "GPS Errors & Estimating Your Receiver's Accuracy".
David L. Wilson: "GPS Accuracy Web Page".
Jack Yeazel: "Vista WAAS On/Off Tests in the Open".
Wolfgang Rupprecht: "Post SA GPS Accuracy Measurements".
Heinrich Pfeifer: "A long term fix with GPS and GARtrip".
Tom Chester: "Accuracy of Tracks From a Garmin Etrex GPS Receiver".
National Geodetic Survey, NOAA: "Removal Of GPS Selective Availability".
Next are PDF reports describing GPS (and WAAS) performance. For the GPS PAN reports, pay particular attention to Figures 5-1 and 5-2. Also, monitor site behavior is broken out in Table 5-1. Note that the "Predictable Accuracy" values quoted in their Appendix A's are based on the worst monitor site in the quarter.
Federal Aviation Administration: "Archive list of WAAS PAN Reports and SPS PAN Reports".
To Contact Me
My e-mail user name is the first initial of my first name
followed by all the letters of my last name (see above). My ISP is
"comcast", and it is a "dot-net", not a "dot-com". Sorry for not spelling
out my e-mail address, but I try to keep the spam-bots
from fingering me. But, just so the spam-bots don't feel left
out, they can always go to abuse@comcast.net