DOUBLE DIFFERENCE PSEUDORANGE, STATIC

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.

Contents




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

Sources of SP3 GPS precise orbit data




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


Back To Home