選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
Jan Svabenik 25ef919d13 Reuse common WFM mono base for stereo and RDS paths 2日前
cmd/sdrd Reuse batch extraction runner across DSP loop iterations 2日前
docs Remove obsolete Windows build scripts 2日前
internal Reuse common WFM mono base for stereo and RDS paths 2日前
tools Attempt MinGW-host CUDA build path for Windows 2日前
web fix: refine signal popover hover behavior 2日前
.gitignore chore: ignore generated CUDA build outputs 2日前
README.md Add gpudemod DLL override path and document Windows warning 2日前
build-cuda-linux.sh docs: split CUDA build paths by platform 2日前
build-cuda-windows.ps1 Add Windows gpudemod DLL build path 2日前
build-gpudemod-dll.ps1 Use hybrid CUDA runtime for gpudemod DLL 2日前
build-sdrplay.ps1 Prefer freshest gpudemod DLL during app build 2日前
config.yaml Add OS-CFAR detector support 3日前
go.mod Initial SDR visual suite 4日前
go.sum Initial SDR visual suite 4日前
run-hw.log Checkpoint before runtime optimization 2日前
sdr-visual-suite.rar Checkpoint before runtime optimization 2日前
start-sdr.ps1 Add start script 4日前

README.md

SDR Visual Suite

Go-based SDRplay RSP1b live spectrum + waterfall visualizer with an event recorder, classifier, and demod/recording pipeline.

Features

  • Live spectrum + waterfall web UI (WebSocket streaming)
  • Event timeline view (time vs frequency) with detail drawer
  • Event JSONL output (data/events.jsonl)
  • Runtime UI controls for center frequency, span, sample rate, tuner bandwidth, FFT size, gain, AGC, DC block, IQ balance, detector threshold
  • Optional GPU FFT (cuFFT) with toggle + /api/gpu
  • IQ/audio recording + recordings list
  • Live demod endpoint
  • WFM stereo + RDS baseband
  • Mock mode for testing without hardware

Quick Start (Mock)

# From repo root

go run ./cmd/sdrd --mock

Open http://localhost:8080.

SDRplay Build/Run (Real Device)

This project uses the SDRplay API via cgo (sdrplay_api.h). Ensure the SDRplay API is installed.

Windows

$env:CGO_CFLAGS='-IC:\Program Files\SDRplay\API\inc'
$env:CGO_LDFLAGS='-LC:\Program Files\SDRplay\API\x64 -lsdrplay_api'

go build -tags sdrplay ./cmd/sdrd
.\sdrd.exe -config config.yaml

Windows (GPU / CUDA + SDRplay)

The only supported Windows build path in this repository is:

powershell -ExecutionPolicy Bypass -File .\build-cuda-windows.ps1
powershell -ExecutionPolicy Bypass -File .\build-sdrplay.ps1

This path uses:

  • nvcc + MSVC to build gpudemod_kernels.dll
  • MinGW GCC/G++ for the Go/CGO application build
  • runtime DLL loading for the Windows gpudemod path

Important:

  • gpudemod_kernels.dll is copied next to sdrd.exe by build-sdrplay.ps1
  • build-sdrplay.ps1 prepares the runtime DLL placement and PATH setup for SDRplay + CUDA DLLs
  • the gpudemod DLL is built with -cudart=hybrid
  • GPU validation is disabled by default for performance; enable it with SDR_GPU_VALIDATE=1 when debugging
  • you can override DLL lookup with GPUMOD_DLL=C:\path\to\gpudemod_kernels.dll
  • Windows builds may still show a harmless __cdecl redefined warning from CUDA headers
  • older experimental Windows build scripts were removed to avoid confusion

Linux

export CGO_CFLAGS='-I/opt/sdrplay_api/include'
export CGO_LDFLAGS='-L/opt/sdrplay_api/lib -lsdrplay_api'

go build -tags sdrplay ./cmd/sdrd
./cmd/sdrd/sdrd -config config.yaml

Configuration

Edit config.yaml:

  • bands: list of band ranges
  • center_hz: center frequency
  • sample_rate: sample rate
  • fft_size: FFT size
  • gain_db: device gain (gain reduction)
  • tuner_bw_khz: tuner bandwidth (200/300/600/1536/5000/6000/7000/8000)
  • use_gpu_fft: enable GPU FFT (requires CUDA + cufft build tag)
  • agc: enable automatic gain control
  • dc_block: enable DC blocking filter
  • iq_balance: enable basic IQ imbalance correction
  • detector.threshold_db: power threshold in dB (fallback if CFAR disabled)
  • detector.cfar_enabled: enable OS-CFAR detection
  • detector.cfar_guard_cells, detector.cfar_train_cells, detector.cfar_rank, detector.cfar_scale_db: OS-CFAR window + ordered-statistic parameters
  • detector.min_duration_ms, detector.hold_ms: debounce/merge
  • recorder.*: enable IQ/audio recording, preroll, output_dir, max_disk_mb
  • decoder.*: external decode commands (use {iq}, {audio}, {sr} placeholders)

APIs

Config API

  • GET /api/config
  • POST /api/config
  • POST /api/sdr/settings
  • GET /api/gpu

Events API

/api/events reads from the JSONL event log:

  • limit (optional): max number of events (default 200, max 2000)
  • since (optional): Unix milliseconds or RFC3339 timestamp

Signals API

  • GET /api/signals → current live signals (latest snapshot)

Recordings API

  • GET /api/recordings
  • GET /api/recordings/:id (meta.json)
  • GET /api/recordings/:id/iq
  • GET /api/recordings/:id/audio
  • GET /api/recordings/:id/decode?mode=FT8|WSPR|DMR|D-STAR|FSK|PSK

Live Demod API

  • GET /api/demod?freq=...&bw=...&mode=...&sec=... → audio/wav

Decoder Tools

Put external decoder binaries/scripts under tools/ and configure decoder.* in config.yaml. See tools/README.md for examples.

Tests


go test ./...

Troubleshooting

  • If you see sdrplay support not built, rebuild with -tags sdrplay.
  • If the SDRplay library is not found, ensure CGO_CFLAGS and CGO_LDFLAGS point to the API headers and library.
  • Use --mock to run without hardware.