Dennis Milbert
Updated: 2008-may-14
The program, tdxl, takes two RINEX files (both static), a precise orbit in
SP3 format, a pos file of reference coordinates, and computes the position of
point 2 using single frequency (L1), triple difference carrier phase.
Operation
The program operates in the DOS window. Alternatively, you can simply run "tdxl.exe" with a double click or with "Run..." in your "Start" menu. (I use the DOS window myself.)
Four files are needed for input. Two files are generated as output. The names are fixed. The files must be in the subdirectory where you are working.
Input Files:
point1.rnx -- ASCII, RINEX format. This point is treated as a base station, and is considered known.
point2.rnx -- ASCII, RINEX format. This point is treated as the unknown station.
orbit.sp3 -- ASCII, SP3 format, precise orbit.
pos -- ASCII, special format, described below. This file holds reference coordinates for known stations. For example, one could put coordinates for local CORS stations in this file. If ddpr1.exe doesn't find a 4 character ID in the pos file, it will use the coordinate in the RINEX header, instead. But, while ddpr1.exe is not picky, it is mandatory to have a pos file.
Output Files:
tdxl.lst -- ASCII, output listing. This contains the coordinate solution of the L1 phase center and some statistics.
tdxl.res -- ASCII, residual listing. These are the residuals, in the sense of observed-computed, for every satellite, every epoch.
Discussion:
The triple difference carrier phase is another "classic" solution. The double difference part cancels clock error in the GPS satellites (tiny) and in the GPS receivers (not tiny). The third (triple) difference is between successive epochs. These are small quantities, and any carrier phase cycle slips appear as outliers. When combined with iterated outlier detection, one has an algorithm that is very robust against carrier phase cycle slips.
There is a down side. Triple differences are sensitive to error sources -- multipath, noise, atmosphere, ... So, you need a long data series to get reasonable values. In fact, a triple difference is an expression of the Doppler shift of the GPS satellites; and GPS does not have a large Doppler compared to the old Transit system. On the other hand, triple difference is real, live, honest-to-God, carrier phase positioning.
If you plot the residuals (see Residual File), you will find a very tight grouping along the zero axis, and the odd outlier. High-end geodetic receivers will (seldom) have full-wavelength L1 cycle slips. Carrier phase extracted from a Garmin 12XL asynchronous binary output is a very different story. Half-wavelength L1 cycle slips are frequent. The CMC Superstar binary is also seen to have an occasional half-wavelength cycle slip. But, hey, this is economical (i.e. cheap)!
This version, tdxl, is a static solution.
The data are scanned and a table is built of the reference (highest)
satellites. Then, the triple differences are
grouped by PRN by writing and reading "scatter-gather" temporary files.
Only 3 unknowns are solved, the location of point 2. The solution iterates,
bypassing outlier observations. Here is an example tdxl.lst.
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
The program does require the precise orbit, orbit.sp3, to span the common RINEX data interval. Since IGS distributes orbits with only 96 epochs/daily file, if you take data in the last 15 minutes of a GPS day, then the program will crash. Either delete the last piece of data, or get a 192 epoch, concatenated precise orbit from any 24 hour data retreival from the UFCORS at the National Geodetic Survey.
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.
pos Format
This is a simple ASCII, flat file. Two records per station. The file name is very simple, "pos" -- no extention. This file functions as a mini-database of authoritative coordinates. The file is mandatory. However, if a given station is not found in the pos file, then the RINEX header is used for station coordinates instead.
The format is a simple adaptation of the National Geodetic Survey "Blue Book" format.
ASCII, 2 records per station. Record 1 -------- 01-04 4 character station ID, case sensitive. Must match ID in RINEX header 05-06 blank 07-10 *80* 11-14 blank 15-44 station name 45-46 geodetic latitude, degrees (corrected 2008may14) 47-48 " " , minutes 49-55 " " , units of 0.00001 arc-seconds 56-56 (N/S) -- "N" positive north, "S" positive south 57-59 geodetic longitude, degrees 60-61 " " , minutes 62-68 " " , units of 0.00001 arc-seconds 69-69 (W/E) -- "W" positive west, "E" positive east Record 2 -------- 01-06 blank 07-10 *86* 11-45 blank 46-52 ellipsoidal height, units of millimeters
Here is an example pos file.
Residual File
tdxl.res is a simple ASCII, flat file. One record per double difference residual.
01-09 time, seconds past midnight, GPS time 10-24 triple difference carrier phase residual error, meters, (observed-computed) 25-30 vertical angle, decimal degrees, positive up 32-33 PRN of satellite 2 (see tdxl.lst for table of reference satellites).
Here is a sample tdxl.res. It was extracted from the first hour of results from the CORS stations MIA3 to AOML for 20jan2002.
This brings up the idea of plotting software to look at the residuals.
I like to use a Win32 version of "gnuplot 3.7",
available at
"gnuplot central".
It does have a learning curve, but it's freeware. To help a little bit, here
is an example gnuplot residual plot file, tdres.plt.
Shortcomings
This is "no frills" software. There are no warranties of any sort. No Windows GUI. Just the core function.
You must have the 4 input files with the names above. The program will overwrite any existing "tdxl.lst" or "tdxl.res" files in the working directory.
tdxl is not careful about the antenna offsets between an ARP and the L1 phase center (or phase center variation with vertical angle). So, it should only be considered for use between L1 phase center positions (note: pos file).
The program does not currently apply any ionosphere
correction, or a troposphere model. Results will degrade with distance.
Also, the triple differences are treated as uncorrelated.
Source Code and Binary Executable
The Fortran source code is tdxl.for.
The compiled executable (zipped) is tdxl.exe.
Fixed a coordinate conversion bug for southern hemisphere (2005-sep-17).
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.
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