Skip to content

Commit

Permalink
First commit of v1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
sammmlow committed Aug 9, 2021
1 parent f295b41 commit fdf2cda
Show file tree
Hide file tree
Showing 181 changed files with 693,385 additions and 442,883 deletions.
14 changes: 8 additions & 6 deletions README.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.. image:: https://raw.githubusercontent.com/sammmlow/LEOGPS/master/gui/logo.png
.. image:: https://raw.githubusercontent.com/sammmlow/LEOGPS/master/docs/_static/leogps_logo.png
:width: 300 px

.. |docs| image:: https://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat-square
Expand All @@ -16,7 +16,7 @@
:Project: LEOGPS
:Github: https://github.com/sammmlow/LEOGPS
:Documents: https://leogps.readthedocs.io/en/latest/
:Version: 1.1 (Latest)
:Version: 1.2 (Latest)

|docs| |license|

Expand Down Expand Up @@ -52,15 +52,15 @@ The Hatanaka library in Python was kindly contributed by Martin Valgur in v1.1,

The user can then run the application by running **'leogps.py'**, in the main directory, and you should see the LEOGPS GUI launch:

.. image:: https://raw.githubusercontent.com/sammmlow/LEOGPS/master/gui/gui_v1.jpg
.. image:: https://raw.githubusercontent.com/sammmlow/LEOGPS/master/docs/_static/gui-v12.jpg

Next, you can paste the two RINEX observation files of your LEO satellite pairs in the inputs folder, key in your configuration parameters, and hit the **'Run LEOGPS'** button. That's it! LEOGPS will automatically source for the precise daily ephemeris and clock solutions, and process the raw GPS measurements to produce a report comprising:
Next, you can paste the two RINEX observation files of your LEO satellite pairs in the inputs folder, key in your configuration parameters, and hit the **'Run LEOGPS'** button. That's it! LEOGPS will automatically source for the precise daily ephemeris and clock solutions, and process the raw GPS measurements to produce a report file in "LEOGPS_Results.txt" comprising:

- The single point positions and velocities of both LEOs.
- Precise baseline vectors between the two LEOs.
- Dilution of precision values.

LEOGPS will also (optionally, depending on your choice in the GUI) output plots or reports on the interpolated GPS satellite ephemeris and clock biases.
LEOGPS will also output plots and reports on the interpolated GPS satellite ephemeris and clock biases.

For full documentation, please refer to the `LEOGPS Read-The-Docs <https://leogps.readthedocs.io/en/latest/>`_.

