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:
pppx -x ppp > pppx.iniA 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 -> lowG = 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 onlyppp_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 onlyrtk_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.atxoceanload = ../../table/oceanloadchannel = ../../table/glonass_chngpt2w = ../../table/gpt2_1wA.grdorography = ../../table/orography_ell
[output]path = ; the folder where solutions will be stored [ ./ ]level = info ; opt: off/critical/error/warn/info/debug/trace [ info ]Sections at a glance
Section titled “Sections at a glance”| Section | Purpose |
|---|---|
[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]
Section titled “[session]”[session]interval = ; processing interval (sec); ≥ and an integer multiple of the RINEX ratedate = ; year DOY; replaces placeholders in [product]; read from RINEX if blankstart = ; hour min sec — first epoch (inclusive)end = ; hour min sec — last epoch (inclusive)
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]
Section titled “[constellation]”[constellation]system = GE ; any subset of GRECJ, order/spacing don't matterexclude = ; whitespace-separated PRNs to exclude, e.g. G05 E14
GPS is not mandatory — a Galileo-only solution is perfectly valid.
[observation]
Section titled “[observation]”[observation]noise = 0.3 0.002 ; uncombined code / phase noise (m)G = 1 2 WPCLSXYMN ; system = f1 f2 observable-priority (high → low)
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]
Section titled “[model]”[model]trop = GMF ; opt: GMF / VMF1 / GPT2w / noneiono = IF ; opt: IF / brdc / IONEX / none
Model names are case-sensitive. Notes:
- For RTK, both
tropandionoare ignored (short baselines cancel the atmospheric delays) — set them tonone. - For PPP,
ionomust beIF(unless you enable single-frequency PPP; seesf_pppbelow). - 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.
[estimation]
Section titled “[estimation]”The most important section. It selects the solution, the estimator, and the estimation strategy.
[estimation]sol_mode = ppp ; spp / ppp / rtk / tdppos_mode = kinematic ; kinematic / static / fixedsolver = ekf ; ekf / fgo / lsqfgo_var = no ; output FGO variance info (slow; off by default)weight_opt = elev ; elev / snrelev_mask = 7 ; elevation mask (°)snr_mask = 35 ; SNR mask (dB-Hz)site_pos = ; initial XYZ (m); computed by SPP if blankppp_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 / ALLpos_pri = 100 1 ; a priori uncertainty process-noise (position)clk_pri = 100 100 ; receiver clockisb_pri = 50 3.2E-04 ; inter-system biasztd_pri = 0.5 3E-05 ; zenith tropospheric delayrtk_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
Key fields:
sol_mode/solvercompatibility: SPP and TDP supportlsqandfgo; PPP and RTK supportekfandfgo.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; keepppp_ar = no.slip_det: cycle-slip detection method.ALLsuits most geodetic stations;MWis poor with noisy pseudorange;LLIis 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. Withsolver = fgoonlypos_priandztd_pritake effect — FGO estimates an individual receiver clock (not an ISB) as white noise for each constellation, soclk_priandisb_priare 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.
[product] and [table]
Section titled “[product] and [table]”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]
Section titled “[output]”[output]path = ; output folder (default: ./)level = info ; off / critical / error / warn / info / debug / trace
level controls the verbosity of the .log file — see Products & Tables.
- Start from
pppx -x <mode>rather than writingpppx.inifrom scratch. - Keep a separate
pppx.iniper scenario so runs are reproducible. - Relative
[product]/[table]paths are resolved against the directory you runpppxfrom, not the location ofpppx.ini.
See Examples for complete, working configurations.