HRF1 for WSPR Beacon on GNU Radio

Introduction

In the previous two posts, I looked at FT8 & WSPR, as part of the WSJT-X protocol suite (Ref.1/2). Using simple antennas like a 5m wire hanging from a tree and an Alex Magnetic loop, I was able to receive signals at extremely low SNR’s. I had only experienced reception under these conditions using MFSK where reception was lost around SNR=-14dB, not -28dB as in WSPR! One reason for the difference is the use of UTC time sync, but this is still amazing.

I have several articles from QST magazine about building WSPR beacons, so I thought why not use the HRF1 or Adalm Pluto in configurations similar to what I have used in this blog. The PlutoSDR only starts at 70MHz, so that rules out the HF bands for WSPR. The HRF1 starts at 1MHz so that is perfect. The only drawback is the limited Tx power. Current specs indicate output power of about 5-15dBm (Ref.3). On my unit (early model circa 2018), the maximum I can achieve is about -20dBm. The 11dB amplifier near the antenna port seems to be absent or defective, in any case we can work with -20dBm to demonstrate the WSPR beacon concept. An LNA can be added to boost the proper 5dBm spec to a level that could work very well. ***An Amateur Radio License is required to transmit with the HRF1 and is subject to your particular national regulations. ***

HRF1 Firmware Update & Tx Power & Frequency Testing

Fig.1 Command “hackrf_info”
Fig.2 Command Writing Firmware
Fig3. Command Writing CPLD
Fig.4 HRF1 Tx Power & Frequency Testing

Last year I updated my HRF1 with the latest firmware (Ref.4), so I decided it would be a good idea to update again. The instructions are available on the Great Scott Gadgets website (Ref.5). This time I used Ubuntu 22.04 to do the update. Figure 1 shows the result of “hackrf_info” command line. Figure 2 shows the result of “hackrf_spiflash -w hackrf_one_usb.bin” and Figure 3 shows the result of “hackrf_cpldjtag -x firmware/cpld/sgpio_if/default.xsvf”.

Figure 4 shows the various ways of testing the HRF1 power & frequency output. SDRangel can be used to control the HRF1 or GNU Radio (Ref.4). At this stage it is necessary to determine the frequency accuracy of your unit. You can use a calibrated Spectrum Analyzer or compare against a known source such as WWV to set the ppm.

HRF1 WSPR Beacon Test

Fig.5 HRF1 WSPR Beacon Transmitter Test
Fig.6 GNU Radio Audio Source Setting for VB Cable

Figure 5 shows the testing configuration. A Win10 laptop is used on the transmit end to feed the HRF1 and a second Ubuntu 22.04 laptop (or Virtual Machine on 1st laptop) is used on the receive end with an RTL-SDR/UpConverter. Virtual cables are used to output/input the WSPR audio to the GNU Radio Audio Source/Sync. Check the Win10 audio settings for the exact name of your virtual cable and copy that into the GNU Radio Audio Source Device Name (Fig.6). This may not work, in which case use the Win10 audio settings to set the input device to “Cable Output (VB-Audio Virtual Cable)”. On the Ubuntu side, you can use “sudo modprobe snd-aloop” to loopback the audio output to the input. On WSJT audio settings, choose the input that has “……snd-aloop….” as the mono input.

GNU Radio Tx Schematic

Fig.7 GNU Radio SSB_U Transmit Schematic

Figure 7 shows the GNU Radio SSB_U transmit schematic. The Hartley SSB method is used (Ref.4). The WSPR output feeds the Audio Source by VB virtual cable. This audio then feeds the I & Q branches. The I branch has a Hilbert 90deg Phase shift and the Q is unaltered (-1 for USB). Note that there is a Hilbert block in the Q branch but this is only to compensate for the block delay. The Real part of the Hilbert block is the delayed signal, whereas the Imaginary part is the actual 90 phase shift. Figure 8 shows the LSB/USB outputs for a 1KHz audio tone. There is 32dB difference between sidebands and 45dB carrier suppression. Figure 9 shows the LSB/USB outputs for a voice signal.

GNU Radio Rx Schematic

Fig.10 GNU Radio SSB_U Receive Schematic

Figure 10 shows the GNU Radio receiver schematic. Since the HRF1 is simplex, I used an RTL-SDR with 125MHz up-converter on the receive end (Ref.7). The RTL-SDR is set to the WSPR frequency + 125MHz to compensate for the up-converter. The receive output is then Low Pass filtered and feeds an I branch with Hilbert Transform as in the transmitter and Q branch. The branches are added and feeds the Audio Sink which in turn feeds the WSPR receiver.

WSPR Link Test

Fig.12 GNU Radio Rx – WSJT-X WSPR Decoder

On the receive end, a 1KHz test tone was used to check continuity, level and frequency (flashback to analog microwave days….) with the Gqrx receiver. Then the WSPR transmit audio was used and received on the Gqrx as in Figure 11 and finally with the GNU Radio SSB receiver in Figure 12.

Fig.13 YouTube Video HRF1 for WSPR Beacon on GNU Radio

GNURadio Companion Basics Course:
https://clarktelecommunications.thinkific.com/courses/gnuradio_basics

Please send your comments, questions and suggestions to:
contact:

YouTube Channel
YouTube Channel

References

#1. – “RTL-SDR for WSJT-X FT8”,
https://jeremyclark.ca/wp/telecom/rtl-sdr-for-wsjt-x-ft8/

#2. – “RTL-SDR for WSJT-X WSPR”
https://jeremyclark.ca/wp/telecom/rtl-sdr-for-wsjt-x-wspr/

#3. – “HackRF One Power Output”
https://hackrf.readthedocs.io/en/latest/faq.html#faq

#4.- “HRF1 as a Signal Generator for Amateur Radio”
https://jeremyclark.ca/wp/telecom/hrf1-as-a-signal-generator-for-amateur-radio/

#5. – “HRF1 Documents”
https://hackrf.readthedocs.io/en/latest/index.html

#6. – “SSB Modulation on GNU Radio”
https://jeremyclark.ca/wp/telecom/ssb-modulation-on-gnu-radio/

#7. – “RTL-SDR for SSB on GNU Radio”
https://jeremyclark.ca/wp/telecom/rtl-sdr-for-ssb-on-gnu-radio/

By Jeremy Clark

Jeremy Clark is a Senior Telecommunications Engineer and Advanced Amateur Radio Operator VE3PKC. He is the author of E-Books on Telecommunications, Navigation & Electronics.