User guide#

A link is a chain of blocks applied to NumPy arrays; a campaign evaluates that link on a grid of conditions (an SNR, a launch power, a modulation order…), as many times as a stopping rule requires, and reports every metric with a confidence interval. comnum offers two ways to run one:

A chain of named blocks bridges the two: built and inspected in Python, it runs on the Rust runner and converts to and from a specification. The blocks cover wireless and coded links (antennas, fading, OFDM, MIMO detection, channel codes), the waveforms beyond OFDM (FBMC/OQAM, UFMC, OTFS, chirp spread spectrum), optical links (WDM, dual polarisation, nonlinear propagation, back-propagation, and how the fibre solvers are validated) and optical wireless links (visible light and infrared indoors, free-space optics), and the functions that follow a standard clause by clause.

Both draw trial t of condition i from the same stream Rng.stream(seed, name, i, t), so a scenario gives the same draws in both, and the results never depend on the number of threads.