Wideband autonomous SDR analysis engine forked from sdr-visual-suite
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

47 wiersze
1.4KB

  1. package recorder
  2. import (
  3. "encoding/json"
  4. "os"
  5. "path/filepath"
  6. "time"
  7. "sdr-wideband-suite/internal/classifier"
  8. "sdr-wideband-suite/internal/detector"
  9. )
  10. type Meta struct {
  11. EventID int64 `json:"event_id"`
  12. Start time.Time `json:"start"`
  13. End time.Time `json:"end"`
  14. CenterHz float64 `json:"center_hz"`
  15. BandwidthHz float64 `json:"bandwidth_hz"`
  16. SampleRate int `json:"sample_rate"`
  17. SNRDb float64 `json:"snr_db"`
  18. PeakDb float64 `json:"peak_db"`
  19. Class *classifier.Classification `json:"classification,omitempty"`
  20. DurationMs int64 `json:"duration_ms"`
  21. Files map[string]any `json:"files"`
  22. }
  23. func writeMeta(dir string, ev detector.Event, sampleRate int, files map[string]any) error {
  24. m := Meta{
  25. EventID: ev.ID,
  26. Start: ev.Start,
  27. End: ev.End,
  28. CenterHz: ev.CenterHz,
  29. BandwidthHz: ev.Bandwidth,
  30. SampleRate: sampleRate,
  31. SNRDb: ev.SNRDb,
  32. PeakDb: ev.PeakDb,
  33. Class: ev.Class,
  34. DurationMs: ev.End.Sub(ev.Start).Milliseconds(),
  35. Files: files,
  36. }
  37. b, err := json.MarshalIndent(m, "", " ")
  38. if err != nil {
  39. return err
  40. }
  41. return os.WriteFile(filepath.Join(dir, "meta.json"), b, 0o644)
  42. }