Table of Contents
This page is not fully translated, yet. Please help completing the translation.
(remove this paragraph once the translation is finished)
PySDR
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
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:
./pysdr-waterfall
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: waterfall.py [-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
Installation
Ubuntu
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 https://github.com/MLAB-project/pysdr.git cd pysdr
Translate the computationally demanding parts written in C:
python setup.py build_ext --inplace
Run the PySDR using:
./pysdr-waterfall
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.