|
- package dsp
-
- import (
- "math"
- "testing"
- )
-
- func TestFMModulatorOutputMagnitude(t *testing.T) {
- mod := NewFMModulator(228000)
- // IQ output should always have magnitude ~1
- for n := 0; n < 1000; n++ {
- composite := math.Sin(2 * math.Pi * 1000 * float64(n) / 228000)
- i, q := mod.Modulate(composite)
- mag := math.Sqrt(i*i + q*q)
- if math.Abs(mag-1.0) > 1e-9 {
- t.Fatalf("sample %d: magnitude=%.9f, expected 1.0", n, mag)
- }
- }
- }
-
- func TestFMModulatorZeroInput(t *testing.T) {
- mod := NewFMModulator(228000)
- // Zero input = no deviation = phase stays at 0
- for n := 0; n < 100; n++ {
- i, q := mod.Modulate(0)
- if math.Abs(i-1.0) > 1e-9 || math.Abs(q) > 1e-9 {
- t.Fatalf("sample %d: expected (1,0) got (%.6f,%.6f)", n, i, q)
- }
- }
- }
-
- func TestFMModulatorReset(t *testing.T) {
- mod := NewFMModulator(228000)
- mod.Modulate(0.5)
- mod.Modulate(0.5)
- mod.Reset()
- i, q := mod.Modulate(0)
- if math.Abs(i-1.0) > 1e-9 || math.Abs(q) > 1e-9 {
- t.Fatalf("after reset: expected (1,0) got (%.6f,%.6f)", i, q)
- }
- }
|