Tuesday, November 25, 2025

Listening to WSPRs

Listening to WSPR
Listening to WSPR

Last month I talked a bit about an interesting little side bar in amateur radio called WSPR which allows amateur radio operators and earth scientists to check out what's going on in the earth's atmosphere when it comes to radio propagation.   

Obviously I am quite intrigued by the idea of being able to tap into this myself, both in the sense that I wanted to listen in and report on what I was hearing, but I also want to contribute to the general WSPR beacon network and do some transmitting myself.

To start getting my feet wet on this, I decided to take this step by step and start by focusing on just listening in on what's going on over the airwaves.  


So, How Do You Listen In? 

To simply listen in, I could use a fairly simple Software Defined Radio (SDR) dongle, much like the one that I used for my ACARS project, but since I do want to be able to do some transmitting at some point, I needed something that could be able to receive and transmit. 

Thankfully there are a number of low powered transceivers out there that do behave in a similar way as a SDR. After some investigation, I decided to try out a couple of possible candidates, a HackRF One and a QRP Labs QDX. 

During my experiments, I found both receivers to be very well constructed, had a very well established support communities and fairly easy to set up. 

One issue that I had was with the QDX. When I tried to receive signals on it. I found that the signal levels coming in was at a fairly low signal level, which is not an ideal situation when you are trying to receive weak signals.

 On a more positive note, the QDX was easier to set up for transmitting than the HackRF.  Based on the online community comments for the QDX, I am sure that there is some sort of adjustments that I need to do on the QDX to make it more sensitive to signals. However since the HackRF was receiving signals almost as soon as I plugged it in, I settled on setting up my WSPR station with the HackRF. I do fully recognize that the setting the HackRF to transmit WSPR might be a bit of a challenge, but we take a look what we can do there at some point down the road. 

HackRF One
HackRF One

 
Setting up a HackRF to Receive WSPR

To get things started, we needed to have the following items on hand: 

  • A HackRF One SDR
  • A Windows computer with USB port
  • An internet connection
  • An antenna suitable for HF frequencies (I'll chat about the antenna when I start looking at transmitting WSPR, but for now I've found using a length of wire hanging up in a tree will do a good job of receiving WSPR)

As part of this process we will be installing the following software applications:
  • SDR# - Which the computer will use to directly interface with the HackRF
  • WSJT-X - Which will be used to decode the WSPR transmissions and post them up on the WSPR database
  • VB-Audio Virtual Cable - Which will be used to connect SDR# and WSJT-X


Install HackRF Drivers

Zadig
Zadig

First, I needed to get the HackRF recognized by Windows. To accomplish this I completed the following steps:

  1. I downloaded and installed the Zadig driver installation tool (a quick internet search will give you an install link). 
  2. I connected the HackRF to one of my computer's USB ports
  3. I opened Zadig
  4. Went to OptionsList All Devices
  5. Selected HackRF One from the dropdown menu
  6. Selected WinUSB as the target driver (should show in the box with the green arrow)
  7. Clicked Replace Driver or Install Driver
  8. Waited for the installation to complete

Installing SDR#

One of the main drawbacks of using a HackRF versus the QDX is that I can't directly access the transceiver directly through WSJT-X. In order to access the HackRF itself , we need to use a SDR control program like SDR# (SDRSharp).

To install SDR#, I needed to do the following steps:

  1. Download the SDR# package from https://airspy.com/download/
  2. Extract the ZIP file to a folder (e.g., C:\SDR)
  3. Open the extracted folder and run install-rtlsdr.bat (this installs additional drivers)
  4. Download the HackRF plugin for SDR# if not included
  5. Launch SDRSharp.exe

Configure SDR# for HackRF

One the program has been installed, I needed to configure SDR# to talk to the radio. 

SDR#
SDR#

To do that, in SDR#, I clicked the Source dropdown at the top and did the following:

  1. Select HackRF
  2. Click the gear/configure icon next to the Source dropdown
  3. Set the sample rate (2.5 MSPS or higher works well)
  4. Enable RF Amp and adjust LNA Gain and VGA Gain as needed (I started with moderate settings and adjusted as needed)
  5. Click the play button to start the SDR

