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.
48 lines
1.3 KiB
YAML
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
|