User Tools

Site Tools

Translations of this page?:


FIXME This page is not fully translated, yet. Please help completing the translation.
(remove this paragraph once the translation is finished)


PySDR is a software dedicated to display a live waterfall (spectrogram) from a data stream provided via a unix pipe or JACK audio system. The tool is useful for tuning Bolidozor detection stations. Data visualisation for audience should be provided by Freya tool.

Basic properties

  • OpenGL graphic acceleration
  • A possibility to connect Jacku
  • A possibility to run detection scripts
  • Dynamic scaling using a mouse

PySDR with a detection script.

You can see other screenshots on the following pictures.

Programme control

After downloading and installing the programme according to readme (found on Github) and launching jack (e.g. via qjackctl), the programme can be launched from a working directory using:


A window opens, and if there is a data source connected, it will contain a spectrogram. The spectrogram can be moved using a left mouse button and zoomed using a right one.

Keyboard shortcuts

Applicable anytime when the PySDR is running

  • ~ activates Python console (in a Quake style)
  • t textureshot - saving a texture of a whole waterfall
  • s screenshot - saving a current image on display

Command line parameters

Using: [-h] [-b BINS] [-j NAME] [-r RATE] [-o OVERLAP] [-d FILENAME]

Optional arguments:

  • -h, –help shows help and ends
  • -b BINS, –bins BINS setting the number of FFT bins (default: 4096)
  • -H HEIGHT –height height of displayed spectrogram in seconds
  • -j NAME, –jack NAME naming the (?? přípojky) generated in JACK
  • -r RATE, –raw RATE expects a signal from a standard input with a defined sampling speed
  • -o OVERLAP, –overlap OVERLAP ratio of FFT windows overlap (default: 0.75)
  • -d FILENAME, –detector FILENAME file with a detection script



Install the necessary dependencies:

sudo apt-get install python-numpy python-opengl python-dev libjack-jackd2-dev

Download the source codes from Githubu

git clone
cd pysdr

Translate the computationally demanding parts written in C:

python build_ext --inplace

Run the PySDR using:


Audible output

In order to generate audio signal from RF signal received by a station we created a special programme whistle that processes audio input from jack and transforms it into an audible output. It is available at Github, at the same repository as pySDR.

Using Whistle

Whistle is a configurable signal generator. Various operations can be stack one after another. It is like a very small GNURadio that runs inside the JACK’s callback. It is capable of Kaiser-Bessel FIR filter (entered as “kbfir, filter order, Fa, Fb, suppression in rejected bands (??) potlačení v nepropustném pásmu) in dB”), where Fa til Fb represent the frequency range of bandpass), frequency shift (“freqx, shift in Hz”), amplification (“amplify, amplification factor”), FM demodulation (“fmdemod”). The individual operations are merged using colon and passed to -p parameter.

An example:

./whistle -p freqx,-10000:kbfir,41,0,1000,100:freqx,1000:amplify,100

for listening to meteors. This sequence of operation is set as default if nothing is passed to -p.

./whistle -p freqx,-31800:kbfir,201,0,400,200:freqx,500:amplify,200

Before the FIR filter calculation, the signal is shifted down by 31.8 kHz.

A FIR is calculated - 201 taps.

Bandpass from 0 Hz til 400 Hz. Attenuation 200 dB.

Filter output is shifted up by 500 Hz.

Output is increased 200x.

Principle of operation

The programme performs a frequency conversion by a complex multiplication of signal with a local number oscillator. This causes a frequency shift of the meteor reflection to lower frequencies which are audible.

Playback from audio file

sox SVAK1_1386323982726.wav -c 2 -t f32 -r 44100 - repeat 20 | jack-stdin pysdr:input_i pysdr:input_q -e float

Socket connection

PySDR can be connected to RMDS02D station directly using netcat, e.g.:

nc radio-TEST.local 3701 | ./pysdr-waterfall -r 96000

where radio-TEST.local is the station’s network name. In case of running pysdr directly on a station, the name is localhost.

en/pysdr.txt · Last modified: 2019/03/17 15:57 by fluktuacia