In this section you will learn one technique for demodulating Single Sideband Signals. The following data file will be used for the first part of this tutorial:


This data file was recorded by a USRP set to a center frequency of 50.3MHz with a sample rate of 256KHz

The first step in building a receiver is to use a channel filter to pass the signal of interest and filter out the rest of the signals in the band. This is done as follows

In GRC, the Frequency Xlating FIR Filter performs both of these operations.

In the previous step, we used the firdes module of GNU Radio. For more information on this tool, follow the link below.

gr::filter::firdes Class Reference

This module is used for generating finite impulse response (FIR) filters in GNU Radio. There are a number of filters available that can be explored in the API Reference link above. Some of the commonly used filters are listed below. The basic usage format is firdes.filter_type(args) where filter_type(args) is one of:

  • band_pass(gain, sampling_freq, low_cutoff_freq, high_cutoff_freq, transition_width)

  • band_reject(gain, sampling_freq, low_cutoff_freq, high_cutoff_freq, transition_width)

  • complex_band_pass(gain, sampling_freq, low_cutoff_freq, high_cutoff_freq, transition_width)

  • high_pass(gain, sampling_freq, cutoff_freq, transition_width)

  • low_pass(gain, sampling_freq, cutoff_freq, transition_width)

This list indicates the minimum number of arguments required for the filter to be generated. Each filter can also take an argument for the type of window it uses and the beta value. Additionally, each of these filter types has a "_2" version (ie: band_pass_2, low_pass_2). These versions take an extra parameter which specifies the stop band attenuation in dB. It is worthwhile to familiarize yourself with the usage of this module as it will be used throughout these labs.

Recall that the signal is a complex (analytic) signal. One method of demodulating SSB voice is to operate on the real and imaginary parts of the signal separately. The Complex to Float block will take a complex signal and output its real (re) and imaginary (im) parts separately.

Save this flowgraph. You can modify it for use with the RTL-SDR receiver and listen to live Morse code and SSB signals in the frequency range 24.9-25.0 MHz, 27-29 MHz, 50.0-50.2 MHz. These frequencies will propagate over long distances via the ionosphere for some (not all) of the time. Other frequencies are 144.0-144.3 MHz and 145.8-146.0 MHz.