You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
538B

  1. package demod
  2. import "math"
  3. type AM struct{}
  4. func (AM) Name() string { return "AM" }
  5. func (AM) OutputSampleRate() int { return 48000 }
  6. func (AM) Demod(iq []complex64, sampleRate int) []float32 {
  7. if len(iq) == 0 {
  8. return nil
  9. }
  10. out := make([]float32, len(iq))
  11. var mean float64
  12. for i, v := range iq {
  13. mag := math.Hypot(float64(real(v)), float64(imag(v)))
  14. mean += mag
  15. out[i] = float32(mag)
  16. }
  17. mean /= float64(len(iq))
  18. for i := range out {
  19. out[i] -= float32(mean)
  20. }
  21. return out
  22. }
  23. func init() { Register(AM{}) }