Demodulator Blocks
The demodulator components turn RF samples into soft symbols: a float stream with symbols normalized to an amplitude of about ±1. gr-satellites has three of them (BPSK, FSK and AFSK), found under Satellites > Demodulators in GNU Radio Companion. They are the same components that gr_satellites uses, so their internals and command line options are described in Demodulation and Deframing Options. This page focuses on using them as blocks.
All three accept real (float) or IQ (complex) input, selected by the IQ input parameter, and all have a Command line options parameter that takes a string in gr_satellites syntax for the options that are not block parameters.
BPSK Demodulator
Demodulates BPSK, optionally differential (DBPSK) and/or Manchester-coded.
| Parameter | Default | Meaning |
|---|---|---|
| Baudrate | Symbol rate in baud (before Manchester coding). | |
| Sample rate | samp_rate |
Input sample rate. |
| Frequency offset (Hz) | 0 |
Frequency at which the BPSK signal is centred in the input. |
| Differential | Non-coherent DBPSK demodulation (no Costas loop). | |
| Manchester | Manchester decoding: demodulates at twice the baud rate, finds the Manchester clock phase and wipes it off. | |
| IQ input | Complex input when true. | |
| Command line options | "" |
For example "--fll_bw 50 --costas_bw 30". |
Python:
satellites.components.demodulators.bpsk_demodulator(
baudrate=1200, samp_rate=48000, f_offset=1500,
differential=False, manchester=False, iq=False, options="")
Note: The block always passes its Frequency offset parameter to the demodulator, so
--f_offsetinside Command line options is ignored. Also, the block's default of 0 Hz differs from the command line tool's automatic 1500/12000 Hz for real input: set the parameter explicitly when feeding SSB audio.
Example: examples/components/bpsk_demodulator.grc demodulates a LilacSat-1 recording and plots a slice of symbols with a QT GUI Time Sink. At the start of the packet you can see the clock and carrier loops converge, after which the +1 and −1 symbols are well separated.
FSK Demodulator
Demodulates FSK. With real input it expects FM-demodulated audio (NRZ); with IQ input it performs FM demodulation itself and expects the signal at 0 Hz.
| Parameter | Default | Meaning |
|---|---|---|
| Baudrate | Symbol rate in baud. | |
| Sample rate | samp_rate |
Input sample rate. |
| IQ input | Complex input when true. | |
| Subaudio | Adds a low-pass filter for subaudio telemetry under FM voice. | |
| Command line options | "" |
For example "--deviation 2400 --clk_bw 0.1". |
The FSK deviation is not a block parameter. For IQ input, where it matters, set it in the options (--deviation, default 5000 Hz). For real input only its sign matters (negative inverts the symbols).
satellites.components.demodulators.fsk_demodulator(
baudrate=9600, samp_rate=48000, iq=False, subaudio=False,
options="--clk_bw 0.1")
The Python constructor also accepts deviation, dc_block and dump_path keyword arguments.
Example: examples/components/fsk_demodulator.grc demodulates a single AAUSAT-4 packet.
AFSK Demodulator
Demodulates AFSK: FSK tones in the audio band, carried on FM.
| Parameter | Default | Meaning |
|---|---|---|
| Baudrate | Symbol rate in baud. | |
| Sample rate | samp_rate |
Input sample rate. |
| AF carrier | Centre audio frequency between the two tones, in Hz. | |
| Deviation | Offset of each tone from the AF carrier, in Hz. Positive: the high tone is 1. Negative: the low tone is 1. | |
| IQ input | Complex input when true (FM demodulation is then done internally). | |
| Command line options | "" |
For example "--fm-deviation 2500". |
For example, the GOMspace U482C modem sends 4800 baud GMSK tones that are decoded with an AF carrier of 3600 Hz and a deviation of −1200 Hz: symbol 1 at 2400 Hz and symbol 0 at 4800 Hz. That is the setting in examples/components/afsk_demodulator.grc, which demodulates a GOMX-1 packet.
satellites.components.demodulators.afsk_demodulator(
baudrate=4800, samp_rate=48000, iq=False,
af_carrier=3600, deviation=-1200, options="")
The AFSK block passes its Deviation to the internal FSK demodulator, so --deviation in the options has no effect. --fm-deviation (default 3000 Hz) only matters for IQ input.
Common Behavior
- Output: one
floatper symbol, normalized by AGC. Feed it to a deframer block. - Too-low sample rate: if the baud rate is not below the sample rate (FSK) or a quarter of it (BPSK), a warning
Sample rate ... insufficient for ... baud ... demodulation. Demodulator will not work.is printed and the block still builds with a clamped baud rate. - Debugging: the Python constructors take
dump_pathto write the internal signals listed in Dumping Internal Signals. This is not exposed as a block parameter.