Skip to Content
ReferenceCLIwaveform ber

orbitforge waveform ber

Synopsis

orbitforge waveform ber [OPTIONS]

Description

Sweeps Es/N0 and measures the bit error rate by simulating the modulator, channel, and demodulator, printing the theoretical curve alongside the measured one.

The theoretical column is what makes this useful. A simulation that tracks theory where theory is valid is a simulation you can trust where it is not, which is the whole point of running one.

Options

ParameterTypeUnitDefaultRequiredDescription
--chainstringn/auncoded:qpskNoChain spec: `uncoded:<mod>`, `conv:<mod>`, or `rs:<mod>`, where the modulation is bpsk, qpsk, 8psk, 16qam, 16apsk, or 32apsk.
--esn0-dbstringdB0:1:8NoSweep as `start:step:end` inclusive, or a comma-separated list such as `0,2,4`.
--frame-bitsintegerbits1000NoInformation bits per frame. Reed-Solomon frames are fixed at 223 bytes.
--min-errorsintegercount100NoStop a point once this many bit errors have accumulated, checked per batch.
--max-framesintegercount10000NoHard cap on frames per point, so a high-Es/N0 point cannot run forever.
--seedintegern/a42NoMaster seed. Identical seeds reproduce results bit for bit.
--csvpathn/a—NoWrite the sweep as CSV.
--jsonpathn/a—NoWrite the sweep as JSON.

Worked example

orbitforge waveform ber \ --chain uncoded:qpsk \ --esn0-db 0:2:8 \ --frame-bits 1000
Chain uncoded:qpsk (rate 1.0000, 2 bits/symbol, seed 42) Es/N0 dB Eb/N0 dB bits errors frames BER theory 0.00 -3.01 64000 10272 64 1.6050e-1 1.587e-1 2.00 -1.01 64000 6679 64 1.0436e-1 1.040e-1 4.00 0.99 64000 3647 64 5.6984e-2 5.650e-2 6.00 2.99 64000 1496 64 2.3375e-2 2.301e-2 8.00 4.99 64000 402 64 6.2813e-3 6.004e-3

Reading the output

ColumnMeaning
Es/N0 dBSymbol energy to noise density, the swept variable
Eb/N0 dBEnergy per information bit, derived from Es/N0, code rate, and bits per symbol
bitsInformation bits simulated at this point
errorsBit errors observed
framesFrames simulated before a stopping condition was met
BERMeasured bit error rate, errors divided by bits
theoryClosed-form prediction for this chain on an AWGN channel

Measured against theory

The two rightmost columns agree to within a few percent at every point, and the agreement is the result worth checking first:

Es/N0MeasuredTheoryDifference
0 dB1.6050e-11.587e-11.1 percent
4 dB5.6984e-25.650e-20.9 percent
8 dB6.2813e-36.004e-34.6 percent

A simulation that matches theory for an uncoded chain is validated. That matters because theory exists only for the simple cases: for a coded chain there is no closed form, and the simulation is the only answer available.

Always run the uncoded case first. If it does not track theory, the coded results from the same code path are not trustworthy either, and the problem is in the harness rather than in the code being evaluated.

The divergence grows at high Es/N0, from 1 percent to 4.6 percent, because fewer errors accumulate. At 8 dB only 402 errors were observed against 10,272 at 0 dB, so the relative statistical uncertainty is roughly five times larger.

Es/N0 and Eb/N0

Both columns describe the same points. Which one to use depends on the question.

EbN0=EsN0−10log⁡10 ⁣(R⋅log⁡2M)\frac{E_b}{N_0} = \frac{E_s}{N_0} - 10\log_{10}\!\left(R \cdot \log_2 M\right)

where RR is the code rate and MM is the constellation size. For uncoded QPSK, R=1R = 1 and log⁡2M=2\log_2 M = 2, giving a fixed 3.01 dB offset, which is exactly what the two columns show.

UseBecause
Es/N0 for link budgetingIt is what the channel delivers
Eb/N0 for comparing schemesIt normalizes by information rate, so it measures energy efficiency per bit

Stopping conditions and confidence

Each point stops on whichever comes first: --min-errors accumulated, or --max-frames simulated.

--min-errors is the one that governs statistical confidence. Measuring a bit error rate is counting rare events, and the relative uncertainty goes roughly as 1/N1/\sqrt{N} in the number of errors. A hundred errors gives about 10 percent relative uncertainty; ten gives about 32 percent.

When a point stops on --max-frames rather than on --min-errors, its error count is below the requested threshold and its BER is correspondingly uncertain. That happens at high Es/N0, where errors are rare, and it is exactly where the interesting operating points live.

Check the errors column. A point with only a handful of errors should not be quoted as a measured bit error rate.

Chains

SpecCodingUse
uncoded:<mod>NoneValidating the harness against theory
conv:<mod>ConvolutionalLegacy and CCSDS-style links
rs:<mod>Reed-Solomon, 223-byte framesBlock-coded links, burst-error resistance

See also

  • waveform thresholds for DVB-S2 decoder thresholds usable in a link budget.
  • link to apply a threshold to a real geometry.
Question? Give us feedbackDocuments Varaha Constellation Designer main (pre-release)
Last updated on