Wideband autonomous SDR analysis engine forked from sdr-visual-suite
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.

112 line
3.8KB

  1. package pipeline
  2. import "sdr-wideband-suite/internal/config"
  3. type Policy struct {
  4. Mode string `json:"mode"`
  5. Intent string `json:"intent"`
  6. MonitorStartHz float64 `json:"monitor_start_hz,omitempty"`
  7. MonitorEndHz float64 `json:"monitor_end_hz,omitempty"`
  8. MonitorSpanHz float64 `json:"monitor_span_hz,omitempty"`
  9. SignalPriorities []string `json:"signal_priorities,omitempty"`
  10. AutoRecordClasses []string `json:"auto_record_classes,omitempty"`
  11. AutoDecodeClasses []string `json:"auto_decode_classes,omitempty"`
  12. SurveillanceFFTSize int `json:"surveillance_fft_size"`
  13. SurveillanceFPS int `json:"surveillance_fps"`
  14. RefinementEnabled bool `json:"refinement_enabled"`
  15. MaxRefinementJobs int `json:"max_refinement_jobs"`
  16. MinCandidateSNRDb float64 `json:"min_candidate_snr_db"`
  17. PreferGPU bool `json:"prefer_gpu"`
  18. }
  19. func PolicyFromConfig(cfg config.Config) Policy {
  20. return Policy{
  21. Mode: cfg.Pipeline.Mode,
  22. Intent: cfg.Pipeline.Goals.Intent,
  23. MonitorStartHz: cfg.Pipeline.Goals.MonitorStartHz,
  24. MonitorEndHz: cfg.Pipeline.Goals.MonitorEndHz,
  25. MonitorSpanHz: cfg.Pipeline.Goals.MonitorSpanHz,
  26. SignalPriorities: append([]string(nil), cfg.Pipeline.Goals.SignalPriorities...),
  27. AutoRecordClasses: append([]string(nil), cfg.Pipeline.Goals.AutoRecordClasses...),
  28. AutoDecodeClasses: append([]string(nil), cfg.Pipeline.Goals.AutoDecodeClasses...),
  29. SurveillanceFFTSize: cfg.Surveillance.AnalysisFFTSize,
  30. SurveillanceFPS: cfg.Surveillance.FrameRate,
  31. RefinementEnabled: cfg.Refinement.Enabled,
  32. MaxRefinementJobs: cfg.Resources.MaxRefinementJobs,
  33. MinCandidateSNRDb: cfg.Refinement.MinCandidateSNRDb,
  34. PreferGPU: cfg.Resources.PreferGPU,
  35. }
  36. }
  37. func ApplyNamedProfile(cfg *config.Config, name string) {
  38. if cfg == nil || name == "" {
  39. return
  40. }
  41. switch name {
  42. case "legacy":
  43. cfg.Pipeline.Mode = "legacy"
  44. cfg.Pipeline.Goals.Intent = "general-monitoring"
  45. cfg.Surveillance.Strategy = "single-resolution"
  46. cfg.Refinement.Enabled = true
  47. if cfg.Resources.MaxRefinementJobs <= 0 {
  48. cfg.Resources.MaxRefinementJobs = 8
  49. }
  50. case "wideband-balanced":
  51. cfg.Pipeline.Mode = "wideband-balanced"
  52. cfg.Pipeline.Goals.Intent = "wideband-surveillance"
  53. cfg.Surveillance.Strategy = "single-resolution"
  54. if cfg.Surveillance.AnalysisFFTSize < 4096 {
  55. cfg.Surveillance.AnalysisFFTSize = 4096
  56. }
  57. if cfg.FrameRate < 12 {
  58. cfg.FrameRate = 12
  59. }
  60. if cfg.Surveillance.FrameRate < 12 {
  61. cfg.Surveillance.FrameRate = 12
  62. }
  63. cfg.Refinement.Enabled = true
  64. if cfg.Refinement.MaxConcurrent < 16 {
  65. cfg.Refinement.MaxConcurrent = 16
  66. }
  67. if cfg.Resources.MaxRefinementJobs < 16 {
  68. cfg.Resources.MaxRefinementJobs = 16
  69. }
  70. cfg.Resources.PreferGPU = true
  71. case "wideband-aggressive":
  72. cfg.Pipeline.Mode = "wideband-aggressive"
  73. cfg.Pipeline.Goals.Intent = "high-density-wideband-surveillance"
  74. cfg.Surveillance.Strategy = "single-resolution"
  75. if cfg.Surveillance.AnalysisFFTSize < 8192 {
  76. cfg.Surveillance.AnalysisFFTSize = 8192
  77. }
  78. if cfg.FrameRate < 10 {
  79. cfg.FrameRate = 10
  80. }
  81. if cfg.Surveillance.FrameRate < 10 {
  82. cfg.Surveillance.FrameRate = 10
  83. }
  84. cfg.Refinement.Enabled = true
  85. if cfg.Refinement.MaxConcurrent < 32 {
  86. cfg.Refinement.MaxConcurrent = 32
  87. }
  88. if cfg.Resources.MaxRefinementJobs < 32 {
  89. cfg.Resources.MaxRefinementJobs = 32
  90. }
  91. cfg.Resources.PreferGPU = true
  92. case "archive":
  93. cfg.Pipeline.Mode = "archive"
  94. cfg.Pipeline.Goals.Intent = "archive-and-triage"
  95. cfg.Refinement.Enabled = true
  96. if cfg.Refinement.MaxConcurrent < 12 {
  97. cfg.Refinement.MaxConcurrent = 12
  98. }
  99. if cfg.Resources.MaxRefinementJobs < 12 {
  100. cfg.Resources.MaxRefinementJobs = 12
  101. }
  102. if !cfg.Recorder.Enabled {
  103. cfg.Recorder.Enabled = true
  104. }
  105. }
  106. cfg.FFTSize = cfg.Surveillance.AnalysisFFTSize
  107. }