GNU Radio: la radio open-source definita dal software

GNU Radio: la radio open-source definita dal software

GNU Radio è un progetto di Software Defined Radio (SDR) lanciato circa dieci anni fa da Eric Blossom, un ingegnere elettronico. L’idea principale che sta alla base di questo progetto, come afferma il suo stesso fondatore, è quella di convertire tutti i problemi hardware in problemi software, cioè spostare la complessità relativa alla progettazione di un apparato radio dal livello hardware a quello software, e portare il software più vicino possibile all’antenna.

I vantaggi della SDR

La metodologia Software Defined Radio ha introdotto alcune funzionalità che non erano mai state possibili prima di allora:

  • Una radio SDR può essere riconfigurata “on-the-fly”
  • Una radio SDR può essere facilmente e velocemente aggiornata per consentire l’introduzione di nuove versioni software oppure per aggiungere nuove funzionalità (upgrade e/o patch)
  • Una radio SDR permette l’ascolto di più stazioni contemporaneamente

Come è nata GNU Radio?

Blossom cominciò a lavorare a questo progetto perchè era rimasto deluso dalle altre applicazioni di tipo SDR disponibili all’epoca: queste, infatti, avevano tutte la caratteristica di avere una natura proprietaria, mentre Eric desiderava portare la filosofia del free-software anche nel mondo SDR. Richard Stallman, il fondatore del Progetto GNU, apprezzò l’idea di Blossom and accettò di portare il nuovo progetto sotto l’egida GNU.

Fino ad ora, il progetto GNU Radio non ha deluso i suoi estimatori e i numerosi appassionati del mondo radio. Eric Blossom, insieme al suo collega e collaboratore Matt Ettus, hanno realizzato un progetto in grado di convertire un qualunque PC in un ricevitore radio di buona qualità; l’unico hardware aggiuntivo necessario è rappresentato da un ricevitore RF “low-cost” e da un convertitore analogico-digitale in grado di trasformare il segnale ricevuto in campioni digitali. GNU Radio è uno strumento di sviluppo software gratuito che permette di sviluppare un ricevitore radio personalizzato (anche molto diverso dai modelli normalmente in commercio) semplicemente combinando ed interconnettendo dei moduli software appropriati, proprio come se essi fossero dei blocchi funzionali (il package attualmente comprende circa 100 moduli, ma altri possono essere aggiunti alla libreria originale). Ciascun modulo è in grado di eseguire una specifica funzionalità di elaborazione del segnale (per esempio un mixer, un phase lock loop, un filtro), con un comportamento in tempo reale e con un’elevato throughput; per questo motivo, è consigliabile utilizzare un PC con un’adeguata capacità di elaborazione e una buona disponibilità di memoria RAM.

Con l’approccio previsto da GNU Radio, il progettista diventa uno sviluppatore software che costruisce la radio creando prima un grafo (con una modalità molto simile a quanto avviene nella teoria dei grafi) in cui i vertici sono i blocchi di elaborazione del segnale ed i rami rappresentano i flussi di dati tra essi. I blocchi che implementano funzioni di elaborazione del segnale sono in genere codificati in linguaggio C++, mentre la struttura del grafo viene definita in Python. GNU Radio è molto conosciuta ed ampiamente usata specialmente in ambito accademico, tra gli hobbysti e tra gli amanti della radio; essa viene utilizzata sia per realizzare degli apparati radio concreti e funzionanti, oppure semplicemente come un progetto di ricerca nell’area della comunicazione e trasmissione di tipo wireless. I moduli software di GNU Radio supportano vari tipi di modulazioni (GMSK, PSK, QAM, OFDM), vari codici di correzione degli errori (Reed-Solomon, Viterbi, Turbo Codes), e diverse funzionalità di elaborazione del segnale (filtri, trasformate di Fourier veloci, equalizzatori, timing recovery).

Le applicazioni GNU Radio sono principalmente scritte in Python; tuttavia, gli algoritmi critici e di basso livello, come pure i moduli di elaborazione del segnale, sono scritti usando il linguaggio di programmazione C/C++, con un utilizzo esteso di istruzioni in virgola mobile specifiche del processore utilizzato.

