21 Commits

Author SHA1 Message Date
86a5b08e9d Add PRN ranging system: code generator, modulator, demodulator, and demo
Implements the Apollo composite PRN ranging code (5,456,682 chips) from
five component sequences (CL, X, A, B, C) combined via majority-vote
logic, matching Ken Shirriff's Teensy rangeGenerator.ino bit-for-bit.

LFSR taps corrected to produce maximal-length sequences:
  A: 5-bit, taps [2,0] (x^5+x^2+1, period 31)
  B: 6-bit, taps [1,0] (x^6+x+1, period 63)
  C: 7-bit, taps [1,0] (x^7+x+1, period 127)

New files:
  src/apollo/ranging.py          -- pure-Python code generator and correlator
  src/apollo/ranging_source.py   -- GR sync_block streaming PRN chips
  src/apollo/ranging_mod.py      -- GR hier_block2 NRZ chip modulator
  src/apollo/ranging_demod.py    -- GR basic_block FFT-based range correlator
  grc/apollo_ranging_*.block.yml -- GRC block definitions (3 files)
  examples/ranging_demo.py       -- standalone demo with delay simulation
2026-02-24 14:21:02 -07:00
04a17899fc Fix cache headers: immutable for hashed assets, revalidate for HTML
The blanket max-age=3600 caused stale HTML pages after redeployment.
Now _astro/* gets immutable (content-addressed filenames) and HTML
pages get no-cache (always revalidate, 304 when unchanged).
2026-02-24 11:16:58 -07:00
83493afdc7 Expand community references: Mike Stewart, Apollo Comms playlist, Ken Shirriff posts
Link Mike Stewart's GitHub (thewonderidiot), add the full Apollo
Comms YouTube playlist, and reference Ken Shirriff's PMP and FM
radio posts that directly relate to gr-apollo's block architecture.
2026-02-24 11:08:18 -07:00
b3f11052a8 Fix source links: point to git.supported.systems instead of GitHub 2026-02-24 11:02:54 -07:00
7d48398551 Add FM downlink mode: carrier blocks, convenience wrappers, and loopback demo
FM mode now has the same three-layer architecture as PM mode:
- fm_mod/fm_demod for carrier-level FM modulation
- fm_signal_source/fm_downlink_receiver convenience wrappers
- fm_loopback_demo.py verifying round-trip SCO voltage recovery

Includes GRC YAML for all 4 blocks and doc updates across
blocks reference, SCO guide, and signal architecture pages.
2026-02-24 10:18:42 -07:00
9f10a8fb69 Add CLAUDE.md with deployment instructions 2026-02-23 18:56:37 -07:00
15756fa9dd Add playwright npm package for mermaid-isomorphic SSR 2026-02-23 16:25:46 -07:00
cdd91edf16 Install playwright chromium for mermaid SSR in Docker build 2026-02-23 16:23:53 -07:00
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