This is an old revision of the document!
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
Pro vygenerování audiosignálu z RF signálu přijímaného stanicí byt vytvořen speciální program whistle, který zpracovává audio vstup z jacku. A upravuje jej do slyšitelné podoby. Je dostupný na Githubu ze stejného repositáře, jako pySDR.
Použití whistle
Whistle je konfugorovatelný generátor signálu dají se v něm za sebe různě poskládat operace, které umí. Je to takové hodně malé GNURadio, jen to umí běžet uvnitř callbacku JACKu. Umí to dělat Kaiser-Bessel FIR filtr (zapisuje se jako “kbfir,řád filtru,Fa,Fb,potlačení v nepropustném pásmu v dB”, kde Fa až Fb zastupují rozsah frekvencí pásmové propusti), frekvenční posuv (“freqx,posuv v Hz”), zesílení (“amplify,faktor zesílení”), FM demodulaci (“fmdemod”) a pak ještě něco. Jednotlivé operace se pospojují dvojtečkou a předají parametru -p.
Např.:
./whistle -p freqx,-10000:kbfir,41,0,1000,100:freqx,1000:amplify,100
pro poslech meteorů. Tahle sekvence operací je nastavená jako výchozí, když se tomu -p nepředá.
./whistle -p freqx,-31800:kbfir,201,0,400,200:freqx,500:amplify,200
Před výpočtem FIR filtru se signal posune o 31.8 kHz dolu.
Spočítá se FIR, který má 201 taps.
Pásmová propust od 0 Hz do 400 Hz. Útlum 200 dB.
Výstup z filtru se posune o 500 Hz nahoru.
Výstup se zesílí 200x.
Princip fungování programu
Program provádí frekvenční konverzi komplexním násobením signálu s lokálním číslicovým oscilátorem. Tím je dosaženo frekvenčního posunu odrazu meteoru do nižších frekvencí ze slyšitelného pásma.
Přehrávání z audiosouboru
sox SVAK1_1386323982726.wav -c 2 -t f32 -r 44100 - repeat 20 | jack-stdin pysdr:input_i pysdr:input_q -e float
Socket spojeni
PySDR se může připojit na stanici RMDS02D přímo pomocí netcat. Příklad použití je následující.
nc radio-TEST.local 3701 | ./pysdr-waterfall -r 96000
Kde radio-TEST.local je sitove jmeno stanice. V případě, že pysdr spouštíme rovnou na stanici, tak je to localhost.