Could a serious WSPR station need only one small program and one memorable command?
I built this especially for my friend Brad, K1TE. We both believe in practical P2P, point-to-point radio contacts, and we are working toward making them reliable across the breadth of planet Earth.
airspyhf-wsprd is a dedicated
receiver for the Airspy HF+ Discovery. It tunes, aligns to the WSPR boundary,
decodes, reports to WSPRnet, and repeats:
./airspyhf-wsprd -b 20m -c VU3CER -g MK68xm
No dial-frequency memorization, GUI, virtual audio cable, or Fortran runtime.

Install
On Debian, Ubuntu, or Raspberry Pi OS:
curl -fsSL https://raw.githubusercontent.com/kholia/airspyhf-wsprd/master/install.sh | sudo bash
The installer confirms the callsign and grid, builds and tests the software,
enables automatic WSPRnet reporting, and installs a self-restarting systemd
service. If libairspyhf-dev is unavailable, install the official
airspyhf package from source.
For antenna and broader station notes, see my headless WSPR monitoring system and PA0FRI active antenna articles.
Why it might be the best
- The decoder tracks the upstream
wsprdcore. - Strict
-O3builds retain safe floating-point behavior. - The 192 ksample/s default becomes the same filtered 375 sample/s decoder input as higher rates, with one quarter of the USB and host load of 768k.
- A 32-block RAM queue and dedicated DSP worker keep processing away from the Airspy callback.
- WSPRnet uploads are asynchronous and retry from a bounded RAM queue.
- Clock health, callsigns, grids, HTTP replies, and decoder deadlines are checked.
- The systemd service keeps decoder state and bounded logs in RAM, avoiding microSD writes during reception.
A Raspberry Pi 3 or newer is recommended. The load is small, so no powered USB hub is needed.
Tested with real RF
The bundled recording must produce all nine expected spots:
make test-wav
A second test uses an ESP32-S3-Zero and Si5351 with a 25 MHz TCXO. The generator
stays silent until the host sends *tx* at an even UTC boundary:
make esp32-flash PORT=/dev/cu.usbmodemXXXX
make test-hw PORT=/dev/cu.usbmodemXXXX
The complete ESP32 to Si5351 to Airspy to decoder path worked:
Spot : 40.00 -2.00 14.097088 0 VU3CER MK68 10
Spot : 23.00 -1.00 14.097088 0 VU3CER MK68 10
This strong bench signal proves integration, not record sensitivity. Use weak coupling or a shielded attenuator. Never connect the Si5351 directly to the Airspy antenna input.
For an Airspy HF+ owner wanting a reliable headless WSPR receiver, this may be the easiest and best option yet.