Show HN: Building a GPS receiver

Overall reception & learning style

  • Thread is highly positive about the project and write-up.
  • Many appreciate the “live learning adventure” style, including showing search terms, mistakes, and gaps in understanding.
  • Several readers say it helped them finally understand GPS signal processing end-to-end.

“From scratch” and hardware choices

  • Some initially expect “from scratch” to include custom RF hardware; others argue that starting from an SDR that only samples RF is still legitimately “from scratch” for GPS.
  • Discussion notes that older GPS receivers implemented much of this in dedicated hardware; here it’s done in software.
  • Modern production chips often mimic SDR-style architectures but with hardware accelerators for power efficiency.
  • One correction: there now exist commercial “direct RF sampling” devices fast enough to sample GPS carriers directly.

Time-to-first-fix, almanac, and processing

  • Older receivers needed 12.5+ minutes to pull down the full almanac at low data rates.
  • Modern devices speed acquisition by:
    • Brute-forcing PRN codes, Doppler offsets, and code phases in parallel.
    • Using network assistance to fetch almanac/ephemeris (“A-GNSS”).
  • There is debate over what “brute force” means: some see it as simply “try all plausible codes/frequencies,” which is feasible with modern compute.
  • Clarified that ephemerides repeat on ~30-second cycles and are sufficient for a basic fix without full almanac.

Pre-2000 GPS accuracy and automotive navigation

  • One side claims selective availability (SA) made GPS “definitely useless” for road navigation.
  • Others counter with concrete examples of pre-2000 in-car systems and differential GPS that were “usable but clunky,” arguing SA was only one of several limitations (maps, UI, computation).
  • Consensus: by today’s standards they were poor; whether they were “useless” depends on expectations.

Jamming vs spoofing

  • Distinction emphasized:
    • Jamming = drowning out real signals with noise.
    • Spoofing = transmitting fake but valid-looking signals.
  • Wide-area spoofing is considered feasible with a single terrestrial transmitter; this can make many receivers report essentially the same false location.
  • Reported real-world incidents (e.g., ships and phones showing as being at airports) are interpreted as likely terrestrial spoofing, not satellites transmitting fake data.
  • Modern receivers try to mitigate by ignoring too-strong signals and using multiple constellations and sensors (Wi‑Fi, cellular, inertial, etc.), but attacks remain a cat-and-mouse game.

P(Y) code and higher-precision signals

  • Discussion notes:
    • The P code sequence itself is specified publicly;
    • It is XORed with a cryptographic W-code to produce the encrypted P(Y) signal.
  • Older civilian techniques (“semi-codeless” tracking) inferred enough about P(Y) to use L2 for ionospheric correction, improving accuracy.
  • Today, public dual-frequency signals reduce the need for these workarounds.

Export controls and “munition” status

  • Historically, GPS receivers that worked above certain speed/altitude thresholds were controlled under ITAR as munitions; it’s unclear from the thread how current rules apply.
  • Similar export-control concerns led one SDR vendor to remove open-source passive radar software; legal uncertainty around combining hardware and radar software is highlighted.

Implementation details and tooling

  • A user attempting to run the provided code on Windows encounters a syntax error; others note it requires Python 3.11 for the starred-expression syntax used.
  • Multiple external learning resources are recommended: in-depth GPS theory sites, an online GNSS course, test apps (e.g., Android GNSS diagnostic tools), and documentary/books on GPS history.