Skip to content

Configuration

PPPx reads all of its settings from a human-readable pppx.ini file. Generate a fully-populated default for any solution mode and edit from there:

Terminal window
pppx -x ppp > pppx.ini

A complete default pppx.ini looks like this:

; configuration file for pppx
[session]
interval = ; interval (sec) [ RINEX ]
date = ; year DOY [ RINEX ]
start = ; hour min sec [ none ]
end = ; hour min sec [ none ]
[constellation]
system = GE ; opt: GRECJ [ GRECJ ]
exclude = ; excluded PRNs [ none ]
[observation]
noise = 0.3 0.002 ; observation noise of code/phase (m) [ 0.3 0.002 ]
; G/R/E/C/J = f1 f2 obs_priority: high -> low
G = 1 2 WPCLSXYMN ; default: [ 1 2 WPCLSXYMN ]
R = 1 2 PCIQX ; default: [ 1 2 PCIQX ]
E = 1 5 XCIQB ; default: [ 1 5 XCIQB ]
C = 2 6 IQX ; default: [ 2 6 IQX ]
J = 1 2 SLXCZ ; default: [ 1 2 SLXCZ ]
[model]
trop = GMF ; opt: GMF/VMF1/GPT2w/none [ GMF ]
iono = IF ; opt: IF/brdc/IONEX/none [ IF ]
[estimation]
sol_mode = ppp ; opt: spp/ppp/rtk/tdp [ ppp ]
pos_mode = kinematic ; opt: kinematic/static/fixed [ kinematic ]
solver = ekf ; opt: ekf/fgo/lsq [ ekf ]
fgo_var = no ; output FGO variance info [ no ]
weight_opt = elev ; opt: elev/snr [ elev ]
elev_mask = 7 ; elevation mask (°) [ 10 ]
snr_mask = 35 ; SNR mask (dB-Hz) [ 25 ]
site_pos = ; initial position in xyz (m) [ spp ]
; ppp only
ppp_ar = no ; PPP ambiguity resolution [ no ]
sf_ppp = no ; single-frequency PPP [ no ]
slip_det = ALL ; opt: off GF MW LLI TDCP ALL [ ALL ]
pos_pri = 100 1 ; uncertainty process_noise [ 1E+02 1 ]
clk_pri = 100 100 ; m m/sqrt(s) [ 1E+02 1E+02 ]
isb_pri = 50 3.2E-04 ; [ 5E+01 3.2E-04 ]
ztd_pri = 0.5 3E-05 ; [ 0.5 3E-05 ]
; rtk only
rtk_ar = yes ; RTK ambiguity resolution [ yes ]
glonass_ar = no ; AR for GLONASS [ no ]
base_pos = ; base position in xyz (m) [ spp ]
[product]
src = precise ; opt: brdc/precise [ precise ]
nav = ./products/BRDC00IGS_R_-YEAR--DOY-0000_01D_MN.rnx ; broadcast ephemeris (brdc)
sp3 = ./products/COD0MGXFIN_20221000000_01D_05M_ORB.SP3 ; precise orbit (precise)
clk = ./products/COD0MGXFIN_20221000000_01D_30S_CLK.CLK ; precise clock (precise)
erp = ./products/COD0MGXFIN_20221000000_03D_12H_ERP.ERP ; earth rotation parameters (precise)
obx = ./products/COD0MGXFIN_20221000000_01D_15M_ATT.OBX ; satellite attitude (precise)
bia = ./products/COD0MGXFIN_20221000000_01D_01D_OSB.BIA ; satellite bias (precise)
ion = ./products/codg-DOY-0.-YR-i ; global ionospheric map (common)
vmf = ./products/VMFG_-YEAR--DOY- ; VMF1 grid (common)
[table]
igsatx = ../../table/igs14.atx
oceanload = ../../table/oceanload
channel = ../../table/glonass_chn
gpt2w = ../../table/gpt2_1wA.grd
orography = ../../table/orography_ell
[output]
path = ; the folder where solutions will be stored [ ./ ]
level = info ; opt: off/critical/error/warn/info/debug/trace [ info ]
SectionPurpose
[session]Processing interval and time window.
[constellation]Which GNSS systems to use and which satellites to exclude.
[observation]Signal/frequency selection, observable priority, and noise.
[model]Tropospheric and ionospheric models.
[estimation]Solution mode, positioning mode, solver, and estimation strategy.
[product]Satellite product source and paths — see Products & Tables.
[table]Paths to table files — see Products & Tables.
[output]Output folder and log level.

The keys most users change are [constellation] system; [estimation] sol_mode, pos_mode, solver; and [product] src (plus the relevant product paths).

[session]
interval = ; processing interval (sec); ≥ and an integer multiple of the RINEX rate
date = ; year DOY; replaces placeholders in [product]; read from RINEX if blank
start = ; hour min sec — first epoch (inclusive)
end = ; hour min sec — last epoch (inclusive)

