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++.
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,
is real, and so is , and hence only scales, therefore is invariant: = arg
- 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)".
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.
This flowgraph shows BFSK signal recovery using Quadrature Demod block
Transmitted and received bits using above example
- C++ files
- Header files
- Public header files
- Block definition