Installing WSJT-X

As I mentioned before, WSJT-X is the software that will decode WSPR signals. Installation is fairly straight forward:

  1. Download WSJT-X from https://wsjt.sourceforge.io/
  2. Run the installer and follow the prompts
  3. Launch WSJT-X after installation


Installing  Virtual 
Audio Cable


When in operation, WSJT-X reads in the audio signal from a transceiver in order to do it's decoding. In order to make that happen, we need to fool the computer into thinking that the transceiver is a sound card source. With my main transceiver I use an external USB sound card that feeds in the audio signals, however, I don't really have the desire to hook up another box to my set up. 

After some browsing around I found a software based solution from VB-Audio which will do the same thing as my USB sound card

I installed the VB-Audio thusly:.

  1. Downloaded and install VB-Audio Virtual Cable from https://vb-audio.com/Cable/
  2. Installed the software (you may need to restart your computer)
  3. After installation, I now had a new audio device called "CABLE Input" and "CABLE Output" on my PC

Once I successfully installed the virtual cable, it was time to hook everything up

Hooking Everything Up

Configure SDR# Audio Output

  1. Back into SDR#, I clicked the audio settings icon (speaker icon)
  2. I then set the Output device to CABLE Input (VB-Audio Virtual Cable)
  3. And set the audio output to around 48000 Hz sample rate

Configure SDR# for WSPR Reception

  1. Still in SDR#, I set the mode to  USB (Upper Sideband) mode
  2. Set the filter bandwidth to approximately 3000 Hz
  3. Tuned to a WSPR frequency (in my case I set it for the 20 meter band, but I've included a list of  common frequencies below)
  4. And adjusted the RF gain settings for good signal without overload

Common WSPR Frequencies (dial frequencies in USB mode):

  • 160m: 1.836600 MHz
  • 80m: 3.568600 MHz
  • 40m: 7.038600 MHz
  • 30m: 10.138700 MHz
  • 20m: 14.095600 MHz
  • 17m: 18.104600 MHz
  • 15m: 21.094600 MHz
  • 12m: 24.924600 MHz
  • 10m: 28.124600 MHz

Configuring WSJT-X

Swinging back to WSJT-X I selected FileSettings and did the following:

Audio Tab:

  • Soundcard Input: Select CABLE Output (VB-Audio Virtual Cable)
  • Soundcard Output: Select your regular speakers/headphones (for monitoring)
  • Set both to 48000 Hz sample rate

Radio Tab:

  • Mode: None (we're using SDR# as the radio)
  • Leave other settings at defaults

Reporting Tab:

  • Entered I entered my callsign and grid square 
  • Checked  Enable spotting to WSPRnet on the application desktop (This allows me to send my received signals to the WSPR database)

General Tab:

  • Selected WSPR as the mode.


Start Monitoring!

Finally I'm ready to start listening to WSPR signals, to make that happen I had to do the following:

  1. In SDR#, tuned to a WSPR frequency (in my case 14.095600 MHz)  in USB mode
  2. In WSJT-X, clicked Enable Rx (the green button)
  3. After a while I started seeing decoded WSPR signals appear in WSJT-X and more importantly, my station started showing up on the WSPR reporting site! 



Some Things To Consider

Time Synchronization (This is Critical!)

WSPR requires accurate time synchronization within 1-2 seconds. To keep things in sync I set up a Scheduled Task to resync the time on the computer each day.

I set that up by doing this:

  1. Opened Task Scheduler (you can search for it in the Start menu)
  2. Click "Create Basic Task" in the right panel
  3. I named it "Time Resync"
  4. I then set the trigger to run daily. 
  5. Selected "Start a program" as the action
  6. In the Program/script field, I entered: w32tm
  7. In the Arguments field, I put: /resync
  8. Clicked Finish

Listening In

So now I've got a WSPR receiving station that looks to be working quite well. While the majority of the stations I've been hearing have been primarily based in North America, I have  caught a few stations from Europe and South America, pretty impressive considering that these stations are running at a very low level power. 

The next thing to tackle is how to transmit WSPR out to the world.