mfsk-core 0.6.2

Pure-Rust WSJT-family decoders and synthesisers (FT8 FT4 FST4 WSPR JT9 JT65 Q65) behind a zero-cost Protocol trait. Host (rustfft) or no_std embedded targets (ESP32-S3, RP2350, Cortex-M) via a pluggable FFT backend; optional fixed-point hot path for FPU-less MCUs.
Documentation
//! FT8 synchronisation — re-exports from the protocol-generic
//! [`crate::core::sync`] module.
//!
//! As of v0.6.0 this module no longer hosts FT8-specific sync code:
//!
//! - `coarse_sync` was removed in #48 step B (commit history). FT8
//!   coarse-sync is owned exclusively by
//!   [`crate::ft8::decode_block::coarse_sync`], which uses the
//!   WSJT-X `sync8.f90`-faithful 16-bin allsum noise estimator.
//!   `decode.rs` and `decode_block.rs` call it directly.
//!
//! - `compute_spectra`, `fine_sync_power`, `fine_sync_power_split`,
//!   `refine_candidate`, `refine_candidate_double` were removed in
//!   #49 cat B (this commit). They were one-line trampolines into
//!   `crate::core::sync::*::<Ft8>`. Internal callers
//!   (`ft8::decode::process_candidate`) now turbofish the generic
//!   functions directly. Out-of-tree FT8 callers should do the same.
//!
//! The re-exports below preserve the [`SyncCandidate`] and
//! [`FineSyncDetail`] types at their FT8-namespaced paths so naming
//! stays stable even though no FT8-specific code lives here anymore.

pub use crate::core::sync::{
    FineSyncDetail, SyncCandidate, make_costas_ref, parabolic_peak, score_costas_block,
};