Skip to content

GPS/GNSS (1575 MHz)

Every GPS receiver on Earth uses an omnidirectional antenna that sees the whole visible sky at once. That is the right design for navigation — you want as many satellites as possible. But it also means every satellite’s signal competes with every other satellite’s signal, plus noise from the entire sky hemisphere.

Pointing a directional dish at a single GPS satellite changes the equation entirely. You gain 12+ dB on the target signal while rejecting interference from other satellites and ground-based noise sources. This turns a routine navigation signal into a tool for studying individual satellite transmissions, measuring atmospheric propagation effects, and surveying constellation coverage at a level of detail that omnidirectional receivers cannot provide.

This is not a practical navigation receiver. It is a GNSS research instrument.

GPS L1 transmits at 1575.42 MHz using direct-sequence spread spectrum (DSSS). The civilian C/A code is a 1.023 Mchip/s pseudo-random noise (PRN) sequence that spreads the signal across approximately 2 MHz of bandwidth. Each satellite uses a unique PRN code, allowing the receiver to separate satellites via code correlation even when they share the same frequency.

The signal power at Earth’s surface from a single GPS satellite is approximately -130 dBm — about 20 dB below the thermal noise floor in a 2 MHz bandwidth. Standard GPS receivers recover the signal through correlation gain (the 1023-chip C/A code provides ~30 dB of processing gain when correctly aligned). With a directional dish adding another 12 dBi of antenna gain on top of this, the post-correlation SNR improves significantly.

Other GNSS constellations share the L1 neighborhood:

SystemFrequencySignalNotes
GPS L11575.42 MHzC/A (BPSK), L1C (BOC)31 active satellites
Galileo E11575.42 MHzOS (CBOC)Overlaps GPS L1 exactly
BeiDou B1C1575.42 MHzPilot + data (BOC)Same center frequency
GLONASS L11598.0625-1605.375 MHzFDMA (0.5625 MHz spacing)Offset from GPS by ~25 MHz
SBAS (WAAS)1575.42 MHzSame as GPS L1Geostationary augmentation

The GPS/Galileo/BeiDou overlap at 1575.42 MHz means a single dish pointing can capture signals from all three constellations simultaneously.

ParameterValueNotes
Frequency1575.42 MHzGPS L1
Wavelength19.0 cm
Dish diameter84 cm (major axis)~4.4 wavelengths across
Estimated dish gain~12 dBiSmall dish relative to wavelength
Beamwidth (est.)~18 degreesBroad enough to contain satellite motion during dwell
GPS satellite EIRP~26 dBW (+56 dBm)Varies by satellite block and position in beam
Orbital altitude20,200 kmMEO orbit
Path loss~182 dBFree-space at 20,200 km
Signal at antenna~-130 dBmBefore antenna gain
Signal after dish gain~-118 dBm12 dBi improvement over isotropic
LNA noise figure0.6 dBNooelec SAWbird GNSS
Noise floor (2 MHz BW)~-111 dBmkTB at ~100 K, 2 MHz
Pre-correlation SNR~-7 dBSignal below noise, as expected
C/A correlation gain~30 dB1023-chip code, 1 ms integration
Post-correlation SNR~+23 dBEasily detected after despreading

The dish gain doesn’t help with the despreading (that is a code-domain operation), but it does improve the pre-correlation SNR by 12 dB compared to an omnidirectional antenna. This matters for several reasons: better carrier phase tracking, faster acquisition, and the ability to detect weaker signals that a standard antenna would miss entirely (such as reflected multipath components or signals from satellites at extreme off-boresight angles).

ComponentRecommendedAlternatives
FeedRHCP patch antenna for 1575 MHzRHCP helical (wider bandwidth, covers GLONASS too)
LNANooelec SAWbird GNSS (1575 MHz filtered, 0.6 dB NF)Any filtered GNSS LNA
SDRRTL-SDR V4 (2.56 MHz stable BW covers C/A code)BladeRF (wider BW captures GLONASS simultaneously)
Bandwidth needed2.048 MHz minimum (C/A code)4+ MHz to include GLONASS L1
  1. Mount the 1575 MHz feed. An RHCP patch antenna designed for GPS L1, mounted at the dish focal point. GPS is RHCP; using the correct polarization avoids 3 dB mismatch loss.

  2. Connect the signal chain. Feed to SAWbird GNSS LNA, LNA via coax to RTL-SDR. Power the LNA via bias tee. Apply a DC block if routing through the dish’s internal coax.

  3. Identify a target satellite. Use Gpredict or any GNSS prediction tool to find a GPS satellite currently above 30 degrees elevation at your location. Note its PRN number and AZ/EL position.

  4. Point the dish at the satellite. Use the Birdcage TUI or CLI to slew to the target AZ/EL. GPS satellites in MEO orbit move slowly — roughly 0.01 degrees/second as seen from the ground — so the dish can hold a fixed position for several minutes without losing the satellite from the beam.

  5. Record IQ samples. Capture 30-60 seconds of raw IQ data at 2.048 Msps or higher, centered on 1575.42 MHz.

  6. Process with gnss-sdr. Configure gnss-sdr to search for the specific PRN of the satellite you pointed at. It should acquire and track the signal with higher C/N0 than a standard antenna would produce.

  1. Define a sky grid. Divide the visible sky into grid cells matching the dish beamwidth (~18 degrees). For a hemisphere survey: approximately 10 elevation steps from 18 degrees (firmware minimum) to 90 degrees, with AZ steps that decrease as elevation increases (fewer cells near zenith).

  2. At each grid position, record 60 seconds of IQ. The gnss-sdr post-processing will search for all PRN codes in each recording.

  3. Build a detection map. For each grid position, record which PRNs were detected and at what C/N0. Compare with the predicted satellite positions from the GNSS almanac.

  4. Analyze spatial selectivity. The dish should detect satellites within the beam and reject those outside it. Plotting detected C/N0 vs. angular distance from beam center characterizes the dish’s spatial filtering at L-band.