The session section of pppx.ini

Leave any field blank to process the whole file epoch-by-epoch. date is used to fill the date placeholders in [product] paths (see below); if blank, it is read from the first RINEX epoch.

[constellation]
system = GE ; any subset of GRECJ, order/spacing don't matter
exclude = ; whitespace-separated PRNs to exclude, e.g. G05 E14

The constellation section of pppx.ini

GPS is not mandatory — a Galileo-only solution is perfectly valid.

[observation]
noise = 0.3 0.002 ; uncombined code / phase noise (m)
G = 1 2 WPCLSXYMN ; system = f1 f2 observable-priority (high → low)

The observation section of pppx.ini

For each system you specify the two frequencies and the observable-code priority list. The noise values are for uncombined observations; the noise of the ionosphere-free combination is derived from them automatically. The inline comments in the generated file document the available codes.

[model]
trop = GMF ; opt: GMF / VMF1 / GPT2w / none
iono = IF ; opt: IF / brdc / IONEX / none

The model section of pppx.ini

Model names are case-sensitive. Notes:

  • For RTK, both trop and iono are ignored (short baselines cancel the atmospheric delays) — set them to none.
  • For PPP, iono must be IF (unless you enable single-frequency PPP; see sf_ppp below).
  • Tide models are not configured here: solid Earth tide, ocean tidal loading, and pole tide are applied for PPP when the needed inputs are available, and are not applied for SPP / RTK / TDP.

The most important section. It selects the solution, the estimator, and the estimation strategy.

[estimation]
sol_mode = ppp ; spp / ppp / rtk / tdp
pos_mode = kinematic ; kinematic / static / fixed
solver = ekf ; ekf / fgo / lsq
fgo_var = no ; output FGO variance info (slow; off by default)
weight_opt = elev ; elev / snr
elev_mask = 7 ; elevation mask (°)
snr_mask = 35 ; SNR mask (dB-Hz)
site_pos = ; initial XYZ (m); computed by SPP if blank
ppp_ar = no ; PPP ambiguity resolution (ppp only)
sf_ppp = no ; single-frequency PPP with GIM (ppp only)
slip_det = ALL ; off / GF / MW / LLI / TDCP / ALL
pos_pri = 100 1 ; a priori uncertainty process-noise (position)
clk_pri = 100 100 ; receiver clock
isb_pri = 50 3.2E-04 ; inter-system bias
ztd_pri = 0.5 3E-05 ; zenith tropospheric delay
rtk_ar = yes ; RTK ambiguity resolution (rtk only)
glonass_ar = no ; GLONASS AR (rtk only)
base_pos = ; base XYZ (m) for RTK; computed by SPP if blank

The estimation section of pppx.ini

Key fields:

  • sol_mode / solver compatibility: SPP and TDP support lsq and fgo; PPP and RTK support ekf and fgo.
  • pos_mode: SPP and TDP are kinematic only.
  • ppp_ar: enable PPP ambiguity resolution. Requires a valid phase-bias (bia) product; uses LAMBDA (EKF) or rounding (FGO). GLONASS is excluded from AR, and GPS L5 is not supported for PPP-AR.
  • sf_ppp: single-frequency PPP fixing the ionosphere to a GIM. Dual-frequency observations are still needed for cycle-slip detection; keep ppp_ar = no.
  • slip_det: cycle-slip detection method. ALL suits most geodetic stations; MW is poor with noisy pseudorange; LLI is the recommendation for smartphone data.
  • *_pri: a priori uncertainty and process noise for the EKF (position, clock, ISB, ZTD). The EKF estimates a receiver clock for one reference system and ISBs for the others. With solver = fgo only pos_pri and ztd_pri take effect — FGO estimates an individual receiver clock (not an ISB) as white noise for each constellation, so clk_pri and isb_pri are unused.
  • rtk_ar / glonass_ar: RTK ambiguity resolution, on by default; DD ambiguities are resolved with LAMBDA (ekf) or rounding (fgo). Enable GLONASS AR only when rover and base share the same receiver type.

These two sections point at the satellite products and table files. Their syntax, the broadcast-vs-precise rules, date placeholders, and the list of table files are covered on the Products & Tables page.

[output]
path = ; output folder (default: ./)
level = info ; off / critical / error / warn / info / debug / trace

The output section of pppx.ini

level controls the verbosity of the .log file — see Products & Tables.

  • Start from pppx -x <mode> rather than writing pppx.ini from scratch.
  • Keep a separate pppx.ini per scenario so runs are reproducible.
  • Relative [product] / [table] paths are resolved against the directory you run pppx from, not the location of pppx.ini.

See Examples for complete, working configurations.