package recorder import ( "math" "sdr-visual-suite/internal/demod" "sdr-visual-suite/internal/dsp" ) func demodAudioCPU(d demod.Demodulator, iq []complex64, sampleRate int, offset float64, bw float64) ([]float32, int) { shifted := dsp.FreqShift(iq, sampleRate, offset) cutoff := bw / 2 if cutoff < 200 { cutoff = 200 } taps := dsp.LowpassFIR(cutoff, sampleRate, 101) filtered := dsp.ApplyFIR(shifted, taps) decim := int(math.Round(float64(sampleRate) / float64(d.OutputSampleRate()))) if decim < 1 { decim = 1 } dec := dsp.Decimate(filtered, decim) inputRate := sampleRate / decim return d.Demod(dec, inputRate), inputRate }