Skip to content
Guillaume W. Bres edited this page May 16, 2024 · 5 revisions

Code based Precise Positioning (CPP)

Like SPP, we only consider Pseudo Range (PR) observations, but we now consider those on two separate frequencies (L2 or L5). We still do not consider Phase Range (PH) observations, unlike PPP.

CPP is a little harder than SPP to comply with, because you will have to sample two carrier signals.

The combination allows accurate Ionosphere delay compensation. This means that the iono_delay field of the Modeling section of the config script is irrelevant in CPP (like in PPP). It also means that the Ionosphere Delay exposed in the CGGTTS solution is now measued, not modeled.

CPP versus SPP

  • Requires secondary carrier signal: harder to comply with
  • Will not generate a single solution if your observations come from a single signal
  • Ionosphere is not modeled, this option becomes irrelevant and processing is actually faster (no modelling)
  • Reach high end SPP results much more easily

Note that this framework supports any RINEX code, and so, allows working with any signal in theory.

CPP versus PPP

  • Similar Ionosphere bias cancellation
  • No phase observation required: less signal observations required, easier to comply with
  • Troposphere can only be modeled. Soon we will have the ability to inject it in a Kalman filter, but that is not the case as of today
  • Hard to cross the metric barrier

CPP on GPS

Even though Ionosphere modeling is now turned off, we still obtain similar results to our best SPP examples:

cat conf.json

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 rinex-cli/config/rtk/gpst_cpp_basic.json \
    | tee logs.txt

When working with GPS, pay attention that L2 or L5 is now required and not many vehicles stream them.
You have to be careful that they do exist, which is true in our ESBC00DNK_R_20201 example.

CPP on Galileo

Working with Galileo gives directly x10 better results

cat conf.json

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 conf.json \
    | tee logs.txt

What's next

Clone this wiki locally