Files
sumi/signals.go
2025-12-16 17:45:21 -06:00

31 lines
497 B
Go

package main
import (
"math"
)
type Signal interface {
Eval(t float64) float64
}
type Const struct{ V float64 }
func (s Const) Eval(t float64) float64 { return s.V }
type Sine struct {
Amp, Freq, Phase, Bias float64
}
func (s Sine) Eval(t float64) float64 {
return s.Bias + s.Amp*math.Sin(2*math.Pi*s.Freq*t+s.Phase)
}
type Saw struct {
Min, Max, Period float64
}
func (s Saw) Eval(t float64) float64 {
u := math.Mod(t, s.Period) / s.Period // 0..1
return s.Min + (s.Max-s.Min)*u
}