From charlesreid1

In order to analyze and decode a signal, we need to be able to narrow in on the frequency of interest first. Let's walk through a gnuradio flowchart that will allow us to do that.

How It Will Work

Using Prior Work

As with the Gnuradio/Wav to Waterfall flowchart, we're extracting sound data from a wav file, so we'll use the flowchart covered in that page as a starting point.

The Parts

We'll be using a very handy block called the Frequency Xlating block, which will allow us to reduce the bandwidth of what we're looking at, change the center frequency that we're looking at, AND apply a filter to our signal, all at the same time.

First, reduce the bandwidth of data to something more reasonable, a few dozen kilohertz.

Second, set the center frequency of our signal - where the put the smaller bandwidth.

Third, create a low-pass filter to pick our signal out of all the noise.

The Gnuradio Flowchart

Here's what the final gnuradio flowchart looks like:


Wav File Source

As with Gnuradio/Wav to Waterfall, we load the wav file from the radio telescope, and plop it into Gnuradio with the Wav File Source block.

Float to Complex

Next, we convert the two IQ channels to complex data, using the Float to Complex block.


We throttle the data to match the bandwidth at which it was gathered, to keep from overwhelming our radio.

Frequency Xlating FIR Filter

This is where we do all the hard work.

Decimation, or Narrowing the Signal

We enter the decimation factor as a divisor for the change in bandwidth. For example, if we gathered samples at 3 MHz, and wanted a resulting signal with a much smaller bandwidth of 3kHz, our decimation factor would be 1000. If we gathered samples at 100 kHz and wanted to look at a bandwidth of 20 kHz, our decimation factor would be 5.

To determine this, I set the output bandwidth variable, and determined the decimation factor from the input bandwidth. The output bandwidth depends on the width of the signal. In my case, 50 kHz was wide enough to capture the entire signal.


If you take a look at the signal through an FFT sink, you can see the width of the signal matches the width we chose:


IMPORTANT: If you don't see something sensible like the plot above, MAKE SURE YOU CLICK THE AUTOSCALE BUTTON!!! This makes a huge difference.

Center Frequency

This is straightforward - by setting the center frequency to the center frequency variable, you ensure that the displayed frequency is correct.

Low Pass Filter

To apply a low-pass filter, you call a low-pass filter function using the "taps" variable slot:


You will define the variable you put into the "taps" field as a call to a low pass filter function:


FFT Sink

Last but not least, you'll pipe everything into an FFT sink so you can take a look at the signal and make sure it is clean.


It's important to autoscale your FFT plot, otherwise you might not see a sensible result.

You can also add a waterfall. Again, it's important to autoscale the waterfall display as well, especially since we're dealing with such weak signals in this SDR Wav file:


Next Steps

Now that we've got the signal cleaned up and we can see it clearly, our next step is to demodulate the signal: Gnuradio/Fun with Modulation