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.

94 lines
2.7KB

  1. package pipeline
  2. import "sdr-wideband-suite/internal/config"
  3. type Policy struct {
  4. Mode string `json:"mode"`
  5. SurveillanceFFTSize int `json:"surveillance_fft_size"`
  6. SurveillanceFPS int `json:"surveillance_fps"`
  7. RefinementEnabled bool `json:"refinement_enabled"`
  8. MaxRefinementJobs int `json:"max_refinement_jobs"`
  9. MinCandidateSNRDb float64 `json:"min_candidate_snr_db"`
  10. PreferGPU bool `json:"prefer_gpu"`
  11. }
  12. func PolicyFromConfig(cfg config.Config) Policy {
  13. return Policy{
  14. Mode: cfg.Pipeline.Mode,
  15. SurveillanceFFTSize: cfg.Surveillance.AnalysisFFTSize,
  16. SurveillanceFPS: cfg.Surveillance.FrameRate,
  17. RefinementEnabled: cfg.Refinement.Enabled,
  18. MaxRefinementJobs: cfg.Resources.MaxRefinementJobs,
  19. MinCandidateSNRDb: cfg.Refinement.MinCandidateSNRDb,
  20. PreferGPU: cfg.Resources.PreferGPU,
  21. }
  22. }
  23. func ApplyNamedProfile(cfg *config.Config, name string) {
  24. if cfg == nil || name == "" {
  25. return
  26. }
  27. switch name {
  28. case "legacy":
  29. cfg.Pipeline.Mode = "legacy"
  30. cfg.Surveillance.Strategy = "single-resolution"
  31. cfg.Refinement.Enabled = true
  32. if cfg.Resources.MaxRefinementJobs <= 0 {
  33. cfg.Resources.MaxRefinementJobs = 8
  34. }
  35. case "wideband-balanced":
  36. cfg.Pipeline.Mode = "wideband-balanced"
  37. cfg.Surveillance.Strategy = "single-resolution"
  38. if cfg.Surveillance.AnalysisFFTSize < 4096 {
  39. cfg.Surveillance.AnalysisFFTSize = 4096
  40. }
  41. if cfg.FrameRate < 12 {
  42. cfg.FrameRate = 12
  43. }
  44. if cfg.Surveillance.FrameRate < 12 {
  45. cfg.Surveillance.FrameRate = 12
  46. }
  47. cfg.Refinement.Enabled = true
  48. if cfg.Refinement.MaxConcurrent < 16 {
  49. cfg.Refinement.MaxConcurrent = 16
  50. }
  51. if cfg.Resources.MaxRefinementJobs < 16 {
  52. cfg.Resources.MaxRefinementJobs = 16
  53. }
  54. cfg.Resources.PreferGPU = true
  55. case "wideband-aggressive":
  56. cfg.Pipeline.Mode = "wideband-aggressive"
  57. cfg.Surveillance.Strategy = "single-resolution"
  58. if cfg.Surveillance.AnalysisFFTSize < 8192 {
  59. cfg.Surveillance.AnalysisFFTSize = 8192
  60. }
  61. if cfg.FrameRate < 10 {
  62. cfg.FrameRate = 10
  63. }
  64. if cfg.Surveillance.FrameRate < 10 {
  65. cfg.Surveillance.FrameRate = 10
  66. }
  67. cfg.Refinement.Enabled = true
  68. if cfg.Refinement.MaxConcurrent < 32 {
  69. cfg.Refinement.MaxConcurrent = 32
  70. }
  71. if cfg.Resources.MaxRefinementJobs < 32 {
  72. cfg.Resources.MaxRefinementJobs = 32
  73. }
  74. cfg.Resources.PreferGPU = true
  75. case "archive":
  76. cfg.Pipeline.Mode = "archive"
  77. cfg.Refinement.Enabled = true
  78. if cfg.Refinement.MaxConcurrent < 12 {
  79. cfg.Refinement.MaxConcurrent = 12
  80. }
  81. if cfg.Resources.MaxRefinementJobs < 12 {
  82. cfg.Resources.MaxRefinementJobs = 12
  83. }
  84. if !cfg.Recorder.Enabled {
  85. cfg.Recorder.Enabled = true
  86. }
  87. }
  88. cfg.FFTSize = cfg.Surveillance.AnalysisFFTSize
  89. }