Documentation
¶
Overview ¶
Package blind estimates the symbol/baud rate and a coarse modulation class of an unknown carrier directly from its channelized IQ, with no protocol decoder. It is the "what is this?" front-end for SigLab's identify/wideband fallback: when nothing decodes, the blind estimate feeds a reference-database ranking (internal/siglab/sigref).
The symbol-rate estimate is the reliable part — two independent methods (autocorrelation of the symbol-transition energy and the spectral line that same nonlinearity regenerates) must agree for high confidence. The modulation-class guess is deliberately coarse and reports "unknown" rather than risk a confidently-wrong label, because a wrong class hurts ranking more than a missing one.
Index ¶
Constants ¶
const ( ModUnknown = "unknown" ModFSK2 = "fsk2" // 2-level FSK / GFSK / GMSK family ModFSK4 = "fsk4" // 4-level FSK / C4FM family ModPSK = "psk" // constant-envelope phase modulation (incl. π/4-DQPSK) ModQAM = "qam" // amplitude-bearing (non-constant-envelope) modulation )
Modulation-class labels. These mirror the coarse families the reference DB keys on; "unknown" is emitted whenever the features are inconclusive.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BlindEstimate ¶
type BlindEstimate struct {
// SymbolRateHz is the best symbol-rate estimate; 0 when indeterminate.
SymbolRateHz float64 `json:"symbol_rate_hz"`
// SymbolRateConf is 0..1: high when the two methods agree, low otherwise.
SymbolRateConf float64 `json:"symbol_rate_conf"`
// SymbolRateCands carries both method estimates when they disagree.
SymbolRateCands []float64 `json:"symbol_rate_cands,omitempty"`
// ModClass is one of the Mod* labels; Levels is the detected symbol-level
// count (2 or 4) or 0 when unknown.
ModClass string `json:"mod_class"`
Levels int `json:"levels"`
// OccupiedBWHz is the 99% occupied bandwidth of the carrier.
OccupiedBWHz float64 `json:"occupied_bw_hz"`
// Method names the estimators that ran.
Method string `json:"method"`
}
BlindEstimate is the result of a blind analysis of one carrier.
func Estimate ¶
func Estimate(iq []complex64, rateHz float64) BlindEstimate
Estimate analyses a channelized carrier (complex baseband at rateHz) and returns its blind symbol-rate / modulation estimate. Returns a zero value for too-short input or a non-positive rate.