pub struct ProbedFrame<'a> {
pub meta: &'a OfdmProbeFrame,
pub symbols: &'a [Complex32],
pub correction: &'a [BitOutcome],
}Expand description
One frame’s probe record with both of its slices resolved, as yielded by
OfdmRxProbe::iter.
§Symbols and bits do not index 1:1
correction[i] is coded bit i, in the order the bits were mapped to
subcarriers; symbols[j] is the jth data carrier in demap order. So the
bits of symbols[j] are
let bps = meta.constellation.bits_per_symbol();
&correction[j * bps .. (j + 1) * bps] // NOT always in range— but the symbols carry more bit-slots than the map covers. A payload is mapped to a whole number of OFDM symbols, so the final one is padded past the end of the coded block. Measured on one test link: 806 QPSK symbols = 1612 slots against a 1536-bit map, 76 slots of padding with no outcome behind them.
A consumer walking symbols and colouring each by its bits must therefore
stop at correction.len() rather than run to the end of symbols. Walking
the map and finding each bit’s symbol is always in range and is the safer
direction.
Fields§
§meta: &'a OfdmProbeFrameThis frame’s metadata: sequence number, constellation, codeword geometry, and whether it decoded.
symbols: &'a [Complex32]The equalized payload symbols, in demap order.
correction: &'a [BitOutcome]The per-coded-bit outcomes. Empty when meta.decoded is false —
that is “no ground truth”, not “no errors”.
Trait Implementations§
Source§impl<'a> Clone for ProbedFrame<'a>
impl<'a> Clone for ProbedFrame<'a>
Source§fn clone(&self) -> ProbedFrame<'a>
fn clone(&self) -> ProbedFrame<'a>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more