You are on page 1of 7

..

2010

Esercitazione 2
Panoramica suite Gnuradio
In questa esercitazione descriveremo l’ architettura di Gnuradio, la suite
software che ci permetterà di realizzare le nostre applicazioni SDR.

Guzzo Natale
ng87@live.it
Università della Calabria
Panoramica suite Gnuradio 2

Sommario

Gnu Radio .......................................................................................................................................................... 3


Architettura software di Gnu Radio ........................................................................................................ 4
Il linguaggio di programmazione Python ................................................................................................ 5
Il tool di sviluppo Gnu Radio Companion ................................................................................................ 6

Università della Calabria


Panoramica suite Gnuradio 3

Gnu Radio
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.

GNU Software Radio è una suite di moduli software che combinati con un hardware minimo consente
l’implementazione di un sistema radio basato su piattaforma PC. Esso dispone di una interfaccia grafica che
consente di implementare sistemi di tipo SDR, attraverso la costruzione di un grafo i cui blocchi
rappresentano le varie fasi di signal-processing e le linee che li collegano evidenziano il flusso dei dati. I
blocchi di signal-processing sono entità funzionali che operano su flussi di dati di lunghezza infinita e hanno
un numero di porte d’ingresso e d’uscita finito. Questi si distinguono in:

“primitive”, sono blocchi che eseguono una data funzione e possono operare a rate fisso o variabile rispetto
all’ingresso, vengono implementati in C++ per avere massima velocità ;

“hierarchical”, sono blocchi formati da sotto-blocchi di tipo “primitive” o “hierarchical”;

Nella suite Gnu Radio sono disponibili più di 100 sinks, sources e primitive già pronte tra i quali I/O verso
file, TCP, A/D e D/A ad alta velocità, schede audio, tutti i tipi di filtri, NCO, VCO, modulatori, demodulatori,
forward error correction, etc.

Importante da dire è che questi blocchi possono lavorare con un rate di dati fisso o variabile in modo da
operare in sincronia e in modo da favorire operazioni quali compressione e decompressione dei dati.

Grazie al Graphical User Interface (GUI), costruita con il toolkit WxPython, sono previste inoltre funzioni per
la visualizzazione nel dominio del tempo ed in frequenza (oscilloscopio multi-canale, oscilloscopio digitale,
FFT) e la possibilità di costruire cursori grafici per il settaggio dei parametri dello schema a blocchi in modo
da offrire la riconfigurabilità on-the-fly (riconfigurabilità al volo).

Università della Calabria


Panoramica suite Gnuradio 4

Architettura software di Gnu Radio

La figura seguente illustra l’ architettura del sistema Gnu Radio:

L’Hardware Abstraction Layer (HAL) o strato di astrazione dall'hardware, è un insieme di funzioni di I/O il
più possibile generiche e semplici, il cui compito è quello di rendere il software indipendente dai dispositivi
fisici su cui opera: per esempio il programma, invece di aprire personalmente un file chiederà all'HAL di
farlo per lui e l'HAL, appena esaudita la richiesta, gli passerà un riferimento al file per la lettura (o lo leggerà
per lui). Dotando un programma di un HAL se ne migliora la portabilità su altri tipi di computer/sistemi
operativi e la funzionalità con dispositivi diversi, perché eventuali modifiche e adattamenti vanno fatti
solamente nell'HAL senza toccare il codice del programma stesso.

Università della Calabria


Panoramica suite Gnuradio 5

Il linguaggio di programmazione Python

La costruzione e la gestione del grafo viene fatta utilizzando il linguaggio Python che viene definito un
linguaggio di scripting orientato agli oggetti. Infatti esso raccoglie in se la flessibilità e la semplicità dei
linguaggi di scripting con la potenza di elaborazione e la ricchezza di funzioni dei più tradizionali linguaggi di
programmazione di sistema.

Si riportano di seguito le principali caratteristiche di questo linguaggio di programmazione:

 È Open Source;

 È portatile, nel senso che essendo scritto in ANSI C è possibile implementare un interprete python
per le principali piattaforme;

 È un linguaggio interpretato. In questo caso "interpretato" non è sinonimo di lento, infatti python
