◢ SALISH SIGINT
Node 01 · Spectrum Console

SigDigger as your operator console
for the Salish Sea.

SigDigger is a Qt5 digital signal analyzer written in C/C++ on top of its own DSP stack (sigutils + Suscan) — no GNU Radio dependency, no Python overhead, just a real-time spectrum/waterfall pinned to whatever SDR you can afford. It's GPLv3, runs on Linux, macOS and Windows on x86_64, and supports most SDR devices on the market through SoapySDR. On this site it's the entry point of a four-node citizen-SIGINT rig that watches Elliott Bay for orca activity, vessel noise, and marine-band traffic.

TL;DR — what it actually is

Stack

Frontend
Qt5/C++ (OpenGL waterfall)
DSP core
sigutils + Suscan (multicore-aware)
Hardware abstraction
SoapySDR
License
GPL-3.0
Author
Gonzalo José Carracedo Carballal
Repo
BatchDrake/SigDigger

What you get

  • Real-time spectrum & waterfall, OpenGL-accelerated
  • AM, FM, LSB, USB analog demod
  • ASK / FSK / PSK inspectors with blind parameter estimation
  • Doppler analysis & Analog TV demod
  • Baseband recording — full spectrum and per-channel
  • Network broadcast of demodulated channel data
  • UDP broadcast of received samples and demodulated symbols
Why it matters The UDP-broadcast feature is the key to a multi-node rig: SigDigger acts as the human-facing console while one or more headless boxes push samples or symbols across the LAN to it. That turns it from a desktop tool into a command station.

Hardware matrix — what to feed it

SoapySDR is the abstraction. Anything with a Soapy module shows up as a device. The shortlist that's actually useful for the Salish Sea:

DeviceRangeBandwidthCost (USD)Salish use
RTL-SDR Blog v4500 kHz – 1.75 GHz2.4 MS/s$30–40Marine VHF, AIS, NOAA WX, ADS-B
Airspy HF+ Discovery0.5 kHz – 31 MHz / 60–260 MHz768 kS/s$169HF maritime, low-VHF, very low noise
Airspy R2 / Mini24 MHz – 1.8 GHz10 MS/s$99–169Wide marine + aero look-down
HackRF One1 MHz – 6 GHz20 MS/s (8-bit)$300–340Half-duplex TX for testing your own LoRa node
SDRplay RSPdx1 kHz – 2 GHz10 MHz$250Long-wave to UHF, good preselectors
KrakenSDR24 MHz – 1.766 GHz × 5 ch2.56 MS/s × 5$700Direction-finding on AIS / vessel emitters
LimeSDR Mini 2.010 MHz – 3.5 GHz10 MHz$420Full-duplex, narrowband nicer than HackRF

For whale calls specifically

Cetacean vocalizations live 10 Hz – 25 kHz (orca sits in ~500 Hz – 25 kHz; blue/fin/humpback < 1 kHz). That's audio band, not RF. SigDigger is for the radio side — picking up the infrastructure around the whales (ferry AIS, NOAA WX, marine VHF chatter, Coast Guard P25). The actual hydrophone signal lives in the iPhone node and the LoRa buoy.

Frequency tour — Elliott Bay, north to Alki

The bands worth parking on while you watch the bay. All numbers in MHz.

BandFreq (MHz)ModeWhat you hear
NOAA Weather (KHB-60)162.550NFMSeattle marine forecast, sea-state
AIS Channel A161.975GMSK 9600Vessel position, cargo, MMSI
AIS Channel B162.025GMSK 9600Mirror — listen on both
Marine VHF 16156.800NFMDistress & calling — always on
Marine VHF 13 (Ch 13)156.650NFMBridge-to-bridge, ferry traffic
Vessel Traffic Service156.250 / 156.700NFMPuget Sound VTS sectors
USCG Sector Puget Sound~169 / 171P25 Phase 1SAR, escort tasking
SeaTac approach119.200 / 120.400AMAircraft over the bay
SeaTac ADS-B1090.000PPMDecode with dump1090 in parallel

Install — one command per OS

macOS (Homebrew)

# SoapySDR + SigDigger via the SDR-on-Mac tap
brew install --cask sigdigger
brew install soapysdr soapyrtlsdr soapyhackrf soapyairspy
SoapySDRUtil --probe

Ubuntu / Debian

