Automated GNSS testing, logging, and performance analysis suite
A comprehensive Python suite for automated GNSS testing, logging, and performance analysis. Designed for Telit-based modules with standard NMEA output, this toolkit provides:
-
gnss_logger.py
Resets & powers-on the GNSS engine, enables NMEA output, and captures raw NMEA sentences to file.
Key functions inside:send_reset(mode): sends cold/warm/hot reset via AT commandenable_nmea(): configures which NMEA sentences to outputcapture_nmea(duration, output_file): logs incoming NMEA lines for the specified time
-
gnss_nmea_analysis.py
Parses a saved NMEA log, computes TTFF, CEP₅₀/₉₅, RMS error, and generates standard plots.
Key functions inside:parse_nmea(nmea_file): extracts time, fix quality, lat/lon, HDOP, satellite counthaversine(lat1, lon1, lat2, lon2): computes great-circle distancemain()(CLI entry point): handles arguments, computes metrics, writes CSV + PNGs
- GNSS Logger & Analysis Toolkit
- Python 3.7+
- pip (Python package manager)
- Tkinter (for GUI):
- Linux:
sudo apt-get install python3-tk
- Linux:
-
Clone the repository
git clone https://github.com/RFingAdam/gnss-toolkit cd gnss-toolkit -
Install dependencies
pip install pyserial pandas numpy matplotlib
Capture raw NMEA sentences from a Telit GNSS module:
python gnss_logger.py <COM_PORT> [--mode MODE] [--duration SECONDS] [--output FILE]| Option | Description |
|---|---|
<COM_PORT> |
Serial port, e.g. COM4 (Windows) or /dev/ttyUSB0 (Linux/macOS) |
--mode |
GNSS start mode: cold (default), warm, or hot |
--duration |
Logging duration in seconds (default: 900) |
--output |
Output filename for the NMEA log (default: nmea_capture.txt) |
- AT command responses &
OKmessages # START HHMMSSheader marking session timestamp- First-fix notification
- Live NMEA sentences streamed to console
- Raw NMEA log file containing only NMEA sentences (plus the header)
Parse an NMEA log, compute performance metrics, and generate plots:
python gnss_nmea_analysis.py \
--nmea-file path/to/nmea_capture.txt \
--start-time HHMMSS \
--ref-lat <latitude> \
--ref-lon <longitude>| Parameter | Description |
|---|---|
--nmea-file |
Path to the NMEA log (produced by gnss_logger.py) |
--start-time |
GNSS start time in UTC (format HHMMSS) |
--ref-lat, --ref-lon |
Reference coordinates (decimal degrees) |
| Filename | Description |
|---|---|
<basename>_summary.csv |
CSV summary of TTFF, CEP₅₀/₉₅, RMS, and fix count |
error_histogram.png |
Error distribution histogram with CEP₅₀/₉₅ markers |
scatter_with_cep.png |
ENU scatter plot of fixes with CEP₅₀/₉₅ circles |
error_vs_hdop.png |
Scatter of HDOP vs. horizontal error |
sats_vs_time.png |
Plot of satellite count vs. UTC time |
summary_notes.txt |
Plaintext report containing all metrics and samples |
Below are sample results generated by gnss_nmea_analysis.py / the GUI:
Tkinter GUI wrapping the same analysis logic with summary export:
- Browse… to select your NMEA log file
- Enter Start Time (HHMMSS) (e.g.
192841) - Enter Reference Latitude & Longitude (decimal degrees)
- Click Run Analysis
| Filename | Description |
|---|---|
summary_notes.txt |
Plaintext report of TTFF, CEP₅₀/₉₅, RMS, sample fixes |
error_histogram.png |
Histogram of horizontal errors with CEP markers |
scatter_with_cep.png |
ENU scatter plot with CEP₅₀/₉₅ circles |
error_vs_hdop.png |
Scatter of HDOP vs. horizontal error |
sats_vs_time.png |
Plot of satellite count vs. UTC time |
| Metric | Description |
|---|---|
| TTFF (s) | Time‐to‐first‐fix after GNSS power‐on |
| CEP₅₀ / CEP₉₅ (m) | Radii containing 50 % / 95 % of horizontal fixes |
| RMS Error (m) | Root‐mean‐square of horizontal errors |
| Error Histogram | Distribution of horizontal errors with CEP₅₀/₉₅ lines |
| ENU Scatter | East/North offsets (m) with CEP₅₀/₉₅ rings |
| HDOP vs Error | Relationship between HDOP values and observed error |
| Satellites vs Time | Number of tracked satellites throughout the session |
- Tweak histogram bins or styling
- Add support for additional NMEA sentences (e.g. GSA, RMC)
- Modify CLI flags (logging duration, mode, output paths)
- Extend analysis with new metrics (e.g. HDOP time-series)
Licensed under the GNU GPL v3.0. See LICENSE for details.
The project name and the logo files in this repository are not part of the licensed work. The licence above grants no permission to use them, except as needed to describe the origin of the work.