SoftwareRole
gnss-sdrGPS/Galileo/GLONASS signal acquisition, tracking, and PVT
SDR++Spectrum monitoring and IQ recording
GNU RadioCustom acquisition flowgraphs
RTKLIBPost-processing of RINEX observables from gnss-sdr

gnss-sdr is the core tool. It implements a complete GNSS receiver in software: acquisition (finding the satellite signal), tracking (maintaining code and carrier lock), and navigation (computing position/time from the tracked signals). It reads IQ samples from a file or live SDR source and outputs standard RINEX observation files that RTKLIB and other geodetic tools can process.

For the single-satellite experiment, configure gnss-sdr to search only the target PRN — this speeds up acquisition and avoids false locks on satellites outside the beam that leak in through sidelobes.

gnss-sdr uses a configuration file to define the signal source, acquisition parameters, tracking loops, and telemetry processing. A minimal configuration for single-satellite capture with an RTL-SDR:

[GNSS-SDR]
GNSS-SDR.internal_fs_sps=2048000
;--- Signal Source ---
SignalSource.implementation=Osmosdr_Signal_Source
SignalSource.item_type=gr_complex
SignalSource.sampling_frequency=2048000
SignalSource.freq=1575420000
SignalSource.gain=40
SignalSource.rf_gain=40
SignalSource.if_gain=40
;--- Acquisition ---
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
Acquisition_1C.doppler_max=5000
Acquisition_1C.doppler_step=250
Acquisition_1C.threshold=2.0
;--- Tracking ---
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.pll_bw_hz=30.0
Tracking_1C.dll_bw_hz=2.0
;--- Telemetry ---
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder

For file-based processing (recorded IQ), replace the SignalSource block with a File_Signal_Source pointing to the raw capture file.

  • C/N0 improvement of 10-12 dB compared to an omnidirectional patch antenna on the same satellite. A typical GPS patch reports 40-45 dB-Hz for an overhead satellite; the dish should produce 50-57 dB-Hz.
  • Sidelobe rejection. Satellites more than ~20 degrees off-boresight should show significantly reduced C/N0 or fail to acquire entirely. This confirms the dish is providing spatial selectivity.
  • A sky map of C/N0 vs. position showing each detected satellite as a blob whose brightness corresponds to received signal strength. Satellites near beam center appear strong; those at the edges of the beam are weaker.
  • Atmospheric delay vs. elevation. By pointing at the same satellite at different elevation angles over time (as it traverses the sky), you can measure how C/N0 degrades at low elevations due to tropospheric and ionospheric path effects. This replicates a technique used in professional GNSS atmospheric monitoring.

gnss-sdr can output pulse-per-second (PPS) and time-of-week data. With the dish pointed at a single satellite and providing 50+ dB-Hz C/N0, the timing solution should be more stable than a standard antenna — fewer satellites but higher SNR on each yields cleaner pseudorange measurements.

This may be the most scientifically interesting application of the directional GPS setup. By tracking a single satellite as it traverses different elevation angles over several hours, you can measure the elevation-dependent C/N0 degradation curve. This curve encodes:

  • Tropospheric delay — the wet and dry components of atmospheric refraction, which increase at low elevation angles (approximately as 1/sin(elevation))
  • Ionospheric delay — frequency-dependent group delay from free electrons, also elevation-dependent
  • Ground multipath — reflections from the surface near the antenna that cause constructive/destructive interference patterns

Professional GNSS monitoring stations measure these effects routinely using omnidirectional antennas and multiple satellites. The directional dish approach isolates a single satellite, removing the multi-satellite geometry complications and providing a cleaner measurement of the propagation channel along one specific line of sight.

  • gnss-sdr with narrow beam. gnss-sdr normally expects to see 4+ satellites simultaneously for a position fix. With the dish pointed at one satellite, it may produce tracking output but fail to compute a navigation solution (not enough geometry). This is fine for our purposes — we want the raw observables, not a position fix — but it may require configuration changes to disable PVT requirements.
  • Feed bandwidth. A narrowband 1575 MHz patch won’t cover GLONASS L1 (1598-1606 MHz). A wideband RHCP helical feed could cover both but with lower gain at each frequency. The choice depends on whether GLONASS observation is a priority.
  • Multipath experiments. With a directional dish, you could deliberately point slightly off the direct satellite line-of-sight to study multipath reflections from buildings, terrain, or the ground. This is an advanced experiment but could produce interesting data on multipath geometry.
  • SBAS detection. WAAS satellites (geostationary, 1575.42 MHz, RHCP) are fixed in the sky and always transmitting. They make excellent first targets — point the dish at a known WAAS satellite position and verify detection before attempting the moving GPS constellation.
  • Interference from off-beam satellites. With 8-12 GPS satellites visible at any time and an 18-degree beamwidth, 1-3 satellites may fall within the main beam simultaneously. The code-domain separation (each satellite uses a unique PRN) means they don’t interfere in the conventional sense, but the total received power from unwanted PRNs raises the noise floor slightly. This is the “near-far problem” in CDMA systems — the dish mitigates it by spatially filtering, but doesn’t eliminate it.
  • L2/L5 bands. GPS also transmits on L2 (1227.60 MHz) and L5 (1176.45 MHz). These frequencies are lower, meaning higher dish gain (larger effective aperture relative to wavelength). A future experiment could use a wideband feed to capture L1 + L5 simultaneously with the BladeRF’s wide bandwidth.