# Quadrature Demod

The **Quadrature Demod** block accepts a stream of complex samples, such as the narrow baseband stream containing the desired signal, and produces a stream of floats that represent a frequency demodulation. This block is most useful in demodulating FM, FSK, GMSK, and similar modulations that carry information through changes in frequency.

This block does not support C++ output, so it cannot be used when the output language of a flowgraph in GRC is C++.

## Mathematical Description[edit]

The output of the block is the signal frequency in relation to the sample rate, multiplied with the gain. It produces this by calculating the product of the one-sample delayed-&-conjugated input and the undelayed signal, and then calculates the argument (a.k.a. angle, in radians) of the resulting complex number:

Let x be a complex sinusoid with amplitude A>0, (absolute) frequency and phase sampled at f_s>0 so, without loss of generality,

then

is real, and so is , and hence only scales, therefore is invariant: = arg

## Parameters[edit]

- Gain
- Gain setting to adjust the output amplitude. Set based on converting the phase difference between samples to a nominal output value. Default: "samp_rate/(2*math.pi*fsk_deviation_hz)".

## Example Flowgraph[edit]

### Example 1[edit]

This flowgraph shows the Quadrature Demod block as a Frequency Shift Keying detector. First, the Frequency Xlating FIR Filter acts as a channelizer, extracting a narrow baseband signal from a wider stream. Then the Quadrature Demod block returns floats that are >1 if the upper frequency is louder, 0 if they are equal, and <0 if the lower frequency is louder, thus demodulating FSK. In this scenario, if `fsk_deviation`

is defined as the difference between the upper and lower frequencies, and the baseband sampling rate is known (after the decimating from the Freq Xlating FIR Filter block), then a good formula for the Gain parameter would be `baseband_samp_rate / (math.pi * fsk_deviation)`

. This causes the block to produce output floats that will never have a magnitude greater than 1.0 for the actual symbols.

### Example 2[edit]

This flowgraph shows BFSK signal recovery using Quadrature Demod block

Transmitted and received bits using above example

## Source Files[edit]

- C++ files
- quadrature_demod_cf_impl.cc

- Header files
- quadrature_demod_cf_impl.h

- Public header files
- quadrature_demod_cf.h

- Block definition
- analog_quadrature_demod_cf.block.yml