gr-apollo/grc/apollo_bpsk_subcarrier_mod.block.yml
Ryan Malloy 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

48 lines
1.3 KiB
YAML

id: apollo_bpsk_subcarrier_mod
label: Apollo BPSK Subcarrier Mod
category: '[Apollo USB]'
flags: [python]
parameters:
- id: subcarrier_freq
label: Subcarrier Frequency (Hz)
dtype: real
default: '1024000'
- id: sample_rate
label: Sample Rate (Hz)
dtype: real
default: '5120000'
inputs:
- label: in
domain: stream
dtype: float
outputs:
- label: out
domain: stream
dtype: float
templates:
imports: from apollo.bpsk_subcarrier_mod import bpsk_subcarrier_mod
make: apollo.bpsk_subcarrier_mod.bpsk_subcarrier_mod(subcarrier_freq=${subcarrier_freq}, sample_rate=${sample_rate})
documentation: |-
Apollo BPSK Subcarrier Modulator
Multiplies an NRZ baseband waveform (+1/-1) by a 1.024 MHz cosine to produce
a BPSK-modulated subcarrier: output(t) = nrz(t) * cos(2*pi*f_sc*t).
The cosine phase flips 180 degrees at each NRZ sign change, implementing
bi-phase shift keying. This is the transmit-side counterpart to the
Apollo BPSK Subcarrier Demod block.
On the real spacecraft, the PCM encoder drives the BPSK subcarrier modulator
before summing with the voice subcarrier for PM transmission.
Parameters:
subcarrier_freq: BPSK subcarrier frequency in Hz (default 1.024 MHz)
sample_rate: Sample rate in Hz (default 5.12 MHz)
file_format: 1