GPS Signal Acquisition and Position Fix

~180 min8 Steps

Receive live GPS L1 signals with an RTL-SDR, generate PRN codes from scratch, implement FFT-based satellite acquisition, decode navigation messages with GNSS-SDR, and compute a position fix via trilateration.

Prerequisites
Gather these before starting the workshop
  • RTL-SDR Blog V3 or V4 (TCXO version — critical for GPS)
  • Active GPS patch antenna with SMA connector (requires bias tee power)
  • GNSS-SDR installed (from apt or built from source)
  • Python 3.10+ with NumPy, SciPy, Matplotlib
  • Clear sky view for the GPS antenna — at least 60° above horizon in all directions
Step 1 of 813% complete
GPS L1 Signal Structure
25 min
Step 1

GPS L1 at 1575.42 MHz is a right-hand circularly polarized (RHCP) spread-spectrum signal. It's transmitted at only 20–50 watts from satellites 20,200 km away, arriving at Earth at about −130 dBm — well below the thermal noise floor of your SDR without special processing. That's why GPS needs spread-spectrum techniques.

GPS (Global Positioning System) transmits precision ranging signals that enable receivers to compute their position via trilateration from multiple satellites. Understanding the L1 signal structure is essential for building a software receiver.

GPS L1 signal specification

Center frequency1575.42 MHz (L1 band)
PolarizationRight-hand circular (RHCP)
ModulationBPSK (Binary Phase Shift Keying)
Chip rate (C/A code)1.023 Mcps (megachips per second)
C/A code length1023 chips, repeats every 1 ms
Navigation message rate50 bps
Signal bandwidth (null-to-null)2.046 MHz
Received power (typical)−130 dBm at Earth surface
Processing gain (after despreading)+30 dB per 1 ms code period (10·log₁₀(1023) = 30.1 dB), extending to +43 dB with 20 ms coherent integration aligned to the 50 bps navigation data bits

Carrier

1575.42 MHz RF carrier — RHCP. The satellite phase-modulates this with the ranging code and navigation data.

C/A Code (PRN)

1023-chip Gold code unique to each satellite. Chips at 1.023 MHz. BPSK-modulates the carrier at ±180°. Repeats every 1 ms.

Navigation Message

50 bps data: satellite orbit (ephemeris), clock corrections, satellite health, almanac for all satellites. BPSK on top of C/A code.

Why the signal is below the noise floor — and how GPS works anyway

The GPS signal at −130 dBm sits about 20 dB below the thermal noise floor of a typical RTL-SDR (noise floor ≈ −110 dBm in 2 MHz bandwidth). The receiver recovers it using correlation: multiply the received signal with a locally-generated replica of the known 1023-chip PRN code. After 1 ms of integration (one full code period), the correlation peak rises 30 dB above noise — making the signal detectable with SNR of ~20 dB.