gr-specest is a great library which is capable of obtaining the spectral correlation density of a signal via the Frequency Accumulation Method.

An article on ‘Modulation Classification in Cognitive Radio’ (pdf) provides a nice description of the FAM algorithm.

FAM profiles

I have plotted profiles from the gr-specest block, for different modulation schemes and believe there are other
modulation schemes this approach wouldn’t be able to classify.

For instance WBFM looks the same as AM-DSB and GFSK looks the same as AM-DSB.

You can see in the graphs below the similarity of different PSK schemes.




The graphs where generated using a simple program I wrote which uses the gr-specest block –

Issues with SCF

I found the following paper, which shows how the SCF method I have been attempting to use, is unable
to distinguish between different PSK schemes, without pre-processing the data, which resulted in my low accuracy

Improved PSK Classification Using Spectral Correlation Function – Jeevan Kuriakose, A.Rajesh and P.K.Bora

The alternative approach – using CNNs

I found the following awesome paper on a different approach Convolutional Radio Modulation Recognition Networks – Timothy J. O’Shea , Johnathan Corgan , and T. Charles Clancy, instead of the approach I have been attempting to use, where there is significant processing before passing the data to the ANN, their approach, takes the complex data of a signal and applies it directly to the neural network.

I find this approach especially fascinating as the network is able to learn from the raw data itself.

I created a simple implementation using their model specification in TensorFlow via the TFlearn API.

You can download that at

I trained the model on the labelled dataset they created – RadioML, which is an invaluable resource!

It is currently obtaining 92.79% accuracy at 18dB, which is significantly better than the SCF method I was attempting to use.

It is capable of recognising the following modulation schemes:

  • 8PSK
  • AM-DSB
  • AM-SSB
  • BPSK
  • GFSK
  • PAM4
  • QAM16
  • QAM64
  • QPSK
  • WBFM

What to do next

I am now going to create a TensorFlow graph for this model, which can be loaded by my TFModel block, to then take
PMT input, from Sebastian’s blocks. So that classifications can be obtained on signals in GNU Radio.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s