Uplink word codec (uplink_word_codec.py): - UplinkSerializerEngine: (channel, value) pairs to 15-bit NRZ bit stream with configurable inter-word gap for UPRUPT timing - UplinkDeserializerEngine: two-phase state machine (acquisition + fixed framing) recovers words from NRZ bits, handles leading-zero data words - GR wrappers: uplink_word_serializer (sync_block source) and uplink_word_deserializer (basic_block sink with message output) TX source (usb_uplink_source.py): - hier_block2 wiring: word_serializer -> nrz_encoder -> FM mod (4 kHz dev) -> 70 kHz upconvert -> complex_to_real -> PM mod (1.0 rad) -> [AWGN] - Message input "words" forwards PDUs from uplink_encoder RX receiver (usb_uplink_receiver.py): - hier_block2 wiring: PM demod -> subcarrier_extract (70 kHz, 20 kHz BW) -> quadrature_demod -> matched filter -> decimate -> slicer -> deserializer - Message output "commands" emits recovered (channel, value) PDUs GRC block definitions for both source and receiver. Loopback demo (uplink_loopback_demo.py): - Encodes V16N36E, serializes with pure-Python engine, runs through GR RF chain (FM + PM + noise + demod), deserializes, compares TX vs RX words
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
- Virtual AGC Project
- NASA Technical Reports
- NAA Course A-624: Telecommunication Systems Study Guide (1965)
License
MIT
Description
Languages
Python
100%