Dennis Milbert
Updated: 2008-may-14
The program, ddpr1, 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), double difference pseudoranges.
Operation
The program operates in the DOS window. Alternatively, you can simply run "ddpr1.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:
ddpr1.lst -- ASCII, output listing. This contains the coordinate solution of the L1 phase center and some statistics.
ddpr1.res -- ASCII, residual listing. These are the residuals, in the sense of observed-computed, for every satellite, every epoch.
Discussion:
The double difference pseudorange is something of a "classic" solution. The double difference cancels clock error in the GPS satellites (tiny) and in the GPS receivers (not tiny). What's left is orbit error, atmospheric error, and local (multipath and noise). Bottom line, double differences have a slow increase in error when increasing station separation. This makes double difference pseudorange superior to DGPS, and why some manufacturers use it as a post-processing option. Precise orbits are very good, leaving atmosphere error (iono and tropo) and multipath error in the residuals.
This version, ddpr1, is a static solution.
The data are scanned and a table is built of the reference (highest)
satellites. Then, the double 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 ddpr1.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
ddpr1.res is a simple ASCII, flat file. One record per double difference residual.
01-09 time, seconds past midnight, GPS time 10-18 double difference pseudorange residual error, meters, (observed-computed) 19-24 vertical angle, decimal degrees, positive up 26-27 PRN of satellite 2 (see ddpr1.lst for table of reference satellites).
Here is a sample ddpr1.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, ddprres.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 "ddpr1.lst" or "ddpr1.res" files in the working directory.
ddpr1 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 double differences are treated as uncorrelated.
Source Code and Binary Executable
The Fortran source code is ddpr1.for.
The compiled executable (zipped) is ddpr1.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