Examples
PPPx ships with ready-to-run examples under the example/ directory of the repository. They are the fastest way to confirm your installation works and to see realistic configurations.
example/pppx — geodetic processing
Section titled “example/pppx — geodetic processing”This example processes the ZIM2 station (Zimmerwald, Switzerland) with several configurations. By default it uses GPS + Galileo (RTK uses GPS only). Run the whole set with:
cd example/pppx./run.shrun.sh unzips the bundled products and runs each *.ini, writing the .pos, .log, and .stat files (and a plot) into a folder per case.
| File | Role |
|---|---|
ZIM200CHE_R_20221000000_01D_30S_MO.rnx | Rover (multi-GNSS, 30 s) |
ZIMM00CHE_R_20221000000_01D_30S_MO.rnx | Reference station (RTK base) |
ALGO00CAN_R_20221000000_15M_01S_MO.rnx | High-rate (1 s) data for TDP |
Products (CODE MGEX final, plus broadcast / GIM / VMF1)
Section titled “Products (CODE MGEX final, plus broadcast / GIM / VMF1)”| Product | Description |
|---|---|
BRDC00IGS_R_20221000000_01D_MN.rnx | Broadcast ephemeris |
COD0MGXFIN_20221000000_01D_05M_ORB.SP3 | Precise orbit |
COD0MGXFIN_20221000000_01D_30S_CLK.CLK | Precise clock |
COD0MGXFIN_20221000000_01D_15M_ATT.OBX | Satellite attitude |
COD0MGXFIN_20221000000_01D_01D_OSB.BIA | Satellite bias (OSB) |
COD0MGXFIN_20221000000_03D_12H_ERP.ERP | Earth rotation params |
codg1000.22i | Global ionospheric map |
VMFG_2022100 | VMF1 grid |
SPP — Single Point Positioning
Section titled “SPP — Single Point Positioning”Two configurations compare the ionosphere-free combination against a single-frequency solution that fixes the ionosphere with a GIM. Both use the LSQ solver and broadcast ephemeris.
pppx -c 00_spp_if.ini rinex/ZIM200CHE_R_20221000000_01D_30S_MO.rnx # IF combinationpppx -c 01_spp_sf.ini rinex/ZIM200CHE_R_20221000000_01D_30S_MO.rnx # single-frequency + GIM00_spp_if.ini (IF) | 01_spp_sf.ini (SF + GIM) |
|---|---|
![]() | ![]() |
At mid-latitude the single-frequency solution is actually the better of the two: the GIM corrects the ionosphere well, while the IF combination amplifies pseudorange noise (~3×).
PPP — Precise Point Positioning
Section titled “PPP — Precise Point Positioning”The same data processed with the EKF (forward-only, simulating real-time) and the FGO (batch post-processing) solvers, using precise products.
pppx -c 02_ppp_ekf.ini rinex/ZIM200CHE_R_20221000000_01D_30S_MO.rnx # EKFpppx -c 03_ppp_fgo.ini rinex/ZIM200CHE_R_20221000000_01D_30S_MO.rnx # FGO02_ppp_ekf.ini (EKF) | 03_ppp_fgo.ini (FGO) |
|---|---|
![]() | ![]() |
The EKF shows the familiar ~15-minute convergence period because it solves epoch-by-epoch; the FGO forms one large least-squares problem over the whole session, so there is no convergence ramp.
RTK — Real-Time Kinematic
Section titled “RTK — Real-Time Kinematic”A short baseline between ZIM2 (rover) and ZIMM (base), EKF solver. Because the baseline is short, [model] trop and iono are set to none.
pppx -c 06_rtk.ini rinex/ZIM200CHE_R_20221000000_01D_30S_MO.rnx rinex/ZIMM00CHE_R_20221000000_01D_30S_MO.rnx
With the ambiguities resolved, the precision is typical for a short baseline: about 0.24 cm (east), 0.28 cm (north), and 0.48 cm (up).
TDP — Time-Differenced Positioning
Section titled “TDP — Time-Differenced Positioning”TDP targets rapid displacement monitoring (e.g. earthquakes): it eliminates the ambiguities by differencing adjacent epochs, estimates the displacement between them, and accumulates it onto the initial position. It is run on the high-rate (1 Hz) ALGO data with precise products (to minimise drift from error accumulation).
pppx -c 07_tdp.ini rinex/ALGO00CAN_R_20221000000_15M_01S_MO.rnx
For the static ALGO station (zero true displacement), the precision over 15 minutes is about 0.28 cm (east), 0.59 cm (north), and 0.93 cm (up).
example/smartphone — smartphone GNSS
Section titled “example/smartphone — smartphone GNSS”This example reproduces the high-precision ZTD estimation from Android smartphone GNSS published in Atmospheric Measurement Techniques. Three devices recorded 24 h of data: a geodetic station (ETH2), a u-blox receiver (UBLX), and a Google Pixel 4XL (PIXL).
Download the dataset from the ETH Research Collection, unzip it into the example folder, convert the Hatanaka .23d files to .23o, and run:
unzip dataset_2023-05-18.zipcd dataset_2023-05-18/for f in *.23d; do crx2rnx $f; done
./run.shpython plot_ztd.pyThe ZTD estimates appear in the last three columns of each .pos file (ZTD = zhd + zwd + dzwd).



