You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 line
2.0KB

  1. package classifier
  2. // SignalClass is a coarse modulation label.
  3. type SignalClass string
  4. const (
  5. ClassAM SignalClass = "AM"
  6. ClassNFM SignalClass = "NFM"
  7. ClassWFM SignalClass = "WFM"
  8. ClassWFMStereo SignalClass = "WFM_STEREO"
  9. ClassSSBUSB SignalClass = "USB"
  10. ClassSSBLSB SignalClass = "LSB"
  11. ClassCW SignalClass = "CW"
  12. ClassFSK SignalClass = "FSK"
  13. ClassPSK SignalClass = "PSK"
  14. ClassDMR SignalClass = "DMR"
  15. ClassDStar SignalClass = "D-STAR"
  16. ClassFT8 SignalClass = "FT8"
  17. ClassWSPR SignalClass = "WSPR"
  18. ClassNoise SignalClass = "NOISE"
  19. ClassUnknown SignalClass = "UNKNOWN"
  20. )
  21. // Features are lightweight spectral features derived from a signal slice.
  22. type Features struct {
  23. // Spectral
  24. BW3dB float64 `json:"bw_3db_hz"`
  25. BW90 float64 `json:"bw_90_hz"`
  26. SpectralFlat float64 `json:"spectral_flat"`
  27. PeakToAvg float64 `json:"peak_to_avg_db"`
  28. Symmetry float64 `json:"symmetry"`
  29. RolloffLeft float64 `json:"rolloff_left_db_khz"`
  30. RolloffRight float64 `json:"rolloff_right_db_khz"`
  31. // Temporal
  32. EnvVariance float64 `json:"env_variance"`
  33. ZeroCross float64 `json:"zero_cross_rate"`
  34. InstFreqStd float64 `json:"inst_freq_std"`
  35. CrestFactor float64 `json:"crest_factor"`
  36. }
  37. // Classification is the classifier output attached to signals/events.
  38. type Classification struct {
  39. ModType SignalClass `json:"mod_type"`
  40. Confidence float64 `json:"confidence"`
  41. BW3dB float64 `json:"bw_3db_hz"`
  42. Features Features `json:"features,omitempty"`
  43. MathFeatures *MathFeatures `json:"math_features,omitempty"`
  44. PLL *PLLResult `json:"pll,omitempty"`
  45. SecondBest SignalClass `json:"second_best,omitempty"`
  46. Scores map[SignalClass]float64 `json:"scores,omitempty"`
  47. }
  48. // SignalInput is the minimal input needed for classification.
  49. type SignalInput struct {
  50. FirstBin int
  51. LastBin int
  52. SNRDb float64
  53. CenterHz float64
  54. BWHz float64 // Occupied bandwidth from detector (edge-expanded)
  55. }