Wideband autonomous SDR analysis engine forked from sdr-visual-suite
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

41 linhas
965B

  1. package main
  2. import (
  3. "sort"
  4. "sdr-wideband-suite/internal/pipeline"
  5. )
  6. func enforceDecisionBudgets(decisions []pipeline.SignalDecision, maxRecord int, maxDecode int) (int, int) {
  7. recorded := 0
  8. decoded := 0
  9. order := make([]int, len(decisions))
  10. for i := range decisions {
  11. order[i] = i
  12. }
  13. sort.SliceStable(order, func(i, j int) bool {
  14. return decisions[order[i]].Candidate.SNRDb > decisions[order[j]].Candidate.SNRDb
  15. })
  16. for _, idx := range order {
  17. if decisions[idx].ShouldRecord {
  18. if maxRecord > 0 && recorded >= maxRecord {
  19. decisions[idx].ShouldRecord = false
  20. decisions[idx].Reason = "recording budget exceeded"
  21. } else {
  22. recorded++
  23. }
  24. }
  25. if decisions[idx].ShouldAutoDecode {
  26. if maxDecode > 0 && decoded >= maxDecode {
  27. decisions[idx].ShouldAutoDecode = false
  28. if decisions[idx].Reason == "" {
  29. decisions[idx].Reason = "decode budget exceeded"
  30. }
  31. } else {
  32. decoded++
  33. }
  34. }
  35. }
  36. return recorded, decoded
  37. }