WebSdr – PmSDR and RTL-SDR configuration Guide

PMSDR is a small, cheap and high quality SDR Receiver. It was conceived by Martin Pernter Iw3AUT some years ago. I have been using it for both hobby and scientific research, loving its stability and ease of use.

After a long time, during which the receiver collected dust on a shelf in my office, I decided to bring it again to life for the WebSDR project. I’ll not give details on the work of PA3FWM, please visit its site to learn about its work.

The WebSDR project is addressed both to hamradio  enthusiast both to students of the University where I work. SDR technologies are wide spread and it’s time to talk about this subject in the telecommunications oriented courses that are held at University. So I think that the possibility to show some real application of SDR can support the learning path of students, trying to catch their curiosity.

Phase 1 of the projects requires to setup a basic system, using PMSDR and RTL-SDR dongle in order to evaluate performances and get acquainted with WebSDR software.

Configuring the dongle to work in WebSDR is quite easy. It requires the installation of rtl-sdr package in order to provide rtl_tcp command.

After connecting the dongle to the PC, you can check it has been correctly recognised with the lsusb command.

websdr@websdr:~$ lsusb
Bus 002 Device 002: ID 0bda:2832 Realtek Semiconductor Corp. RTL2832U DVB-T

In order to let the dongle receive and forward data, you can use the rtl_tcp program. It will create a socket and stream I/Q samples through it. Put this command in your rc.local file to execute it as a daemon during computer boot.

rtl_tcp -a -p 65144 -f 145000000 -d 0

Remembre that if you want to change the receiving frequency, you have to modify THIS script, otherwise nothing will happen. The command stated shows -p switch, in order to set the streaming port, the -f to set the working frequency and -d to address a specific device in case you have multiple dongles.

WebSDR configuration lines for RTL-SDR are very simple:
#rtl_sdr per i 3cm
band 3cm
device !rtlsdr 85
samplerate 2048000
centerfreq 681000
antenna lnb

The “85” shows the amount of ppm correction to apply in the frequency.

Setting up the PMSDR may be a little “tricky”. First of all you have to consider this is a “near-zero IF SDR”: it will provide an audio baseband signal to a sound-card. First of all you have to setup an ALSA sound system. If you (like me) are not very familiar with Linux audio world, well “don’t panic”. The sound-card I use with PMSDR is USB connected. So let’s check it:

websdr@websdr:~$ lsusb
Bus 002 Device 002: ID 0bda:2832 Realtek Semiconductor Corp. RTL2832U DVB-T
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 002: ID 041e:30df Creative Technology, Ltd

Now it’s time to hadle permissions for using the soundcard:
websdr@websdr:~$ cat /etc/udev/
hwdb.d/ rules.d/ udev.conf
websdr@websdr:~$ cat /etc/udev/rules.d/90-creative.rules
ACTION==”add”, SUBSYSTEM==”usb”, SYSFS{idVendor}==”041e”, SYSFS{idProduct}==”30df”, GROUP=”audio”

Now you should be able to use the “magic” command:
websdr@websdr:~$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Pro [SB X-Fi Surround 5.1 Pro], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0

Before trying to go any further is mandatory to check if ALSA can support your hardware. In any other case all your efforts will result in a total loss of time. According to ALSA site, the SB X-Fi in UNSUPPORTED.

So let’s give up and try another Audio Adapter, this time embedded device:

root@websdr:~# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC662 rev1 Analog [ALC662 rev1 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 2: ALC662 rev1 Alt Analog [ALC662 rev1 Alt Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0

WebSDR configuration file wants to know 3 parameters: card,device, subdevice. Using this command we can retrive all data we need, as the card number is “0”, the device is “0” and the device is “0” as well. Write this parameters and  forget them.

Now you need a way to interact with PMSDR internal PIC in order to program the internal oscillators. More over, if your PMSDR is equipped with a Downconverter board, you have to program it as well. There is a small,yet realiable and easy-to-use, client which was written by Andrea Montefusco and is available on sourceforge. You have to build it, so install gcc and read carefully the installation notes. After the program has been built, run it by “pmsdr”. There is an embedded help system.

