Testing suite for GPS signal disruption using BladeRF xA9 SDR.
- BladeRF xA9 SDR
- Host computer with USB 3.0
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install libbladerf-dev libbladerf2 bladerfEasy setup with script:
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Run setup script - installs everything including BladeRF bindings
chmod +x setup_bladerf.sh
./setup_bladerf.shOr manual setup:
source venv/bin/activate
pip install -r requirements.txt
# Then manually install BladeRF Python bindings from sourceEach script targets a specific GPS band:
# L1 Band - 1575.42 MHz
python transmit_gps_l1.py
# L2 Band - 1227.60 MHz
python transmit_gps_l2.py
# L5 Band - 1176.45 MHz
python transmit_gps_l5.pySimultaneous transmission on two bands (power is split):
# L1 + L2 combo
python transmit_gps_l1_l2_dual.py
# L1 + L5 combo
python transmit_gps_l1_l5_dual.py
# L2 + L5 combo
python transmit_gps_l2_l5_dual.pyNote: Dual mode splits power between channels, resulting in weaker signals per band.
Default settings (edit at top of each script):
- Bandwidth: 2 MHz per channel
- Sample Rate: 5 MSPS
- TX Gain: 60 dB (maximum)
- Signal Type: White noise
# In script headers
TX_GAIN_DB = 60 # Range: -15 to 60 dB# Modify at top of scripts
FREQUENCY_MHZ = 1575.42 # Your target frequency- L1: 1575.42 MHz - Used by all consumer GPS devices
- L2: 1227.60 MHz - Military P(Y) code + Civilian L2C
- L5: 1176.45 MHz - Newest civilian band, higher precision
- Maximum gain: 60 dB
- Output power: ~20 dBm (100mW) at max gain
- Lower frequencies (L5/L2) naturally output more power than L1
- Generates pseudo-random noise at full DAC scale
- 12-bit I/Q samples (SC16_Q11 format)
- Continuous transmission until interrupted
# Check device connection
bladeRF-cli -p
# Add udev rules if needed
sudo wget https://www.nuand.com/fpga/88-nuand-bladerf.rules -O /etc/udev/rules.d/88-nuand-bladerf.rules
sudo udevadm control --reload-rulesThis warning is normal and can be ignored:
[INFO @ host/libraries/libbladeRF/src/helpers/version.c:103] FPGA version (v0.16.0) is newer than entries...
Ensure BladeRF Python bindings are properly installed:
python -c "import bladerf; print('Success')"Press Ctrl+C to cleanly stop any running script.
├── README.md # This file
├── requirements.txt # Python dependencies
├── setup_bladerf.sh # BladeRF setup helper
├── transmit_gps_l1.py # L1 band jammer
├── transmit_gps_l2.py # L2 band jammer
├── transmit_gps_l5.py # L5 band jammer
├── transmit_gps_l1_l2_dual.py # Dual L1+L2
├── transmit_gps_l1_l5_dual.py # Dual L1+L5
└── transmit_gps_l2_l5_dual.py # Dual L2+L5