id: apollo_fm_voice_subcarrier_mod label: Apollo FM Voice Subcarrier Mod category: '[Apollo USB]' flags: [python] parameters: - id: sample_rate label: Sample Rate (Hz) dtype: real default: '5120000' - id: subcarrier_freq label: Subcarrier Frequency (Hz) dtype: real default: '1250000' - id: fm_deviation label: FM Deviation (Hz) dtype: real default: '29000' - id: tone_freq label: Test Tone Frequency (Hz) dtype: real default: '1000' outputs: - label: out domain: stream dtype: float templates: imports: from apollo.fm_voice_subcarrier_mod import fm_voice_subcarrier_mod make: >- apollo.fm_voice_subcarrier_mod.fm_voice_subcarrier_mod( sample_rate=${sample_rate}, subcarrier_freq=${subcarrier_freq}, fm_deviation=${fm_deviation}, tone_freq=${tone_freq}) documentation: |- Apollo FM Voice Subcarrier Modulator Source block that generates a 1.25 MHz FM subcarrier with a sinusoidal test tone. Transmit-side counterpart to the voice subcarrier demodulator. The signal chain is: test tone -> FM modulator -> upconvert to 1.25 MHz -> real-valued output. With default parameters this produces a signal matching the Apollo USB downlink voice subcarrier (+/-29 kHz deviation). On the real spacecraft, voice audio (300-3000 Hz) drives an FM VCO at 113 kHz, which is mixed with the 512 kHz master clock and doubled to produce the 1.25 MHz FM subcarrier. Parameters: sample_rate: Output sample rate in Hz (default 5.12 MHz) subcarrier_freq: FM subcarrier center frequency in Hz (default 1.25 MHz) fm_deviation: FM deviation in Hz (default +/-29 kHz) tone_freq: Internal test tone frequency in Hz (default 1 kHz) file_format: 1