From b47b6d7e3ec216c8915e9452505d5566111ce966 Mon Sep 17 00:00:00 2001 From: Jan Svabenik Date: Thu, 19 Mar 2026 12:25:09 +0100 Subject: [PATCH] Add batch extraction API to gpudemod --- cmd/sdrd/helpers.go | 19 +++++++++++++------ internal/demod/gpudemod/batch.go | 21 +++++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 internal/demod/gpudemod/batch.go diff --git a/cmd/sdrd/helpers.go b/cmd/sdrd/helpers.go index 8f9fdcc..54926a4 100644 --- a/cmd/sdrd/helpers.go +++ b/cmd/sdrd/helpers.go @@ -83,14 +83,21 @@ func extractSignalIQBatch(iq []complex64, sampleRate int, centerHz float64, sign } } - for i, sig := range signals { - offset := sig.CenterHz - centerHz - if eng != nil { - if gpuOut, _, err := eng.ShiftFilterDecimate(iq, offset, sig.BWHz, decimTarget); err == nil && len(gpuOut) > 0 { - out[i] = gpuOut - continue + if eng != nil { + jobs := make([]gpudemod.ExtractJob, len(signals)) + for i, sig := range signals { + jobs[i] = gpudemod.ExtractJob{OffsetHz: sig.CenterHz - centerHz, BW: sig.BWHz, OutRate: decimTarget} + } + if gpuOuts, _, err := eng.ShiftFilterDecimateBatch(iq, jobs); err == nil && len(gpuOuts) == len(signals) { + for i := range gpuOuts { + out[i] = gpuOuts[i] } + return out } + } + + for i, sig := range signals { + offset := sig.CenterHz - centerHz shifted := dsp.FreqShift(iq, sampleRate, offset) cutoff := sig.BWHz / 2 if cutoff < 200 { diff --git a/internal/demod/gpudemod/batch.go b/internal/demod/gpudemod/batch.go new file mode 100644 index 0000000..1630fb3 --- /dev/null +++ b/internal/demod/gpudemod/batch.go @@ -0,0 +1,21 @@ +package gpudemod + +type ExtractJob struct { + OffsetHz float64 + BW float64 + OutRate int +} + +func (e *Engine) ShiftFilterDecimateBatch(iq []complex64, jobs []ExtractJob) ([][]complex64, []int, error) { + outs := make([][]complex64, len(jobs)) + rates := make([]int, len(jobs)) + for i, job := range jobs { + out, rate, err := e.ShiftFilterDecimate(iq, job.OffsetHz, job.BW, job.OutRate) + if err != nil { + return nil, nil, err + } + outs[i] = out + rates[i] = rate + } + return outs, rates, nil +}