pub struct UvFast;Expand description
Fast — punctured to rate 2/3. 1600 net bps (+33 % vs AFSK 1200). Good-signal default. 63 % parity puncturing; kSR-greedy puncture selection delivers ~1 dB Eb/N0 gain over uniform-spread at the BP threshold.
Implementations§
Trait Implementations§
Source§impl FrameLayout for UvFast
impl FrameLayout for UvFast
Source§const N_DATA: u32 = 120
const N_DATA: u32 = 120
240 codeword bits / 2 bits-per-symbol = 120 data symbols per LDPC block. (Unpunctured. Higher-rate modes transmit fewer ch bits per block but the trait-level constant describes the mother codeword.)
Source§const T_SLOT_S: f32
const T_SLOT_S: f32
uvpacket frames are not slot-aligned — value is informational only. Use the duration of one LDPC-block-sized “protocol unit” so callers that expect a non-zero T_SLOT_S see something reasonable.
Source§const N_SYMBOLS: u32 = 124
const N_SYMBOLS: u32 = 124
Total channel symbols per frame (= N_DATA + N_SYNC). Excludes any
GFSK ramp-up / ramp-down symbols that are a shaping artifact.
Source§const N_RAMP: u32 = 0
const N_RAMP: u32 = 0
Extra symbol slots on each side of the frame reserved for amplitude
ramp (FT4 has 1 each side = 2; FT8 has 0 — ramp absorbed into the
first/last data symbol envelope). Applied at the transmitter.
Source§const SYNC_MODE: SyncMode
const SYNC_MODE: SyncMode
Sync-symbol layout. Most WSJT protocols use
SyncMode::Block with
dedicated Costas blocks (FT8/FT4/FST4); WSPR uses SyncMode::Interleaved
with a per-symbol sync bit. Callers that only support block sync should
read SYNC_MODE.blocks() and treat an empty slice as “unsupported”.Source§const TX_START_OFFSET_S: f32 = 0.0
const TX_START_OFFSET_S: f32 = 0.0
Time (seconds) from the start of the slot-audio buffer to the start
of the first frame symbol — the “dt = 0” reference point used by
sync, signal subtraction, and DT reporting. FT8 = 0.5, FT4 = 0.5.
Source§impl ModulationParams for UvFast
impl ModulationParams for UvFast
Source§const TONE_SPACING_HZ: f32 = 600.0
const TONE_SPACING_HZ: f32 = 600.0
h = 0.5 → tone spacing = baud × h = 600 Hz.
Source§const NDOWN: u32 = 4
const NDOWN: u32 = 4
12000 / 4 = 3000 Hz baseband window — clears the 800–2600 Hz tone span with margin.
Source§const BITS_PER_SYMBOL: u32 = 2
const BITS_PER_SYMBOL: u32 = 2
Information bits carried per modulated symbol (= log2(NTONES)).
Source§const GRAY_MAP: &'static [u8]
const GRAY_MAP: &'static [u8]
Gray-code map:
GRAY_MAP[tone_index] returns the NATURAL-bit pattern
for that tone. The map covers at least the data alphabet
(2^BITS_PER_SYMBOL entries) and at most the full tone set
(NTONES entries). Protocols whose sync tones are part of
the data alphabet (FT8 / FT4 / FST4 / WSPR) have
len() == NTONES == 2^BITS_PER_SYMBOL; protocols that
reserve additional sync-only tones (JT9, JT65, Q65) either
trim the map to the data alphabet (JT9: 8 entries for 9
tones) or extend it with identity over the sync slots
(JT65 / Q65). Pinned by tests/protocol_invariants.rs.Source§const GFSK_HMOD: f32 = 0.5
const GFSK_HMOD: f32 = 0.5
Modulation index h — the phase increment per symbol is
2π · h.
FT8 and FT4 both use 1.0 (orthogonal tones at 1/T spacing).Source§const NFFT_PER_SYMBOL_FACTOR: u32 = 4
const NFFT_PER_SYMBOL_FACTOR: u32 = 4
Per-symbol FFT size =
NSPS * NFFT_PER_SYMBOL_FACTOR.
FT8 = 2 (window is 2·NSPS), FT4 = 4 (window is 4·NSPS) — trade-off
between frequency resolution and time localisation.Source§const NSTEP_PER_SYMBOL: u32 = 2
const NSTEP_PER_SYMBOL: u32 = 2
Coarse-sync time-step =
NSPS / NSTEP_PER_SYMBOL.
FT8 = 4 (quarter-symbol resolution), FT4 = 1 (symbol-granular).Source§impl Protocol for UvFast
impl Protocol for UvFast
Source§const ID: ProtocolId = ProtocolId::UvPacket
const ID: ProtocolId = ProtocolId::UvPacket
Runtime tag used at FFI / WASM boundaries.
Source§type Fec = Ldpc240_101
type Fec = Ldpc240_101
FEC codec carrying
N_DATA * BITS_PER_SYMBOL coded bits.Source§type Msg = UvPacketRawMessage
type Msg = UvPacketRawMessage
Message codec consuming the FEC-decoded information bits.
impl Copy for UvFast
Auto Trait Implementations§
impl Freeze for UvFast
impl RefUnwindSafe for UvFast
impl Send for UvFast
impl Sync for UvFast
impl Unpin for UvFast
impl UnsafeUnpin for UvFast
impl UnwindSafe for UvFast
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more