You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jan Svabenik 4f034f17e8 Add averaging/max-hold and tuner bandwidth control 5 天之前
cmd/sdrd Add averaging/max-hold and tuner bandwidth control 5 天之前
internal Add averaging/max-hold and tuner bandwidth control 5 天之前
web Add averaging/max-hold and tuner bandwidth control 5 天之前
.gitignore Add events API and timeline UI 5 天之前
README.md Add averaging/max-hold and tuner bandwidth control 5 天之前
config.yaml Add averaging/max-hold and tuner bandwidth control 5 天之前
go.mod Initial SDR visual suite 5 天之前
go.sum Initial SDR visual suite 5 天之前

README.md

SDR Visual Suite

Go-based SDRplay RSP1b live spectrum + waterfall visualizer with a minimal event recorder.

Features

  • Live spectrum + waterfall web UI (WebSocket streaming)
  • Event timeline view (time vs frequency) with detail drawer
  • In-browser spectrogram slice for selected events
  • Basic detector with event JSONL output (data/events.jsonl)
  • Events API (/api/events?limit=...&since=...)
  • Runtime UI controls for center frequency, span, sample rate, tuner bandwidth, FFT size, gain, AGC, DC block, IQ balance, detector threshold
  • Display controls: averaging + max-hold
  • Recorded clips list placeholder (metadata only for now)
  • Windows + Linux support
  • 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

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)
  • 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
  • detector.min_duration_ms, detector.hold_ms: debounce/merge

Web UI

The UI is served from web/ and connects to /ws for spectrum frames.

Controls Panel

Use the right-side controls to adjust center frequency, span (zoom), sample rate, tuner bandwidth, FFT size, gain, AGC, DC block, IQ balance, and detector threshold. Preset buttons provide quick jumps to 40m/20m/17m.

Event Timeline

  • The timeline panel displays recent events (time vs frequency).
  • Click any event block to open the detail drawer with event stats and a mini spectrogram slice from the latest frame.

Config API

  • GET /api/config: returns the current runtime configuration.
  • POST /api/config: updates center_hz, sample_rate, fft_size, gain_db, and detector.threshold_db at runtime.
  • POST /api/sdr/settings: updates agc, dc_block, and iq_balance at runtime.

Events API

/api/events reads from the JSONL event log and returns the most recent events:

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

Example:

curl "http://localhost:8080/api/events?limit=100&since=1700000000000"

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.