Waveform
/waveform/modcods/waveform/thresholds/waveform/generate/waveform/berPurpose
The signal-processing surface: what modulation and coding schemes exist, at what signal-to-noise they decode, and what a modulated signal looks like.
The threshold endpoint is the one that closes the loop with link budgeting, because it produces a decoder threshold that was measured rather than assumed.
GET /waveform/modcods
Lists every DVB-S2 modulation and coding scheme with its framing parameters. No request body.
curl -s http://127.0.0.1:8080/waveform/modcods[
{
"name": "qpsk-1/4",
"index": 1,
"modulation": "qpsk",
"rate": "1/4",
"bits_per_symbol": 2,
"normal": { "kbch": 16008, "code_rate": 0.24703703703703703 },
"short": { "kbch": 3072, "code_rate": 0.18962962962962962 }
}
]Response elided; the list covers the full MODCOD set.
The normal and short blocks show that the effective code rate differs
from the nominal one, and differs between frame sizes. Nominal rate 1/4 is
0.247 on the normal FECFRAME and 0.190 on the short one, because the BCH outer
code and framing overhead consume different fractions of a 64,800-bit frame
than of a 16,200-bit frame.
Use code_rate, not the name, when computing throughput. The name is a label.
POST /waveform/thresholds
Measures the Es/N0 at which a MODCOD actually decodes, by simulating the real encoder, channel, and decoder.
| Parameter | Type | Unit | Default | Required | Description |
|---|---|---|---|---|---|
modcod | string | n/a | — | Yes | A single MODCOD name, for example `qpsk-1/2`. Singular; the CLI takes a comma-separated `--modcods` list. |
frame | string | n/a | short | No | `normal` for the 64,800-bit FECFRAME, `short` for 16,200 bits. |
pilots | boolean | n/a | false | No | Account for pilot blocks in framing overhead. |
frames | integer | count | — | No | Frames simulated per Es/N0 grid point. Bounds what error rate can be resolved. |
The field is modcod, singular, and takes one scheme. The CLI flag is
--modcods and accepts a comma-separated list or all. Sending an array here
fails:
Failed to deserialize the JSON body into the target type: missing field `modcod`Example
curl -s -X POST http://127.0.0.1:8080/waveform/thresholds \
-H 'content-type: application/json' \
-d '{"modcod":"qpsk-1/2","frames":5}'{
"modcod": "qpsk-1/2",
"frame": "short",
"pilots": false,
"esn0_db": 1.5,
"spectral_efficiency": 0.8488400488400488,
"ebn0_db": 2.2117413831980843
}| Parameter | Type | Unit | Default | Required | Description |
|---|---|---|---|---|---|
esn0_db | number | dB | — | No | Symbol energy to noise density at which the scheme decodes. This is what a link budget must deliver. |
spectral_efficiency | number | bit/sym | — | No | Information bits carried per symbol. |
ebn0_db | number | dB | — | No | Energy per information bit to noise density. |
Frames bound the confidence
The example uses frames: 5, which is fast and not quotable. With N frames
you cannot resolve packet error rates much below 1/N, and real operating points
are specified several orders of magnitude lower.
The same MODCOD measured at 5 frames here reports 1.5 dB, where a 10-frame run reported 1.75 dB. That spread is the measurement noise, not a change in the decoder, and it is why a threshold destined for a design review needs a far larger frame count.
Use Es/N0 for link budgeting, because it is what the channel delivers. Use Eb/N0 when comparing how efficiently two schemes use energy per bit. They rank schemes differently, and quoting the wrong one understates or overstates the requirement.
POST /waveform/generate
Produces a standards-conformant modulated waveform and returns IQ samples. It supports CCSDS TM, CCSDS TC, and DVB-S2, each with a different option set.
The output is a clean transmit-side signal with no channel impairments. Doppler and delay are applied separately, which keeps a failure attributable to the impairment rather than the signal.
POST /waveform/ber
Runs a Monte Carlo bit-error-rate sweep over an Es/N0 range for a modulation and coding chain, returning the measured curve alongside the closed-form theoretical one where theory exists.
The theory column is the validation. A chain that tracks theory where a closed form exists is a chain you can trust where none does.
See also
orbitforge waveform thresholds, which measures several MODCODs in one call./linkto apply a measured threshold to real geometry.
main (pre-release)