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
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