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