PPPx is a versatile multi-GNSS data processing software package. Its capabilities go beyond Precise Point Positioning (PPP).
The main program, pppx
, focuses on positioning and supports the following features:
- Solution modes:
- SPP: Single Point Positioning
- PPP: Precise Point Positioning
- RTK: short baseline processing
- TDP: Time-Differenced Positioning
- GNSS systems: GPS, GLONASS, Galileo, Beidou-2/3, QZSS
- Solvers: LSQ, EKF and FGO
- PPP-AR with OSB products (.BIA)
- Flexible frequency selection: L1/L2/L5/E1/E5a/...
- High precision and efficiency: Capable of processing 2880 epochs within 2 seconds
- Unified input/output format
Other programs in the PPPx software package include:
pppx
is recommendeded for use on Ubuntu, as the binary was built with gcc 11
on Ubuntu 22.04. However, it should work on most modern Linux systems with gcc 11 available.
The executable bin/pppx
is dynamically linked to the
ceres solver, so the library libceres-dev
must be
installed first. The installation on Linux can be done with the following commands:
sudo apt install libceres-dev
git clone git@github.com:YuanxinPan/PPPx_bin.git
mkdir -p ${HOME}/.local/bin
cp PPPx_bin/bin/pppx ${HOME}/.local/bin/
echo "export PATH=\${HOME}/.local/bin:\$PATH" >> ${ HOME}/.bashrc
# Restart your terminal afterward
If you don't have the sudo privilege and cannot install libceres-dev
, you can
use the static build bin/pppx\_static
, though this version does not support FGO.
The easiest way to run pppx
on Windows is via the Windows Subsystem for Linux (WSL).
The general steps to process GNSS data with pppx
are:
- Prepare RINEX observation files and necessary products (either broadcast ephemeris or precise products)
- Modify the configuration file
pppx.ini
- Execute
pppx
with the appropriate command-line arguments:
pppx path-to-rnxo [rnxo-of-base] pppx.ini
# Example usage:
# For SPP/PPP/TDP (Note: TDP is suitable for high-frequency data, e.g., 1 Hz)
pppx rinex/ZIM200CHE_R_20221000000_01D_30S_MO.rnx pppx.ini
# For RTK (ZIMM is the base station in this example)
pppx rinex/ZIM200CHE_R_20221000000_01D_30S_MO.rnx rinex/ZIMM00CHE_R_20221000000_01D_30S_MO.rnx pppx.ini
- Configuration file: pppx.ini
- GNSS observations: RINEX format
- Satellite products: Broadcast ephemeris or precise products, specified in
pppx.ini
- Table files: Provided in the table directory, specified in
pppx.ini
pos file
: Receiver position, clock, and ZTD estimates for each epochlog file
: Debugging informationstat file
: Postfit residuals and various estimates in the RTKLIB stat format, for visualization with RTKLIB
# To plot position estimates only
python scripts/plot_ppppos.py pos_file
# To plot position, receiver clock and ZTD estimates
python scripts/plot_ppppos.py pos_file -a
# -a Plot receiver position, clock, and ZTD estimates
# -i Interactive mode
# -s Fixed scale for the y-axis; otherwise, scale is set automatically
For enhanced interactive viewing and visualization of postfit residuals:
- Open the
rtkplot.exe
application - Navigate to "File" > "Open Solution-1" and select the generated stat file
- Interactively view various plots
To help you get started, several examples are available in the
example/pppx folder. Additionally, an example demonstrating
pppx
processing of GNSS data collected by Android smartphones is provided in
the example/smartphone folder. Please execute the
correspoding run.sh
script to see how pppx
works:
cd example/pppx/
./run.sh # processing & plotting
For instance, the following is a visualization of a kinematic PPP solution for the ZIM2 station, using FGO and GPS+Galileo observations:
if you have suggestions or encounter issues related to the usage of the PPPx software, please create an issue.
- Yuanxin Pan - YuanxinPan
This project is licensed under the GPLv3 License - see the LICENSE file for details.