# Build from source — pre-built debs lag a few months
sudo apt install build-essential cmake qtbase5-dev libsndfile1-dev \
                 libsoapysdr-dev soapysdr-module-rtlsdr soapysdr-module-airspy
git clone --recursive https://github.com/BatchDrake/SigDigger
cd SigDigger && ./build && ./build/SigDigger

Windows

Grab the latest portable zip from the releases page, unzip, run SigDigger.exe. Plug in the SDR before launching so Windows binds the WinUSB driver via Zadig.

Network broadcast — the headless pattern

The trick that makes this useful for a whale-watching deployment: run the SDR at the dock on a Pi 5, broadcast its samples to your laptop on the couch via UDP, and only haul the Qt UI when you want to look at the waterfall. SigDigger speaks VITA-49-ish UDP and SoapySDR's remote modules.

   ┌──────────── PIER 70 ────────────┐         ┌────── HOME OFFICE ──────┐
   │  [RTL-SDR v4] ─USB─ [Pi 5]      │         │                         │
   │                  │              │         │     ┌──────────────┐    │
   │     soapy_remote │ rx_sdr ──── UDP/9999 ────────►│  SigDigger   │    │
   │                  │              │  Tailscale     │  (waterfall) │    │
   │     dump1090 ────┴── tcp 30005 ─┘  WireGuard     └──────────────┘    │
   │                                 │  or LAN              │             │
   │                                 │                      ▼             │
   │                                 │              ┌──────────────┐      │
   │                                 │              │  recordings/ │      │
   │                                 │              │  *.cf32      │      │
   │                                 │              └──────────────┘      │
   └─────────────────────────────────┘         └─────────────────────────┘

Pi-side: expose the dongle as a Soapy server

# Headless Pi at the dock — run as a systemd unit on boot
sudo apt install soapyremote-server soapysdr-module-rtlsdr
SoapySDRServer --bind=0.0.0.0:55132

Console-side: connect SigDigger to the remote

# Source > Add device, then in "driver" field:
driver=remote,remote=tcp://pier70.tailnet:55132,remote:driver=rtlsdr

Or: pure UDP sample firehose

# suscli — Suscan CLI shipped with SigDigger
suscli devices                          # list whatever SoapySDR sees
suscli profile new bay --device 0 --rate 2400000 --freq 162025000
suscli broadcast bay --remote 192.168.1.42:9999 --proto udp

Operator's checklist — Elliott Bay watch

  1. Mount the antenna outside. Elliott Bay has a clear water shot from Alki, Magnolia, and the West Seattle bluff. A discone or a 1/4-wave whip on the rail is enough for marine VHF / AIS. Avoid the elevator shaft.
  2. Park on AIS first. AIS gives you ground truth — every cargo, ferry, tug, and most pleasure craft self-reports position, course, speed. DSC + AIS at 161.975/162.025 feeds the fusion layer downstream. Use SigDigger's PSK inspector or aisdecoder.
  3. Then NOAA WX. 162.550 MHz, NFM, ~12 kHz wide. Loud, ever-present, useful for sea-state correlation against orca presence.
  4. Doppler-watch ferries. Ferries on the Bremerton/Bainbridge runs are big underwater noise sources. Their VHF Ch-13 calls give you the schedule. Tag those clips and feed them to the fusion layer.
  5. Record everything as cf32. Disk is cheap, your time is not. SigDigger's full spectrum baseband recording means you can re-demod weeks later when you realize that pop at 12:42 was a hydrophone pulse, not background.

Why SigDigger and not the alternatives

vs. GQRX

GQRX is GNU-Radio-based and is fine for "where's the carrier." SigDigger has the inspector pattern — you can drop a chunk of waterfall onto a constellation diagram and let it estimate baud + symbols blind. That's the difference.

vs. SDR#

SDR# is Windows-only, closed-source, and has plugin licensing weirdness. SigDigger is GPLv3 across all three OSes and scriptable from the CLI.

vs. CubicSDR

CubicSDR is great for casual listening and easy install. It does not have Suscan's blind-modem inspector, multi-channel demod recording, or the UDP sample broadcast that this rig depends on.

Where it fits in the stack

Node 02 · Telemetry ESP32 + LoRa Whale Buoy → Node 03 · Acoustic iPhone Hydrophone Stream → Node 04 · Fusion Salish SIGINT Mesh →
Salish SIGINT · Node 01 / 04 SigDigger by BatchDrake · GPL-3.0 · this writeup CC-BY-SA