# FSK demodulation

**URL:** <https://www.ruby-forum.com/t/fsk-demodulation/230446>\
**Category:** GNU Radio\
**Created:** [June 18, 2014, 1:18pm UTC](https://www.ruby-forum.com/t/fsk-demodulation/230446 "2014-06-18T13:18:59Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![jason\_sam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/7993a0/32.png) [@jason\_sam](https://www.ruby-forum.com/u/jason_sam)\
**Post date:** [June 18, 2014, 1:18pm UTC](https://www.ruby-forum.com/t/fsk-demodulation/230446/1 "2014-06-18T13:18:59Z")

</div>

Hi, I am new to gnuradio, I want to develop 4FSK system. transmitter and  
receiver. Is there any existing 4FSK transceiver system in gnuradio ?  
Also,  
which one of the following two is the best/optimum 4FSK demodulator for  
low  
SNR?

a. Quadrature demodulation  
b. Correlator demdulation (autocorrelate tones–\>energy detect-\>pick  
largest)

Which one of the above can be implemented in gnuradio ?

Marc

---

<div class="post-metadata">

**Author:** ![Marc\_Miller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c5a1d2/32.png) [@Marc\_Miller](https://www.ruby-forum.com/u/Marc_Miller)\
**Post date:** [June 18, 2014, 2:23pm UTC](https://www.ruby-forum.com/t/fsk-demodulation/230446/2 "2014-06-18T14:23:45Z")

</div>

Hi Marc,

demod:  
both can be implemented in GNU Radio. Correlation of course is more  
computationally intensive; I haven’t thought about 4-FSK so far, but I  
guess for quadrature demodulation, you’d need multiple branches to  
distinguish the possible symbols. There are other approaches (e.g. polar  
discrimination by calculating the phase difference between two samples  
etc. There’s an exciting new polyphase filterbank channelizer  
implementation, also, which you could abuse to do FSK, too).

Generally, if you are synchronized, you might even just estimate the  
frequency of a symbol. In the easiest case, this might break down to an  
abs(FFT\_4) (which, by the way, is mathematically _very_ similar to  
correlating with known frequencies).

But since you asked about low-SNR situations: Employ a lot of  
oversampling, if possible. Processing gain when correlating/averaging  
should be proportional to oversampling factor. Oversampling, giving you  
more bandwidth, would also be beneficial if you used a filterbank  
approach, since it reduces the need for frequency synchronization in a  
practical system, if your FSK shift is sufficiently larger than your  
frequency offset.

All in all, the question which demodulator architecture to use is an  
academic/research one and not related to the implementation in GNU Radio  
modulation. This is a highly interesting field and I can but encourage  
you to read a lot of books [1] and papers on this.

modulation:

Assuming you don’t want phase jumps between symbols, why not just use  
the VCO block to generate frequencies out of your input values?

Greetings,  
Marcus

[1] a nice list:  
[http://gnuradio.org/redmine/projects/gnuradio/wiki/SuggestedReading](http://gnuradio.org/redmine/projects/gnuradio/wiki/SuggestedReading)