Expand All @@ -69,6 +69,8 @@ For full documentation, please refer to the `LEOGPS Read-The-Docs <https://leogp
Other Package Dependencies
--------------------------

Recommended Python Version > 3.6

Core libraries necessary: NumPy (v1.14 and above), matplotlib, hatanaka

Standard Python libaries: os, copy, math, datetime, decimal, shutil, subprocess, warnings, urllib.request
Expand All @@ -88,4 +90,4 @@ sammmlow@gmail.com

|linkedin| |orcid|

*Last Modified on 15-04-2021*
*Last Modified on 09-Aug-2021*
6 changes: 6 additions & 0 deletions config/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,11 @@ I: antoffsetY 0.0
~: Set the antenna offset in Z-direction (m)
I: antoffsetZ 0.0
~:
~: Select the output orbit ephemeris coordinate frame
I: frameOrb ICRF
~:
~: Select the output relative baseline coordinate frame
I: frameForm Hill
~:
###############################################################################
###############################################################################
Binary file added docs/_build/doctrees/docs_cdgps1.doctree
Binary file not shown.
Binary file added docs/_build/doctrees/docs_cdgps2.doctree
Binary file not shown.
Binary file added docs/_build/doctrees/docs_firstrun.doctree
Binary file not shown.
Binary file added docs/_build/doctrees/docs_firststep.doctree
Binary file not shown.
Binary file added docs/_build/doctrees/docs_functions.doctree
Binary file not shown.
Binary file added docs/_build/doctrees/docs_install.doctree
Binary file not shown.
Binary file added docs/_build/doctrees/docs_process.doctree
Binary file not shown.
Binary file modified docs/_build/doctrees/environment.pickle
Binary file not shown.
Binary file modified docs/_build/doctrees/index.doctree
Binary file not shown.
2 changes: 1 addition & 1 deletion docs/_build/html/.buildinfo
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: ca82730cf184b0565a030ebf37a86e27
config: 5e3847b3d86362510f8cb734f4a5f3b9
tags: 645f666f9bcd5a90fca523b33c5a78b7
Binary file added docs/_build/html/_images/gui-v-1-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/_build/html/_images/gui-v12.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_build/html/_images/gui.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_build/html/_images/leogps_1diff_fig2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_build/html/_images/leogps_2diff_fig1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_build/html/_images/leogps_2diff_fig2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/_build/html/_images/leogps_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/_build/html/_images/logo.jpg
Binary file not shown.
Binary file removed docs/_build/html/_images/logo.png
Binary file not shown.
91 changes: 91 additions & 0 deletions docs/_build/html/_sources/docs_cdgps1.rst.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
..
###########################################################################
###########################################################################
## ##
## _ ___ ___ ___ ___ ___ ##
## | | | __ / \ / __| _ | __| ##
## | |__| __ ( ) | (_ | _|__ \ ##
## |____|___ \___/ \___|_| \___/ ##
## v 1.2 (Stable) ##
## ##
###########################################################################
###########################################################################
.. image:: /_static/leogps_logo.png

|
Carrier Single Differencing
===========================

This segment of the LEOGPS documentation gets into the technicals of baseline estimation between formation flying satellites (or even between static stations in general), and it assumes that the user has sufficient knowledge on single-point positioning concepts. The algorithm described in this section is based on carrier phase differencing, and is largely implemented in the code file **ambest.py** (ambiguity estimation). For a tutorial on the more basic aspects of GNSS, the user is invited to peruse `ESA's NaviPedia <https://gssc.esa.int/navipedia/index.php/Main_Page>`_.

Carrier phase differential GPS, or CDGPS in summary, is the technique of estimating the relative position of a receiver with respect to another, over a short baseline. The carrier signal’s phase is typically exploited for precise point positioning due to its ranging precision, rather than using the unambiguous code. In the case of GPS signals, the ranging accuracy of the C/A code signal is typically on the order of ±3m for a typical GNSS receiver (on the modernized GPS block without selective availability); whereas the ranging accuracy of the carrier phase of the signal is on the order of millimeters due to the accuracy achievable in most receiver phase-locked loops today.

The carrier phase range can be modelled as the observed phase, plus an integer number of wavelengths, and plus a series of systematic and random ranging errors. The goal of carrier phase differential GPS techniques is to remove these systematic ranging errors through differential measurements which cancel common and correlated sources of ranging errors observed by both receivers over a “short” baseline.

The integer number of wavelengths however, is unknown and must be estimated. This is known as the “integer ambiguity resolution” problem in GNSS literature, and it can be estimated as a float, with subsequent integer fixing techniques (i.e., wide-lane, narrow-lane, or if the error covariances are known, then integer fixing by Peter Teunissen’s LAMBDA).

.. figure:: /_figures/leogps_0diff_fig1.png
:align: center

Figure C1.1: Carrier phase ranging illustration highlighting the ambiguity N.

In any case, the receiver end only measures the instantaneous carrier phase modulo 360 degrees. It is unknown to the receiver how many integer cycles of the carrier signal has passed through the signal path taken from the emission from the GPS satellite to the receiver. Nevertheless, the RINEX file carrier phase observable would normally give an integer estimate nonetheless (usually using a pseudo-range model).

In order to very accurately characterize the range, the number of integer cycles, hereby known as N, must be made known. The integer ambiguity of the carrier phase is red-boxed below.

