7
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. 2010 Guzzo Natale [email protected] Università della Calabria

Esercitazione_2

Embed Size (px)

Citation preview

Page 1: Esercitazione_2

..

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.

2010

Guzzo Natale [email protected]

Università della Calabria

Page 2: Esercitazione_2

Panoramica suite Gnuradio 2

Università della Calabria

Sommario

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

Architettura software di Gnu Radio ........................................................................................................ 4

Il linguaggio di programmazione Python ................................................................................................ 5

Il tool di sviluppo Gnu Radio Companion ................................................................................................ 6

Page 3: Esercitazione_2

Panoramica suite Gnuradio 3

Università della Calabria

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).

Page 4: Esercitazione_2

Panoramica suite Gnuradio 4

Università della Calabria

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.

Page 5: Esercitazione_2

Panoramica suite Gnuradio 5

Università della Calabria

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.

Page 6: Esercitazione_2

Panoramica suite Gnuradio 6

Università della Calabria

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.

Page 7: Esercitazione_2

Panoramica suite Gnuradio 7

Università della Calabria

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.