RTL-SDR for SSB on GNU Radio

Introduction

In the previous two posts we looked at using the RTL-SDR on Raspberry Pi4 with GNU Radio. We examined four applications: displaying the FM band spectrum, wide-band FM, narrow-band Marine weather, and finally AM reception. In this post we look at the RTL-SDR for SSB reception on GNU Radio. The latest version of GNU Radio >=3.8xx is used (Ref.1).

RTL-SDR for SSB

Fig.1 RTL-SDR & 125MHz Upconverter & USB Hub

In order to receive HF SSB (1.8MHz-30MHz) on the RTL-SDR, I use a 125MHz up-converter. I described this procedure in an earlier post (Ref.2). When receiving signals using SDR# for example, you tune to the receive frequency + 125MHz or set the shift frequency to -125MHz. In a similar fashion, using GNURadio, you must tune the RTL to the shifted frequency.

Zero IF Reception of SSB

Fig.2 Zero IF Hartley IQ Receiver (Ref.3)
Fig.3 Hartley SSB Receiver Complex Phasor Diagram

Figure 2 shows the block diagram of a Zero IF receiver. Essentially, a carrier signal is direct converted to base-band by multiplication with a local oscillator on the same frequency. In I & Q reception, there are two receive branches, one with an LO = coswt and another with an LO = sinwct. This IQ construction can be used to receive AM or SSB(USB/LSB). For SSB operation, a 90deg phase shift block is required in the I path. The 90deg phase shift is calculated using the Hilbert Transform (Ref.4). USB operation is accomplished by addition I + Q and LSB by subtraction I – Q. The math is covered in detail in Ref.3 pp160/161 using basic trigonometry as well as complex math with phasors as shown in Figure 3.

Hilbert Transform

Fig.4 Hilbert Transform Block Test Schematic
Fig.5 Hilbert Block Response Real Signal Delayed & Imaginary Signal Shifted 90deg

Figure 4 shows a test schematic to illustrate the operation of the Hilbert Transform block. A 32KHz sine wave is fed into the block. The real output is the filter delayed 32KHz signal, and the imaginary output is the delayed signal but with a 90deg phase shift which is the output we want for our receiver. This is shown in Figure 5. In our receiver, a complementary block is added in the Q channel just to balance the delays. Unused outputs go into dummy loads (rated at 300W pep)!

RTL-SDR for 40M SSB LSB on GNU Radio

Fig.6 SSB 40M LSB Receiver on GNU Radio Companion
Fig.7 SSB 40M LSB Receiver Spectrum at 7175KHz

Figure 6 shows a 40M SSB LSB receiver. Here, the Q channel is subtracted from the [I channel + Hilbert Transform]. Slider controls are added to adjust RTL-SDR rf_gain, volume and 40M rx frequency. The RTL is sensitive to gain, so only use the minimum amount necessary for good reception. Figure 7 show the receiver spectrum with a max-hold set to show the rapidly changing SSB signals.

RTL-SDR for 20M SSB USB on GNU Radio

Fig.8 SSB 20M USB Receiver on GNU Radio Companion

Fig.9 SSB 20M USB Receiver Spectrum at 14215KHz

Figure 8 shows a 20M SSB USB receiver. Here, the Q channel is added to the [I channel + Hilbert Transform]. Slider controls are added to adjust RTL-SDR rf_gain, volume and 20M rx frequency. The RTL is sensitive to gain, so only use the minimum amount necessary for good reception. Figure 9 show the receiver spectrum with a max-hold set to show the rapidly changing SSB signals.

Fig.10 YouTube Video RTL-SDR for SSB on GNU Radio

Please send your comments, questions and suggestions to:
jclark@clarktelecommunications.com

YouTube Channel
YouTube Channel

References

#1. – “GNU Radio Installation”
https://wiki.gnuradio.org/index.php/InstallingGR

#2. – “RTL-SDR for HF 0-30MHz”
https://jeremyclark.ca/wp/telecom/rtl-sdr-for-hf-0-30mhz/

#3. – “HF Radio Telecommunications Learn by Simulation”
https://www.clarktelecommunications.com/simulation.htm

#4. – “David Hilbert”
https://en.wikipedia.org/wiki/David_Hilbert

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.