Linux PMSDR 2.0/2.1 control program, version 2.5.1
Original code by Martin Pernter IW3AUT
Linux porting by Andrea Montefusco IW0HDV
www.obdev.at – DG8SAQ-I2C
Interface 0 claimed.
Firmware reports version 2.5.0
Si570 detected.
CY22393 detected.
Downconverter Board detected.
Si570 on Downconverter Board detected.
Type ‘help’ or ‘?’ for get online help.
/tmp/PMSDRcommands FIFO unavailable [No such file or directory]
Input switched to standard input.
—> help

<command> [<value>] //
FREQUENCY : f <d> // f 7050000 == ( 7.050,000 kHz)
F3Harmonic : f3 <d> // f3 100300000 == ( 100.300 MHz)
FREQUENCY Dc : fd <d> // down converter conversion frequency in Hz
FILTER : filter <d> // 0 (no filter),1 (2-6MHz),2 (5-12MHz),3 (10-24MHz), 4 (<2MHz)
DFILTER : dfilter <d> // 0 (down converter bypass), 1 (VHF filter), 2 (UHF filter), 3 (unfiltered)
QSDbias : qsdbias <d> // qsdbias 512 (default), 346-692 (interval allowed)
QSDmute : qsdmute <on,off> // qsdmute on, qsd off (i.e. 0,1
STOREfreq : memf <d> // store init freq into PMSDR EEPROM f 585000 == (585,000 kHz)
STOREfreq3 : memf3 <d> // store init f3/3 into PMSDR EEPROM
RESTORE freq : rmemf // restore init freq from PMSDR EEPROM
PRINTlcd : plcd <col> <row> <message_text> // print the message text at specified coord on the LCD
QUIT : quit // exit from pmsdr
HELP : help // this help!

->help,filter 4,f 1611000,f 585000,memf 585000,filter 0,f3 100300000,quit

In order to set PMSDR for 2m reception you need to program downconverter first:
dfilter 1
fd 116000000
In this way 144MHz is downconverted to 28MHz. So the next step is
filter 0
f 28000000
save it!
memf 28000000.

Now let’s go back to WebSDR and let’s write some configuration for PMSDR as well:
#pmsdr per i 2m
band 2m
#alsa devices are: card/dev/subdev
device $hw:0,0,0
samplerate 96000
centerfreq 144320

Some screenshot taken with lab equipment, showing the receiver busy in demodulating a carrier at 144.290 MHz (frequency choosen where the waterfall was clean).

So the work is over. Everything should be fine and you should be able to run the server. I’m still very disappointed that I was unable to use a better soundcard. I did some testing with a PCI M-Audio Audiophile 2496 but I was unable to let it work.


Finalmente è arrivata!!!
(questo articolo è in attesa di essere pubblicato dal 3 ottobre 2016)

Packaging minimale, ottima imbottitura, grande protezione  e dentro la chiavetta! Completamente in alluminio, con un bel connettore SMA femmina installato. Il tempo di collegarla al PC e già funziona. Non richiede driver o procedure perverse di installazione. Davvero un dispositivo Plug ‘n Play.


Ho scaricato l’ultima versione di SDR# ed ho avviato la ricezione: eccellente! Il front-end è meno predisposto alla intermodulazione, lo spettro visualizzato è pulito ed i segnali si vedono decisamente peggio.

Forse lascia sul terreno qualche cosa in termini di guadagno: le conversazioni su satelliti MIL a 256 MHz non riesco a riceverle, ma sono piccoli dettagli.

La possibilità di visualizzare una porzione molto ampia di spettro è fantastica ed apre la scena a numerose applicazioni, anche in ambito didattico. Ecco qualche screenshot di SDR# della simpatica applicazione “analizzatore di spettro” che vedo molto bene in congiunzione con il generatore di rumore ad ampio spettro per fare qualche prova sui filtri in cavità. Antenna televisiva, in paese. La prima con 100MHz di span e la seconda in full Bandwidth.

Costa… vero… ma ne vale davvero la pena!!!

AIS Maintenance

