Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

41 рядки
1.1KB

  1. package classifier
  2. import "testing"
  3. func TestRuleClassifyWFM(t *testing.T) {
  4. sampleRate := 1_000_000
  5. fftSize := 1024
  6. spectrum := make([]float64, fftSize)
  7. for i := range spectrum {
  8. spectrum[i] = -100
  9. }
  10. start := 100
  11. end := 350 // ~244 bins -> ~238 kHz
  12. for i := start; i <= end; i++ {
  13. spectrum[i] = -10
  14. }
  15. cls := Classify(SignalInput{FirstBin: start, LastBin: end}, spectrum, sampleRate, fftSize, nil)
  16. if cls == nil || cls.ModType != ClassWFM {
  17. t.Fatalf("expected WFM, got %+v", cls)
  18. }
  19. }
  20. func TestSoftmaxConfidence(t *testing.T) {
  21. scores1 := map[SignalClass]float64{ClassNFM: 2.0, ClassAM: 0.3, ClassNoise: 0.1}
  22. c1 := softmaxConfidence(scores1, ClassNFM)
  23. if c1 < 0.7 {
  24. t.Fatalf("clear winner should have high confidence: %f", c1)
  25. }
  26. scores2 := map[SignalClass]float64{ClassSSBUSB: 1.0, ClassSSBLSB: 0.9, ClassAM: 0.8}
  27. c2 := softmaxConfidence(scores2, ClassSSBUSB)
  28. if c2 > 0.5 {
  29. t.Fatalf("ambiguous should have low confidence: %f", c2)
  30. }
  31. c3 := softmaxConfidence(map[SignalClass]float64{}, ClassNFM)
  32. if c3 != 0.1 {
  33. t.Fatalf("empty should return 0.1: %f", c3)
  34. }
  35. }