Просмотр исходного кода

Log fused GPU, legacy GPU, and CPU demod paths

master
Jan Svabenik 3 дней назад
Родитель
Сommit
d7258bbf1d
2 измененных файлов: 23 добавлений и 10 удалений
  1. +11
    -7
      internal/recorder/demod.go
  2. +12
    -3
      internal/recorder/demod_live.go

+ 11
- 7
internal/recorder/demod.go Просмотреть файл

@@ -25,7 +25,6 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f
if d == nil { if d == nil {
return errors.New("demodulator not found") return errors.New("demodulator not found")
} }
// band-extract around signal
bw := ev.Bandwidth bw := ev.Bandwidth
offset := ev.CenterHz - m.centerHz offset := ev.CenterHz - m.centerHz
var audio []float32 var audio []float32
@@ -54,16 +53,22 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f
if m.gpuDemod.LastDemodUsedGPU() { if m.gpuDemod.LastDemodUsedGPU() {
log.Printf("gpudemod: fused GPU demod used for event %d (%s)", ev.ID, name) log.Printf("gpudemod: fused GPU demod used for event %d (%s)", ev.ID, name)
} }
} else if gpuAudio, gpuRate, err := m.gpuDemod.Demod(iq, offset, bw, gpuMode); err == nil {
audio = gpuAudio
inputRate = gpuRate
if m.gpuDemod.LastDemodUsedGPU() {
log.Printf("gpudemod: GPU demod stage used for event %d (%s)", ev.ID, name)
} else {
log.Printf("gpudemod: fused GPU demod failed for event %d (%s): %v", ev.ID, name, err)
if gpuAudio, gpuRate, err := m.gpuDemod.Demod(iq, offset, bw, gpuMode); err == nil {
audio = gpuAudio
inputRate = gpuRate
if m.gpuDemod.LastDemodUsedGPU() {
log.Printf("gpudemod: legacy GPU demod used for event %d (%s)", ev.ID, name)
}
} else {
log.Printf("gpudemod: legacy GPU demod failed for event %d (%s): %v", ev.ID, name, err)
} }
} }
} }
} }
if audio == nil { if audio == nil {
log.Printf("gpudemod: CPU demod fallback used for event %d (%s)", ev.ID, name)
shifted := dsp.FreqShift(iq, m.sampleRate, offset) shifted := dsp.FreqShift(iq, m.sampleRate, offset)
cutoff := bw / 2 cutoff := bw / 2
if cutoff < 200 { if cutoff < 200 {
@@ -93,7 +98,6 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f
_ = writeWAV(rdsPath, rds, 2400, 1) _ = writeWAV(rdsPath, rds, 2400, 1)
files["rds_baseband"] = "rds.wav" files["rds_baseband"] = "rds.wav"
files["rds_sample_rate"] = 2400 files["rds_sample_rate"] = 2400
// naive decode
dec := rdsdecoder{} dec := rdsdecoder{}
res := dec.Decode(rds, 2400) res := dec.Decode(rds, 2400)
if res.PI != 0 { if res.PI != 0 {


+ 12
- 3
internal/recorder/demod_live.go Просмотреть файл

@@ -3,6 +3,7 @@ package recorder
import ( import (
"bytes" "bytes"
"errors" "errors"
"log"
"math" "math"
"time" "time"


@@ -66,13 +67,21 @@ func (m *Manager) DemodLive(centerHz float64, bw float64, mode string, seconds i
if gpuAudio, gpuRate, err := m.gpuDemod.DemodFused(segment, offset, bw, gpuMode); err == nil { if gpuAudio, gpuRate, err := m.gpuDemod.DemodFused(segment, offset, bw, gpuMode); err == nil {
audio = gpuAudio audio = gpuAudio
inputRate = gpuRate inputRate = gpuRate
} else if gpuAudio, gpuRate, err := m.gpuDemod.Demod(segment, offset, bw, gpuMode); err == nil {
audio = gpuAudio
inputRate = gpuRate
log.Printf("gpudemod: fused GPU live demod used (%s)", name)
} else {
log.Printf("gpudemod: fused GPU live demod failed (%s): %v", name, err)
if gpuAudio, gpuRate, err := m.gpuDemod.Demod(segment, offset, bw, gpuMode); err == nil {
audio = gpuAudio
inputRate = gpuRate
log.Printf("gpudemod: legacy GPU live demod used (%s)", name)
} else {
log.Printf("gpudemod: legacy GPU live demod failed (%s): %v", name, err)
}
} }
} }
} }
if audio == nil { if audio == nil {
log.Printf("gpudemod: CPU live demod fallback used (%s)", name)
shifted := dsp.FreqShift(segment, m.sampleRate, offset) shifted := dsp.FreqShift(segment, m.sampleRate, offset)
cutoff := bw / 2 cutoff := bw / 2
if cutoff < 200 { if cutoff < 200 {


Загрузка…
Отмена
Сохранить