Wideband autonomous SDR analysis engine forked from sdr-visual-suite
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

151 satır
5.7KB

  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. MonitorCenterHz float64 `json:"monitor_center_hz,omitempty"`
  7. MonitorStartHz float64 `json:"monitor_start_hz,omitempty"`
  8. MonitorEndHz float64 `json:"monitor_end_hz,omitempty"`
  9. MonitorSpanHz float64 `json:"monitor_span_hz,omitempty"`
  10. SignalPriorities []string `json:"signal_priorities,omitempty"`
  11. AutoRecordClasses []string `json:"auto_record_classes,omitempty"`
  12. AutoDecodeClasses []string `json:"auto_decode_classes,omitempty"`
  13. SurveillanceFFTSize int `json:"surveillance_fft_size"`
  14. SurveillanceFPS int `json:"surveillance_fps"`
  15. DisplayBins int `json:"display_bins"`
  16. DisplayFPS int `json:"display_fps"`
  17. SurveillanceStrategy string `json:"surveillance_strategy"`
  18. RefinementEnabled bool `json:"refinement_enabled"`
  19. MaxRefinementJobs int `json:"max_refinement_jobs"`
  20. RefinementMaxConcurrent int `json:"refinement_max_concurrent"`
  21. MinCandidateSNRDb float64 `json:"min_candidate_snr_db"`
  22. RefinementMinSpanHz float64 `json:"refinement_min_span_hz"`
  23. RefinementMaxSpanHz float64 `json:"refinement_max_span_hz"`
  24. RefinementAutoSpan bool `json:"refinement_auto_span"`
  25. PreferGPU bool `json:"prefer_gpu"`
  26. MaxDecodeJobs int `json:"max_decode_jobs"`
  27. DecisionHoldMs int `json:"decision_hold_ms"`
  28. }
  29. func PolicyFromConfig(cfg config.Config) Policy {
  30. p := Policy{
  31. Mode: cfg.Pipeline.Mode,
  32. Intent: cfg.Pipeline.Goals.Intent,
  33. MonitorCenterHz: cfg.CenterHz,
  34. MonitorStartHz: cfg.Pipeline.Goals.MonitorStartHz,
  35. MonitorEndHz: cfg.Pipeline.Goals.MonitorEndHz,
  36. MonitorSpanHz: cfg.Pipeline.Goals.MonitorSpanHz,
  37. SignalPriorities: append([]string(nil), cfg.Pipeline.Goals.SignalPriorities...),
  38. AutoRecordClasses: append([]string(nil), cfg.Pipeline.Goals.AutoRecordClasses...),
  39. AutoDecodeClasses: append([]string(nil), cfg.Pipeline.Goals.AutoDecodeClasses...),
  40. SurveillanceFFTSize: cfg.Surveillance.AnalysisFFTSize,
  41. SurveillanceFPS: cfg.Surveillance.FrameRate,
  42. DisplayBins: cfg.Surveillance.DisplayBins,
  43. DisplayFPS: cfg.Surveillance.DisplayFPS,
  44. SurveillanceStrategy: cfg.Surveillance.Strategy,
  45. RefinementEnabled: cfg.Refinement.Enabled,
  46. MaxRefinementJobs: cfg.Resources.MaxRefinementJobs,
  47. RefinementMaxConcurrent: cfg.Refinement.MaxConcurrent,
  48. MinCandidateSNRDb: cfg.Refinement.MinCandidateSNRDb,
  49. RefinementMinSpanHz: cfg.Refinement.MinSpanHz,
  50. RefinementMaxSpanHz: cfg.Refinement.MaxSpanHz,
  51. RefinementAutoSpan: config.BoolValue(cfg.Refinement.AutoSpan, true),
  52. PreferGPU: cfg.Resources.PreferGPU,
  53. MaxDecodeJobs: cfg.Resources.MaxDecodeJobs,
  54. DecisionHoldMs: cfg.Resources.DecisionHoldMs,
  55. }
  56. if p.MonitorSpanHz <= 0 && p.MonitorStartHz != 0 && p.MonitorEndHz != 0 && p.MonitorEndHz > p.MonitorStartHz {
  57. p.MonitorSpanHz = p.MonitorEndHz - p.MonitorStartHz
  58. }
  59. return p
  60. }
  61. func ApplyNamedProfile(cfg *config.Config, name string) {
  62. if cfg == nil || name == "" {
  63. return
  64. }
  65. switch name {
  66. case "legacy":
  67. cfg.Pipeline.Mode = "legacy"
  68. cfg.Pipeline.Goals.Intent = "general-monitoring"
  69. cfg.Surveillance.Strategy = "single-resolution"
  70. cfg.Refinement.Enabled = true
  71. if cfg.Resources.MaxRefinementJobs <= 0 {
  72. cfg.Resources.MaxRefinementJobs = 8
  73. }
  74. case "wideband-balanced":
  75. cfg.Pipeline.Mode = "wideband-balanced"
  76. cfg.Pipeline.Goals.Intent = "wideband-surveillance"
  77. cfg.Surveillance.Strategy = "single-resolution"
  78. if cfg.Surveillance.AnalysisFFTSize < 4096 {
  79. cfg.Surveillance.AnalysisFFTSize = 4096
  80. }
  81. if cfg.FrameRate < 12 {
  82. cfg.FrameRate = 12
  83. }
  84. if cfg.Surveillance.FrameRate < 12 {
  85. cfg.Surveillance.FrameRate = 12
  86. }
  87. cfg.Refinement.Enabled = true
  88. if cfg.Refinement.MaxConcurrent < 16 {
  89. cfg.Refinement.MaxConcurrent = 16
  90. }
  91. if cfg.Resources.MaxRefinementJobs < 16 {
  92. cfg.Resources.MaxRefinementJobs = 16
  93. }
  94. if cfg.Refinement.MinSpanHz <= 0 {
  95. cfg.Refinement.MinSpanHz = 4000
  96. }
  97. if cfg.Refinement.MaxSpanHz <= 0 {
  98. cfg.Refinement.MaxSpanHz = 200000
  99. }
  100. cfg.Resources.PreferGPU = true
  101. case "wideband-aggressive":
  102. cfg.Pipeline.Mode = "wideband-aggressive"
  103. cfg.Pipeline.Goals.Intent = "high-density-wideband-surveillance"
  104. cfg.Surveillance.Strategy = "single-resolution"
  105. if cfg.Surveillance.AnalysisFFTSize < 8192 {
  106. cfg.Surveillance.AnalysisFFTSize = 8192
  107. }
  108. if cfg.FrameRate < 10 {
  109. cfg.FrameRate = 10
  110. }
  111. if cfg.Surveillance.FrameRate < 10 {
  112. cfg.Surveillance.FrameRate = 10
  113. }
  114. cfg.Refinement.Enabled = true
  115. if cfg.Refinement.MaxConcurrent < 32 {
  116. cfg.Refinement.MaxConcurrent = 32
  117. }
  118. if cfg.Resources.MaxRefinementJobs < 32 {
  119. cfg.Resources.MaxRefinementJobs = 32
  120. }
  121. if cfg.Refinement.MinSpanHz <= 0 {
  122. cfg.Refinement.MinSpanHz = 6000
  123. }
  124. if cfg.Refinement.MaxSpanHz <= 0 {
  125. cfg.Refinement.MaxSpanHz = 250000
  126. }
  127. cfg.Resources.PreferGPU = true
  128. case "archive":
  129. cfg.Pipeline.Mode = "archive"
  130. cfg.Pipeline.Goals.Intent = "archive-and-triage"
  131. cfg.Refinement.Enabled = true
  132. if cfg.Refinement.MaxConcurrent < 12 {
  133. cfg.Refinement.MaxConcurrent = 12
  134. }
  135. if cfg.Resources.MaxRefinementJobs < 12 {
  136. cfg.Resources.MaxRefinementJobs = 12
  137. }
  138. if !cfg.Recorder.Enabled {
  139. cfg.Recorder.Enabled = true
  140. }
  141. }
  142. if cfg.Resources.MaxDecodeJobs <= 0 {
  143. cfg.Resources.MaxDecodeJobs = cfg.Resources.MaxRecordingStreams
  144. }
  145. cfg.FFTSize = cfg.Surveillance.AnalysisFFTSize
  146. }