Skip to content

Latest commit

 

History

History
68 lines (47 loc) · 2.63 KB

File metadata and controls

68 lines (47 loc) · 2.63 KB

JaGuard: Jamming Correction of GNSS Deviation with Deep Temporal Graphs

Overview

JaGuard (Jamming Guardian) is a deep temporal graph neural network designed to estimate and correct jamming-induced positional drift in GNSS systems. JaGuard defines this task as a dynamic graph regression problem. It models the satellite-receiver constellation as a sequence of heterogeneous star graphs, capturing the physical deterioration of the signal over time.

Key Features:

  • Dynamic Star Graph: Models the receiver as a central node and visible satellites as leaf nodes.
  • Spatiotemporal Fusion: Uses a HeteroGCLSTM layer to process 10-second windows of signal history.
  • Minimalist Input: Operates exclusively on standard NMEA observables (SNR, Azimuth, Elevation; Latitude and Longitude).
  • High Resilience: Maintains centimeter-level accuracy even under severe -45 dBm jamming and data starvation.

Project Structure

├── gnss/                  # Core library
│   ├── train/             # Training logic
│   ├── dataset.py         # Graph construction & normalization
│   └── model.py           # JaGuard architecture 
├── params.yaml            # Central experiment configuration
├── prepare_data.py        # Data preprocessing
├── run_experiment.py      # Execution for a single configuration
├── run_all_experiments.py # Master script for automated experimental sweeps
├── dvc.yaml               # DVC pipeline orchestration
└── README.md 

Installation

Make sure you have Conda installed:

1. Create environment

conda create --solver classic -n gnss-py310
python=3.10
numpy=1.24.4
scipy=1.15.2
pandas=1.3.5
scikit-learn
-c conda-forge -y

2. Activate environment

source $(conda info --base)/etc/profile.d/conda.sh conda activate gnss-py310

3. Install remaining dependencies

pip install -r requirements.txt

Automated Pipeline

This project is fully instrumented with Data Version Control (DVC). To simplify the research workflow, we use an automated sweep script that manages parameter updates and triggers the DVC pipeline internally. This script automatically updates params.yaml for each configuration and executes dvc repro for you.

1. Run the full sweep with default settings

python run_all_experiments.py

2. Optional: Run a dry-run to see the experiment matrix without executing

python run_all_experiments.py --dry-run

3. Optional: Filter by specific receivers or define custom seeds

python run_all_experiments.py --receivers Ublox10,GP01 --seeds 42,2024

Citation