Python viene essenzialmente usato per descrivere il grafo di flusso, dopodichè la maggiorparte del lavoro viene fatto in C/C++. GNU Radio è molto semplice da utilizzare, basti pensare che un ricevitore radio può essere realizzato in un modo estremamemte veloce ed immediato in pochissimi passi; inoltre, lo sviluppo di un algoritmo di elaborazione del segnale può essere compiuto usando un set di dati pre-registrati oppure generati ad-hoc (simulatore), consentendo così di effettuare lo sviluppo senza necessariamente disporre di un vero e proprio hardware RF. Un esempio di hardware minimale richiesto per cominciare a lavorare con GNU Radio è offerto dal dispositivo USRP, sviluppato dalla societa’ Ettus Research LLC.

Che cosa e’ l’USRP?

USRP, acronimo di Universal Software Radio Peripheral, è una motherboard di tipo general purpose in grado di ospitare un’ampia gamma di daughterboard, ciascuna delle quali implementa un blocco di elaborazione del segnale corrispondente ai moduli presenti nel software package di GNU Radio. Il modello originale di USRP è un dispositivo radio di basso costo che si connette al computer host tramite un’interfaccia USB 2.0, e può disporre di un’ampiezza di banda RF fino a 16 MHz in entrambe le direzioni. Essa ospita una FPGA riprogrammabile, 4 convertitori analogico-digitale ad elevata velocità, 4 convertitori digitale-analogico ad elevata velocità, e numerosi I/O analogici e digitali ausiliari.
Le immagini seguenti mostrano l’aspetto del dispositivo USRP, sia esternamente che internamente.

L’USRP contiene due dispositivi AD9862 di Analog Devices (mixed signal analog front end) connessi ad una FPGA Altera Cyclone. La famiglia USRP include:

  • Ricevitore da DC a 30 MHz
  • Trasmettitore da DC a 30 MHz
  • Ricevitore da 1 MHz a 250 MHz
  • Trasmettitore da 1 MHz a 250 MHz
  • Ricevitore da 50 a 860 MHz
  • Ricevitore da 800 MHz a 2.4 GHz
  • Transceiver 400-500 MHz
  • Transceiver 750-1050 MHz (incluse le bande cell ed ISM)
  • Transceiver 1150-1450 MHz
  • Transceiver 1.5-2.1 GHz (incluse le bande PCS)
  • Transceiver 2.3-2.9 GHz (inclusa la banda ISM)

La motherboard mostrata nella figura precedente è equipaggiata con 4 daughterboard: 2 moduli Tx e 2 moduli Rx.

La GNU Radio USRP2

L’USRP2 è basata sul suo predecessore, l’USRP originale, aggiungendo le seguenti nuove funzionalità:

  • Interfaccia di comunicazione con l’host Gigabit Ethernet
  • Ampiezza di banda RF di 25 MHz
  • FPGA Xilinx Spartan 3-2000, in grado di far funzionare l’USRP2 anche in modalità stand-alone, senza richiedere una connessione con il computer host
  • Doppio ADC 100 MHz 14-bit
  • Doppio DAC 400 MHz 16-bit
  • 1 Mb di memoria SRAM ad elevate velocità
  • Aggancio ad un riferimento esterno a 10 MHz
  • Ingresso 1 PPS (pulse per second)
  • Configurazione memorizzata su schede SD
  • Modalità standalone
  • Possibilità di realizzare sistemi multipli (MiMo)
  • Compatibilità con le stesse daughterboard del modello originale USRP

L’USRP2 è dotata nativamente di driver per Linux, ma è già previsto il supporto per altri sistemi operativi quail Windows e Mac OS X.

Applicazioni di GNU Radio

Il package GNU Radio package viene fornito con un trasmettitore e ricevitore HDTV completo, un analizzatore di spettro, un oscilloscopio, un ricevitore multicanale ed un’ampia collezione di modulatori e demodulatori. Altri progetti avanzati sono tuttora nella fase di studio di fattibilità oppure in progress:

  • un sistema in grado di sintonizzare stazioni multiple contemporaneamente
  • Time Division Multiple Access (TDMA)
  • Un sistema radar passivo che si basa sulla trasmissione televisiva come fonte di segnale
  • Radio astronomia
  • Digital Radio Mundial (DRM)
  • Software GPS
  • Rice-trasmettitori per radio-amatori
  • MiMo processing (Multiple input Multiple output)

Curiosi di scrivere il vostro primo blocco in GNU Radio?

Eric Blossom ha preparato un tutorial eccellente che spiega dettagliatamente come scrivere un blocco in GNU Radio: se siete interessati a quest’attività, seguite il link sottostante e provate. Buon divertimento!

Riferimenti

GNU Radio – The GNU Software Radio

Ettus Research LLC

How to write a block for GNU Radio

One Response

  1. slovati slovati 30 luglio 2010

Leave a Reply