Ryan Malloy 493c21c511 Add transmit chain: 6 composable GR source blocks mirroring CuriousMarc bench
Implement the transmit/generate side as streaming GNU Radio blocks,
complementing the existing receive chain. Each block maps to a physical
instrument on CuriousMarc's Keysight bench:

  pcm_frame_source  - PCM bit stream generator (sync_block + FrameSourceEngine)
  nrz_encoder       - bits to NRZ waveform (+1/-1) with upsampling
  bpsk_subcarrier_mod - NRZ x cos(1.024 MHz) BPSK modulator
  fm_voice_subcarrier_mod - 1.25 MHz FM test tone source
  pm_mod            - phase modulator: exp(j * deviation * input)
  usb_signal_source - convenience wrapper wiring all blocks together

Includes GRC YAML definitions for all blocks under [Apollo USB] category,
49 new tests (271 total, all passing), and a loopback test that validates
the full TX->RX round trip including frame recovery with 30 dB AWGN.
2026-02-21 18:55:50 -07:00

gr-apollo

GNU Radio 3.10+ out-of-tree module for decoding Apollo Unified S-Band (USB) telecommunications signals.

Overview

The Apollo Unified S-Band system was the primary communication link between the spacecraft and Earth during the Apollo missions (1967-1972). This module implements GNU Radio blocks to decode these signals, enabling:

  • Reception of Apollo-era recordings
  • Integration with the Virtual AGC emulator
  • Educational exploration of 1960s space communications

Signal Specifications

Parameter Value
Downlink Frequency 2287.5 MHz
Uplink Frequency 2106.40625 MHz
Coherent Ratio 240/221
PM Peak Deviation 0.133 rad (7.6°)
PCM Subcarrier 1.024 MHz BPSK
PCM Bit Rate 51.2 kbps (high) / 1.6 kbps (low)
Voice Subcarrier 1.25 MHz FM
Frame Length 128 words × 8 bits @ 50 fps

Installation

# Using uv (recommended)
uv pip install -e .

# Install GRC blocks
cp grc/*.yml ~/.local/share/gnuradio/grc/blocks/

Signal Chain

RF 2287.5 MHz
     │
     ▼
┌─────────────┐
│ Carrier PLL │ ◄── 240/221 coherent recovery
└─────────────┘
     │
     ▼
┌─────────────┐
│  PM Demod   │ ◄── 0.133 rad peak deviation
└─────────────┘
     │
     ├────────────────────┬──────────────────┐
     ▼                    ▼                  ▼
┌──────────┐        ┌──────────┐       ┌──────────┐
│ 1.024MHz │        │ 1.25 MHz │       │ Ranging  │
│   BPSK   │        │    FM    │       │   PRN    │
└──────────┘        └──────────┘       └──────────┘
     │                    │
     ▼                    ▼
┌──────────┐        ┌──────────┐
│ PCM Sync │        │  Voice   │
│ 51.2kbps │        │ 300-3kHz │
└──────────┘        └──────────┘
     │
     ▼
┌──────────┐
│ 128-word │
│  Demux   │
└──────────┘
     │
     ▼
  Telemetry

References

License

MIT

Description
Apollo Unified S-Band decoder for GNU Radio 3.10+
Readme 881 KiB
Languages
Python 100%