This article shows how to build a simple GNURadio SSB Receiver. We will use it to learn more about GNURadio and decode single sideband.
Time for the third of our “hello word” projects with a GNURadio SSB Receiver. Single sideband demodulation is a bit harder than FM or AM, but not much. We will add some new features. These include: playing back an IQ spectrum recording; frequency translation and automatic gain control.
By now, I hope you have GNURadio running on your PC. You can follow the complete flow diagram by downloading and expanding the above graphic. Also, you can watch a complete explanation and demonstration on our GNURadio SSB Receiver video.
First, the IQ data recording. Rather than using a hardware radio for this project, I used a WAV file containing radio spectrum. This was created by recording five minutes of spectrum centered on 14.2 MHz during the recent ARRL SSB Sweepstakes contest. Signals were captured by SDR Console using my Perseus receiver. With a sample rate of 250,000 samples/second, a big chunk of contest sideband signals was recorded on my PC. Playing back these types of recordings in GNURadio is easy using a WAV File Source block.
One thing I discovered was that GNURadio will only handle 8 or 16 bit recordings. If you try a 24 or 32 bit recording you get an error message. The WAV file contains raw IQ data from the receiver in its left and right channels. So, the first thing you need to do is combine these channels into a complex number data stream.
Second, you need to do some frequency tuning within the captured bandwidth. You can accomplish this most easily by applying a GNURadio Frequency Translating filter. I used one of these to tune signals, generate a 2.4 kHz bandpass filter for sideband, and do some further decimation.
GNURadio SSB Receiver – More Features
Third, to decode SSB you need to create your own demodulation. Basically, this can be done with the Weaver method where you create a complex beat frequency oscillation to mix with the raw sideband signal. This adds a carrier. You create USB with addition of the resulting complex signals, or LSB with subtraction.
Finally, I added Automatic Gain Control before demodulation. The GNURadio AGC2 block provides control over both attack and decay timing, as well as providing a target level for the output. Figuring out these timing parameters is a bit tricky, so here is an explanation to get you started.
All in all, getting SSB to work was more challenging but only because this was all new. You should be able to substitute a real receiver for the pre-recording signals with only small modifications.
This completes the introductory articles on getting started with GNURadio. You can quickly master FM, AM and SSB receiver flow diagrams with these tips.