The AIS decoder system has been up and running since March 2012. Since then database table have been growing up at a good rate. This year I decided to clean up the system before everything goes bananas.

The ais_stat_data table was really huge and it was really mandatory to cut some lines and make it lighter and faster.

Some old and unuseful tables were removed and data was stored in a safe place. After the cleaning database looks more “fit” and light.

The system is now up ‘n running and is ready to face 2017 AIS messages. Stay tuned!

tempus fugit!

Il tempo corre, vola e qualche volta regala qualche sorpresa. Come quella di fare giungere uno dei miei server “storici” a quota 2000 giorni di UPTIME. L’ultimo reboot del server risale al 30 Aprile 2011. Dal punto di vista “sistemistico” è una boiata clamorosa. Dal punto di vista “elettronico” è un buon record, soprattutto se si pensa che la macchina è del 2004 ed è completamente originale.

Si tratta di un DELL PowerEdge SC1600, con sistema operativo Debian. Lunga vita al server e (almeno) altri 2000 giorni di uptime!



Agosto 2016, sono ormai 4 mesi che mi dedico alla corsa. Ho cambiato scarpe, allenamento e sono davvero contento dei risultati. Parto per la mia corsetta pomeridiana e, a 600m da casa, scivolo su un mucchio di aghi di pino adagiati su un tombino e cado. La caviglia è ridotta malino, ha una subito un notevole stress meccanico ed è gonfia come un pallone. Il mio osteopata mi proibisce la corsa per un tempo quantificato in  “vedremo”.

In montagna, durante le ferie, scopro che la bicicletta ha un effetto piacevole sulla caviglia. Il gonfiore cala e la mobilità aumenta. Decido di anticipare l’acquisto della bici, progetto che era già in fase di studio da tempo.

Come ho scelto la bici? Partendo dal budget, leggendo molti forum e chiedendo ad alcuni esperti del settore. Il budget è presto stabilito: sotto i 1000 euro. Secondo step, decidere il raggio delle ruote: 26, 27,5 o 29? Qui entrano in gioco gli esperti che, vista la mia fisicità, consigliano l’acquisto di un 29″. Questo taglia fuori immediatamente la grande distribuzione sportiva, che non produce bici con ruote di queste dimensioni. Inizio a documentarmi online e definisco una rosa di alternative:

Indeciso tra le contendenti, ho la possibilità di visitare un negozio (ARMARI Cicli a Dimaro) presso il quale vedo e tocco con mano la KTM Ultra SPORT. E’ amore a prima vista, mi viene anche chiarito che il telaio per me è un 21″ taglia L. In zona Ancona la bici è introvabile, decido quindi di acquistarla direttamente in Trentino.


Le caratteristiche salienti sono:

  • Telaio in alluminio;
  • Forcella Suntour Raidon XC LO-R, 29-100T (air)
  • Guarniture Shimano Deore M612 40-30-22
  • Cassetta Shimano  HG50-10 11-36
  • Pedali Shimano A530 SPD
  • Freni a disco Shimano RT54 CL 180/180

Appena arrivata la bici ho deciso di portarla presso un negozio locale (Cingolani) per il setup di rito: regolazione della altezza e della inclinazione della sella, altezza manubrio e  distanza attacchi. Il servizio è impeccabile ed in 40 minuti mi trovo una bici cucita addosso.

Dopo la immancabile visita da Decathlon per l’acquisto di abbigliamento adeguato, mi ritrovo alleggerito nel portafoglio ma pronto alla grande impresa sportiva. Sono alle primissime uscite, la fatica è tanta, il fiato pochissimo (30 giorni di inattività sono tantissimi) e l’agilità bassa. Malgrado tutto si va avanti, anche se in salita la KTM che avevo prima era decisamente “meno faticosa”.

AIS – Ouch! Downtime

We have been offline for quite 6 days in the last week. The receiver suddenly stopped to forward data on the ethernet. The issue was caused by some blown capacitors in the DC unit. After some “recapping” the receiver was able to wrork flawlessy for a couple of hours before getting stuck again.