"compila" il proprio codice in un bytecode molto efficiente. Questo permette di raggiungere
prestazioni vicine ai linguaggi in codice nativo. Inoltre python implementa molte strutture dati e
funzioni come componente intrinseca del linguaggio. Queste strutture sono dette "built-in types
and tools" e sono state sviluppate con accurata efficienza.

 Analogamente a cio' che avviene in Java, in python esiste il meccanismo di "garbage collection", il
quale permette di ottenere una gestione automatica della memoria.

 Inoltre Python è ricco di librerie. Infatti solo la dotazione standard ne offre moltissime alle quali si
aggiungono moduli di terze parti che crescono continuamente. In internet si trova materiale
relativo a HTML, PDF, XML, formati grafici, CGI e perfino interi web servers.

L’ architettura di Gnu Radio si basa su un sistema ibrido C++/Python in cui i blocchi di processamento del
segnale sono implementati in C++, mentre la costruzione del grafo, la definizione delle regole di
funzionamento e di opzioni si settaggio sono realizzate in Python.

Università della Calabria


Panoramica suite Gnuradio 6

Il tool di sviluppo Gnu Radio Companion

Uno strumento in particolare, il GRC (Gnu Radio Companion), permette di manipolare i blocchi di Gnu Radio
in maniera visuale e di costruire manualmente la propria SDR, o qualsiasi altro sistema DSP, semplicemente
interconnettendo i blocchi funzionali. Questo permette di sperimentare la SDR senza nemmeno dover
conoscere la programmazione in Python. Il Companion “esegue” la radio costruita semplicemente col
mouse e realizza istantaneamente la SDR. Inoltre, la radio così definita, può essere tradotta nel
corrispondente script Python, così che l’utilizzatore esperto può realizzare sistemi più complessi che
richiedono interazioni tra blocchi non semplicemente rappresentabili con approccio black-box
ingresso-uscita.

Un'altra interessante funzione è che i sistemi definiti con GRC sono rappresentati da script Python generati
dal GRC stesso e che quindi possono essere riutilizzati in altri progetti. Insomma GRC è un vero è proprio
strumento di sviluppo SDR.

Università della Calabria


Panoramica suite Gnuradio 7

Il tool si avvale di queste categoria di blocchi funzionali:

 Source: in questa sezione sono contenuti i blocchi per definire le sorgenti di segnale, per
esempio un file o il microfono del pc.
 Sink: qui sono contenuti tutti i blocchi utilizzatori del segnale ricevuto e/o elaborato.
 Grafical Sink: in quest'area ci sono tutti i blocchi che permettono la visualizzazione grafica dei
segnali elaborati.
 Operators: sono blocchi che consentono di effettuare operazioni elementari sui segnali.
 Type Conversions: quest’ area contiene i blocchi che consentono di convertire il formato dei dati
elaborati (ad esempio da double a complex, da interi a byte).
 Stream Conversions: quest'area permette di convertire interi flussi di dati.
 Synchronizers: In questa sezione sono contenuti diversi blocchi per la gestione del sincronismo
sul bit del flusso dei dati.
 Level Controls: sono blocchi utilizzati per il controllo dei livelli di potenza dei segnali considerati.
 Filters: quest'area contiene diversi blocchi per l’ implementazione dei filtri più utilizzati nei
diversi sistemi di telecomunicazione.
 Modulators: quest'area contiene blocchi per la modulazione/demodulazione analogica o digitali
dei segnali che si vuole utilizzare.
 Error Correction: insieme di blocchi che consentono la rilevazione e/o la correzione degli errori
in fase di ricezione.
 Line Coding: permette di codificare e decodificare i flussi di dati, in relazione ai codici di linea
utilizzati.
 Probes: Sonde per la rilevazione della potenza di segnale nel range frequenziale considerato.
 USRP: qui sono contenuti tutti i blocchi che permettono di utilizzare l'USRP come blocco
sorgente (ricezione) o blocco destinazione (trasmissione).
 Variables: qui sono contenuti diversi blocchi grafici, come cursori e pulsanti, per la gestione dei
parametri del sistema (frequenza di sintonizzazione, guadagni di amplificazione) che permettono
quindi di configurare il dispositivo on-the-fly.

Università della Calabria