.. figure:: /_figures/leogps_0diff_eqn1.png
:align: center

Equation C1.1: Carrier phase ranging model

On top of the integer ambiguity N, there are various other error sources that are modelled in the GPS signal range equation (Equation C1.1), of which are the following in descending order of importance and accuracy loss: the GPS satellite clock bias estimation errors, the LEO satellite clock bias, ionospheric path delays, and other relativistic effects such as clock advance effects and Shapiro path delays.

The key to mitigating errors is the realization that error components shown in Equation C1.1, are highly correlated among GPS receivers in proximity. Subtracting measurements (differencing) between receivers will therefore “cancel” out systematic errors between the LEO satellites.

.. figure:: /_figures/leogps_1diff_fig1.png
:align: center

Figure C1.2: Carrier phase single differencing between two LEOs

In the case of the single differencing scenarios, the absolute carrier phase measurements taken by two LEOs are subtracted from each other. Using the carrier phase ranging model from Equation C1.1, the error sources that are common to both are red-boxed below.

.. figure:: /_figures/leogps_1diff_eqn1.png
:align: center

Equation C1.2: Common errors for a single differencing scenario

Since the baseline of the LEO satellites are expected not to deviate beyond 200km, it is considered “short”, and thus likely that the ionospheric errors are correlated. Also, this means that the total number of and pseudo-range IDs of GPS satellites in view will not be any different between the two LEOs. Thus, in the single differencing case, between two LEOs and some k-th GPS satellite, differencing the carrier phase measurements between LEO A and B will remove systematic biases in ionospheric path delays, the k-th GPS satellite clock offsets, and common relativistic effects.

.. figure:: /_figures/leogps_1diff_eqn2.png
:align: center

Equation C1.3: Carrier phase single differencing equation

As a result, the single difference equation comprises only of the relative true ranges, the relative receiver clock bias estimation errors, and the relative carrier phase cycle integer ambiguities. For the epsilon error term, assuming both errors are Gaussian, this results also in a square-root-2 amplification in white Gaussian noise.

If the receiver clock bias errors are small, then the baseline can actually already be derived from the single difference equation with little consequence to the accuracy of the baseline AB.

.. figure:: /_figures/leogps_1diff_fig2.png
:align: center

Figure C1.3: Extraction of baseline vector AB from the single differencing equation.

In extracting the baseline vector AB in Figure C1.3, the experimenter makes a few assumptions. First, assume that the GPS satellite is far away enough such that the signal paths taken from the emitter to the receivers A and B are almost parallel. Second, assume also that the receiver will be able to estimate the direction vector from itself to the GPS satellite, which is given by g-hat in the Figure C1.3, without introducing new errors. This is possible only if coarse positioning estimates of itself is first achieved using the C/A or P code, and that the GPS navigation observables are correctly parsed. In most cases, since the distance of the GPS satellite to the LEO is on the order of about ~20,000km, any coarse positioning errors on the meter-level scale would not significantly affect the accuracy of the estimation of the g-hat vector. Next, a very rough estimate of the integer ambiguity can be estimated as a float using the pseudo-range values ρ from code measurements, and the known carrier wavelength λ.

.. figure:: /_figures/leogps_1diff_eqn3.png
:align: center

One can now solve for the AB vector as seen in Figure C1.3, notwithstanding the fact that the receiver clock bias estimation errors were not cancelled out and will thus show up in some form in the accuracy of the positions. The single differenced baseline solution from LEOGPS for a 100km baseline separation is shown below:

.. figure:: /_figures/leogps_1diff_plot.png
:align: center

Figure C1.4: Relative position error norm of a single differenced 100km LEO baseline.

Observably, the single differenced solution still faces an accuracy > 1m. Embedded in the error plots are likely the unaccounted relative receiver clock bias estimation errors, minor error sources such as antenna phase centre variations, et cetera, which were not differenced away, as well as other white noise error sources.