After investingatin the problem I decided to remove the 5V regulator and installa a cold switching unit. The receiver is back online. Let’s keep finger crossed!



Astenersi Perditempo

Da quando sono bambino, leggo con interesse le sezioni annunci dei giornali. Quando ero un assiduo frequentatore della banda CB, cercavo in quegli annunci gli apparati dei miei sogni, le antenne che non potevo montare e tutti gli accessori che mi piacevano. Una cosa che mi ha sempre colpito era la frase: “astenersi perditempo”. Mi ha sempre colpito perchè mi sono chiesto: “ma quante persone vuoi che ti chiamino per avere informazioni e non comperare nulla?”-

Da qualche tempo ho messo in vendita la moto, utilizzando un paio di canali noti per la loro diffusione: il sito moto.it ed il sito subito.it Mi sono immediatamente ricordato della frase “astenersi perditempo” che leggevo da bambino. In questo mesi le persone che mi hanno chiamato sono catalogabili, in quelli che:

  • “domani vengo a vedere la moto e la porto via”;
  • “venderesti separatamente ….”;
  • “mi potresti mandare delle foto dettagliate”;
  • “ti offro 1500 euro in meno, ci stai?”;
  • “permuteresti la moto con una macchina/moto/Stralis “;

Per tutti, una sola categoria: perditempo!. Molti di questi, dopo che tu hai mandato le foto fatte con la reflex in cui si riesce a leggere il DNA dei moscerini, scompaiono nella rete e se chiedi loro un feedback non rispondono.

Continuerò a non mettere la clausola “astenersi perditempo” nei miei annunci ed a farmi delle risate ogni volta che mi arriva una mail o squilla il telefono.

PS: fino ad oggi solo un compratore si è dimostrato eccellente. Quello che ha preso la moto da cross. Mi ha telefonato la mattina, a pranzo ha preso la moto. Così si fa!

Run bayb run!

Premessa: non sono un appassionato della corsa. Lo faccio per cercare di tenermi in forma, in quanto ritengo che questa attività mi offra il migliore rapporto benefici/tempo ed in quanto è un buon modo per scaricare le tensione nervosa accumulata davanti al monitor del PC.

Da quando mi sono avvicinato al mondo della corsa, ho sempre cercato di utilizzare tutti i modi possibili per entrare in competizione con me stesso e garantirmi una notevole continuità di sforzo ed allenamento. Il primo step è stato quello di acquistare delle buone scarpe: grazie ad un amico ho imparato l’importanza della corretta scarpa nella corsa. Poi sono entrati i gadget tecnologi per tracciare il percorso: un gps portatile prima, il telefono dopo e l’orologio recentemente.

Per quanto riguarda le scarpe, il primo treno sono state delle fantastiche Saucony Triumph 7. Le ho aacquistate nel 2010 e sono durate moltissimo. Arancioni, tamarrissime! Le ho usate come scarpe da lavoro fino a pochi mesi addietro. Dopo le Saucony sono arrivate delle Brooks Glycerin 10, acquistate nel 2012 e che ancora utilizzo per fare qualche camminata o per andare al lavoro. Le nuove calzature sportive adesso sono delle Asics Gel Kayano 20.

triumph_7 110118-749_LG


Per tracciare il percorso, il primo compagno di avventure è stato un GPS logger, acquistato su Ebay per una manciata di euro. Ha sempre fatto in modo egregio il suo lavoro, anche se il processo di download dei dati era piuttosto macchinoso. Appena ho acquistato il primo smartphone, il logger è diventato una AP sul telefono.

logger tomtom2

Per molti anni mi sono appoggiato a RunKeeper. Poi ho utilizzato Google MyTracks ed infine sono approdato a Runtastic.

Ultimamente ho abbandonato lo smartphone per il tracking del percorso a vantaggio dell’uso di uno smartwatch. I motivi sono facilmente intuibili: minore peso, minore ingombro, zero telefonate, maggiore robustezza ed impermeabilità. Dopo qualche settimana di studio ho deciso di acquistare il TomTom Runner 2 (senza cardio). Ad oggi mi ritengo completamente soddisfatto del mio attuale setup di corsa e dei risultati ottenuti.

