Browse Source

Add batch extraction API to gpudemod

master
Jan Svabenik 2 days ago
parent
commit
b47b6d7e3e
2 changed files with 34 additions and 6 deletions
  1. +13
    -6
      cmd/sdrd/helpers.go
  2. +21
    -0
      internal/demod/gpudemod/batch.go

+ 13
- 6
cmd/sdrd/helpers.go View File

@@ -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 {


+ 21
- 0
internal/demod/gpudemod/batch.go View File

@@ -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
}

Loading…
Cancel
Save