Skip to Content
ReferenceCLIwaveform generate

orbitforge waveform generate

Synopsis

orbitforge waveform generate --standard <STD> --iq <PATH> [OPTIONS]

Description

Produces a standards-conformant modulated waveform and writes it as complex IQ samples. Use it to feed a receiver under test, to verify a demodulator against a known-good signal, or to build a reference capture that a Doppler profile can later be applied to.

Three standards are supported, and each takes a different set of options because they are genuinely different signals.

--standardStandardTypical use
ccsds-tmCCSDS TM sync and channel coding, 131.0-BSpacecraft telemetry downlink
ccsds-tcCCSDS TC BCH and CLTU, 231.0-BSpacecraft telecommand uplink
dvbs2DVB-S2 PLFRAMEs, EN 302 307-1Broadband and broadcast downlink

Options

Common.
ParameterTypeUnitDefaultRequiredDescription
--standardenumn/a—Yes`ccsds-tm`, `ccsds-tc`, or `dvbs2`.
--iqpathn/a—YesOutput IQ file path.
--spsintegersamples/symbol4NoSamples per symbol. Sets oversampling of the pulse-shaped output.
--roll-offfloatn/a0.35NoRoot-raised-cosine roll-off factor.
--sample-rate-hzfloatHz32000NoSample rate recorded in the SigMF metadata. Descriptive, not resampling.
--seedintegern/a—NoSeed for the random payload bits, so a capture is reproducible.
DVB-S2 only.
ParameterTypeUnitDefaultRequiredDescription
--modcodstringn/aqpsk-1/2NoMODCOD name, for example `qpsk-1/2` or `8psk-3/4`.
--frame-sizeenumn/ashortNo`normal` for the 64,800-bit FECFRAME, `short` for 16,200 bits.
--pilotsflagn/a—NoInsert pilot blocks, which aid carrier recovery at the cost of capacity.
CCSDS TM only.
ParameterTypeUnitDefaultRequiredDescription
--framesintegercount1NoNumber of TM transfer frames.
--rs-interleaveintegern/a1NoReed-Solomon interleave depth, 1 to 5. Deeper interleaving spreads burst errors across codewords.
--convflagn/a—NoConcatenate the K=7 convolutional code.
--modulationenumn/aqpskNo`bpsk` or `qpsk`. TC is always BPSK.
CCSDS TC only.
ParameterTypeUnitDefaultRequiredDescription
--frame-bytesintegerbytes56NoTC frame length, zero-padded to 7-byte blocks.

Worked example

Two DVB-S2 frames at QPSK rate 1/2:

orbitforge waveform generate \ --standard dvbs2 \ --modcod qpsk-1/2 \ --frames 2 \ --iq iq.bin
Wrote 65680 samples (cf32_le) -> iq.bin

The file is 525,440 bytes: 65,680 samples at 8 bytes each, since cf32_le is a pair of little-endian 32-bit floats per sample.

Output format

PropertyValue
Formatcf32_le, interleaved complex 32-bit float, little endian
Bytes per sample8
OrderingI, Q, I, Q
MetadataSigMF, recording the sample rate and format

cf32_le is the common interchange format for software-defined radio tooling, so the output loads directly into GNU Radio, SigMF-aware analysis tools, and most laboratory receivers.

--sample-rate-hz is recorded in metadata and does not resample the signal. The actual sample rate is determined by your symbol rate and --sps. Set it to describe the rate you intend to play the capture out at, so downstream tools interpret the timing correctly.

Samples per symbol and roll-off

--sps 4 produces four samples per symbol, which is enough to represent a root-raised-cosine pulse without aliasing and is the usual default for simulation. Higher values give a smoother waveform and a proportionally larger file; the sample count scales linearly.

--roll-off 0.35 is the classic DVB-S2 value. Lower roll-off uses less bandwidth and produces a signal with higher peak-to-average ratio, which stresses the amplifier. It is a real trade, not a cosmetic setting.

Reproducibility

--seed fixes the random payload bits. The same seed produces a byte-identical capture, which is what makes a regression test possible: generate, run the receiver, and compare against a stored expectation.

Change the seed to test against different payload content, which matters because some framing failures only appear on particular bit patterns.

Adding impairments

The generated capture is clean by construction. Real testing needs impairments, applied as separate steps:

ImpairmentApplied by
Pass Dopplerwaveform doppler-apply
Noise, and the resulting error ratewaveform ber
Decoder threshold in noisewaveform thresholds

Keeping generation and impairment separate means the same reference capture can be reused across many test conditions, and a failure can be attributed to the impairment rather than to the signal.

See also

Question? Give us feedbackDocuments Varaha Constellation Designer main (pre-release)
Last updated on