Wideband autonomous SDR analysis engine forked from sdr-visual-suite
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

122 рядки
4.3KB

  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. DisplayBins int `json:"display_bins"`
  15. DisplayFPS int `json:"display_fps"`
  16. RefinementEnabled bool `json:"refinement_enabled"`
  17. MaxRefinementJobs int `json:"max_refinement_jobs"`
  18. MinCandidateSNRDb float64 `json:"min_candidate_snr_db"`
  19. RefinementMinSpanHz float64 `json:"refinement_min_span_hz"`
  20. RefinementMaxSpanHz float64 `json:"refinement_max_span_hz"`
  21. RefinementAutoSpan bool `json:"refinement_auto_span"`
  22. PreferGPU bool `json:"prefer_gpu"`
  23. }
  24. func PolicyFromConfig(cfg config.Config) Policy {
  25. return Policy{
  26. Mode: cfg.Pipeline.Mode,
  27. Intent: cfg.Pipeline.Goals.Intent,
  28. MonitorStartHz: cfg.Pipeline.Goals.MonitorStartHz,
  29. MonitorEndHz: cfg.Pipeline.Goals.MonitorEndHz,
  30. MonitorSpanHz: cfg.Pipeline.Goals.MonitorSpanHz,
  31. SignalPriorities: append([]string(nil), cfg.Pipeline.Goals.SignalPriorities...),
  32. AutoRecordClasses: append([]string(nil), cfg.Pipeline.Goals.AutoRecordClasses...),
  33. AutoDecodeClasses: append([]string(nil), cfg.Pipeline.Goals.AutoDecodeClasses...),
  34. SurveillanceFFTSize: cfg.Surveillance.AnalysisFFTSize,
  35. SurveillanceFPS: cfg.Surveillance.FrameRate,
  36. DisplayBins: cfg.Surveillance.DisplayBins,
  37. DisplayFPS: cfg.Surveillance.DisplayFPS,
  38. RefinementEnabled: cfg.Refinement.Enabled,
  39. MaxRefinementJobs: cfg.Resources.MaxRefinementJobs,
  40. MinCandidateSNRDb: cfg.Refinement.MinCandidateSNRDb,
  41. RefinementMinSpanHz: cfg.Refinement.MinSpanHz,
  42. RefinementMaxSpanHz: cfg.Refinement.MaxSpanHz,
  43. RefinementAutoSpan: cfg.Refinement.AutoSpan,
  44. PreferGPU: cfg.Resources.PreferGPU,
  45. }
  46. }
  47. func ApplyNamedProfile(cfg *config.Config, name string) {
  48. if cfg == nil || name == "" {
  49. return
  50. }
  51. switch name {
  52. case "legacy":
  53. cfg.Pipeline.Mode = "legacy"
  54. cfg.Pipeline.Goals.Intent = "general-monitoring"
  55. cfg.Surveillance.Strategy = "single-resolution"
  56. cfg.Refinement.Enabled = true
  57. if cfg.Resources.MaxRefinementJobs <= 0 {
  58. cfg.Resources.MaxRefinementJobs = 8
  59. }
  60. case "wideband-balanced":
  61. cfg.Pipeline.Mode = "wideband-balanced"
  62. cfg.Pipeline.Goals.Intent = "wideband-surveillance"
  63. cfg.Surveillance.Strategy = "single-resolution"
  64. if cfg.Surveillance.AnalysisFFTSize < 4096 {
  65. cfg.Surveillance.AnalysisFFTSize = 4096
  66. }
  67. if cfg.FrameRate < 12 {
  68. cfg.FrameRate = 12
  69. }
  70. if cfg.Surveillance.FrameRate < 12 {
  71. cfg.Surveillance.FrameRate = 12
  72. }
  73. cfg.Refinement.Enabled = true
  74. if cfg.Refinement.MaxConcurrent < 16 {
  75. cfg.Refinement.MaxConcurrent = 16
  76. }
  77. if cfg.Resources.MaxRefinementJobs < 16 {
  78. cfg.Resources.MaxRefinementJobs = 16
  79. }
  80. cfg.Resources.PreferGPU = true
  81. case "wideband-aggressive":
  82. cfg.Pipeline.Mode = "wideband-aggressive"
  83. cfg.Pipeline.Goals.Intent = "high-density-wideband-surveillance"
  84. cfg.Surveillance.Strategy = "single-resolution"
  85. if cfg.Surveillance.AnalysisFFTSize < 8192 {
  86. cfg.Surveillance.AnalysisFFTSize = 8192
  87. }
  88. if cfg.FrameRate < 10 {
  89. cfg.FrameRate = 10
  90. }
  91. if cfg.Surveillance.FrameRate < 10 {
  92. cfg.Surveillance.FrameRate = 10
  93. }
  94. cfg.Refinement.Enabled = true
  95. if cfg.Refinement.MaxConcurrent < 32 {
  96. cfg.Refinement.MaxConcurrent = 32
  97. }
  98. if cfg.Resources.MaxRefinementJobs < 32 {
  99. cfg.Resources.MaxRefinementJobs = 32
  100. }
  101. cfg.Resources.PreferGPU = true
  102. case "archive":
  103. cfg.Pipeline.Mode = "archive"
  104. cfg.Pipeline.Goals.Intent = "archive-and-triage"
  105. cfg.Refinement.Enabled = true
  106. if cfg.Refinement.MaxConcurrent < 12 {
  107. cfg.Refinement.MaxConcurrent = 12
  108. }
  109. if cfg.Resources.MaxRefinementJobs < 12 {
  110. cfg.Resources.MaxRefinementJobs = 12
  111. }
  112. if !cfg.Recorder.Enabled {
  113. cfg.Recorder.Enabled = true
  114. }
  115. }
  116. cfg.FFTSize = cfg.Surveillance.AnalysisFFTSize
  117. }