pub struct UvExpress;Expand description
Express — punctured to rate 3/4. 1800 net bps (+50 % vs AFSK 1200). Strong-signal headline-fast mode. 76 % parity puncturing — OSD-2 is essentially mandatory at the BP threshold (~+3 dB Eb/N0 with OSD-2; BP-only needs ~+5 dB). Viable only thanks to kSR-greedy puncture selection (uniform-spread fails at this rate).
Implementations§
Trait Implementations§
Source§impl FrameLayout for UvExpress
impl FrameLayout for UvExpress
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
Source§const N_RAMP: u32 = 0
const N_RAMP: u32 = 0
Source§const SYNC_MODE: SyncMode
const SYNC_MODE: SyncMode
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
Source§impl ModulationParams for UvExpress
impl ModulationParams for UvExpress
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
Source§const GRAY_MAP: &'static [u8]
const GRAY_MAP: &'static [u8]
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
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
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
NSPS / NSTEP_PER_SYMBOL.
FT8 = 4 (quarter-symbol resolution), FT4 = 1 (symbol-granular).Source§impl Protocol for UvExpress
impl Protocol for UvExpress
Source§const ID: ProtocolId = ProtocolId::UvPacket
const ID: ProtocolId = ProtocolId::UvPacket
Source§type Fec = Ldpc240_101
type Fec = Ldpc240_101
N_DATA * BITS_PER_SYMBOL coded bits.Source§type Msg = UvPacketRawMessage
type Msg = UvPacketRawMessage
impl Copy for UvExpress
Auto Trait Implementations§
impl Freeze for UvExpress
impl RefUnwindSafe for UvExpress
impl Send for UvExpress
impl Sync for UvExpress
impl Unpin for UvExpress
impl UnsafeUnpin for UvExpress
impl UnwindSafe for UvExpress
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
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>
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>
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