# Bfsk

**URL:** <https://www.ruby-forum.com/t/bfsk/233123>\
**Category:** GNU Radio\
**Created:** [November 18, 2014, 8:07pm UTC](https://www.ruby-forum.com/t/bfsk/233123 "2014-11-18T20:07:29Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![addis\_a](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/c4cdca/32.png) [@addis\_a](https://www.ruby-forum.com/u/addis_a)\
**Post date:** [November 18, 2014, 8:07pm UTC](https://www.ruby-forum.com/t/bfsk/233123/1 "2014-11-18T20:07:29Z")

</div>

There isn’t muchin this.  
Here is a brief explanation.

Consider a signal

f(t)

which represents an instantaneous frequency of a sinusoid  
and which carries some information.

Then you can generate the signal

phi(t) = 2 \* pi\* K \* int\_0^t f(tau) dtau

which is the instantaneous phase (since it is an integral of f(t))  
with some frequency gain K.

Now you can form the complex exponential baseband signal

s(t) = exp( j phi(t) )

and transmit it. This is the basis of FM modulation.

Now imagine doing the above in discrete time.  
You would have something like

f\_k = f(k Ts)

phi\_k = phi(k Ts) ~= 2 \* pi\* K \* sum\_i=0^k f(i Ts) Ts  
= phi\_{k-1} + 2 \* pi \* K \* Ts \* f\_k (1)

and finally

s\_k = exp(j phi\_k) (2)

The FM modulator block in GNURADIO does exactly that,  
ie  
equations (1) and (2) with  
sensitivity = 2 \* pi \* K \* Ts

The quadrature demodulator block in GNURADIO extracts

phi\_k from s\_k (or from any complex signal for that matter) and  
multiplies  
with some irrelevant gain M so you get

M \* phi\_k

I hope this help,  
Achilleas
