13 Commits

Author SHA1 Message Date
50060e48e9 Add TX chain docs: 3 new guides, 7 block entries, architecture section
New pages:
- guides/transmit-signal: composable TX block walkthrough
- guides/run-demos: loopback, voice, full downlink, AGC demos
- guides/sco-modulation: FM-mode SCO round-trip examples

Updated pages:
- reference/blocks: Transmit Chain section with all 7 TX blocks
- explanation/signal-architecture: TX diagram, Tabs, loopback note
- guides/voice-audio: TX-side modulation section
- guides/test-signals: streaming vs batch comparison
- getting-started/quick-start: loopback example + TX LinkCard
- index: updated tagline and feature card for TX+RX
- astro.config: sidebar entries, updated site description
2026-02-23 14:13:46 -07:00
cb77b18a9c Add full downlink demo: PCM telemetry + crew voice on one carrier
Assembles the complete Apollo USB downlink signal from individual blocks:
PCM frames on 1.024 MHz BPSK + crew voice on 1.25 MHz FM, both PM-modulated
onto a single complex carrier. Receives and splits into decoded PCM frames
and recovered voice audio.

Clean: 399/402 frames, 8s voice. At 25 dB SNR: 395/402 frames.
2026-02-22 18:06:22 -07:00
8728d36a90 Add voice subcarrier demo with Apollo 11 crew audio
FM-modulates real Apollo 11 onboard audio onto the 1.25 MHz voice
subcarrier (+/-29 kHz deviation) and demodulates it back, achieving
94.1% correlation with the original. Audio source: NASA/Internet
Archive public domain (Collins bidding farewell to Eagle crew).
2026-02-22 18:00:45 -07:00
cd3a8cc6be Add SCO modulator, external audio input, and demo scripts
- sco_mod: 9-channel FM subcarrier oscillator modulator (inverse of sco_demod),
  with round-trip tests proving voltage recovery across all channels
- fm_voice_subcarrier_mod: add audio_input parameter to accept external float
  streams (e.g., Apollo mission voice recordings) instead of internal test tone
- loopback_demo.py: streaming TX->RX round-trip with CLI for noise/voice/frames
- agc_loopback_demo.py: full Virtual AGC integration via TCP bridge
2026-02-22 13:01:48 -07:00
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
0dffcdbb54 Add CuriousMarc Keysight and lab tour video links 2026-02-21 10:48:34 -07:00
200fa4e6dc Add reference links and credit CuriousMarc restoration team 2026-02-21 10:41:25 -07:00
a06f5e8dc1 Add Open Graph image generation for all docs pages
Custom renderer with NASA-blue theme, Inter font, signal arc decoration.
Generates 1200x630 PNG per page at build time via astro-opengraph-images.
Head component injects og:image meta tag using getImagePath().
2026-02-21 09:28:45 -07:00
db14b85633 Add Docker deployment for docs site at gr-apollo.l.warehack.ing
Multi-stage Dockerfile: node:22-slim build → caddy:2-alpine serve.
caddy-docker-proxy labels for automatic TLS + reverse proxy.
Profiles: prod (Caddy static) and dev (Astro HMR with volume mounts).
2026-02-21 09:10:16 -07:00
9dc52d1a5b Docs: replace default favicon, add git icon, fix Mermaid direction
- Favicon: MSFN antenna dish with signal arcs (NASA blue/red, dark mode)
- Social icon: generic git-branch replacing GitHub-specific icon
- Mermaid signal chain diagram: flowchart TB for vertical readability
- Add astro-icon (with Lucide icons) and astro-opengraph-images packages
2026-02-21 09:10:07 -07:00
12fb284d5f Add Starlight documentation site with diataxis structure
14 content pages across four diataxis categories:
- Getting Started: introduction, installation, quick-start tutorial
- Understanding Apollo USB: signal architecture, PCM frame structure, AGC integration
- How-To Guides: tuning parameters, test signals, voice audio, AGC bridge, PCM telemetry
- Reference: block reference (all 16 blocks), constants, protocol specification

Includes Mermaid diagram support via rehype-mermaid with client-side
rendering, dark theme, Pagefind search index, and edit-on-GitHub links.
2026-02-20 15:26:05 -07:00
0ee7ff0ad7 Implement full Apollo USB downlink decoder chain
Complete signal processing pipeline from complex baseband to decoded
PCM telemetry, verified against the 1965 NAA Study Guide (A-624):

Core demod (Phase 1):
  - PM demodulator with carrier PLL recovery
  - 1.024 MHz subcarrier extractor (bandpass + downconvert)
  - BPSK demodulator with Costas loop + symbol sync
  - Convenience hier_block2 combining subcarrier + BPSK

PCM frame processing (Phase 2):
  - 32-bit frame sync with Hamming distance correlator
  - SEARCH/VERIFY/LOCKED state machine, complement-on-odd handling
  - Frame demultiplexer (128-word, A/D voltage scaling)
  - AGC downlink decoder (15-bit word reassembly from DNTM1/DNTM2)

Voice and analog (Phase 3):
  - 1.25 MHz FM voice subcarrier demod to 8 kHz audio
  - SCO demodulator for 9 analog sensor channels (14.5-165 kHz)

Virtual AGC integration (Phase 4):
  - TCP bridge client with auto-reconnect and channel filtering
  - DSKY uplink encoder (VERB/NOUN/DATA command sequences)

Top-level receiver (Phase 5):
  - usb_downlink_receiver hier_block2: one block, complex in, PDUs out
  - 14 GRC block YAML definitions for GNU Radio Companion
  - Example scripts for signal analysis and full-chain demo

Infrastructure:
  - constants.py with all timing/frequency/frame parameters
  - protocol.py for sync word + AGC packet encode/decode
  - Synthetic USB signal generator for testing
  - 222 tests passing, ruff lint clean
2026-02-20 13:18:42 -07:00
425a6357cc init: Apollo Unified S-Band decoder for GNU Radio 3.10+
Project scaffold for decoding Apollo USB signals:
- 2287.5 MHz downlink with PM/FM modulation
- 1.024 MHz BPSK subcarrier (PCM telemetry)
- 1.25 MHz FM subcarrier (voice)
- 128-word PCM frames at 50 fps

Based on NAA Course A-624 Study Guide (1965) and Virtual AGC.
2026-02-20 10:46:43 -07:00