package dsp import "math" // FreqShift mixes IQ by -offsetHz to shift signal to baseband. func FreqShift(iq []complex64, sampleRate int, offsetHz float64) []complex64 { if len(iq) == 0 || sampleRate <= 0 || offsetHz == 0 { out := make([]complex64, len(iq)) copy(out, iq) return out } out := make([]complex64, len(iq)) phase := 0.0 inc := -2 * math.Pi * offsetHz / float64(sampleRate) for i := 0; i < len(iq); i++ { phase += inc re := math.Cos(phase) im := math.Sin(phase) v := iq[i] out[i] = complex(float32(float64(real(v))*re-float64(imag(v))*im), float32(float64(real(v))*im+float64(imag(v))*re)) } return out }