blind

package
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 14, 2026 License: Apache-2.0 Imports: 4 Imported by: 0

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

View Source
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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL