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

50 строки
1.7KB

  1. package pipeline
  2. import (
  3. "strings"
  4. "sdr-wideband-suite/internal/classifier"
  5. )
  6. type SignalDecision struct {
  7. Candidate Candidate `json:"candidate"`
  8. Class string `json:"class,omitempty"`
  9. ShouldRecord bool `json:"should_record"`
  10. ShouldAutoDecode bool `json:"should_auto_decode"`
  11. Reason string `json:"reason,omitempty"`
  12. RecordAdmission *PriorityAdmission `json:"record_admission,omitempty"`
  13. DecodeAdmission *PriorityAdmission `json:"decode_admission,omitempty"`
  14. }
  15. func DecideSignalAction(policy Policy, candidate Candidate, cls *classifier.Classification) SignalDecision {
  16. decision := SignalDecision{Candidate: candidate}
  17. classTag := ""
  18. hintTag := strings.TrimSpace(candidate.Hint)
  19. if cls != nil {
  20. decision.Class = string(cls.ModType)
  21. classTag = decision.Class
  22. }
  23. if classTag != "" && WantsClass(policy.AutoRecordClasses, classTag) {
  24. decision.ShouldRecord = true
  25. decision.Reason = DecisionReasonRecordClass
  26. } else if classTag == "" && hintTag != "" && WantsClass(policy.AutoRecordClasses, hintTag) {
  27. decision.ShouldRecord = true
  28. decision.Reason = DecisionReasonRecordHint
  29. }
  30. if classTag != "" && WantsClass(policy.AutoDecodeClasses, classTag) {
  31. decision.ShouldAutoDecode = true
  32. if decision.Reason == "" {
  33. decision.Reason = DecisionReasonDecodeClass
  34. }
  35. } else if classTag == "" && hintTag != "" && WantsClass(policy.AutoDecodeClasses, hintTag) {
  36. decision.ShouldAutoDecode = true
  37. if decision.Reason == "" {
  38. decision.Reason = DecisionReasonDecodeHint
  39. }
  40. }
  41. if decision.Reason == "" && candidate.Hint != "" {
  42. decision.Reason = DecisionReasonHintOnly
  43. }
  44. return decision
  45. }