WSPR on 20m with airspyHF+, gqrx and wsjt-x

I have been experimenting with my airspyHF+ for a couple of weeks now. It is a very nice device and I have been using gqrx on my linux laptop to view the entire 20m band, listen to QSOs, CW contacts and beacons. I've also used it to identify a few sources of strong QRM in my house.

One of the things that I have been wanting to do with this device is to set it up as a WSPR listen-only node for the times that I'm not actually doing HAM radio (which is most of the time, alas). I have been thinking and googling about this for a little while. It has been done before (e.g. see: ), but with respect to the author of that article, that is a complex and slightly convoluted way to get data into a program that does WSPR.

The two main programs that are needed to capture and process the data (in linux at least, for me) are gqrx and WSJT-X.
Recent versions of gqrx support the airspyHF+ natively and have a flexible software receiver that supports demodulation of all standard analogue modulation techniques. WSJT-X is obviously the software of choice for many HAM digital modes including WSPR. So how to get data from gqrx to WSJT-X? It is worth noting that gqrx supports the hamlib protocol so that it can be controlled by an external program.

Unlike windows, linux natively supports multiple ways to be able to stream data from one program to another. For example, gqrx supports the ability to stream raw audio data to a network port, which can then be listened to by other programs. Linux also natively supports various useful audio devices, including a "loopback" device that creates a virtual audio device that can be written to or read from any program through the standard audio interface. WSJT-X supports reading data from a system audio device.

So the recipe for streaming data between gqrx and WSJT-X:
- enable the audio loopback device on your system. This amounts to loading the snd_aloop module if necessary.
- enable remote control in gqrx (in the tools tab)
- enable SSB output in the receiver options tab of gqrx
- open the volume control window (called "sound settings" on my xubuntu machine, but can be started on the command-line with pavucontrol)
- in the configuration tab, the loopback device has a number of options. I chose "analogue mono duplex"
- in the playback tab, there is gqrx audio output, which can be selected to be either built-in analogue stereo or "loopback analogue mono" on my machine
- change it to loopback analogue mono, which should stop the audio coming out of your PC speakers
- start WSJT-X, and set up your info. Change to WSPR mode, halt TX and select your band
- in the "radio" tab of configuration, select Hamlib NET rigctl. This lets WSJT-X control gqrx.
- in the "audio" tab of configuration, select the loopback device input. In my case it is called "alsa_input.platform-snd_aloop.0.analog-mono.monitor".

That's it! Now choose your WSPR band and WSJT-X should take care of the rest.