Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

42 рядки
1014B

  1. package dsp
  2. import (
  3. "math"
  4. "testing"
  5. )
  6. func TestFMModulatorOutputMagnitude(t *testing.T) {
  7. mod := NewFMModulator(228000)
  8. // IQ output should always have magnitude ~1
  9. for n := 0; n < 1000; n++ {
  10. composite := math.Sin(2 * math.Pi * 1000 * float64(n) / 228000)
  11. i, q := mod.Modulate(composite)
  12. mag := math.Sqrt(i*i + q*q)
  13. if math.Abs(mag-1.0) > 1e-9 {
  14. t.Fatalf("sample %d: magnitude=%.9f, expected 1.0", n, mag)
  15. }
  16. }
  17. }
  18. func TestFMModulatorZeroInput(t *testing.T) {
  19. mod := NewFMModulator(228000)
  20. // Zero input = no deviation = phase stays at 0
  21. for n := 0; n < 100; n++ {
  22. i, q := mod.Modulate(0)
  23. if math.Abs(i-1.0) > 1e-9 || math.Abs(q) > 1e-9 {
  24. t.Fatalf("sample %d: expected (1,0) got (%.6f,%.6f)", n, i, q)
  25. }
  26. }
  27. }
  28. func TestFMModulatorReset(t *testing.T) {
  29. mod := NewFMModulator(228000)
  30. mod.Modulate(0.5)
  31. mod.Modulate(0.5)
  32. mod.Reset()
  33. i, q := mod.Modulate(0)
  34. if math.Abs(i-1.0) > 1e-9 || math.Abs(q) > 1e-9 {
  35. t.Fatalf("after reset: expected (1,0) got (%.6f,%.6f)", i, q)
  36. }
  37. }