Week 11 – Let the music play

Week 11 of GSoC was mainly dominated by two tasks: finishing all necessary parts for the sync block of last week and develop a solution for demodulating FM signals. Read here about the details.

OFDM Synchronization

Last week I developed a OFDM synchonization block. I started this week with writing  documentation for it and designing a proper test case for the block. After having done this, this topic is finished for now.

FM Demodulation

The first approach on this topic was to ad a new FM Demodulator block to my toolbox. I soon realized a hier block would be best, since I only needed a WBFM Receive and an Audio Sink. The problem here was that my block also needed some additional functionality: receive messages from the detector to know the sampling rate of the input signal. Since the Audio Sink only works with a fixed sample rate, a resampling has to be performed. With the information from the detector, the resampling factor could be caluclated and passed on to the WBFM Receive block. The only problem here was that hier blocks can’t receive messages, or do anything else then setting up an internal flowgraph.

The next idea was to not add a distinct FM demod block, but a resample block that always outputs a fixed sample rate for any input sample rate. I liked this idea because this functionality can be used for other applications as well. While trying to design this bock, I wanted to use functionality from the existing resample blocks (why write code twice?). Since the fractional resampler has a callback for the resample ratio, I thought this will work fine. The problem soon became clear that it is really a problem to include block A into block B, if block A can’t be a hier block and block B has no kernel. I played around a bit to emulate the scheduler and make the fractional resampler think he is not imprisoned in my block, which did not work out (he found out…).

During the hangout with my mentors we came up with a good solution. Instead of writing a new block for this purpose, adding the functionality to the Signal Extractor would be reasonable. Each signal chain will start with this block and – if needed – a fixed sample rate could be set there. I noticed there aren’t kernels for the fractional/rational resampler blocks, but a pfb_arb_resampler kernel, which also should work. I managed to extend the Signal Extractor with this resample functionality and could listen to some local radio stations afterwards.

FM demod flowgraph


In the last two weeks, I plan to finish the following tasks:

  • Write brief GRC documentations in addition to Doxygen
  • Include Chris’ AMC blocks into the toolbox
  • Make a promo video of all the functionality (Stefan really wants this)
  • Make the GUI better (text position etc.)
  • Documentation and code cleanup