Skip to content
Guillaume W. Bres edited this page May 29, 2024 · 3 revisions

Precise Point Positioning (PPP)

PPP is the ultimate positioning strategy currently available.
More than a strategy, usually PPP implies a complete algorithm with very specific conditions to comply with. As previously stated, this framework allows tweaking everything, this gives you the ability to actually deploy degraded PPP (quicker and easier to deploy) but also very advanced PPP (which is usually intended).

In PPP, Phase observations on two signals are now required. This makes it the most difficult strategy to comply with.
For example, when working with GPS, that means you have to mix observation of both Pseudo Range and Phase Range on both L1 and either L2 or L5. Not many vehicles stream L5 as of today, and L2 is rarely dealt with. You can already see it's going to be difficult to gather candidates. From our experience, in 2024, it is easier to work with Galileo when advanced PPP is the ultimate end goal. But that highly depends on the data and hardware that is available to you.

Advanced PPP targetting centimetric solutions require you to provide SP3 and CLK RINEX.
To reach best performance, you will have to provide CLK RINEX that is expressed in the same timescale as your Observation RINEX.
If that is true, the frawork will print Temporal PPP Compliancy in its initial logs. If that is not true, we will print a warning and you will hardly reach centimetric solutions.

As stated in the first section of this Wiki, SP3 and CLK RINEX should also come from the same production program and agency.
If we spot that this is not true, we will also print a warning.

Ideally your SP3 coordinates should be expressed in WGS84 geoid, and we currently do not have the ability to convert those.
If you fail to comply with that, you will introduce bias in the solutions as well. This varies a lot depending on the production agency.

PPP versus SPP

  • Much harder to comply with (Phase is required, secondary signal required)
  • Ionosphere bias is measured, not modeled
  • Troposphere bias can either be modeled, or filtered (not yet available)
  • Target centimetric solutions

PPP versus CPP

  • Much harder to comply with (Phase is required)
  • Ionosphere bias is measured, not modeled
  • Troposphere bias can either be modeled, or filtered (not yet available)
  • Target centimetric solutions

PPP on GPS

rinex-cli \
    -f test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \
    -f test_resources/CLK/V3/GRG0MGXFIN_20201770000_01D_30S_CLK.CLK.gz \
    -f test_resources/NAV/V3/ESBC00DNK_R_20201770000_01D_MN.rnx.gz \
    -f test_resources/SP3/GRG0MGXFIN_20201770000_01D_15M_ORB.SP3.gz \
    -P GPS \
    -p -c config/survey/ppp_kf.json \
    | tee logs.txt

In this config script, the Navigation filter is set to Kalman, which is our most demanding as of today, which is typically implied by PPP. Our framework allows switching to LSQ or disabling the navigation filter.

Activate a secondary Kalman filter that serves as a Denoising Postfit filter:

rinex-cli \
    -f test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \
    -f test_resources/CLK/V3/GRG0MGXFIN_20201770000_01D_30S_CLK.CLK.gz \
    -f test_resources/NAV/V3/ESBC00DNK_R_20201770000_01D_MN.rnx.gz \
    -f test_resources/SP3/GRG0MGXFIN_20201770000_01D_15M_ORB.SP3.gz \
    -P GPS \
    -p -c config/survey/ppp_kf_postfit.json \
    | tee logs.txt

We currently support a single ambiguity solver, the so called Lambda method, which is not ideal but is compatible with 1D context (our current limitation). Once 2D contexts are supported (most likely when RTK becomes available), we will unlock other options to resolve the phase ambiguity.

PPP on Galileo

Working with Galileo gives x10 better results directly, which is utterly interesting when considering PPP.

We continue with the previous setup, and simply consider Galileo constellation now:

rinex-cli \
    -f test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \
    -f test_resources/CLK/V3/GRG0MGXFIN_20201770000_01D_30S_CLK.CLK.gz \
    -f test_resources/NAV/V3/ESBC00DNK_R_20201770000_01D_MN.rnx.gz \
    -f test_resources/SP3/GRG0MGXFIN_20201770000_01D_15M_ORB.SP3.gz \
    -P GAL \
    -p -c config/survey/gpst_ppp_postfit.json \
    | tee logs.txt

What's next

Clone this wiki locally