.. note:: Every step of differencing amplifies the random error sources by root-2, assuming the noises are well-modelled as a Gaussian.

We can go a step further to difference a pair of single-difference observations in order to eliminate the remnant relative receiver clock bias estimation errors. This technique is known as double-differencing, and it will be explained in the next section.
50 changes: 50 additions & 0 deletions docs/_build/html/_sources/docs_cdgps2.rst.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
..
###########################################################################
###########################################################################
## ##
## _ ___ ___ ___ ___ ___ ##
## | | | __ / \ / __| _ | __| ##
## | |__| __ ( ) | (_ | _|__ \ ##
## |____|___ \___/ \___|_| \___/ ##
## v 1.2 (Stable) ##
## ##
###########################################################################
###########################################################################
.. image:: /_static/leogps_logo.png

|
Carrier Double Differencing
===========================

We can actually go one step further beyond single differencing, and that is to difference across two reference GPS satellites. This step is called double differencing, and it is the backbone algorithm used in LEOGPS. This removes the relative receiver clock bias estimation errors, and this section will detail the algorithm and the results below.

.. figure:: /_figures/leogps_2diff_fig1.png
:align: center

Figure C2.1: Carrier phase double differencing equation setup.

The key idea behind double differencing, is to create a differential between two single difference equations. For example, between two LEO units A and B, if some GPS satellite P was taken as the reference emitter satellite in the single difference equation, then a second single difference equation would be taken with respect to a different GPS satellite Q as the reference emitter. In both single difference equations, it makes no difference to the relative receiver clock bias estimation which reference GPS satellite is used, as these are the errors specific only to the receiver-side in the relative sense.

Thus, taking two single difference measurements, one can observe that the relative receiver clock bias estimation error has now become a common error source in the double differenced equation, which can be cancelled out (both relative receiver clock bias terms in the red box in Figure C2.1 are actually the same and thus they cancel).

.. figure:: /_figures/leogps_2diff_fig2.png
:align: center

Figure C2.2: Extraction of the true baseline vector via double differencing.

In a similar fashion to the single differencing algorithm, the double differencing algorithm requires the estimation of the unit direction vector from the LEO A to reference GPS satellite P, and from the LEO B to the reference GPS satellite Q. Once again, with the double-differenced relative range, and on the assumption that the signal path pairs from P to A and P to B are parallel, and the path pairs from Q to A and Q to B are also parallel, one can de-construct the baseline vector AB since each single difference observation forms the base of a right-angled triangle.

Since two reference satellites are now used in the creation of a double differenced equation, for N number of common GPS satellites in view, one can expect N-1 number of double differenced equations. Solving the entire system of equations leads to the baseline vector solution, with the error norm plotted below (error taken against a ground truth for two LEO units at a 100km baseline separation). It is observed that the final elimination of receiver clock biases creates an almost ten fold increase in the navigation accuracy.

.. figure:: /_figures/leogps_2diff_plot.png
:align: center

Figure C2.3: Relative position error norm of a double differenced 100km LEO baseline.

In its essence, the single differencing paradigm changed the structure of the navigation problem, eliminating most nuisance errors, while the double differencing paradigm went further and essentially eliminated the receiver clock bias at the expense of one equation in the entire system of equations, while also redefining the ambiguity term into a double-differential ambiguity.

We can actually go one step further and perform triple-differencing, that is, performing a differencing measurement between two double-differences. This eliminates the ambiguity entirely, but it amplifies the random errors by another factor of root-2, and it further reduces the degrees of freedom by one, from N-1 to N-2, N being the number of GPS satellites.

At this point though, it becomes arguable that estimating the ambiguity with the C/A range (float ambiguity resolution) on a double-differencing measurement would give a better accuracy than performing triple differencing. This is the reason why LEOGPS does not use triple-differencing.
Loading

0 comments on commit fdf2cda

Please sign in to comment.