Rate and Channel Accounting#
Noema uses fixed boundary operations so rate and channel measurements are comparable across tasks.
Canonical Bit Contract#
At channel-facing bit boundaries, bits are stored as:
dtype:
np.uint8shape: flat vector
values:
0or1one array element is one bit
Packed byte streams are allowed inside a codec or adapter, but they must be unpacked before channel transmission. Metadata should record the original byte count and valid bit count.
Fixed Points#
Publishable bit-transport recipes should include:
payload_bit_boundary -> channel_encoder -> tx_bit_boundary -> channel -> rx_bit_boundary -> channel_bit_count_match
Use these meanings:
payload bits: codec or payload codec output before channel coding;
transmitted bits: bitstream entering modulation or identity channel;
received bits: bitstream leaving demodulation or identity channel;
channel bit-count match: explicit assertion that transmitter/receiver channel boundaries have matching lengths.
For DeepJSCC/symbol recipes, use tx_symbol_boundary, rx_symbol_boundary, and
channel_symbol_count_match.
Power normalization is an explicit contract parameter. normalization_scope: source_item scales
each declared source item independently and is the default for publication protocols;
normalization_scope: global scales the complete tensor or stream once. The Torch training block
uses the same selector and treats tensor axis 0 as the source-item axis. A protocol must not compare
a global-normalized training path with a source-item-normalized benchmark path.
wireless.channel.receiver_processing also belongs to the physical contract. matched selects the
preset’s declared receiver processing (including perfect-CSI zero-forcing for the currently
supported fading presets), while none requests an explicitly supported raw receive signal.
Materializations are bound to channel, receiver-processing, and channel-state selectors; an
unsupported combination is rejected during planning rather than discovered after a run starts.
Disabled Channels#
A disabled physical channel is still represented by an identity channel step. This keeps the graph, rate accounting, and result manifests structurally comparable to noisy channel recipes.
Protected Digital Baselines#
Protected digital baselines do not send JPEG or learned-compression payload bytes directly through a noisy physical channel. They use this explicit chain:
payload bits -> packet/CRC -> LDPC encode -> QPSK -> AWGN -> soft demap -> LDPC decode -> CRC/failure policy
The portable smoke path uses the same accounting spine with channel.packetize_crc32, a repetition
channel code, QPSK, measured AWGN, hard decisions plus LLR artifacts, repetition decoding, and
channel.crc32_check. It remains a plumbing/smoke baseline and must not be relabelled as a
publication-grade FEC comparator.
Packet protocol v4 carries a compact, unrepeated ownership/offset/length header and its CRC in-band,
while a canonical SHA-256-bound packet-layout contract in immutable run evidence fixes the complete
source-item population, exact lengths, packet offsets, and ownership. The receiver validates every
recoverable header against that contract but does not use a damaged header to infer denominators or
output length. Total header loss therefore becomes an outage for a known source item instead of a
framing exception or a shortened payload. gray_image and erasure zero the complete failed item;
report_outage retains the exact-length best-effort received payload while still recording failure.
All header, CRC, padding, and contract-bound packet costs remain explicit in framed/transmitted-bit
and channel-use accounting. The contract is trusted control-plane evidence, not over-the-air side
information; its integrity is covered by run-bundle verification.
The standards-oriented digital path uses channel.nr_ldpc_encoder and
channel.nr_ldpc_decoder, backed by Sionna 2.x/PyTorch TBEncoder/TBDecoder and configured against 3GPP
TS 38.212 V18.8.0 (Release 18). It is a transport-block coder over an abstract flat QPSK/AWGN
link, not a full NR MCS, PRB/resource-grid, layer-mapping, DM-RS, control-channel, or PUSCH waveform
implementation. It records the effective transport-block size, TB and code-block
CRCs, segmentation count, base graph, lifting size/set, mother-code dimensions, circular-buffer
rate-matched codeword lengths, scrambling parameters, modulation order/layers, decoder iterations,
and per-block CRC status. The decoder accepts the soft-LLR artifact, checks the encoder-bound profile
identity, backend versions, and contiguous block partition, and applies the declared zero_fill,
keep_estimate, or raise policy on TB-CRC failure. The decoder iteration count is fixed by the
encoder-bound profile rather than accepted as an unrecorded receive-side override. Noema is not yet
published on PyPI. With an explicitly supplied wheel, install this optional path with
python -m pip install "noema-lab[wireless] @ file:///absolute/path/to/noema_lab-<version>-<platform-tag>.whl";
in a source checkout, use uv sync --extra wireless.
High-SNR round trips and tamper tests establish local consistency, not standards conformance. Standards-facing claims require independent standard vectors or a second implementation and frozen BER/BLER sweeps with negative controls. A development-only feasibility pilot freezes the resource budget and operating points before sealed-test access; the threshold cannot be retuned after definitive outcomes.
channel.communication_resource_accounting.v2 makes the additive boundaries executable while
requiring exact semantic kinds: channel.payload_bits.numpy,
channel.framed_bits.numpy, channel.coded_bits.numpy, and
channel.symbols.complex_numpy. The matching channel.packetize_crc32.v2 emits the framed-bit
kind and accepts only the exact payload-bit kind. Generic channel.bits.numpy checkpoints are
useful for role-neutral bit-exact inspection but are deliberately rejected by the strict packetizer
and accounting ports.
The unversioned packetizer and accounting operations remain registered with their historical contracts so archived recipes retain their meaning. They must not be cited as evidence that strict kind separation was enforced.
The current NR encoder also rebuilds its output array descriptor from the actual coded vector instead of inheriting the framed-input shape. Exact 4,320-to-8,640 and 8,640-to-17,280 regression cases check the physical NPZ, embedded metadata, and persisted run summary. Historical v3 compact evidence retained the stale shape descriptor but not the coded arrays themselves, so that study cannot be retroactively promoted to bit-exact FEC evidence.
The strict operation records:
native codec bits
+ declared codec wire overhead
= serialized payload bits
+ packet/framing overhead
= framed bits
+ FEC/rate-matching overhead
= coded bits
+ modulation padding
= transmitted padded bits
Pilot, physical-header, data, and grid-padding symbols are recorded separately and sum to total
channel uses. JPEG and CompressAI encoders expose native per-item byte/bit counts independently of
the selected wire format, so a native rate-distortion coordinate cannot silently count wrapper
bytes. Their wire_format parameter keeps safe_json_base64 as the artifact-compatibility default
and offers compact_binary_v1 (noema.codec_wire.v1) for modeled communication. The compact form
is bounded, codec-specific, independently decodable per source item, and carries native entropy
streams plus only receiver-required fields; it does not use pickle or executable-object
deserialization. Resource accounting records the selected payload format and both the generic wire
overhead and the backward-compatible safe-wrapper field. The report content-binds all fixed points
with an accounting identity.
Recipes may also use channel.capacity_oracle_digital_link as a clearly labeled theoretical
reference. It assumes QPSK, AWGN, and a declared code rate, then delivers the payload perfectly only
when:
source_bits <= channel_uses * log2(1 + snr)
Otherwise it records an outage and applies the recipe’s decode-failure policy, such as a gray image. The operation reports packet success/outage, payload bits, coded/transmitted bits, channel uses, bits per pixel, per-item channel uses, and maximum per-item channel uses per pixel. These numbers are useful for sanity checks and tutorial plots, but they must be cited as a capacity-oracle baseline rather than a measured LDPC modem.
Reporting#
For OFDM-style implementations, channel.channel_use_count is the number of resource elements in
the grid that was actually executed. It includes zero padding required to fill the last grid;
channel.payload_symbol_count records the unpadded symbols and
channel.grid_padding_symbol_count records the difference. Energy and average power per executed
use are reported separately, so padding cannot disappear from the resource coordinate. When items
are independently realized, the same charged counts are retained per source item. For a joint grid,
shared tail padding is reported separately and charged in full to every item’s maximum-use bound;
this conservative rule cannot make an item appear cheaper because it happened to share a batch.
An explicit Sionna OFDM state must be declared with channel_state_mode: explicit. Sampled channel
materializations use channel_state_mode: none. Sionna 2.x random streams are process-global, so
Noema serializes seed assignment and stochastic Sionna execution inside one critical section;
NumPy and Torch paths continue to use local generators. An omitted operation seed is derived from
the recipe master seed, namespace, step ID, and stream. An explicit operation seed is an intentional
override and is recorded as such.
Frozen paper bundles and manifests retain the Sionna 1.x/TensorFlow versions under which they were created. This migration affects new executions only; historical evidence is never relabelled.
Benchmark packs should report public metric IDs such as:
codec.native_bit_countcodec.serialized_payload_bit_countchannel.payload_bit_countchannel.framed_bit_countchannel.coded_bit_countchannel.transmitted_bit_countchannel.channel_use_countchannel.payload_symbol_countchannel.grid_padding_symbol_countchannel.berrate.native_codec_bpprate.serialized_payload_bpprate.framed_bpprate.coded_bpprate.padded_bpp
Step-local metric paths such as tx_bit_boundary.channel.fixed.tx.bit_count belong in benchmark
metadata as fixed-point evidence.