Ci vediamo per strada?

CubieBoard: Monitoraggio presenza tensione

Nella nuova dimora accade, ogni tanto, che la fornitura di energia elettrica risulti un po’ ballerina. Ci sono stati dei casi di black-out molto prolungato che hanno messo a dura prova i miei UPS, portando le battarie all’esaurimento e creando qualche attimo di panico con il NAS.

Per questo ho deciso di implementare un sistema di monitoraggio della tensione di rete, che fosse in grado di:

  • rilevare l’assenza della tensione di rete;
  • comunicare via mail l’evento;
  • inviare mail periodiche in caso di perdurare del balck-out;
  • spegnere in modo graceful NAS.

La cosa è stata più facile sulla carta che non da vero, come sempre. In effetti ho dovuto lottare con le I/O della Cubieboard (come ho descritto in questo articollo).

CubieBoard. GPIO e che fatica!

Il rilevatore di tensione lo ho realizzato implementando uno schema che ho trovato in rete. Si tratta di utilizzare un piccolo trasformatore di tensione 220V -> 5V e di connetterlo ad un GPIO della Cubieboard attraverso un regolatore di tensione a 3.3V. Il trasformatore sarà collegato ad una presa di energia elettrica non servita da UPS. Al momento del black-out, la tensione in uscita dal trasformatore passa a 0 e lo stato logico del piedino di I/O della Cubieboard è 0. Lo schema è semplice ed efficace, solo che occorre mettere in conto che il trasformatore, consuma (pochissimo ma….).


A questo punto ho quindi un sistema hardware che è in grado di creare un evento su un PIN della Cubieboard in caso di Black-Out. Il software è stato scritto in “bash” (strano vero?) . Lo script viene eseguito ogni minuto dal crontab e verifica lo stato del piedino di monitor. In caso sia a livello logico alto non succede nulla, in caso sia a livello 0 inizia una complessa routine per la gestione degli alert e degli eventi. Il funzionamento dello script si basa su alcuni files che vengono creati in /tmp/ e che contengono flag o timestamp per tenere traccia di quello che sta succedendo. Forse non è il modo migliore di programmare, ma questo è ciò che riesco a fare.

Una volta approntato il software è necessario configurare alcuni aspetti del sistema operativo, per fare in modo che le mail vengano inviate utilizzando Gmail. Per questo mi sono avvalso di una guida reperibile a QUESTO indirizzo.

Visto che avevo le mani  sulla tastiera, mi sono anche divertito a configurare l’applicazione Telegram sulla piattaforma Cubieboard. In effetti lo step due dello sviluppo del sistema sarà quello di abilitare anche il controllo bidirezionale del sistema via Telegram (per adesso è solo una idea, il tempo per lo sviluppo del codice e delle idee è sempre pochissimo).

Per quanto riguarda la programmazione in bash, il web è pieno di tutorial base o avanzati, basta sapere cercare un po’ su Google.

Per lo spegnimento del QNAP l’unica strada percorribile è quella di effettuare login sul sistema utilizzando SSH e dare il comando “halt”. Il comando poweroff non è altrettanto efficace e rischia di lasciare alcune parti del sistema attive. Per effettuare il login con il protocollo ssh sul NAS occorre utilizzare i certificati, in modo che non siano richieste le credenziali di autenticazione. Una guida alla configurazione si trova QUI.

Il codice è scaricabile dalla sezione DOWNLOAD del sito, nella sezione “Software”.


Amerigo Vespucci

Oggi è arrivata ad Ancona la nave Amerigo Vespucci, qualche informazione si trova QUI e sopratutto QUI. Per l’occasione ho voluto verificare che il sistema AIS la avesse tracciata in modo corretto. In effetti il sistema installato presso l’Università è stato in grado di tracciare l’arrivo della Nave:


E la sua presenza a poche miglia di distanza da Ancona:


Il sistema di Marinetraffic.com, potendo contare su dati aggreggati da un grande numero di ricevitori, fornisce una completa visione della rotta:


E sicuramente una grafica più accattivante:


Però… ci siamo anche noi!