Vous êtes sur la page 1sur 149

UNIVERSITÀ DEGLI STUDI DI MODENA

E REGGIO EMILIA

Facoltà di Ingegneria - Sede di Modena

Corso di Laurea in Ingegneria Elettronica

Sviluppo ed implementazione di un modem


digitale a larga banda

Relatore:
Chiar.mo Prof. Ing. Giorgio Matteo Vitetta

Correlatore: Tesi di Laurea di:


Dott. Ing. Fabrizio Pancaldi Francesco Montorsi
Dott. Ing. Andrea Mazzanti

Anno Accademico 2008 - 2009


La teoria è quando si sa tutto ma non funziona niente.
La pratica è quando funziona tutto ma non si sa il perché.
In ogni caso si finisce sempre con il coniugare la teoria
con la pratica: non funziona niente e non si sa il perché.
(Albert Einstein)
Indice

1 Introduzione 1
1.1 Contenuti della tesi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Comunicazione su linee elettriche 3


2.1 Sistemi di trasmissione e di distribuzione dell’energia elettrica . . . . 3
2.2 Cenni relativi all’evoluzione storica e alle applicazioni attuali delle PLC 5
2.3 Vantaggi e problematiche delle PLC . . . . . . . . . . . . . . . . . . . 11

3 Implementazione con processori DSP 15


3.1 Architettura del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 Generalità sui sistemi OFDM . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.1 Breve introduzione . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.2 Principi del sistema OFDM . . . . . . . . . . . . . . . . . . . . 18
3.2.3 Analisi strutturale di un sistema OFDM . . . . . . . . . . . . . 20
3.2.4 Periodicizzazione del segnale . . . . . . . . . . . . . . . . . . . 23
3.2.5 Rappresentazione di un segnale OFDM . . . . . . . . . . . . . 29
3.3 Sincronizzazione nei sistemi OFDM . . . . . . . . . . . . . . . . . . . . 32
3.3.1 Effetto di un offset in frequenza della portante . . . . . . . . . 32
3.3.2 Effetto degli errori di posizionamento della finestra di DFT . . 34
3.3.3 Generalità sugli algoritmi di sincronizzazione . . . . . . . . . . 35
3.3.4 Algoritmi per la temporizzazione grezza . . . . . . . . . . . . . 36
3.3.5 Algoritmi per l’acquisizione di frequenza della portante . . . . 41
3.3.6 Algoritmi per la temporizzazione fine . . . . . . . . . . . . . . . 44
3.4 Simulazione MATLAB del sistema . . . . . . . . . . . . . . . . . . . . 47
3.4.1 Il trasmettitore . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.4.2 Il ricevitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4.3 Simulazione dell’intero sistema . . . . . . . . . . . . . . . . . . 62
3.4.4 Dimensionamento del sistema . . . . . . . . . . . . . . . . . . . 63
3.5 Implementazione del trasmettitore . . . . . . . . . . . . . . . . . . . . 66
3.5.1 La scheda EVM TMS320C6424 . . . . . . . . . . . . . . . . . . 66
3.5.2 La scheda EVM DAC2904 . . . . . . . . . . . . . . . . . . . . . 68
3.5.3 Interconnessione DSP-DAC . . . . . . . . . . . . . . . . . . . . 71
3.5.4 Codice per il trasmettitore . . . . . . . . . . . . . . . . . . . . 77
3.6 Implementazione del ricevitore . . . . . . . . . . . . . . . . . . . . . . 83
3.6.1 La scheda EVM TMS320C6455 . . . . . . . . . . . . . . . . . . 83

4
INDICE 5

3.6.2 La scheda EVM ADS62P45 . . . . . . . . . . . . . . . . . . . . 91


3.6.3 Interconnessione ADC-DSP . . . . . . . . . . . . . . . . . . . . 92
3.6.4 Codice per il ricevitore . . . . . . . . . . . . . . . . . . . . . . . 99
3.7 Conclusioni per l’implementazione a DSP . . . . . . . . . . . . . . . . 101

4 Implementazione con dispositivi FPGA 105


4.1 Architettura del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.1.1 Cenni relativi alla storia delle FPGA . . . . . . . . . . . . . . . 105
4.1.2 Funzionamento interno dei dispositivi Cyclone II . . . . . . . . 107
4.2 Generalità sui sistemi PAM a singola portante . . . . . . . . . . . . . . 115
4.2.1 Il trasmettitore . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
4.2.2 Il ricevitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
4.3 Sincronizzazione nei sistemi PAM a singola portante . . . . . . . . . . 117
4.3.1 Algoritmi per la temporizzazione grezza . . . . . . . . . . . . . 117
4.3.2 Algoritmi per la temporizzazione fine . . . . . . . . . . . . . . . 118
4.4 Simulazione MATLAB del sistema . . . . . . . . . . . . . . . . . . . . 119
4.4.1 Il trasmettitore . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
4.4.2 Il ricevitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
4.5 Implementazione del trasmettitore in Simulink . . . . . . . . . . . . . 123
4.6 Implementazione del ricevitore in Simulink . . . . . . . . . . . . . . . 128
4.7 Conclusioni per l’implementazione a FPGA . . . . . . . . . . . . . . . 136

5 Conclusioni 137

A Sviluppi futuri 138

Ringraziamenti 143
6 INDICE
Capitolo 1

Introduzione

1.1 Contenuti della tesi


Oggigiorno l’evoluzione della tecnologia e dei servizi che essa offre determina una
continua richiesta di maggior velocità nel trasferimento e nell’elaborazione dei dati; è
quindi un passo importante sia per fini didattici che per fini lavorativi imparare ad
usare l’hardware e le tecniche software atti a soddisfare tale richiesta.
L’obiettivo del progetto qui documentato è stato l’implementazione di un modem
digitale a larga banda per comunicazioni power-line. La caratteristica peculiare di
tale sistema è proprio la larga banda (circa 30MHz) che permette di ottenere velocità
trasmissive relativamente elevate (fino a decine di Mbit/s) ma che al contempo pone
requisiti stringenti sull’hardware che deve essere infatti in grado di gestire una enorme
mole di dati in tempo reale.
L’altra caratteristica saliente è il tipo di canale di comunicazione per cui il modem
è stato sviluppato, ovvero il canale power-line. Tale canale ha recentemente acqui-
sito notevole interesse sia in ambito scientifico che in ambito commerciale essendo le
linee elettriche di potenza candidate ideali per fornire servizi di domotica e di home-
entertaining che si prevede saranno in forte espansione negli anni a venire. Nel capitolo
2 vengono fornite le nozioni di base relative a tale argomento.
Dal punto di vista tecnico per un sistema embedded digitale quale il modem che si
è voluto realizzare una fra le scelte più importanti è il tipo di dispositivo o di dispositivi
che avranno il compito di effettuare l’elaborazione dei segnali.
La scelta ricade in tre grandi categorie: microcontrollori (microcontroller unit -
MCU ), digital signal processors (DSP) e field-programmable gate arrays (FPGA). La
larga banda (e l’alta velocità di trasmissione che essa implica) esclude assolutamente
l’opzione MCU, visto che i microcontrollori sono i dispositivi più semplici e meno
veloci.
In questo progetto si è dapprima scelta un’architettura basata sui DSP della Texas
Instruments e in seguito si è passati ad un’architettura basata su FPGA della Altera.
I risultati sono descritti rispettivamente nella sezione 3.7 e 4.7.
Per un modem a larga banda, specie se sviluppato per il canale power-line, risulta
molto efficiente e conveniente adottare la modulazione denominata OFDM (Ortho-
gonal Frequency Division Multiplexing). Tale modulazione è stata difatti adottata

1
2 1. Introduzione

in numerosi standard moderni per trasmissione ad alta velocità: DAB, DVB, IEEE
802.11a/g, IEEE 802.16, IEEE 802.20.
Nell’implementazione per DSP si è quindi sviluppato tale schema di modulazione,
che viene descritto nella sezione 3.2.
D’altra parte però l’OFDM comporta anche una certa complessità implementati-
va (dovuta anche alle operazioni di FFT/IFFT che essa richiede) nel trasmettitore e
soprattutto nel ricevitore (dove sono necessari svariati algoritmi di sincronizzazione).
Questa complessità addizionale unita alla assenza di know-how legato alla tecnologia
FPGA (che a dispetto dei DSP richiede una differente “impostazione concettuale”) ha
fatto propendere la scelta del formato di modulazione, per quanto riguarda l’imple-
mentazione FPGA-based, su una soluzione più semplice quale quella PAM a singola
portante, che viene descritta nella sezione 4.2.
In entrambi i casi comunque è stato fondamentale l’ausilio di una simulazione ad
alto livello (nel nostro caso in MATLAB) prima dell’implementazione vera e propria.
Nelle sezioni 3.4 e 4.4 vengono quindi descritti gli sforzi profusi in tale studio per le
due differenti piattaforme hardware e per i due diversi formati di modulazione.
Nelle sezioni 3.5, 3.6, 4.5 e 4.6 vengono poi descritte nel dettaglio le implementazioni
vere e proprie.
Infine, nel capitolo 5 si propongono alcune considerazioni conclusive.
Capitolo 2

Comunicazione su linee elettriche

Ai fini di una migliore comprensione dei contenuti trattati nei Capitoli successivi,
vengono riportati di seguito alcuni cenni relativi ad argomenti legati alle Power Line
Communications (PLC). Per maggiori informazioni sull’argomento e in particolare sul
rumore e le interferenze presenti su questo tipo di canale si rimanda al lavoro [?].
In particolare, nel paragrafo 2.1 viene fornita una breve e generale descrizione della
struttura dei sistemi di trasmissione e di distribuzione dell’energia elettrica; nel para-
grafo 2.2, invece, viene presentato un conciso quadro relativo alla storia e alle numerose
applicazioni delle PLC, con particolare riferimento a quelle attuali. Nel paragrafo 2.3,
infine, vengono delineati i principali vantaggi e le più importanti problematiche che
caratterizzano oggi questa tipologia di sistemi.

2.1 Sistemi di trasmissione e di distribuzione dell’energia


elettrica
La struttura di un sistema di trasmissione e di distribuzione dell’energia elettrica [24],
[26], [25], è sviluppata su tre livelli gerarchici:

• il primo livello, ad alta tensione (HV: High Voltage — da 36 a 300 kV) o ad


estremamente alta tensione (EHV: Extremely High Voltage — oltre i 300 kV)
connette le centrali di produzione tra loro ed ai luoghi di utilizzo. Esso costituisce
una rete a maglia a lunga distanza, i cui rami hanno una lunghezza dell’ordine
di decine o centinaia di chilometri, a copertura nazionale od internazionale;

• il secondo livello, a media tensione (MV: Medium Voltage — da 1 a 36 kV), ali-


menta centri abitati, ospedali, centri industriali e commerciali. Esso forma reti a
stella, anello o maglia, con linee lunghe unità o alcune decine di chilometri. È ca-
ratterizzato da una capillarità sul territorio significativamente superiore rispetto
a quella delle reti ad alta tensione;

• il terzo livello, a bassa tensione (LV: Low Voltage — al di sotto di 1 kV), porta
elettricità ai singoli utenti. Esso realizza reti a capillarità ancora più elevata
rispetto a quelle di media tensione, adattate alla distribuzione degli utilizzatori

3
4 2. Comunicazione su linee elettriche

Figura 2.1: Schema generale di un sistema di trasmissione e di distribuzione


dell’energia elettrica.

sul territorio; queste possono essere a stella, anello o maglia. La lunghezza delle
linee a bassa tensione è dell’ordine di qualche centinaio di metri.

Gli impianti elettrici interni alle abitazioni rientrano in questo livello; essi sono
tuttavia di proprietà degli utenti e sono collegati alle linee esterne, appartenenti alle
compagnie elettriche fornitrici, attraverso opportuni contatori di energia (Meter Unit).
Dal momento che nessun utilizzatore è direttamente connesso alle linee elettriche del
primo livello, quest’ultimo viene considerato di sola trasmissione; di contro, il terzo
livello è considerato di sola distribuzione, mentre il secondo di trasmissione o di di-
stribuzione, a seconda dei casi. In prevalenza, le reti elettriche operano con segnali a
corrente alternata trifase (fanno eccezione i sistemi HVDC: High Voltage Direct Cur-
rent, utilizzati talvolta nel livello ad alta tensione) e il trasferimento di energia tra due
livelli della gerarchia avviene attraverso appositi trasformatori, che consentono una
conversione dei valori di tensione. Le linee che trasportano energia elettrica possono
essere aeree (realizzate con conduttori tipicamente non isolati, sostenuti da tralicci o
pali) oppure in cavo (realizzate con conduttori isolati, sotterranei o sottomarini).
La fig. 2.1 riassume i concetti appena esposti.
A seconda del Paese, le caratteristiche specifiche dei sistemi di trasmissione e di
distribuzione possono variare. Facendo riferimento a parametri che verranno ripresi in
seguito, ad esempio, si può dire che in Italia, in Spagna, in Germania (e, in generale,
nei paesi europei) la frequenza di rete è pari a 50 Hz (nominali) e gli avvolgimenti di
primario e secondario di un trasformatore MV/LV presentano tipicamente una confi-
gurazione trifase a triangolo/stella, con centro stella collegato a terra. Dal secondario
si irradiano le linee principali a quattro fili (tre fasi e neutro), mentre le singole deri-
vazioni possono essere anche a due fili (fase e neutro) o a tre fili (due fasi e neutro);
2. Comunicazione su linee elettriche 5

Figura 2.2: A sinistra, rappresentazione delle induttanze del secondario di un trasfor-


matore MV/LV in Europa. A destra, rappresentazione del sistema split phase presente
negli Stati Uniti e in Giappone (i valori fuori dalle parentesi si riferiscono agli Stati
Uniti, i valori fra parentesi si riferiscono al Giappone).

tipicamente, il valore efficace di tensione tra fase e fase è di 400 V, mentre tra fase e
neutro è di 230 V.
Negli Stati Uniti la frequenza di rete è pari a 50 Hz, mentre in Giappone è pari a
50 o 60 Hz, a seconda della regione. Il trasformatore MV/LV è caratterizzato da un
primario a due fili (una fase e neutro) e da un secondario a presa centrale a tre fili
(due fasi e neutro): tale sistema è detto a fase divisa (split phase system). Negli Stati
Uniti, l’utente può disporre di un valore di tensione efficace di 120 V tra fase e neutro
oppure di 240 V tra fase e fase; in Giappone, invece, ha a disposizione 100 V efficaci
tra fase e neutro oppure 200 V tra fase e fase.
Alcune delle considerazioni precedenti sono illustrate nella fig.2.2.
Per ragioni storiche, la struttura dei sistemi di trasmissione e distribuzione nei
paesi meno sviluppati ricalca quella dei paesi europei o quella degli Stati Uniti.

2.2 Cenni relativi all’evoluzione storica e alle applicazioni


attuali delle PLC
L’interesse “storico” relativo alla utilizzazione delle linee elettriche come canale tra-
smissivo per le telecomunicazioni nasce fondamentalmente dalla possibilità di sfruttare
un mezzo già cablato (che quindi non richiede costi di installazione) e caratterizzato
da una diffusione capillare (che nessuna altra linea su cavo sperimenta).
L’utilizzo dei primi sistemi PLC risale intorno al 1920, quando alcune compagnie
elettriche introdussero il cosiddetto CFS (Carrier Frequency System) al fine di moni-
torare lo stato della rete attraverso comunicazioni nelle bande LF e MF (15-500 KHz)
su linee ad alta tensione [24]. Intorno al 1930 venne sviluppato il sistema RCS (Rip-
ple Carrier Signalling), che consentı̀ alle compagnie fornitrici di controllare i carichi
6 2. Comunicazione su linee elettriche

della rete (load management) attraverso comunicazioni unidirezionali all’interno della


banda audio (0,125-3 KHz) su linee a media e bassa tensione [24].
Nei decenni successivi, in particolare tra gli anni ’70 e gli anni ’90, in concomitanza
con lo sviluppo dei dispositivi elettronici e delle moderne tecniche di trasmissione
digitali, sono stati progettati altri sistemi via via più evoluti, anche bidirezionali.
Alcuni di questi hanno operato su linee a alta o media tensione o linee a bassa
tensione esterne, con scopi di controllo e manutenzione della rete, gestione dei cari-
chi, nonché di lettura remota dei contatori e, talvolta, di selezione delle tariffe, di
pagamento a distanza, di localizzazione dei guasti e dei tentativi di manomissione; si
possono citare a proposito i progetti di Thorn-EMI (Inghilterra), Enel (Italia), Data-
watt (Olanda) [27]. Altri invece hanno operato su linee a bassa tensione interne alle
abitazioni, al fine di controllare in maniera remota e centralizzata (attraverso sensori
e attuatori) impianti di illuminazione, sistemi di riscaldamento e di condizionamento
dell’aria oppure dispositivi di allarme e di videosorveglianza: questi hanno contribuito
allo sviluppo dei settori di building e home automation. E’ possibile menzionare, in
riguardo, gli standard X10, Echelon LonWorks, Intellon CEBus [27].
I valori di bit rate dei sistemi prima menzionati (nelle loro prime versioni costrut-
tive) sono contenuti entro qualche decina di migliaia di bit al secondo. Del resto, la
norma europea CENELEC2 EN 50065 nel 1991 ha fissato tra 3 e 148,5 KHz la banda
disponibile per le trasmissioni sulle linee elettriche, prevedendo una divisione in cinque
sottobande, ciascuna caratterizzata da determinati livelli massimi di segnale: pertan-
to, le massime velocità trasmissive ottenibili erano dell’ordine di 100 Kbit/s [25]. Negli
Stati Uniti, la FCC4 Part 15 ha consentito l’utilizzo di una banda apprezzabilmente
più ampia (9-490 KHz) [25]; lo stesso è accaduto in Giappone, attraverso la Radio Law
(10-450 KHz) [25]. Ad ogni modo, le velocità trasmissive risultavano contenute entro
il megabit al secondo.
In sintesi, quindi, fino alla fine degli anni ’90 si è assistito allo sviluppo dei cosiddetti
sistemi PLC a banda stretta (narrow-band PLC), utilizzati dalle compagnie elettriche
per controllare in vario modo la trasmissione e la distribuzione dell’energia elettrica
(energy-related services — vedi fig. 2.3) o dai singoli utenti per l’automazione di edifici
(building/home automation — vedi fig. 2.4).
Alla fine degli anni ’90 si è verificata la caduta dei monopoli nel settore dell’energia e
delle telecomunicazioni; parallelamente, si è assistito alla enorme diffusione di Internet
e di servizi multimediali sempre più avanzati. Questi fatti hanno fatto sviluppare
ulteriori ed assai significative prospettive di utilizzo per le PLC, che hanno condotto
alla ricerca e allo sviluppo di sistemi a larga banda (wide-band PLC), caratterizzati
da valori di bit rate superiori al megabit per secondo.
Nello specifico, la deregolamentazione del mercato delle telecomunicazioni ha aper-
to la possibilità a nuovi fornitori di servizi di utilizzare il livello a bassa tensione come
alternativa per realizzare il cosiddetto “ultimo miglio” (“last mile”) delle reti di acces-
so. L’opportunità di disporre di una infrastruttura già esistente e diffusa si è presentata
(e si presenta tuttora), infatti come assai vantaggiosa sul piano economico, dal mo-
mento, in particolare, che la realizzazione di nuove infrastrutture con altre tecniche
richiede costi elevati. In questo caso le PLC — costituenti le cosiddette PLC Access
Network - si sono trovate (e si trovano tuttora) a competere con altri sistemi di acces-
2. Comunicazione su linee elettriche 7

Figura 2.3: Esempio di struttura di un sistema PLC utilizzato per la fornitura di


energy-related services.

Figura 2.4: Esempio di struttura di un sistema PLC utilizzato per la building auto-
mation. EIB è acronimo di European Installation Bus, standard oggi confluito nel più
esteso (sia a livello geografico, sia a livello di contenuto) KNX.
8 2. Comunicazione su linee elettriche

Figura 2.5: Esempio di Access PLC Network.

so, quali ad esempio quelli della famiglia xDSL (DSL: Digital Subscriber Line) oppure
IEEE 802.16 (o WiMAX: Worldwide Interoperability for Microwave Access). La fig.
2.5 illustra un esempio di struttura di rete di accesso basata sull’utilizzo delle PLC; in
essa si può notare la presenza di una Base/Master Station, collocata all’interno della
cabina di trasformazione MV/LV, che rende possibile l’accesso ai vari utenti del livello
a bassa tensione e consente la connettività ad una rete geografica (WAN: Wide Area
Network).
Un altro settore che ha suscitato (e suscita tuttora) grande interesse è quello del
cosiddetto “ultimo metro” (“last meter”): esso è relativo alla implementazione di LAN
(Local Area Network) all’interno di edifici ed abitazioni, in grado di connettere nu-
merosi dispositivi ivi presenti. In tale ambito è possibile realizzare sia funzioni di
automazione (utilizzando sensori, attuatori e impianti come già visto per i sistemi
narrow-band), sia funzioni di comunicazioni veloci e di intrattenimento (con riferi-
mento ad esempio a telefoni, computer, stampanti, impianti video e audio, console per
videogiochi, elettrodomestici, interfacce con dispositivi che utilizzanoaltre tecniche tra-
smissive). E’ interessante osservare come la presenza di imprese concorrenti nel mer-
cato dell’energia, susseguente alla deregolamentazione, abbia portato all’idea di nuovi
e più personalizzati energy-related services, quali ad esempio tariffazioni differenziate
in base alle esigenze e ai consumi dei vari utenti [24].
Nel campo dell’“ultimo metro”, i sistemi PLC - detti anche in-house o in-home
PLC — sono risultati (e risultano oggi) essere supplementari o in competizione con al-
tri sistemi e tecniche, come reti IEEE 802.3, WLAN (Wireless LAN), Bluetooth. Nella
fig. 2.6 viene rappresentato un esempio di sistema in-house PLC; in questo è presente
una Base Station che coordina l’accesso al mezzo di ciascuno degli apparati collegati
alla rete che possiedono un modem PLC. La BS può essere collocata in corrisponden-
2. Comunicazione su linee elettriche 9

Figura 2.6: Esempio di sistema in-house PLC.

za del contatore (come illustrato) o in una qualunque altra presa elettrica. Ricerche
attuali riguardano la possibilità di utilizzare le PLC nei settori automobilistico, aereo,
satellitare, ferroviario, navale, dell’industria mineraria [28], dove, seppur con ulteriori
e specifici obiettivi, si cerca ancora una volta di sfruttare le linee elettriche preesi-
stenti per realizzare comunicazioni digitali. Al fine di ottenere sistemi caratterizzati
da velocità trasmissive dell’ordine di unità, decine o centinaia di megabit per secondo
è necessario disporre di una banda estesa decine di megahertz. In generale, è stato
mostrato (sia a livello teorico che a livello sperimentale) come l’intervallo 1†30 MHz
offra eccellenti possibilità per le applicazioni prima citate [24].
Dalla fine degli anni ’90, numerosi sono i dispositivi che il mercato ha proposto e
che riguardano le applicazioni prima descritte, soprattutto nel settore in-house: og-
gi, alcuni di questi sono capaci in linea teorica di raggiungere velocità superiori a
100 Mbit/s. Ancora diversi aspetti, tuttavia, devono essere chiariti sulla funzione di
trasferimento e sulle interferenze che caratterizzano il canale Power Line. Inoltre, è
attesa l’emanazione di standard completi che regolamentino a livello internazionale le
comunicazioni su linee elettriche a larga banda (sia in termini di tecniche trasmissive,
sia in termini di compatibilità elettromagnetica — vedi paragrafo 2.3), ma al momento
essa è solo parzialmente avvenuta.
E’ importante sottolineare, in quest’ultimo ambito, l’attività di ETSI, attraverso il
suo comitato tecnico Powerline Telecommunications (PLT), iniziata nel 1999 proprio
con lo scopo di sviluppare standard e specifiche per la fornitura di servizi di teleco-
municazione attraverso le reti elettriche, cercando di evitare interferenze con gli altri
utilizzatori dello spettro radio. ETSI ha pubblicato diversi documenti; tra questi ri-
cordiamo in particolare il primo, ETSI TS 101 867 [30], risalente al novembre 2000, in
cui si forniscono alcune indicazioni per garantire la coesistenza tra “ultimo miglio” e
10 2. Comunicazione su linee elettriche

“ultimo metro”: la modalità base prevede di utilizzare la banda 1,6†10 MHz per l’ac-
cesso e la banda 10-30 MHz per sistemi in-house. Si possono citare poi ETSI TR 102
494 [31], emanato nel giugno 2005, dove si definiscono alcune specifiche relative alla
realizzazione di modem per comunicazioni in-house, e ETSI TR 102 578 [32], emesso
nell’agosto 2008, in cui si specifica un meccanismo per evitare problemi di coesistenza
tra modem PLC e sistemi di radiodiffusione nel campo delle onde corte (Short Wave
radio broadcasting).
E’ assai significativo inoltre ricordare che nel giugno 2005 è stato creato un grup-
po di lavoro all’interno di IEEE6, denominato P1901, con lo scopo di sviluppare uno
standard per alte velocità (Broadband over Power Line: BPL), maggiori di 100 Mb/s,
relativo al livello PHY e al sottolivello MAC del sistema di riferimento ISO/OSI; es-
so si affianca a P1675 (standard relativo all’installazione e al collaudo di dispositivi
PLC, nonché al test e alla verifica dell’hardware normalmente utilizzato — già appro-
vato e pubblicato), P1775 (standard concentrato su specifiche questioni inerenti alla
misurazione delle emissioni elettromagnetiche causate da dispositivi PLC — in fase di
approvazione) , P2030 (standard contenente linee guida per energy-related services —
in fase di sviluppo) e prevede di utilizzare frequenze al di sotto di 100 MHz.
Nello specifico, da febbraio 2009 è disponibile una bozza su cui si sta lavorando
per combinare le proposte accettate nel dicembre 2008 e provenienti dai tre differenti
cluster di lavoro: in-home (IH), access (AC) e coexistence (CX). A quest’ultimo settore
è stato dato notevole rilievo, in vista di consentire una interoperabilità tra dispositivi
PLC IEEE ed altri dispositivi non conformi a detto standard; in particolare, l’attuale
sottogruppo tecnico TSG4 ha presentato nel maggio 2009 una bozza di documento in
cui si descrive Inter-System Protocol (ISP), un protocollo che permetterà la comunica-
zione tra apparati IEEE e apparati realizzati secondo lo standard ITU-T7 G.hn [28],
[29], [33].
G.hn, noto anche come G.9960, è infatti un altro importante riferimento: esso è
stato approvato da ITU-T nel dicembre 2008 (il gruppo di lavoro corrispondente ha
iniziato la sua attività nel maggio 2006) ed è relativo alla realizzazione di reti in-home
di prossima generazione su linee elettriche ed altri due tipi di mezzo cablato, doppino
telefonico e cavo coassiale. Prevede specifiche nel livello PHY (compresa l’utilizzazione
degli intervalli di frequenze 2-100 MHz, 100-200 MHz e 300-2500MHz), in parte del
sottolivello MAC e in parte del livello di rete [29].
ETSI, IEEE e ITU-T collaborano con diversi enti in tutto il mondo: limitandosi a
citare i nomi di alcuni, ricordiamo l’associazione PLCforum [34], le alleanze industriali
HomePlug e HD-PLC (High Definition Power Line Communication), le associazioni
commerciali HomeGrid forum, CEPCA (Consumer Electronics Powerline Communica-
tion Alliance) e UPA (Universal Powerline Association). HomePlug e HD-PLC hanno
emesso a loro volta standard nel passato: HomePlug 1.0, HomePlug AV e HomePlug
Command & Control (quest’ultimo a banda stretta) nel primo caso, uno omonimo
all’alleanza nel secondo.
Da ricordare, infine, la presenza dell’annuale International Symposium on Power
Line Communications and Its Applications (ISPLC), che si tiene ogni anno, dal 1997,
negli ultimi giorni di marzo o nei primi giorni di aprile, ogni volta in una diversa
città. Esso rappresenta un importante momento d’incontro, poiché in questo vengono
2. Comunicazione su linee elettriche 11

presentati i lavori di ricerca che di anno in anno spaziano in tutti i campi relativi alle
comunicazioni su linee elettriche.

2.3 Vantaggi e problematiche delle PLC


Gli aspetti positivi che accompagnano l’uso delle PLC derivano fondamentalmente dal
vantaggio di impiegare per la trasmissione dati un canale di comunicazione che è già
cablato e capillarmente diffuso, sia sul territorio che all’interno degli edifici. E’ proprio
questo punto infatti che ha motivato fortemente lo sviluppo storico delle comunicazioni
su linee elettriche, come già detto nel paragrafo 2.2, e consente oggi di:
• avere a disposizione infrastrutture per le telecomunicazioni che sostanzialmente
non richiedono costi di installazione aggiuntivi;
• fare in modo che, potenzialmente, anche gli utenti situati in aree remote (zone ru-
rali, montane, o in generale difficili da raggiungere) possano facilmente usufruire
dei moderni servizi di telecomunicazione; ciò sia nei paesi industrializzati, sia nei
paesi in via di sviluppo. Le PLC possono rappresentare quindi uno strumento
per combattere il digital divide;
• rendere possibile, in linea di principio, la connessione ad Internet o ad una rete
locale (comprendente diversi dispositivi elettronici ed elettrici) da una qualsiasi
presa di un edificio.
Accanto a questi importanti, potenziali vantaggi si trovano però alcune notevoli
problematiche, legate al fatto che le linee elettriche sono pensate e realizzate per tra-
smettere segnali di potenza e non per trasportare informazione; sono dunque notevoli
le sfide tecniche da affrontare per ottenere comunicazioni affidabili su questo tipo di
mezzo trasmissivo.
Con riferimento al livello a bassa tensione (che, come già accennato nel Par. 2.2,
è attualmente quello di maggiore interesse per le applicazioni delle PLC) , il mezzo
trasmissivo si presenta nel complesso come una interconnessione di diverse linee di tra-
smissione, ciascuna delle quali è caratterizzata, in generale, da una diversa lunghezza,
da una diversa impedenza caratteristica, da una diversa terminazione. Nello specifico,
il canale di comunicazione:
• mostra una attenuazione crescente all’aumentare della frequenza e della lunghez-
za delle linee;
• rivela una selettività in frequenza, a causa di riflessioni ed echi (multipath propa-
gation) provocati dal disadattamento delle varie interconnessioni e terminazioni,
le cui impedenze peraltro variano in generale con la frequenza stessa;
• esibisce una tempo-varianza a lungo termine, con riferimento a minuti o ad ore,
dovuta alla connessione/disconnessione dei carichi;
• esibisce una tempo-varianza a breve termine, con riferimento ad unità o decine
di millisecondi, dal momento in cui l’impedenza di svariati tipi di carichi varia
in funzione del periodo o del semiperiodo del segnale alternato di potenza;
12 2. Comunicazione su linee elettriche

• è affetto, talvolta in maniera anche molto pesante, da numerose interferenze, la


cui origine e la cui caratterizzazione sono varie e verranno descritte più in detta-
glio nel Cap. 3. A differenza di altri canali di comunicazione, le interferenze non
possono essere considerate come un disturbo additivo di tipo AWGN (Additive
White Gaussian Noise).

La visione d’“insieme” sul canale illustrata nei punti precedenti è stata acquisita
soltanto di recente. Il problema dello sviluppo di modelli è stato infatti avvertito in
maniera significativa solo con l’avvento delle promettenti prospettive a larga banda
per i sistemi PLC, anche perché grazie alla “complessità contenuta” delle applicazioni
narrow-band, le ostilità che si verificano in banda stretta furono combattute con alcune
tecniche di trasmissione, ad esempio attraverso la modulazione FSK o alcune versioni
di quella a spettro espanso (spread-spectrum) [24], [26]. Ulteriori e più approfondite
conoscenze si sono mostrate invece necessarie per lavorare su bande di frequenza più
ampie, ad esempio fino a 30 MHz, in vista di utilizzare o sviluppare tecniche specifiche
che permettano di mitigare in maniera efficace i problemi introdotti dal canale: da qui
si comprendono i molteplici tentativi di analisi dell’ultimo decennio.
I primi approcci relativi alla descrizione della funzione di trasferimento e delle
interferenze, che hanno condotto alle osservazioni sull’attenuazione, sulla selettività in
frequenza e sulla tempo-varianza a lungo termine, nonché ad alcune considerazioni sui
disturbi additivi, si sono basate sull’ipotesi di un canale LTI (Linear Time-Invariant):
tra questi è possibile citare i noti lavori di Philipps, Zimmermann e Dostert [24], [35].
Successivamente, Cañete et al. hanno iniziato a prendere in considerazione anche la
tempo-varianza a breve termine, a partire da osservazioni sperimentali condotte su
numerosi dispositivi elettrici [36], [37], [38] e sono arrivati a concludere che il canale
è non lineare ma approssimabile attraverso un sistema LPTV (Linear Periodically
Time-Variant), con periodo pari all’inverso della frequenza di rete. In questi ultimi
lavori sono emerse anche importanti considerazioni relative alle interferenze. Nelle fig.
2.7 e 2.8 sono illustrati alcuni dei concetti appena esposti; in esse si può notare una
variazione ciclica del comportamento, mostrata in questo caso sul semiperiodo (10 ms)
del segnale alternato di potenza.
Ad oggi non è ancora presente un modello che riesca ad approssimare in maniera
completa, cioè tenendo conto di tutti i punti elencati in precedenza, la funzione di
trasferimento di un canale Power Line; consistenti, comunque, sono gli sforzi in que-
st’ambito di studio. Per rimediare alle difficoltà introdotte dal mezzo trasmissivo, nei
sistemi wide-band la scelta della tecnica di modulazione multiportante OFDM (Or-
thogonal Frequency Division Multiplexing) appare quella più adeguata. Questa infatti
presenta numerosi vantaggi rispetto alle altre tecniche potenzialmente utilizzabili; ad
esempio, consente di ottenere un’elevata efficienza spettrale e richiede ridotte necessità
di equalizzazione in ricezione rispetto a sistemi a singola portante, oppure riesce ad
adattarsi meglio rispetto a tecniche spread-spectrum in un ambiente multiutente dove
i segnali interferenti provenienti da altri sistemi PLC possono raggiungere livelli eleva-
ti. Inoltre, il problema legato all’interferenza interblocco (IBI: interblock interference)
può essere agilmente affrontato grazie al prefisso ciclico. Di contro, potrebbero esservi
emissioni elettromagnetiche rilevanti (vedi righe successive) nel caso in cui il parametro
PAPR (Peak-to-Average Power Ratio) assuma valori troppo elevati [24], [36]. Nei la-
2. Comunicazione su linee elettriche 13

Figura 2.7: Andamento dell’impedenza variabile nel tempo e nella frequenza di un


rasoio elettrico.

Figura 2.8: Esempio di modulo della funzione di trasferimento di un canale, variabile


nel tempo e in frequenza, misurata in un appartamento.
14 2. Comunicazione su linee elettriche

vori relativi agli standard IEEE P1901 e ITU-T G.hn (ma anche in quelli di HomePlug
e HD-PLC) sono state proposte soluzioni a livello fisico proprio basate sull’utilizzo di
alcune versioni della tecnica OFDM [29]. Alle precedenti valutazioni sul canale, si
devono aggiungere notevoli problemi di compatibilità elettromagnetica (EMC: Elec-
tromagnetic Compatibility): le linee elettriche possono essere infatti considerate come
strutture “elettromagneticamente aperte” non protette a sufficienza contro l’emissione
di segnali ad alta frequenza, i quali possono interferire con i segnali prodotti da sistemi
wireless o da altri sistemi di telecomunicazione, anche PLC, operanti nelle vicinanze
e nelle medesime bande di frequenza. Facendo riferimento in particolare alla banda
1-30 MHz, numerose sono le comunicazioni radio che possono risultare disturbate: tra
queste, quelle relative a servizi di radiodiffusione nel campo delle onde medie e corte
(Medium e Short wave), a radio amatori, alla radio astronomia, ai settori aeronautico,
marittimo e militare.
L’argomento relativo alla EMC è da sempre piuttosto “scottante”: senza entrare
nel dettaglio, ci si limita ad accennare che il processo di emanazione di standard
internazionali che stabiliscano i limiti di emissioni per gli apparati PLC è tuttora
in atto; esso ha conosciuto nel passato un decorso lento, sia a causa di discordanze
verificatesi in fase di approvazione dei documenti, sia a causa di difficoltà tecniche
legate a questa tecnica di comunicazione.
Ulteriori particolari sull’argomento sono disponibili ad esempio nei riferimenti [24],
[25], [26].
Capitolo 3

Implementazione con processori


DSP

3.1 Architettura del sistema


Le caratteristiche del canale powerline descritto nel capitolo 2, in particolare la restrin-
zione giuridica della banda fra [1;30]MHz, rende appetibile l’architettura hardware per
trasmettitore e ricevitore nota come “direct digital synthesis”.
In tale architettura la parte analogica è ridotta al minimo e anche le operazioni
di conversione in frequenza (tradizionalmente implementate con mixer analogici) sono
effettuate in digitale; in particolare le uniche parti analogiche sono a lato trasmettitore
l’amplificatore di potenza (power amplifier - PA) e a lato ricevitore l’amplificatore a
basso rumore (low noise amplifier - LNA).
Nella figura 3.1 è mostrata l’architettura del sistema sviluppato basata su digital
signal processor (DSP). Tale dispositivo hardware si distingue dalle MCU per la sua
predisposizione, a livello di instruction set, al digital-signal processing; in un DSP
sono quindi presenti ALU estremamente avanzate e veloci e anche istruzioni più di
alto livello quali, ad esempio, quelle dedicate alla codifica e decodifica di codici a
correzione di errore (tramite campi di Galois).
Rispetto ai dispositivi FPGA i DSP hanno il vantaggio di essere più “familiari” ai
programmatori in quanto sono comunque processori che eseguono istruzioni compilate;
difatti è comune usare il linguaggio C per programmare i DSP. Questo comporta anche
che sono facilmente reperibili un vasto numero di risorse pronte per DSP: dalle librerie
di supporto ottimizzate agli strumenti di debug e profiling del codice.
Come sarà meglio esplicato nel capitolo 4, le FPGA, invece, non eseguono al-
cun programma: sono dispositivi intrinsecamente paralleli e una volta configurate so-
no equivalenti ad un circuito logico sequenziale. Ad ogni transizione del segnale di
clock contemporaneamente migliaia o milioni di celle digitali (flip-flop, latch, registri)
elaborano il segnale in ingresso.
Le FPGA pur essendo quindi potenzialmente più versatili sono in generale più
difficili da programmare e da debuggare.
Per questo motivo, per la disponibilità dell’hardware e anche per il lavoro pre-

15
16 3. Implementazione con processori DSP

Figura 3.1: Architettura hardware del modem basato su DSP con dettagli sulle
interconnessioni.
3. Implementazione con processori DSP 17

cedentemente svolto sui DSP (si veda, ad esempio, [5] e [6]) si è inizialmente scelta
l’architettura mostrata nella figura 3.1.
Una ulteriore importante caratteristica dell’architettura scelta che può sfuggire ad
una prima analisi è la mancanza di alcun anello di retroazione analogico; in particolare
la frequenza di campionamento del convertitore analogico-digitale (ADC) del ricevitore
è indipendente dal segnale ricevuto. Tale caratteristica è nota come “non-synchronous
sampling clock” [8]; da una parte ciò semplifica il sistema, ma dall’altra richiede l’u-
tilizzo di un interpolatore nel ricevitore. Per maggiori informazioni si rimanda alla
sezione 3.6.
Si noti infine che la figura 3.1 indica non solo le generiche interconnessioni fra DSP,
computer e blocchi analogici (LNA e PA) ma anche vari parametri elettrici utili per la
progettazione di questi ultimi. Per maggiori informazioni relative alla modellizzazione
del canale powerline e delle impedenze di ingresso/uscita del canale, si rimanda a [9].

3.2 Generalità sui sistemi OFDM


3.2.1 Breve introduzione
La tecnica OFDM (Orthogonal Frequency Division Multiplexing) è uno schema di
modulazione digitale multi-portante che si avvale di un alto numero di sottoportanti
ortogonali affiancate in frequenza per conseguire un’elevata efficienza spettrale. Cia-
scuna sotto-portante è modulata usando uno schema di modulazione convenzionale
(ASK, PSK, FSK, QAM, etc) con una frequenza di simbolo relativamente bassa. La
frequenza dati complessiva risulta paragonabile con la frequenza che si può ottenere
usando nella stessa banda una modulazione a singola portante.

I principali vantaggi dell’OFDM rispetto modulazioni a singola portante sono:

• capacità di adattarsi a canali estremamente disturbati senza richiedere una equa-


lizzazione troppo complessa;

• robustezza nei confronti del fenomeno del multipath;

• estrema efficienza nel caso di fading selettivo in frequenza;

• elevata efficienza spettrale;

• implementazione efficiente tramite FFT e IFFT;

• necessità di un singolo oscillatore locale, sia nel ricevitore che nel trasmettitore,
per generare tutte le sottoportanti.

Tutte queste sue caratteristiche hanno fatto sı̀ che tale tecnica di modulazione
ortogonale multiportante sia stata suggerita e standardizzata per una grande varietà
di applicazioni, tra cui:

• broadcasting terrestre e satellitare di audio digitale (DAB);

• broadcasting terrestre e satellitare di video digitale (DVB-T, DVB-H, etc);


18 3. Implementazione con processori DSP

• ADSL e VDSL su “doppino telefonico”;

• wireless LAN (IEEE 802.11a/g, IEEE 802.16, IEEE 802.20);

• ultra wideband (nell’implementazione WiMedia Alliance);

• comunicazioni su power-lines.

Questa tecnica di modulazione ha però i suoi svantaggi dato che:

• è molto sensibile alle differenze di frequenza fra gli oscillatori locali del trasmet-
titore e ricevitore (dovuto al mismatch intrinseco degli oscillatori e all’effetto
Doppler );

• è sensibile agli errori di temporizzazione nel campionamento;

• non permette un utilizzo efficiente della potenza in trasmissione a causa della


richiesta di amplificatori lineari (necessari per l’elevato Peak-To-Average-Ratio,
PAPR, di potenza).

Data la sua grande rivelanza pratica si sono sviluppate nel corso del tempo nu-
merose soluzioni per limitare l’effetto degli svantaggi elencati precedentemente, alcune
delle quali (quelle riguardanti gli errori in frequenza) saranno esposte nel capitolo 3.3.

3.2.2 Principi del sistema OFDM


Per comprendere il sistema OFDM si consideri anzitutto l’equivalente in banda base
di un segnale MCM (Multicarrier Modulation). Il segnale multiportante è descrit-
to in linea di massima dallo schema della figura 3.2, in cui i simboli d’ingresso {an }
appartengono tipicamente all’alfabeto di una modulazione lineare M-PSK e sono ca-
ratterizzati da una velocità di segnalazione Rs = 1/Ts (con Ts che indica il tempo di
simbolo).
Tale schema mostra che il flusso dei simboli in ingresso è suddiviso in N sottocanali
paralleli, ciascuno dei quali è caratterizzato da un intervallo di simbolo T = N Ts .
Inoltre il convertitore serie-parallelo partiziona i simboli d’ingresso in blocchi di durata
pari a N simboli di sorgente. L’equivalente in banda base di un segnale OFDM rispetto
a f0 è perciò
∞ N−1
 
S(t) = a(l)
n p(t − lN Ts )e
j2πnfsc t
0tT (3.1)
l=−∞ n=0

dove p(t) è la risposta impulsiva del modulatore, fsc indica momentaneamente la


(l)
spaziatura delle sottoportanti e dove i simboli di sorgente {an } sono normalizzati
(l)
a potenza unitaria (E{|an |2 } = 1).
Lo schema del demodulatore ottimo del generico sottoflusso K −esimo, in presenza
di rumore AWGN ed in assenza degli effetti di interferenza dovuti agli altri sottocanali
è mostrato nella figura 3.3.
3. Implementazione con processori DSP 19

×
Rate = 1 / NT
(m)
c0

exp{ j 2π 0 f sc t }

cn = cmN + k
× x( t )
S/P exp{ j 2π 1 f sc t }

Rate= 1 / T

c ( m ) N −1
×
exp{ j 2π ( N −1 ) f sct }

Figura 3.2: Schema generale di un sistema MCM.

( m +1 )T
r( t ) cˆ k( m )
×
s

∫ ( • )dt
mT s

exp{ − j 2πkf sc t }

Figura 3.3: Demodulatore ottimo per un generico sottoflusso.


20 3. Implementazione con processori DSP

Tale schema prevede la conversione in banda base del segnale, il passaggio attraver-
so un filtro adattato con campionamento e la decisione a soglia finale. La variabile di
decisione sul simbolo della sottoportante K − esima è data dalla seguente espressione

(0) 1 T
zk = r(t)e−j2πkfsc t dt (3.2)
T 0
dove r(t) è il segnale ricevuto.
La presenza degli altri sottocanali introduce inevitabilmente una interferenza nella
decisione; in particolare, l’effetto della presenza del sottocanale i, con i = k, sulla
variabile di decisione del ricevitore ottimo per il canale k, è dato da
 T
(0) (0)
Ii,k = ai ej2πifsc t e−j2πkfsc t dt
0
j2π(i−k)fsc T
(0) e −1
= ai
j2π(i − k)fsc
dove si è considerato l’intervallo di segnalazione con l = 0 e trascurato l’effetto del
rumore. Questa interferenza si annulla quando

fsc T = q (3.3)

con q intero, cioè quando le sottoportanti sono ortogonali: ovviamente conviene sce-
gliere q il più piccolo possibile per mantenere le sottoportanti vicine e quindi limitare
la banda del segnale modulato.
Visto che il q più piccolo è pari all’unità, risulta che
1 1
fsc = = (3.4)
T N Ts
Con questa scelta ed in queste condizioni la modulazione prende il nome di OFDM
ed ha la minima occupazione spettrale: per ricostruire il flusso dati originario, occor-
rerà riformattare il flusso da parallelo a seriale con un convertitore P/S duale di quello
della figura 3.2.
Occorre ora trovare una struttura efficiente di modulatori e demodulatori OFDM
che implementino le operazioni appena descritte.

3.2.3 Analisi strutturale di un sistema OFDM


La struttura del trasmettitore OFDM è illustrata nella figura 3.4. Si suppone di tra-
smettere uno stream seriale con rate 1/Ts di simboli M-PSK appartenenti all’alfabeto
 k

ej2π M , k = 0, 1, ..., M − 1 (3.5)

che viene suddiviso in blocchi di lunghezza N − NSC . Come vedremo ciascun simbolo
viene affidato ad una diversa sottoportante. Il blocco l-esimo è composto da N − NSC
simboli di informazione e da NSC simboli nulli ed é rappresentato dal vettore
 
(l) (l) (l) (l)
aN  a0 , a1 , . . . , aN−1 (3.6)
3. Implementazione con processori DSP 21

Data
In Signal bk ck s (t )
Add p(t )
IDFT Add
S/P Virtual P/S

...

...

...
Mapper Pre/Postfix
Carriers
N − N SC N N

Figura 3.4: Diagramma a blocchi del trasmettitore OFDM.

detto F requency Domain Symbol. Un simbolo OFDM è quindi composto da N


simboli dati, trasmessi in un intervallo temporale pari a T = N TS . Le sottoportanti
su cui sono trasmessi i simboli di sorgente hanno frequenza
n
fn = f0 + (3.7)
N Ts
dove f0 è la frequenza di riferimento ed n é un numero intero.
(l)
La sequenza an va poi all’ingresso di un sottosistema per il calcolo della IDFT;
tale sottosistema produce il blocco N -dimensionale di simboli di linea caratterizzato
dal vettore  
(l) (l) (l) (l)
bN  b0 , b1 , . . . , bN −1 (3.8)

detto T ime Domain Symbol. Esiste allora una corrispondenza biunivoca tra simboli
nel dominio del tempo e nel dominio della frequenza, corrispondenza riassunta dalla
relazione
(l)
bk ⇐⇒ a(l)n (3.9)
   
(l) (l)
Pertanto in ricezione una volta noti i dati bk si possono ricavare i simboli an
effettuando una semplice operazione di DFT. Se si effettua una modulazione numerica
(l)
dei bk si consegue una drastica semplificazione del trasmettitore e ricevitore. Solita-
mente si sceglie un valore di N che sia pari a una potenza di 2 in modo da poter usare
algoritmi veloci di FFT e IFFT. Si ha allora che

   N−1
(l) (l) 1  (l) j2π nk
bk = IF F T aN √ an e N k ∈ {0, 1, . . . , N − 1} (3.10)
k N n=0

ove il termine 1/ N è un fattore di normalizzazione che serve per ottenere la trasmis-
sione di simboli a potenza unitaria. Tale fattore può essere facilmente ricavato come
segue


N−1  N−1  

(l)
2 (l)∗ (n−i)k
1 = E
bk
= E a(l) a
n i ej2π N = N C2 (3.11)
n=0 i=0

Poichè i simboli sono incorrelati e con valor medio nullo si ha


 


(l) (l)∗

2
E an ai = C2 δ(i − n) e C2 = E
a(l)n
(3.12)


da cui segue che il termine di normalizzazione è 1/ N .
22 3. Implementazione con processori DSP

Consideriamo adesso la trasmissione di un solo blocco OFDM (vedi la figura 3.4).


Il segnale in banda base é espresso dalla relazione
N−1

s(t) = bn p(t − nTs ) (3.13)
n=0

ove p(t) é l’antitrasformata di Fourier di un segnale di Nyquist a radice di coseno


rialzato con energia unitaria e roll-off α; in pratica p(t) ha una durata pari a Lp ≪ N
intervalli di simbolo.
Definiamo inoltre
gN (t) = p(t) ⊗ p(−t) (3.14)
ed indichiamo con w(t) il rumore AWGN dopo il filtro adattato. Il segnale a monte
del campionatore è
N−1

r(t) = bk gN (t − kTs ) ⊗ h(t) + w(t) (3.15)
k=0

Dopo il campionatore, supponendo che gli istanti di campionamento siano ti = iTs con
i ∈ {0, 1, . . . , N − 1} e trascurando l’errore di sincronizzazione di clock, si ha
N
 −1
r(iTs ) = bk gN ((i − k)Ts ) ⊗ h(iTs ) + w(iTs ) (3.16)
k=0

da cui, semplificando la scrittura,


N−1

ri = bk qi−k + wi (3.17)
k=0

dove qi−k = gN ((i − k)Ts ) ⊗ h(iTs ).


Dopo il campionatore, in ricezione, si incontra il dispositivo che svolge la FFT, la
cui uscita vale

N−1 N −1
N−1
 
1   1  j2π nk il
ul = √ √ an e N qi−k + wi e−j2π N
N i=0 k=0 N n=0
N−1 N −1 N−1 N −1 N−1
1  (nk−il) 1  il
= an qi−k ej2π N + √ wi e−j2π N (3.18)
N N i=0 k=0
i=0 k=0 n=0

Per mettere in evidenza il contributo dell’ISI in ul riscriviamo la (3.18) come


N−1 N−1 N −1 N−1 N −1
1  (k−i)l 1   (nk−il)
ul = al qi−k ej2π N + an qi−k ej2π N + zl (3.19)
N N n=0
i=0 k=0 i=0,i=l k=0

ove zi é una variabile aleatoria (v.a.) a media nulla e varianza 2N0 . Se definiamo
N −1 N−1
1  pk−il
Ql (p) = qi−k ej2π N (3.20)
N
i=0 k=0
3. Implementazione con processori DSP 23

− N1 0 N −1 ( N − 1) + N 2

prefix simbolo ' time domain' postfix

Figura 3.5: Blocco esteso ciclicamente.

si ha 
ul = al Ql (l) + an Ql (n) + zl (3.21)
n=l
Da qui si può osservare che se il canale è piatto i termini qi−n ≡ 1 solo per n = i e
zero altrove cioè
1 se k = l
Ql (k) = (3.22)
0 ∀k = l
Con canale selettivo le relazioni appena scritte non sono in genere verificate: ci sono
quindi vari k per cui Ql (k) = 0 e questi sono all’origine dell’effetto di ISI. Mediante la
periodicizzazione del segnale il sistema OFDM può eliminare questo fenomeno.

3.2.4 Periodicizzazione del segnale


In trasmissione dopo aver calcolato la IFFT, un cyclic prefix e un cyclic postfix di
(l)
lunghezza N1 e N2 , rispettivamente, sono aggiunti al vettore bN per formare nel
complesso un blocco esteso ciclicamente
 
(l) (l) (l) (l) (l) (l)
cNT  c−N1 , . . . , c−1 , c0 , . . . , cN , . . . , cN +N2 −1 (3.23)

di lunghezza complessiva pari a NT  N1 + N + N2 simboli.


(l)
Il prefisso ciclico è una replica degli ultimi N1 simboli di bN , e il suffisso ciclico è
una replica dei suoi primi N2 simboli, come mostrato nella figura 3.5: cosı̀ il generico
(l)
elemento di cNT può essere scritto come
(l) (l)
ck = b|k| k = −N1 , . . . , N + N2 − 1 (3.24)
N

dove |k|N identifica il resto della divisione fra interi di k per N.


Quindi ragionando come sopra, l’equivalente in banda base all’uscita del modula-
tore è espresso dalla relazione
+∞
 N+N
2 −1 (l)
s(t) = ck p (t − kTs − lNT Ts ) (3.25)
l=−∞ k=−N1

che rappresenta la forma d’onda che è trasmessa sul canale multipath.


Nel seguito faremo le seguenti ipotesi semplificative:
24 3. Implementazione con processori DSP

• Le variazioni del canale sono irrilevanti all’interno di ogni blocco di dati tra-
smesso (canale quasi-stazionario). Chiameremo hl (t) la risposta impulsiva del
canale durante la trasmissione dell’l-esimo blocco (hl (t) = h(t) per un canale
stazionario);

• La funzione hl (t) (e la corrispondente risposta in frequenza Hl (f )) è determini-


stica oppure è un processo stocastico gaussiano;

• Recupero ideale della frequenza della portante conseguito fuori dallo schema a
blocchi del ricevitore della figura 3.4.

La prima ipotesi è realistica per sistemi OFDM standard con elevata bit rate, come
quelle previsto per il servizio DVB-Terrestrial, nel quale la selettività nel tempo del ca-
nale può essere trascurata per parecchi blocchi consecutivi. In generale, comunque, la
validità di tale approssimazione dipende dalla larghezza di banda Doppler BD del ca-
nale multipath, normalizzata con la block rate dell’OFDM 1/NT Ts ; il canale multipath
può essere considerato stazionario all’interno di un blocco se BD NT Ts  0.01
Possiamo ora scrivere il segnale ricevuto nella forma
+∞
 N+N
2 −1 (l)
r(t) = ck ql (t − kTs − lNT Ts ) + n(t) (3.26)
l=−∞ k=−N1

dove ql  p(t) ⊗ hl (t) e rappresenta l’impulso p(t) trasmesso sul canale h(t). In
particolare si nota che ql (t) è proprio l’impulso elementare della trasmissione del flusso
di dati a tempo di simbolo OFDM T, cosı̀ come viene ricevuto dal demodulatore.
Questo impulso ha, in generale, una durata maggiore di TLp = Lp Ts per effetto della
distorsione di canale: se la risposta impulsiva del canale ha durata finita pari a Th ,
la durata di ql (t) è pari a TLp + Th ed è allora possibile evitare l’ISI causata dal
canale, spaziando i simboli OFDM di un intervallo maggiore di T , e precisamente
aumentando di una quantità Tg chiamata intervallo di guardia. Tale stratagemma,
però, peggiora l’efficienza spettrale del sistema, in quanto, dovendo mantenere una
velocità d’informazione costante, introdurre un intervallo di guardia diverso da zero
significa ridurre il tempo di simbolo OFDM T e quindi aumentare la banda utilizzata
sul canale (grosso modo pari a N/T ). Comunque, visto che i ritardi massimi che
si incontrano nelle bande di interesse, quando la propagazione avviene per cammini
multipli, sono dell’ordine di qualche decina di µ sec e che l’intervallo di simbolo è pari
a qualche centinaio di µ sec, la perdita di efficienza è modesta.

Questa caratteristica di poter trattare facilmente canali con echi aventi ritardi
notevoli permette di risolvere anche una questione importante in una rete di radio-
diffusione: infatti, il meccanismo di protezione dal multipath funziona sia nel caso in
cui l’eco si produca naturalmente come discusso finora, ma anche nel caso in cui l’eco
provenga da un diverso ripetitore della stessa rete operante sulla stessa frequenza (eco
artificale). Questo semplifica notevolmente il progetto e l’esercizio delle cosiddette
reti a singola frequenza (SFN ) per la diffusione di un canale televisivo su di un unica
frequenza a diffusione regionale o nazionale. Si può osservare che i ritardi di canale
3. Implementazione con processori DSP 25

N − N SC Data
r (t ) x (t ) xk Remove Equalizer
Matched Remove Out
S/P DFT Virtual P/S

...

...

...

...
Filter Pre/Postfi x Detector
tk Carriers
N N
Ts
− j 2π∆fˆk
M
e
Offset

...
Estimator

Figura 3.6: Schema a blocchi del ricevitore OFDM.

“artificiali ” di una SFN sono in generale assai maggiori di quelli “naturali ” intro-
dotti dal canale multipath e quindi i requisiti dell’intervallo di guardia devono essere
adattati al caso in esame.
Lo schema a blocchi del ricevitore è illustrato nella figura 3.6. Si assuma che l’m-
esimo blocco sia quello elaborato dal ricevitore; il segnale attraversa dapprima il filtro
adattato p(−t), poi è campionato alla frequenza della symbol rate all’istante

tn,m = (mNT + n) Ts + τ̂ m n = −N1 , . . . , N + N2 − 1 (3.27)

dove τ̂ m è l’m-esima stima locale del ritardo totale di propagazione nel canale τ .
L’n-esimo campione dell’m-esimo blocco all’uscita del filtro adattato è
+∞
 N+N
2 −1 (l)
xm [n] = ci fl (tn−i,m−l + εm Ts ) + wm [n] n = −N1 , . . . , N + N2 − 1
l=−∞ i=−N1
(3.28)
dove  
p(−t) τ̂ m − τ
fl (t)  ql (t) ⊗ εm  (3.29)
Ts Ts
Si può dimostrare che la lunghezza di fl (t) misurata in intervalli di simbolo, è minore di
2Lp + Lds , dove Lds indica il massimo delay spread del canale (solitamente Lds ≪ N ).

La presenza di un canale multipath genera, nel dominio del tempo, ISI (Inter-
Symbol Interference), dovuta sia all’interferenza tra simboli OFDM consecutivi (IBI,
InterBlock Interference), che all’interferenza tra simboli all’interno dello stesso blocco
(IntraBlock Interference). L’interferenza interblocco è rappresentata dai termini della
(3.28) con l = m, mentre quella di intrablocco è data dai termini con l = m, i = n. In
particolare l’interferenza intrablocco può determinare ICI (InterCarrier Interference)
nel dominio della frequenza. Gli effetti ora citati sono facilmente eliminabili o comun-
que minimizzabili attraverso l’aggiunta del prefisso e del suffisso purchè la somma delle
loro lunghezze sia
N1 + N2  2Lp + Lds (3.30)
É per tale ragione che a volte la somma N1 + N2 definisce il cosiddetto guard time. Se
è vera quest’ultima disuguaglianza, l’IBI può essere rimossa eliminando i primi N1 e
gli ultimi N2 campioni dalla sequenza {xm [n]}. L’approccio dell’intervallo di guardia
ha uno svantaggio che deve essere preso in seria considerazione, e cioè che per poter
26 3. Implementazione con processori DSP

effettuare corrrettamente la demodulazione, in particolare per poter correttamente


calcolare la F F T , il ricevitore deve esattamente allinearsi alla parte utile del simbolo
OFDM ignorando l’intervallo di guardia.
Questa esigenza pone vincoli molto stretti nei confronti della “sincronizzazione di
simbolo” nel ricevitore. Modificando leggermente il formato del segnale modulato, è
possibile ottenere un buon funzionamento del ricevitore anche con errori di sincroniz-
zazione di timing non trascurabili, purchè naturalmente di entità limitata. La modifica
consiste proprio nel riempire l’intervallo di guardia con una estensione ciclica del sim-
bolo OFDM in modo tale da emulare una condizione in cui il segnale all’ingresso del
canale sia periodico di periodo T (cioè S(t) = S(t + T ) ). Naturalmente, affinchè la
condizione di pseudo periodicità si verifichi, l’intervallo di guardia deve essere allunga-
to di un fattore pari proprio al massimo errore di sincronismo di clock che si desidera
tollerare.
L’osservazione appena fatta porta tuttavia ad un risultato tanto più corretto se
l’errore di sincronizzazione del blocco εm è inferiore a

|εm |  N1 + N2 − (2Lp + Lds ) (3.31)

Quando tale condizione è verificata, grazie all’estensione ciclica del blocco, l’errore di
timing si traduce solo in una rotazione di fase lineare all’uscita della FFT.
Dopo la rimozione del prefix e del postfix, i campioni all’ingresso della FFT per
l’m-esimo blocco sono
N+N
2 −1 (m)
xm [n] = ci fm ((n − i) Ts + εm Ts ) + wm [n] n = 0, . . . , N − 1 (3.32)
i=−N1

Per semplificare la notazione sarà tralasciato nel seguito l’identificatore di blocco m.


La componente del segnale x [n] può essere vista come l’uscita di un filtro FIR con
risposta impulsiva
fε [n]  f ((n + ε) Ts ) (3.33)
Questo filtro è alimentato dalla sequenza cNT che è l’estensione ciclica di bN : quindi
l’uscita del filtro osservato nell’intervallo n = 0, . . . , N − 1 è esattamente la stessa che
si avrebbe qualora in ingresso ci fosse la vera sequenza periodica . . . bN bN bN . . .
All’uscita della FFT si ha
N−1
1 
x [n] e−j2π N =0
nk
X [k] = (F F T (xN ))k = √
N n=0
= (F F T (bN ))k · (F F T (fε,N ))k + (F F T (wN ))k
= ak F̃ε [k] + W [k] k = 0, 1, . . . , N − 1 (3.34)

dove si è indicato
 con
 (F F T (v))k il k-esimo elemento nella F F T del vettore v; i termi-
k
ni F̃ε [k]  F̃ε NT s
sono campioni della trasformata di Fourier F̃ε (f ) della sequenza
aperiodica fε [n] e, grazie alle proprietà di ortogonalità e conservazione dell’energia
della FFT, {W [k]} è una sequenza gaussiana statisticamente equivalente a {w [n]}.
0 N−1 N−1 √
ak = √1 bn exp(−j2π nk ) =⇒ bn exp(−j2π nk ) = ak N
N n=0 N n=0 N
3. Implementazione con processori DSP 27

2.5

i
Fε f ( Ts
)
1.5

i=−1 i=0 i=1

1
Ts
.

0.5

1
NTs
0
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
fTs

Figura 3.7: Ripetizioni periodiche della trasformata di Fourier della risposta del canale.

Come noto, la trasformata di Fourier di una sequenza può essere scritta come
+∞
1  i
F̃ε (f )  Fε (f − ) (3.35)
Ts Ts
i=−∞

dove Fε (f )  F (f ) exp(j2πf εTs ) e F (f ) é la trasformata continua di Fourier della


risposta impulsiva totale del canale. Se ricordiamo che p(t) è un impulso di Nyquist
con spettro avente un coseno rialzato con roll-off α possiamo raffigurare la relazione
precedente su di un intervallo di frequenze attorno all’origine (figura 3.7). Dalla figura
3.7 si può facilmente osservare che l’unico termine che ci interessa è i = 1. Se si
k
campiona l’espressione di F̃ε (f ) alla frequenza NT s
si ha che
       
1 k j2πk Nε k 1 j2π NkT − T1 εTs
F̃ε [k] = F e +F − e s s (3.36)
Ts N Ts N Ts Ts
Poiché, per la forma di un impulso di Nyquist, la serie (3.35) si trasforma in una
somma di due addendi soltanto.  
Se definiamo1 Nα  int N 1−α 2 si ha che
   ε
1


 Ts
F NkTs ej2πk N , 0  k  Nα
   ε
  (k−N)ε
1 k j2πk N
F̃ε [k] = Ts F  N Ts e + T1s F k−N
N Ts e
j2π N
, Nα < k < N − Nα


 1
 k−N (k−N)ε
j2π N
Ts F N Ts e , N − Nα  k  N − 1
(3.37)
1
Il simbolo int [x] denota la parte intera del numero x
28 3. Implementazione con processori DSP

Figura 3.8: Andamento a coseno rialzato.

Come si può notare i simboli con 0  k  Nα e N −Nα  k  N −1 subiscono, a causa


dell’errore di sincronizzazione ε, solo una variazione di fase, mentre per Nα  k  N −
Nα viene introdotto un errore di fase e ampiezza: per questa ragione e per problemi di
semplicità realizzativa del ricevitore si preferisce non associare informazione ai simboli
relativi a questa zona centrale. Le portanti corrispondenti sono dette portanti soppresse
poiché ad esse viene associato un simbolo nullo, cioé
ak = 0 k = Nα + 1, . . . , N − Nα − 1 (3.38)
Si hanno quindi NSC  N − 1 − 2Nα portanti soppresse. Questa scelta implica ne-
cessariamente una qualche perdita di efficienza poichè NSC sottoportanti non sono
utilizzate per la trasmissione dei dati utili. In tal modo, tuttavia, il segnale ricevuto
non é sensibile all’errore di temporizzazione. Se si osserva che
Nα 1−α
 (3.39)
NSC 2α
con qualche semplice passaggio algebrico2 si ottiene :
NSC
α (3.40)
N
É importante osservare che l’eccessiva riduzione di α, per minimizzare la perdita di
efficienza dovuta alla presenza delle portanti soppresse, non è conveniente. Infatti ciò
comporta un aumento di lobi secondari rilevanti nell’impulso di Nyquist e conseguen-
temente un aumento della lunghezza del preambolo e postambolo (prefix e postfix ) per
conservare la periodicizzazione.
2 N−NSC
Si osserva che 2Nα è il numero di portanti utili, e che N
 1−α
3. Implementazione con processori DSP 29

Figura 3.9: Regione di soppressione delle portanti.

3.2.5 Rappresentazione di un segnale OFDM


Considerando la trasmissione di un singolo blocco, il segnale OFDM trasmesso in
banda base é espresso da

N2
+N −1
s(t) = ck g(t − kTs ) (3.41)
k=−N1

ove
N−1
1  nk
ck  √ an ej2π N , − N1  k  N2 + N − 1 (3.42)
N n=0

Sostituendo la (3.42) nella (3.41) si trova

N2
+N−1 N
 −1
1 nk
s(t) = √ an ej2π N g(t − kTs )
N k=−N1 n=0
N−1
1 
= √ an fn (t) (3.43)
N n=0

dove si è indicato
N2
+N−1
nk
fn (t)  ej2π N g(t − kTs ) (3.44)
k=−N1
30 3. Implementazione con processori DSP

Verrà ora studiata la funzione fn (t) limitatamente all’intervallo di osservazione 0 


t  N Ts . Se il prefisso ed il suffisso hanno lunghezze N1 e N2 tali che

k < −N1
g(t − kTs ) = 0 per (3.45)
k > N2 + N − 1

che equivale a g(t) = 0 per t ∈


/ [−N2 Ts , N1 Ts ], allora la (3.44) può essere riscritta
come
+∞
 nk
fn (t) = ej2π N g(t − kTs ) , 0  t  N Ts (3.46)
k=−∞

La (3.46) è periodica in t di periodo T = N Ts e può essere posta nella forma (con la


posizione k = N l + i)
+∞ N−1
  ni
fn (t) = ej2π N g(t − iTs − lT ) (3.47)
l=−∞ i=0

Sviluppando la funzione fn (t) in serie di Fourier si ha


+∞
 mt
fn (t) = Fn (m)ej2π T (3.48)
m=−∞

ove  T
1 mt
Fn (m)  fn (t)e−j2π T dt (3.49)
T 0
Inserendo la (3.47) nella (3.49) si ottiene
N−1 
1  j2π ni +∞ mt
Fn (m) = e N g(t − iTs )e−j2π T dt = (3.50)
T
i=0  −∞  

−j2πf iTs

G(f )e
m
f= T
N−1
1  m   j2π n−m
= G e N (3.51)
T T
i=0

Effettuando la somma in (3.51) si ricava


N
 −1
j2π n−m N se m = n + N k
e N = (3.52)
0 altrimenti
i=0

Sostituendo la (3.51) nella (3.48) e tenendo conto della (3.52) si ottiene:


+∞ m
1  mt
fn (t) = G ej2π T δ(m − n − N k)
Ts m=−∞ T
+∞    
1  k n j2π Tk + T
n
t
= G + e s , 0  t  N Ts (3.53)
Ts m=−∞ Ts T
3. Implementazione con processori DSP 31

Figura 3.10: Spettro dell’impulso di Nyquist.

dove si è sostituito m = n + N k. Quindi fn (t) è in genere composta da un numero


infinito di oscillazioni, ciascuna separata in frequenza di T1s . Se G(f ) è un impulso a
coseno rialzato di roll-off α, esso ha l’andamento illustrato nella figura 3.10.
In tal caso si ha

j2π nt

 e   
 T
  , 0  n  Nα
1 n −j2π Tt n 1 j2π nt
fn (t) = Ts G T + e sG
T − Ts e T , Nα < n < N − Nα


 ej2π (n−N)t
T , N − Nα  n  N − 1
(3.54)
(1−α)
dove si è indicato Nα  N 2 . Se le portanti nella zona di roll-off vengono soppresse
la (3.43) diventa:



1 nt
s(t) = √ a|n|N ej2π T , 0  t  N Ts (3.55)
N n=−Nα

Se il segnale s(t) è trasmesso su un canale con risposta in frequenza C(f ), allora


quanto detto vale ancora pur di sostituire G(f ) con H(f )  G(f ) · C(f ). Il segnale al
ricevitore dopo il filtro adattato è


 n
1 nt
x(t) = √ a|n|N C ej2π T + w(t) , 0  t  N Ts (3.56)
N T
n=−Nα
32 3. Implementazione con processori DSP

3.3 Sincronizzazione nei sistemi OFDM


I sistemi OFDM hanno numerosi e importanti vantaggi; come già accennato però il
rovescio della medaglia è l’elevata sensibilità di tali sistemi nei confronti degli errori
di temporizzazione. In un ricevitore infatti tutti i parametri temporali e frequenziali
(istante di inizio trasmissione, esatta frequenza di campionamento e di portante, etc
etc) utilizzati a lato trasmettitore nonchè il ritardo di fase e la distorsione introdotta dal
canale sono incogniti; questo comporta che mediante opportuni algoritmi si debbano
stimare tutte quelle quantità.
L’insieme delle tecniche che il ricevitore usa per riuscire a demodulare correttamen-
te il segnale ricevuto sono genericamente chiamate tecniche di sincronizzazione;
senza di esse il ricevitore non sarebbe assolutamente in grado di funzionare.
In questo capitolo dapprima si analizzeranno in dettaglio le cause e gli effetti dei
vari problemi causati dai parametri incogniti; verranno poi prese in considerazioni
le tecniche documentate in letteratura per eliminarli (ovvero le suddette tecniche di
sincronizzazione).

3.3.1 Effetto di un offset in frequenza della portante


Il primo compito che deve eseguire un ricevitore è la conversione del segnale a radio fre-
quenza ricevuto nel corrispondente segnale in banda base. Qualora la frequenza utiliz-
zata per eseguire la conversione in basso non corrisponda a quella utilizzata per eseguire
la conversione in alto, si introduce una non idealità nota come Carrier-Frequency-Offset
(CFO).
L’offset di frequenza di portante (Carrier Frequency Offset - CFO) ha due cause
principali:

1. mismatch intrinseco degli oscillatori locali al quarzo del trasmettitore e del rice-
vitore. Tutti i moderni sistemi elettronici utilizzano infatti un anello ad aggancio
di fase (Phase Locked Loop - PLL) per generare un segnale preciso ad una cer-
ta frequenza f0 ; tale dispositivo permette di realizzare una moltiplicazione di
frequenza: avendo a disposizione un riferimento frequenziale frif preciso, tipica-
mente un oscillatore al quarzo, con un PLL si può moltiplicare tale riferimento
fino al valore desiderato f0 = N frif .
L’uso del PLL è necessario perchè gli oscillatori al quarzo possono generare se-
gnali precisi solo a frequenze relativamente basse (attorno ai 200M Hz) e anche
per tali valori il segnale generato è afflitto da una incertezza; è proprio questa
incertezza (che ammonta tipicamente a qualche centinaio di kHz) a generare un
contributo fisso al CFO nel trasmettitore OFDM;

2. effetto Doppler dovuto allo spostamento relativo fra trasmettitore e ricevitore;


difatti la frequenza osservata in caso di una velocità relativa non nulla fra i due
non è quella che si osserverebbe in condizioni stazionarie e dipende dal modulo
di tale velocità e dal suo segno.
Tipicamente questo contributo ammonta a pochi Hz per scenari indoor ma può
diventare rilevante per scenari outdoor.
3. Implementazione con processori DSP 33

Nella sezione seguente si vedrà l’effetto di tali contributi combinati sul segnale
OFDM.
L’effetto di un CFO è costituito da un semplice shift in frequenza del segnale rice-
vuto rispetto al segnale trasmesso che può ledere la mutua ortogonalità delle portanti,
determinando la comparsa di Inter-Carrier-Interference. Per chiarire meglio quanto ap-
pena esposto, supponiamo di essere giunti ad una perfetta sincronizzazione temporale
e di calcolare l’uscita della DFT in presenza di un errore di frequenza fe . E’ possibile
dimostrare (vedi [10, eq. 14]) che l’uscita n-esima della DFT, in corrispondenza del
blocco OFDM i-esimo è data da:
N
 −1
jϕi
Ri (n) = e H(p)di (p)fN (ε + p − n) + Wi (n) (3.57)
p=0
fe
dove ϕi = 2πiε NNT , ε = NTs e fN (x) è definita come:

sin(πx) jπx N−1


fN (x) = e N (3.58)
N sin( πx
N)
A questo punto possiamo distinguere tra due tipologie di errore. Nel caso in cui l’errore
1
di frequenza fe , sia un multiplo dello spazio intercarrier NT s
, ε sarà una quantità intera,
e la (3.57) si ridurrà a:

Ri (n) = ejϕi H(|n − ε|N )di (|n − ε|N ) + Wi (n) (3.59)


dove |n − ε|N è il valore n − ε, ridotto in modulo all’intervallo [0; N − 1]. La (3.59)
indica che l’ortogonalità tra le portanti è ancora rispettata e che l’unico effetto è dato
da una rotazione ciclica di ε posizioni dell’uscita della FFT. In questa rotazione, i
simboli che finiscono nella zona delle portanti soppresse vengono irrimediabilmente
perduti: per una migliore comprensione si faccia riferimento alla figura 3.11 con ε = 1.
La situazione cambia drasticamente qualora l’errore non sia un multiplo intero della
distanza interportante, in quanto viene lesa l’ortognalità e compare la componente di
ICI. In questo caso l’uscita può convenientemente essere espressa come (vedi [10, equ.
17]):

Ri (n) = ejϕi H(n)di (n)fN (ε) + Ii (n, ε) + Wi (n) (3.60)


dove Ii (n) rappresenta il rumore addittivo dovuto all’ICI ed è descrivibile in modo sta-

tistico, come un processo gaussiano a media nulla e varianza σ I (ε)2 = E |Ii (n, ε)|2 .
In conclusione, un errore di frequenza fe genera quindi due distinti effetti:
1. quando fe è un multiplo intero della spaziatura fra le sottoportanti, vi è uno
shift dei simboli associati alle varie sottoportanti; esse sono ancora mutuamente
ortogonali ma i simboli dei dati ricevuti sono nella posizione sbagliata dello
spettro demodulato;
2. quando fe non è un multiplo intero della spaziatura fra le sottoportanti, allora
l’energia di una sottoportante si riversa su quelle vicine, risultando in una perdita
di ortogonalità; c’è quindi interferenza interportante, la quale deteriora la Bit
Error Rate (BER) del sistema.
34 3. Implementazione con processori DSP

ai

a0 a Nα a N −1
1
... ...

0
⋅ ⋅ ⋅ ⋅ ... ⋅
ui
u0 u Nα
1 zona portanti
... soppresse ...

0
⋅ ⋅ ⋅ ⋅ ... ⋅

Figura 3.11: Rotazione dei simboli dovuta all’offset di frequenza

3.3.2 Effetto degli errori di posizionamento della finestra di DFT


In un sistema multiportante, la finestra su cui si calcola la DFT deve comprendere
i campioni di un singolo blocco, in modo da evitare il fenomeno della Inter Block
Interference (IBI). La fig. 3.12, mostra come per effetto della risposta impulsiva del
canale, la coda del blocco (i -1) si allarga fino a coprire i primi (L-1) campioni del
blocco i.
Se il sistema è ben progettato, il prefisso ciclico, introdotto dal trasmettitore, avrà
dimensione maggiore di L e di conseguenza esisterà una regione di tale prefisso, in
cui non si risente dell’effetto del blocco precedente. Eseguendo la DFT a partire
da un punto quanlunque di questa regione, riusciamo ad eliminare completamente il
fenomeno di IBI. Indicando con θ, l’istante esatto a cui applicare la DFT e con θ̂,
l’istante stimato con un algoritmo di sincronizzazione, possiamo dire che la situazione
di assenza di IBI si verifica qualora ∆θ = θ̂ − θ, soddisfi la seguente disequazione
−Ng + L − 1 ≤ ∆θ ≤ 0. In tal caso l’uscita della DFT è data da (vedi [10, eq. 16]):
j2πn∆θ
Ri [n] = e N H[n]di [n] + Wi [n] (3.61)

in cui l’unico effetto dell’errore, è dato da una rotazione dei simboli trasmessi, dipen-
dente in modo lineare dall’indice n della portante. Tale rotazione può essere compen-
sata dall’equalizzazione del canale, che non riesce a distinguere la rotazione introdotta
dal canale da quella introdotta dall’errore ∆θ.
Se l’errore ∆θ non è all’interno dell’intervallo −Ng + L − 1 ≤ ∆θ ≤ 0, allora i
simboli estratti dalla DFT, saranno prodotti dal contributo di due blocchi adiacenti,
determinando la comparsa di IBI. Oltre a questo l’ortogonalità delle portanti non è
più rispettata e nasce quindi il problema della Inter-Carrier-Interference (ICI). E’
3. Implementazione con processori DSP 35

Figura 3.12: Effetto della risposta impulsiva del canale sul prefisso ciclico in una
modulazione OFDM.

possibile dimostrare che in questa situazione, l’output della DFT può essere espresso
come (vedi [10, equ. 17]):
j2πn∆θ
Ri [n] = e N α(∆θ)H[n]di [n] + Ii (n, ∆θ) + Wi [n] (3.62)
dove abbiamo indicato con α(∆θ), un fattore di attenuazione e con Ii (n, ∆θ), l’effetto
di ICI ed IBI, modellizzabile come un processo gaussiano a media nulla e varianza
σ 2I (∆θ).
Dal momento che l’algoritmo di timing deve essere in grado di portare la finestra
di DFT all’interno della regione di assenza di IBI, si evince che minore è la dimensione
di questa regione, maggiore sarà la precisione richiesta all’algoritmo.

3.3.3 Generalità sugli algoritmi di sincronizzazione


I risultati precedenti indicano che l’accuratezza del sistema di sincronizzazione frequen-
ziale e di temporizzazione di un modem influiscono drasticamente sulla BER finale; è
quindi fondamentale implementare una serie di robusti anelli di controllo per stimare
correttamente sia la frequenza di portante che gli istanti di campionamento.
Tali processi di sincronizzazione sono normalmente suddivisi in due fasi: quella
di acquisizione grezza (coarse) e quella di inseguimento fine (tracking). Nella prima
fase si produce una stima di massima dell’errore di timing o dell’errore frequenzia-
le, tipicamente utilizzando algoritmi data-aided (algoritmi cioè che richiedono che il
trasmettitore inserisca simboli noti al ricevitore in un qualche punto del segnale de-
modulato); dal punto di vista implementativo tali algoritmi sono importanti perchè
consentono di ridurre la quantità di dati da processare successivamente.
Nella seconda fase si produce invece una stima accurata delle quantità ricercate,
cercando di “rubare” dal segnale dati il minimo spazio possibile; tale stima fine infatti
36 3. Implementazione con processori DSP

Figura 3.13: Struttura di un possibile ricevitore OFDM con i blocchi per la stima
coarse e fine di temporizzazione e di frequenza [10].

è calcolata a intervalli regolari o anche in modo continuo - a differenza della stima


grezza che è effettuata solo all’inizio della trasmissione e quindi può anche fare uso di
lunghe sequenze di training - e deve quindi avere un impatto il più piccolo possibile
sul throughput del sistema.
Inoltre, soprattutto nel caso delle comunicazioni di tipo burst (in cui il trasmettitore
trasmette solo quando necessario, per brevi periodi di tempo), è importante che gli
algoritmi di stima fine abbiano anche tempi di acquisizione (o convergenza) ridotti,
pena la perdita di parte dei dati del frame trasmesso (che in genere dovrà quindi essere
ritrasmesso in base ad una qualche strategia ARQ - automatic repeat request - a livello
MAC).
Gli algoritmi di stima fine di tipo non-data-aided (detti anche blind ) sono quindi
appetibili per il fatto che non introducono overhead nel segnale trasmesso, ma in
generale hanno tempi di acquisizione più lunghi visto che per convergere ad una stima
corretta fanno affidamento solo a proprietà statistiche generiche del segnale trasmesso.
Un esempio strutturale di ricevitore con i vari stimatori è mostrato nella figura
3.13.
In queste considerazioni non si deve dimenticare anche un’altra figura di merito
importante: la complessità computazionale dell’algoritmo. E’ chiaro che bilanciare
tutti gli aspetti sopra menzionati può essere molto difficile e non sempre possibile (a
tal proposito si vedano i riferimenti [14] e [15]); per questo motivo prima di scegliere si
sono stati testati svariati algoritmi di sincronizzazione, che sono qui di seguito descritti.

3.3.4 Algoritmi per la temporizzazione grezza


In quasi tutti i sistemi OFDM, la temporizzazione grezza di frame rappresenta la prima
operazione eseguita. Essa ha almeno due obiettivi principali: rivelare la presenza
o l’assenza di un frame OFDM sul canale e identificarne (in modo approssimativo;
tipicamente a meno di un tempo di simbolo) la posizione corretta della finestra DFT.
3. Implementazione con processori DSP 37

Siccome in questa fase il CFO non è ancora noto, è bene che l’algoritmo sia, per quanto
possibile, insensibile agli errori nella frequenza della portante.
Uno dei primi algoritmi per il timing coarse venne proposto da Nogami e Naga-
shima [10] ed utilizza un blocco di silenzio, detto null-block, in cui il trasmettitore
spegne l’amplificatore e non invia alcun segnale. L’inizio del frame con tale sistema
può essere identificato analizzando la potenza ricevuta, che subisce un brusco calo in
corrispondenza del null-block.
Questo algoritmo non è particolarmente preciso e, soprattutto, non si adatta gran-
chè ai sistemi di comunicazione a burst, per la totale impossibilità di distinguere il
blocco nullo dai periodi “idle” (periodi di silenzio il cui il trasmettitore non ha dati da
inviare) tra un frame e l’altro. Un approccio molto popolare, utilizzato oggi, prevede
l’utilizzo di blocchi di riferimento speciali, che esibiscono una certa ripetitività nel
dominio del tempo. In questo caso è possibile stimare la posizione di inizio del frame
ricercando un picco nella correlzione tra le parti ripetitive.
L’idea venne per la prima volta proposta da Schmidl e Cox [17], che utilizzarono
due blocchi identici di dimensione N/2 (in cui N rappresenta l’ordine della DFT),
posti all’inizio di ciascun frame. Si noti che la generazione di un simile blocco è molto
semplice e può essere fatta nel dominio della frequenza; basta infatti modulare una
sequenza pseudo casuale sulle portanti pari ed una sequenza di cifre nulle sulle por-
tanti dispari. Non è difficile dimostrare che, fintantochè la durata del prefisso ciclico è
maggiore della durata della risposta impulsiva del canale, le due metà rimangono iden-
tiche, a meno di un phase shift dovuto al CFO. Se i campioni ricevuti, relativamente
alla prima metà, sono espressi da (vedi [10, equ. 22]):
j2πεk N
r(k) = s(R) (k)e N + w(k) θ ≤ k ≤ θ +−1 (3.63)
2
i campioni relativi alla seconda metà, possono essere espressi come:

N j2πεk N N
r(k + ) = s(R) (k)e N ejπε + w(k + ) θ ≤ k ≤ θ + −1 (3.64)
2 2 2
Non è difficile capire che, fornendo i campioni ricevuti ad un correlatore di dimensione
N
2 , questo produrrà un picco nel momento in cui la sua sliding window è sovrapposta
esattamente al reference block trasmesso. In conclusione possiamo affermare che la
stima θ̂ del coarse timing, può essere calcolata ricercando il massimo della seguente
metrica:

max
Γ(θ̃)
(3.65)
θ̃
dove:

θ̃+ N −1
 2
N ∗
r(k + 2 )r (k)
k=θ̃
Γ(θ̃) = (3.66)
θ̃+ N −1



r(k + N
2
2)
k=θ̃
38 3. Implementazione con processori DSP

Figura 3.14: Andamento della metrica ottenuta dall’algoritmo di Schmidl e Cox.



La fig.3.14 mostra l’andamento di


Γ(θ̃)
in funzione della differenza (θ̃ − θ), tra il
timing stimato ed il timing esatto, ottenuta su un canale evanescente con durata della
risposta impulsiva pari ad 8 campioni e con un rapporto segnale rumore di 20 dB.
Come già anticipato, la prima operazione richiesta ad un algoritmo

di timing è

la rilevazione della presenza di un frame. A tale scopo la metrica


Γ(θ̃)
viene conti-
nuamente monitorata e l’inizio del frame viene dichiarato non appena questa supera
una determinata soglia, il valore della quale deve essere scelto in modo da ridurre al
minimo il rischio di falsi positivi ed eviatre la perdita di interi frame. Non appena la
presenza del
frame

è stata identificata, il timing corretto viene ottenuto ricercando il

massimo di
Γ(θ̃)
al variare di θ̃.
Dall’analisi della fig.3.14 notiamo che la metrica di Schmidl e Cox presenta, in
corrispondenza del picco, una regione piatta piuttosto grande. Questo rende imprecisa
l’identificazione del massimo e quindi riduce l’accuratezza con cui si stima l’istante di
campionamento iniziale. Per cercare di risolvere il problema ed ottenere un’accuratezza
maggiore sono stati proposti svariati algoritmi alternativi.

L’algoritmo di Shi e Serpedin [16] utilizza un differente reference block di dimensio-


ne N , composto da quattro parti di dimensione N4 , identiche a meno di un’inversione
di segno sul terzo blocco. La struttura può dunque essere espressa dalla sequenza
[+B; +B; −B; +B], dove abbiamo indicato con B il generico blocco di dimensione N4 .
Per il calcolo della metrica, si utilizza una sliding window
 di dimensione
 N , so-
vrapposta ai campioni ricevuti ricoprendo gli indici k ∈ θ̃; θ̃ + N − 1 . Questa viene
  
suddivisa in 4 sottovettori rj (θ̃) = r(θ̃ + j N4 + l); l ∈ 0; N4 − 1 con j = 0, 1, 2, 3 ed
utilizzata per calcolare la seguente metrica:
3. Implementazione con processori DSP 39

Figura 3.15: Esempio di andamento della metrica di Shi e Serpedin.


Λ1 (θ̃)
+
Λ2 (θ̃)
+
Λ3 (θ̃)

Γ(θ̃) = 3
(3.67)

3
2 rj (θ̃)
j=0

dove

Λ1 (θ̃) = rH H H
0 (θ̃)r1 (θ̃) − r1 (θ̃)r2 (θ̃) − r2 (θ̃)r3 (θ̃)
Λ2 (θ̃) = rH H
1 (θ̃)r3 (θ̃) − r0 (θ̃)r2 (θ̃)
Λ3 (θ̃) = rH
0 (θ̃)r3 (θ̃)

La fig.3.15 mostra l’andamento della metrica di Shi e Serpedin, misurata nelle me-
desime condizioni della fig.3.14. Dal momento che la dimensione della regione piatta in
corrispondenza del picco si è ora notevolmente ridotta è lecito aspettarsi un’accuratez-
za maggiore. E’ inoltre possibile migliorare ulteriormente la precisione dell’algoritmo
costruendo blocchi con un numero di parti ripetitive maggiore di 4.

Un’altro algoritmo di coarse timing proposto recentemente e pensato per diminuire


le probabilità di false detection è quello di Bhargava-Letaief [12].
Come reference block utilizza una sequenza composta da L parti uguali (valori
tipici di L sono 4,8,16) ma concatenate con segni differenti. Ciascuna parte è generata
utilizzando una sequenza di Golay di lunghezza pari a M = N L dove N indica il
numero di sottoportanti della comunicazione OFDM. Il pattern di segno è definito
dalla sequenza p(k) = ±1, con k = 0, 1, ..., L − 1.
40 3. Implementazione con processori DSP

Figura 3.16: Andamenti tipici della metrica di timing di Bhargava-Letaief in condizioni


di assenza di rumore e di assenza di distorsioni di canale; l’indice 0 corrispone al punto
di timing esatto.

Anche in questo caso per il calcolo della metrica si usa una sliding window di
dimensione N in cui r è la generica sequenza complessa di campioni ricevuti campionati
a frequenza di simbolo:
2
L |P (θ̃)|
Γ(θ̃) =
L − 1 E(θ̃)
dove:

L−2
 M−1

P (θ̃) = p(k)p(k + 1) r∗ (θ̃ + kM + m)r(θ̃ + (k + 1)M + m)
k=0 m=0
M−1
 L−1

E(θ̃) = |r(θ̃ + i + kM )|2
i=0 k=0

E’ interessante notare che la metrica di Schmidl e Cox è un caso speciale della me-
trica descritta sopra nel caso in cui L = 2, p = [++], e il termine E(θ̃) è approssimato
M−1
!
con il termine 2 |r(θ̃ + i + M )|2 .
i=0
Nella figura 3.16 è mostrata la metrica di timing tipica che si ottiene con tale
algoritmo, per diversi valori di L, confrontata con quella di Schmidl e Cox (si può
notare come esibisca un picco molto più stretto).
Tale metrica di timing è molto interessante perchè permette, con il medesimo
blocco, di stimare anche la risposta impulsiva del canale e di stimare il CFO [12].
3. Implementazione con processori DSP 41

Figura 3.17: Blocchi di riferimento per l’algoritmo di Schmidl e Cox.

3.3.5 Algoritmi per l’acquisizione di frequenza della portante

In un sistema “convenzionale” (dove l’operazione di up- e down- conversione avviene in


analogico), il ricevitore una volta identificato l’inizio del frame tramite gli algoritmi di
coarse-timing, deve stimare il Carrier Frequency Offset (CFO) per aggiustare l’errore
introdotto dagli oscillatori locali sia del trasmettitore che del ricevitore stesso.
Nel sistema realizzato (vedi la sezione 3.1) però non ci sono i problemi convenzionali
di derive e imprecisioni tipiche di componentistiche analogiche; difatti le oscillazioni
in quadratura usate nelle conversioni di frequenza sono generate digitalmente e quindi
sono sempre alla esatta frequenza prestabilita. Per questo motivo nella pratica la stima
e la correzione del CFO non è stata eseguita (vedi sezione 3.4); tuttavia per completezza
e come riferimento per eventuali applicazioni future di seguito sono comunque riportati
gli algoritmi di stima del CFO che sono parte delle “infrastrutture” di sincronizzazione
accennate nella sezione precedente relativa al coarse timing; un approccio comune
al problema della stima del CFO è infatti quello di utilizzare blocchi composti da
parti ripetitive (proprio come quelli che servono per il timing grezzo) che rimangano
identiche al passaggio attraverso il canale, se non per uno shift di fase, introdotto
dall’errore di frequenza.
Ad esempio, Schmidl e Cox [17] suddividono l’errore di frequenza in due parti:
1 2
una parte frazionaria, sempre inferiore di NT s
ed una parte intera multipla di NT s
.
L’errore di frequenza, normalizzato alla spazio interportante, può complessivamente
essere espresso da:

ε = ν + 2η (3.68)

dove ν ∈ (−1; 1] ed η è un valore intero. Lo stimatore di Schmidl e Cox, si basa


sull’utilizzo di due blocchi di riferimento come mostrato nella fig.3.17.
Il primo blocco è identico a quello proposto dagli stessi autori per la temporizza-
zione grezza e si compone di due blocchi identici di dimensione N2 ; esso si può ottenere
modulando, sulle portanti pari una sequenza pseudo casuale e sulle portanti dispari
un insieme di cifre nulle. Il secondo blocco viene ottenuto invece, modulando una
sequenza di rumore pseudo casuale su tutte le portanti. Sostituendo la (3.68) nelle
equazioni (3.63) e (3.64) otteniamo:
42 3. Implementazione con processori DSP

r(k) = s′ (k) + w(k)


N N
r(k + ) = s′ (k)ejπν + w(k + )
2 2
j2π(ν+2η)k
dove s′ (k) = s(R) (k)e N ed in cui è stata sfruttata l’identità ej2πη = 1. Le
relazioni (3.69) indicano che, trascurando il rumore termico, le due parti sono identiche,
tranne che per una rotazione di fase proporizionale a ν. Una stima di ν può dunque
essere ottenuta come:
 N 
1 θ̃+
2
−1
N 
ν= arg r(k + )r∗ (k) (3.70)
π  2 
k=θ̃

in cui il valore di θ̃ deve essere quello ottenuto dalla timing acquisition.


Una volta stimato l’errore frazionario ν occorre eseguire la stima dell’errore intero η.
A tale scopo i campioni provenienti dai due blocchi, vengono dapprima controruotati,
ad una velocità angolare di 2πν/N , per compensare l’errore frazionario e poi forniti
in ingresso al modulo che calcola la DFT, il quale produrà i due vettori R1 (n) ed
R2 (n). Come illustrato in precedenza, in presenza di un errore multiplo dello spazio
interportante, le uscite della DFT non saranno soggette ad ICI, ma verranno solamente
spostate dalla loro posizione originale, di una quantità pari a 2η. Questo significa che
le uscite della DFT saranno date da:

R1 (n) = ejϕ1 H(|n − 2η|N )d1 (|n − 2η|N ) + W1 (n)


R2(n) = ejϕ2 H(|n − 2η|N )d2 (|n − 2η|N ) + W2 (n)

dove |n − 2η|N è il valore n − 2η, riportato in modulo all’intervallo [0; N − 1]. Trascu-
rando l’effetto del rumore termico e definendo p(n) = dd21 (n)
(n) , possiamo scrivere, per le
sole portanti pari che:

R1 (n)ejϕ2 −ϕ1 p(|n − 2η|N ) =


d2 (|n − 2η|N )
ejϕ1 ejϕ2 −ϕ1 H(|n − 2η|N )d1 (|n − 2η|N ) =
d1 (|n − 2η|N )
ejϕ2 H(|n − 2η|N )d2 (|n − 2η|N ) = R2 (n)

Questo significa che:

R1 (n)ejϕ2 −ϕ1 p(|n − 2η|N ) = R2 (n) (3.71)

La (3.71) suggerisce che una stima dell’errore intero può essere ottenuta andando a
cercare il valore di η che massimizza la seguente metrica:
3. Implementazione con processori DSP 43


∗ ∗


R2 (n)R1 (n)p (|n − 2η̃|N )


n pari

B(η̃) =  (3.72)
|R2 (n)|2
n pari

con η̃ che varia su tutto il range di errori di frequenza, che siamo interessati a cor-
reggere. Si verifica facilmente che la metrica restituisce 1 non appena viene trovato il
R2 (n)
valore corretto di η̃. Infatti non appena η̃ = η, p∗ (|n − 2η|N ) = R (n)ejϕ2 −ϕ1 e quindi:
1




R2 (n)


R2 (n)R (n)


1 R1 (n)e 2 1

∗ j(ϕ −ϕ )

n pari

B(η̃) =  =
|R2 (n)|2
n pari









R2∗ (n)

2 −j(ϕ2 −ϕ1 )


R2 (n) ej(ϕ2 −ϕ1 )

|R2 (n)| e



n pari

n pari

 =  =
|R2 (n)|2 |R2 (n)|2
n pari n pari

 

 







2 −j(ϕ −ϕ )


2




|R2 (n)|  e 2 1




|R2 (n)| 


e−j(ϕ2 −ϕ1 )


n pari

n pari

 =  =
|R2 (n)|2 |R2 (n)|2
n pari n pari

 

2 


 |R 2 (n)|


n pari

 =1
|R2 (n)|2
n pari

Il grande vantaggio di questa tecnica di sincronizzazione rispetto ad altre risiede


nell’allargamento del range di acquisizione, che può essere configurato a piacere.
Esiste anche un’altra soluzione, che permette di ridurre l’overhead, rispetto al
metodo di Schmidl e Cox, richiedendo l’introduzione di un solo reference block. Il
metodo è stato proposto da Morelli e Mengali [11] e richiede l’inserimento di un blocco,
composto da Q > 2 parti identiche, composte da N/Q campioni. Il CFO si può ricavare
come:

Q/2
1 
ε= κ(q) arg {Ψ(q)Ψ∗ (q − 1)}
2π/Q q=1

dove:
44 3. Implementazione con processori DSP

12(Q − q)(Q − q + 1) − Q2
κ(q) =
2Q(Q2 − 1)
e
ˆ
θ+N−1−q N
Q
 N ∗
ψ(q) = r(k + q )r (k)
ˆ
Q
k=θ
con

Q
q = 1, 2, ....,
2

3.3.6 Algoritmi per la temporizzazione fine


Per quanto corretta possa essere la decisione presa dagli algoritmi di timing coarse, in
generale rimane comunque un offset nella posizione di inizio campionamento (tipica-
mente minore di uno o due tempi di simbolo), che deve essere individuato ed eliminato
e che richiede algoritmi più precisi, che eseguano il tracking e la correzione per ogni
blocco ricevuto.
Più nel dettaglio, gli errori residui di sincronizzazione temporale possono essere
divisi in due categorie: symbol timing offset e sampling timing offset (SFO).

Symbol timing offset


Il symbol timing offset rappresenta un errore di sincronizzazione multiplo dell’intervallo
di segnalazione Ts . Come già detto, qualora la finestra della DFT, rimanga in una
regione priva di IBI, l’effetto di un errore di entità ∆θ, è costituito da una rotazione
dei simboli in uscita dalla DFT, proporzionale all’indice n della portante. Ricordando
la (3.61) ed indicando con φn la rotazione di fase subita dal simbolo modulato sulla
portante n-esima, possiamo scrivere:

2πn∆θ 2π n ∆θ Ts 2π n Td
φn = = =
N N Ts Tu
in cui abbiamo indicato con Td , l’errore di sincronizzazione in secondi e con Tu la
durata in secondi della parte utile di ciascun simbolo OFDM:

Td = ∆θ Ts
Tu = N Ts

Sampling frequency offset


Il sampling frequency offset (SFO) rappresenta invece un errore di sincronizzazione di
entità pari ad una frazione dell’intervallo di segnalazione Ts . Anche questa tipologia
di errori, causa una rotazione dei simboli in uscita dalla DFT, che possiamo scrivere
in maniera analoga alla precedente come:
3. Implementazione con processori DSP 45

Figura 3.18: Errori di sincronizzazione temporale (symbol timing offset e sampling


timing offset).

2π n ∆t
φn =
Tu
dove abbiamo indicato con ∆t il sampling timing offset in secondi.
La fig.3.18 mostra un esempio in cui l’errore di sincronizzazione si compone di un
symbol timing offset Td e di un sampling timing offset ∆t.
Si noti che l’errore di sincronizzazione in generale non è costante nel tempo, in
quanto l’oscillatore che genera la frequenza di campionamento in ricezione potrebbe
generare un segnale ad una frequenza leggermente diversa da quella dell’oscillatore
usato in trasmissione. Se ad esempio l’oscillatore in ricezione procede più lentamente
di quello in trasmissione, l’istante di posizionamento della finestra di DFT tenderà a
rimanere sempre più in ritardo rispetto all’istante corretto, via via che si procede nella
demodulazione del frame ricevuto. Occorre quindi un algoritmo capace di calcolare e
correggere l’errore di sicronizzazione per ognuno dei blocchi OFDM ricevuti.

Algoritmo per la sincronizzazione fine


L’algoritmo proposto da Kim-Do-Cho [18] sfrutta alcune sottoportanti del segnale
OFDM per introdurre opportuni simboli pilota che permettono al ricevitore di calcolare
una stima degli errori di sincronizzazione temporale, sia quelli dovuti al symbol timing
offset sia quelli dovuti al sampling frequency offset (SFO).
Dato che la rotazione di fase che si verifica sulla sottoportante k-esima, a seguito
degli errori di sincronizzazione, si può esprimere come:

2πk(Td + ∆t)
Tu
la differenza della rotazione di fase, tra le sottoportanti k1 e k2 del j-esimo simbolo
OFDM può dunque essere scritta come:

Td + ∆t
∆φk2,1 = φk2 − φk1 = 2π∆k (3.73)
Tu
46 3. Implementazione con processori DSP

Se indichiamo con k1 e k2 , gli indici a cui il trasmettitore ha introdotto i simboli


pilota e con ∆k la loro distanza ∆k = k2 − k1 , la (3.73) mostra che la differenza tra
le rotazioni di fase dipende dalla distanza in frequenza tra le due sottoportanti, dal
symbol timing offset Td , e dal sampling timing offset ∆t. Questo ci suggerisce un
metodo per la stima degli errori Td e ∆t. Infatti se il ricevitore conosce i simboli pilota
e le loro posizioni potrà calcolare immediatamente la differenza tra le rotazioni di fase
e la distanza ∆k tra le due sottoportanti e quindi potrà stimare un errore complessivo
τ (j) = TdT+∆t
s
attraverso il calcolo:

Td + ∆t N ∆φk2,1
τ (j) = = (3.74)
Ts 2π ∆k

Infatti:

T +∆t
N ∆φk2,1 N 2π∆k dTu
τ (j) = =
2π ∆k 2π ∆k
Td +∆t
N 2π∆k N Ts Td + ∆t
= = (3.75)
2π ∆k Ts

La parte intera e la parte frazionaria di τ (j), moltiplicate per l’intervallo di segna-


lazione Ts , forniranno rispettivamente i valori di Td e di ∆t richiesti.
L’algoritmo permette di identificare e quindi correggere errori fino ad un Td mas-
N
simo di 2∆k . La scelta di ∆k deve quindi essere fatta in maniera accurata, in quanto
maggiore è il ∆k maggiore sarà l’accuratezza dell’algoritmo, ma contemporaneamente
minore sarà l’acquisition range.
Nelle applicazioni pratiche si trasmettono più coppie di simboli pilota e si calcola
una media degli errori stimati utilizzando ciascuna coppia di sottoportanti. Se ad
esempio abbiamo L coppie possiamo calcolare:

L−1
1
τ (j) = τk (j) (3.76)
L n=0 2n+1,2n

in cui:

N ∆φk2n+1,2n
τ k2n+1,2n (j) = (3.77)
2π ∆k2n+1,2n

tale sistema di ridondanza consente una maggiore affidabilità dell’algoritmo nel caso in
cui alcune delle sottoportanti pilota utilizzate per il timing fine siano particolarmente
attenuate e/o corrotte da picchi di rumore.
Nell’articolo [18] viene anche presentata una macchina a stati finiti che consente
di ottenere una immunità ancora maggiore da casi patologici quali quelli dovuti a
temporanei deep-fade o perdite di segnale.
3. Implementazione con processori DSP 47

3.4 Simulazione MATLAB del sistema


Prima di passare all’implementazione definitiva (caratterizzata da un maggior numero
di non-idealità) del trasmettitore e del ricevitore OFDM si è preferito sviluppare una
simulazione ad alto livello nel linguaggio interpretato MATLAB.
Tale ambiente permette un test veloce degli algoritmi senza doversi preoccupa-
re di tutti quei dettagli implementativi (numero di bit di quantizzazione, efficienza
dell’implementazione, ottimizzazioni, tecniche di debug più complesse etc) che alme-
no inizialmente rappresentano una “distrazione” dall’obiettivo iniziale di scelta degli
algoritmi da usare e di valutazione delle loro performance.
Inoltre avere a disposizione una simulazione MATLAB del sistema permette di ef-
fettuare un debug agevolato in fase di scrittura del codice definitivo (basta confrontare
i risultati del codice che si sta sviluppando con quelli quasi ideali di MATLAB).

3.4.1 Il trasmettitore
Il codice MATLAB per il trasmettitore sviluppato in questa tesi è raccolto nella funzio-
ne OFDM tx() localizzata nel file OFDM tx.m. Tale funzione deve essere chiamata solo
una volta che tutte le costanti base della modulazione sono state inizializzate (come
variabili globali); di questo se ne occupa lo script OFDM system.m che verrà descritto
in seguito nella sezione 3.4.3.
La funzione OFDM tx() dapprima inizializza alcune ulteriori costanti presenti sia
nel trasmettitore che nel ricevitore (che però possono assumere valori diversi nei due
a causa di differenti valori delle frequenze di campionamento) mediante la chiamata
a OFDM rx tx common init(); dopodichè procede al calcolo dei campioni di uscita del
filtro FIR di pulse-shaping (indicato con p(t) nella figura 3.4 e la cui risposta impulsiva
è rappresentata nella figura 3.19) per ognuno dei simboli OFDM da trasmettere. La
funzione OFDM tx() si occupa cioè di trasmettere un frame OFDM.
Ogni frame OFDM è composto in modo molto semplice (vedi la fig. 3.20), cer-
cando di limitare al massimo l’overhead di livello fisico, e consiste in un simbolo di
sincronizzazione che contiene dati noti ed è usato dal ricevitore per il coarse-timing
(vedi sezione 3.3) seguito da un numero fisso Ndata symbols per synch symbol di simboli
OFDM contenenti dati utili (eccetto che su alcune sottoportanti che vengono comun-
que sempre modulate da dati noti per l’algoritmo di timing fine del ricevitore); tale
pattern (simbolo di sincronismo e numero fisso di simboli utili) viene ripetuto in modo
tale da avere Nsymbols per OF DM f rame simboli totali. Per ridurre l’overhead causato
dai simboli contenenti dati noti, un miglioramento possibile sarebbe quello di trasmet-
tere tali simboli più ravvicinati (temporalmente) all’inizio del frame OFDM e poi via
via sempre più distanti gli uni dagli altri (è soprattutto all’inizio che il ricevitore ha
bisogno di basarsi su dati noti per la stima dei vari parametri del segnale).
Più in dettaglio per tutti i simboli OFDM (eccezion fatta per quelli di sincronismo)
Nu ef f gruppi di m = log2 M bits di ingresso dell’array pam symbols, generato dal rag-
gruppamento dei bit che codificano una sequenza di caratteri ASCII, vengono mappati
in una costellazione ad M punti del piano complesso (nell’array channel symbols). Nel
nostro caso M = 4 e la costellazione è composta quindi dai punti ±1 ± j (modulazione
QPSK).
48 3. Implementazione con processori DSP

4 Filter response
x 10
7

−1
160 180 200 220 240 260 280 300 320 340 360

Autocorrelation of the filter response


20000

15000

10000

5000

−5000
400 450 500 550 600

Figura 3.19: Risposta impulsiva del filtro FIR usata nel trasmettitore OFDM simulato
in MATLAB.

N sym bols_per_O FD M _fra m e

N data_sym bols_per_synch_sym bol N data_sym bols_per_synch_sym bol

Sim bo lo O FD M S im bo lo Sim bo lo Sim bo lo O FD M Sim bo lo Sim bo lo


per il sincronism o O FD M … O FD M per il sincron ism o O FD M … O FD M
coarse di dati u tili di dati u tili coarse di dati u tili di dati u tili

N u_eff sottoportanti
m odulate con dati utili

Figura 3.20: Formato del frame utilizzato


3. Implementazione con processori DSP 49

La costante Nu ef f è definita dalla funzione OFDM constants() chiamata dallo


script OFDM system.m ed equivale a Nu (numero di sottoportanti utili all’interno di
un simbolo OFDM) meno il numero di sottoportanti utilizzate per il sincronismo fine
di timing.
Dopo il QPSK mapping dall’array channel symbols si passa, con l’inserzione delle
sottoportanti virtuali, all’array channel symbols with vc (di lunghezza N ) e poi all’ar-
ray ifft output dopo l’operazione di IFFT ad N punti. L’array ifft output with cp viene
creato inserendo prima di ifft output il prefisso ciclico.
Separando i campioni complessi di ifft output with cp con TT sc − 1 campioni nulli si
crea poi l’array fir input che una volta convoluto con l’array FIR response (inizializ-
zato da OFDM rx tx common init(), vedi fig. 3.19) viene concatenato con i campioni
calcolati precedentemente per gli altri simboli OFDM nell’array total fir output.
La risposta impulsiva del filtro FIR h[n] (in MATLAB chiamata FIR response)
è calcolata dalla funzione rootraisedcosine func(α, Ts , Tc , Nsamples , Nbits ) mediante l’e-
quazione:

 
(1+α)π(n−A)Tc
 
(1−α)π(n−A)Tc

Ts

 cos Ts
+ 4α(n−A)T c
sin Ts


 4α √
 
4α(n−A)Tc 2
 

 π Ts 1−


Ts

 per n ∈ [0; Nsamples − 1]; n = A; n = A ± Ts

 4αTc

h̃[n] = 4α+π(1−α)

 √ per n = A

 π Ts



     1−α   1−α 

 1
(1 + α)π sin 1+α
4α π + 4α sin 4α π − (1 − α)π cos 4α π
 √

 2π Ts
 Ts
per n = A ± 4αT c

 
2Nbits − 1
h[n] = rnd h̃[n]
max |h̃[n]|
dove rnd()
 indica
 la funzione round-off (approssimazione all’intero più vicino),
Nsamples
A = rnd 2 + 1 e h̃[n] è la sequenza ottenuta per campionamento dell’an-
titrasformata di un segnale con spettro a radice di coseno rialzato. Si noti che
la prima formula che definisce la sequenza h̃[n] ha dei punti di discontinuità (per
Ts
n = A; n = A ± 4αT c
) in cui il denominatore si annulla; estendendo per continuità la
funzione (risolvendo cioè i limiti associati a tali punti) si ricavano la seconda e la terza
formula della definizione.
La funzione rootraisedcosine func() inoltre calcola anche l’ISI (inter-symbol interfe-
rence) causata dal troncamento a Nsamples campioni della funzione h̃[n] (che sarebbe
di durata infinita); per farlo esegue semplicemente la somma dei campioni di indice
+∞
! ∗
A ± n TTsc della sequenza Rhh [n] = h [k]h[n + k] (cioè dell’autocorrelazione di h[n])
k=−∞
!L
che teoricamente  dovrebbero  essere nulli (ovvero calcola ISI = k=1 Rhh [2A + kTs ]
2Nsamples −1
con L = rnd Ts ). Nella tabella seguente sono riportate le percentuali di
valori di ISI totale per diversi valori di Nsamples ottenute normalizzando la somma
50 3. Implementazione con processori DSP

dei campioni di indice A ± n TTsc al valore massimo della sequenza Rhh [n] (calcolati per
Ts
Tc = 25, Nbits = 8):

Nsamples ISI con α = 0.3 ISI con α = 0.5 ISI con α = 0.7
32 21% 18% 14,4%
64 22% 10% 2,7%
128 7,7% 2% 1,3%
256 3% 1,35% 0,97%
512 1,25% 0,502% 0,76%
1024 1,2% 0,502% 0,76%

Una rappresentazione grafica è disponibile nella fig. 3.21 in cui l’andamento ge-
nerale evidenzia (come è già chiaro dalla tabella sopra) che all’aumentare di Nsamples
1
l’ISI ha un andamento del tipo Nsamples ; ciò comporta una riduzione dapprima molto
veloce e poi sempre più lenta dell’errore. L’andamento ondulatorio della curva della
fig. 3.21 è dovuto al fatto che aumentando Nsamples si allunga non solo h[n] ma anche
Rhh [n] e ci sono quindi più campioni distanziati di Ts a cui è possibile estendere la
sommatoria.
Naturalmente bisogna bilanciare la necessità di contenere l’ISI dovuta al tronca-
mento (che è inversamente proporzionale a Nsamples ) con la necessità di eseguire una
convoluzione veloce (che ha complessità computazionale proporzionale al log2 Nsamples )
sia a lato trasmettitore sia soprattutto a lato ricevitore.
Tornando alla funzione OFDM tx(), nella figura 3.22 è rappresentato (per la sola
parte in fase) l’array di input e di output del filtro FIR.
Completata la generazione di total fir output si procede all’operazione di up-conversion:

SRF (t) = Re{x(t)ej2π(fc +fCF O )t+θCP O } =


Re{x(t)} cos(2π(fc + fCF O )t + θCP O ) −
Im{x(t)} sin(2π(fc + fCF O )t + θCP O ) (3.78)

dove i termini fCF O e θCP O sono normalmente nulli e vengono usati solo per simulare
l’effetto di un offset di frequenza e di fase nella portante; il termine x(t) nell’equazione
rappresenta l’array total fir output mentre SRF (t) rappresenta l’array dac input. Nelle
figure 3.23, 3.24 e 3.25 sono mostrati i segnali come appaiono rispettivamente prima e
dopo la conversione di frequenza.
Infine l’array dac input viene quantizzato su 14bit (ovvero il numero di bit del DAC
utilizzato; vedi la sezione 3.5) e interpolato per simulare il DAC. L’uscita del conver-
titore digitale-analogico sarebbe per l’appunto un segnale analogico e come tale non
un segnale rappresentabile in MATLAB. Nel simulatore si è quindi dovuto approssi-
mare il segnale di uscita con un segnale comunque tempo-discreto ma caratterizzato
da una frequenza di campionamento molto più elevata di quella del segnale tempo-
discreto in ingresso al DAC. Tale cambiamento di frequenza si è ottenuto simulando
un interpolatore di ordine zero (come quello del DAC utilizzato) seguito da un filtro
3. Implementazione con processori DSP 51

60

50

40
ISI (%)

30

20

10

0
0.1
0.2
0.3
0.4
0.5
0
0.6 50
100
0.7 150
200
250
0.8 300
350
400
0.9 450
500
Alfa N
samples

Figura 3.21: Interferenza intersimbolo (ISI) introdotta dal troncamento della risposta
impulsiva del filtro in funzione della lunghezza a cui viene troncata (Nsamples ) e del
coefficiente di roll-off (α).
52 3. Implementazione con processori DSP

FIR input (inphase)


80

60

40

20

−20

−40

−60

−80
0 500 1000 1500 2000 2500 3000
Sample index

6 FIR output (inphase)


x 10
6

−2

−4

−6
0 500 1000 1500 2000 2500 3000 3500
Sample index

Figura 3.22: Input e output del filtro FIR di un trasmettitore OFDM con N = 64,
Np = 6, α = 0.5, M = 4.
3. Implementazione con processori DSP 53

6 Real part (INPHASE) of the FIR output


x 10
5

−5
0.8 1 1.2 1.4 1.6 1.8
Sample index 4
x 10

5 Imaginary part (QUADRATURE) of the FIR output


x 10

10

−5

0.8 1 1.2 1.4 1.6 1.8


Sample index 4
x 10

Figura 3.23: Parte in fase e quadratura all’uscita del filtro FIR per un intero frame
OFDM. E’ possibile notare che i simboli noti trasmessi nel primo simbolo OFDM sono
modulati solo in fase e vengono trasmessi a potenza maggiore.
54 3. Implementazione con processori DSP

4 DAC input
x 10
2

1.5

0.5

−0.5

−1

−1.5

−2
100 200 300 400 500 600
Time (us)

Figura 3.24: Segnale relativo ad un singolo simbolo OFDM dopo la conversione di


frequenza.
3. Implementazione con processori DSP 55

300

250

200

150

100

50

0
200 400 600 800 1000 1200 1400 1600

Figura 3.25: Densità spettrale di potenza del segnale in ingresso al DAC rappresentato
in figura 3.24.

Fc
di Butterworth passa-basso del sesto ordine con frequenza di taglio pari a 2 , dove Fc
indica la frequenza di campionamento del segnale di ingresso al DAC.
Nel simulare il DAC si sono modellizzate anche le varie non-idealità possibili: un
offset di frequenza costante nella frequenza del clock sommato ad un certo phase-noise.
Tali effetti sono serviti a studiare l’impatto delle non-idealità dell’hardware sul segnale
finale.
I campioni del segnale “circa” tempo-continuo sono infine salvati nel file dac output.mat.

3.4.2 Il ricevitore
Il codice MATLAB del ricevitore è raccolto nella funzione OFDM rx() nel file OFDM rx.m.
Come già per OFDM tx() anche questa funzione necessita di una pre-inizializzazione
di numerose costanti di modulazione (da parte dello script OFDM system.m) ed ef-
fettua l’inizializzazione delle costanti dipendenti dal valore di Fc tramite la funzione
OFDM rx tx common init().
Dopo l’inizializzazione la funzione carica nell’array data i dati da processare che
sono, a seconda del valore della costante SIGNAL, il file dac output.mat, un array di
campioni salvati direttamente dal DSP (vedi la sezione 3.6) o del rumore gaussiano
bianco (come segnale di test). Viene poi simulato il canale di trasmissione AWGN
aggiungendo all’array data rumore gaussiano bianco a sufficienza per raggiungere un
dato rapporto segnale-rumore determinato dalla costante SNR.
56 3. Implementazione con processori DSP

La demodulazione vera e propria ha inizio con l’operazione di conversione di fre-


quenza: abbiamo visto nella sezione relativa al trasmettitore che il segnale in banda
passante viene costruito come (vedi eq. 3.78 con fCF O e θCP O posti uguale a zero):

sRF (t) = Re{x(t)ej2πfc t+φ } = xI (t) cos(2πfc t + φ) − xq (t) sin(2πfc t + φ)

dove x(t) costituisce l’inviluppo complesso (anche detto “equivalente passa-basso”)


della modulazione, di cui xI ed xq rappresentano la parte reale e la parte immaginaria,
fc rappresenta la frequenza della portante e φ rappresenta un generico offset di fase
costante.
Trascurando per ora gli effetti del canale, supponiamo che il segnale ricevuto rRF (t)
sia esattamente sRF (t); moltiplicando il segnale sRF (t) per una oscillazione tipo coseno
con fase φ̂ si ottiene:

(xI (t) cos(2πfc t + φ) − xq (t) sin(2πfc t + φ)) cos(2πfc t + φ̂) =


xI (t) cos(2πfc t + φ) cos(2πfc t + φ̂) − xq (t) sin(2πfc t + φ) cos(2πfc t + φ̂) =
xI (t) xI (t)
cos(φ − φ̂) + cos(2π2fc t + φ + φ̂)
2 2
xq (t) xq (t)
− sin(φ − φ̂) − sin(2π2fc t + φ + φ̂)
2 2
in cui ricompaiono il termine in fase xI (t) e quello in quadratura xq (t) riportati in
banda base, accompagnati da due termini modulati alla frequenza 2fc , che possono
essere (quasi completamente) eliminati tramite il filtro adattato di ricezione (che segue
immediatamente l’operazione di down-conversion e che per sua natura è un filtro passa-
basso visto che ha una risposta in frequenza del tipo radice di coseno rialzato).
Come si può vedere oltre al termine in fase xI (t) però compare anche il termine in
quadratura xq (t) se φ = φ̂; questa compresenza è detta interferenza intervia (vedi rif.
[3, sezione 6.2]) e va eliminata per poter recuperare correttamente la parte in fase.
Moltiplicando rRF (t) per una oscillazione di tipo −sin con fase φ̂ si ottiene un’e-
spressione analoga con xI (t) e xq (t) in posizioni invertite:

xq (t) xq (t)
cos(φ − φ̂) + cos(2π2fc t + φ + φ̂)
2 2
xI (t) xI (t)
− sin(φ − φ̂) − sin(2π2fc t + φ + φ̂)
2 2
Anche in questo caso dopo il filtraggio rimarrà comunque il contributo di xI (t)
sovrapposto alla parte in quadratura se φ = φ̂.
Per poter quindi effettuare una demodulazione coerente si rende necessario effettua-
re il cosidetto “recupero della portante”. Nei ricevitori convenzionali (con architettura
omodina o eterodina) tale parte di sincronismo viene svolta da una PLL (phase locked
loop) ovvero un circuito dedicato che, rilevata la riga spettrale della portante (se tale
riga è soppressa dal trasmettitore allora può essere ricreata usando diverse tecniche,
3. Implementazione con processori DSP 57

quale quella dello “square averaging”), si aggancia alla esatta frequenza della portante
fc usata dal trasmettitore (che può essere spostata da quella nominale a causa di un
carrier frequency offset - CFO) e alla sua esatta fase φ. La portante cosı̀ “ricostruita”
dalla PLL in base al segnale ricevuto viene poi normalmente utilizzata come ingresso
del mixer per la down-conversion.
Nella nostra architettura interamente digitale e implementata via software, non
avendo a disposizione una PLL ed un mixer risulta difficile eliminare l’interferenza
intervia.
Tuttavia, scrivendo i segnali down-convertiti x̂I (t) e x̂q (t) dopo il filtraggio:

xI (t) xq (t)
x̂I (t) = cos(φ − φ̂) − sin(φ − φ̂)
2 2
xq (t) xI (t)
x̂q (t) = cos(φ − φ̂) + sin(φ − φ̂)
2 2
ed elaborandone poi l’inviluppo complesso:

x̂(t) = x̂I (t) + j x̂q (t) =


1 1
= xI (t)[cos(φ − φ̂) + j sin(φ − φ̂)] + xq (t)[j cos(φ − φ̂) − sin(φ − φ̂)] =
2 2
1 1
= xI (t)[cos(φ − φ̂) + j sin(φ − φ̂)] + j xq (t)[cos(φ − φ̂) + j sin(φ − φ̂)] =
2 2
da cui volendo esprimere x̂(t) in funzione dell’inviluppo trasmesso x(t) si ottiene:

1
x̂(t) = (xI (t) + jxq (t))[cos(φ − φ̂) + j sin(φ − φ̂)] =
2
1
= x(t)ej(φ−φ̂) (3.79)
2
si nota che se non c’è CFO ma solo CPO (carrier phase offset), allora l’unico effetto
sull’inviluppo complesso ricostruito x̂(t) rispetto l’inviluppo originario x(t) è quello
di una rotazione di entità φ − φ̂. Tale rotazione non deve necessariamente essere
compensata se si fa uso di una modulazione differenziale quale la DPSK, in cui il k -
esimo simbolo trasmesso non codifica la fase assoluta ma piuttosto la variazione di fase
rispetto il simbolo (k-1 )-esimo (c’è però uno svantaggio nella modulazione DPSK: il
raddoppio della probabilità di errore a parità di SNR).
Un’alternativa adottata nell’ambito di questo progetto di tesi è quella di lasciare
che sia l’equalizzatore a compensare tale rotazione (che a tale scopo utilizza alcuni
simboli noti che il trasmettitore inserisce sempre), come se si trattasse di un effetto
introdotto dal canale (che del resto contribuisce realmente con un ritardo di fase!).
Ricostruito quindi l’inviluppo complesso nell’array received dopo aver moltiplicato
per il coseno e il seno l’array data, si procede al filtraggio adattato convolvendo con
l’array FIR response (vedi la fig. 3.19) l’array received (e scalando i valori risultanti
per evitare eventuali problemi di overflow o di cancellazione di cifre significative).
58 3. Implementazione con processori DSP

5 Real part (INPHASE) of the FIR output


x 10
4

−1

−2

−3

−4
4400 4600 4800 5000 5200 5400 5600 5800 6000 6200
Sample index

5 Imaginary part (QUADRATURE) of the FIR output


x 10
2

1.5

0.5

−0.5

−1

−1.5

−2
4400 4600 4800 5000 5200 5400 5600 5800 6000 6200
Sample index

Figura 3.26: Segnale all’uscita del filtro del ricevitore relativo al simbolo di sincro-
nismo. Le croci rosse evidenziano gli istanti di campionamento come sono stati cal-
colati in base alla metrica di timing coarse. I cerchi verdi evidenziano gli istanti di
campionamento ideali.

L’array baseband cosı̀ generato (come risultato del filtraggio) viene campionato a
periodo di simbolo Ts per generare l’array r; si considerano cioè campioni distanti TTsc
posizioni; poichè la funzione OFDM rx() è assolutamente generica, non suppone che
tale rapporto sia intero ma piuttosto effettua una operazione di approssimazione nella
generazione dell’indice di ogni campione da considerare.
L’inviluppo complesso filtrato e campionato a frequenza di simbolo è passato alla
sotto-funzione OFDM coarse timing() che effettua il calcolo della metrica di timing
grezza mediante uno degli algoritmi descritti nella sezione 3.3 (normalmente quello di
Bhargava&Letaief) e che ritorna l’indice del campione corrispondente al primo simbolo
PAM del simbolo di sincronizzazione che precede i simboli di dati in ogni frame OFDM
(vedi la fig. 3.20).
Mediante il valore ritornato da OFDM coarse timing() si effettua quindi il campio-
namento (a frequenza di simbolo) del simbolo OFDM di sincronizzazione. A causa
del CPO (come sopra descritto) tipicamente è presente anche una forte componente
in quadratura per tale simbolo (che però a lato trasmettitore è modulato solo in fase);
si veda ad esempio la fig. 3.26.
Il passo successivo nell’elaborazione è, nel caso in cui si sia utilizzato come simbolo
noto quello di Bhargava-Letaief, la stima (coarse) del CFO e della risposta impulsiva
del canale (Channel Impulse Response - CIR). Il valore stimato del CFO, nell’ambito
delle varie prove effettuate, risulta sempre molto piccolo rispetto al valore assoluto della
frequenza di portante; inoltre, come già descritto nella sezione 3.3 anche il piccolo
valore stimato è quasi totalmente da attribuirsi ad effetti diversi da un reale CFO,
3. Implementazione con processori DSP 59

visto che nella architettura utilizzata la portante è generata digitalmente e non da un


oscillatore analogico affetto da derive che ne alterano la frequenza. Per quanto riguarda
la stima della risposta impulsiva del canale, la sotto-funzione OFDM CIR estimation()
partendo dal simbolo di sincronismo ricevuto ritorna il coefficiente complesso ĥ che
caratterizza il modello di canale AWGN utilizzato nella simulazione utilizzando lo
stimatore (versione modificata di [12, equ. 25]):

ĥ = [SH · S]−1 SH · IN · r(θ̃)


in cui S è una matrice N x1 contenente i simboli di canale trasmessi come reference-
block, SH · S rappresenta la potenza associata ai simboli di sincronismo, IN è la
matrice identità N xN e r(θ̃) è il vettore dei simboli di canale relativi al simbolo di
sincronizzazione campionati in base alla stima del coarse timing.
Inizia infine il processo di demodulazione vero e proprio in cui si procede iterati-
vamente, simbolo per simbolo, alle seguenti operazioni:

1. campionamento a frequenza di simbolo partendo dal campione il cui indice è


determinato dal coarse-timing e dall’algoritmo di timing fine applicato sui simboli
OFDM precedenti; dall’array baseband si passa all’array fft input with cp;

2. eliminazione del prefisso ciclico; da fft input with cp si passa all’array fft input;

3. stima fine della risposta impulsiva del canale (questo passo viene eseguito
una volta ogni Ndata symbols per synch symbol solo sui simboli di sincronismo) in cui
si aggiorna il coefficiente complesso che caratterizza il canale e che era stato
stimato inizialmente;

4. calcolo della DFT (trasformata discreta di Fourier) mediante FFT; da fft input
si passa all’array channel symbols with vc;

5. eliminazione delle sottoportanti virtuali; da channel symbols with vc si passa


all’array channel symbols;

6. equalizzazione: molto semplicemente si dividono i valori dell’array channel symbols


per il coefficiente complesso della CIR stimata precedentemente (vedi la fig.
3.27); il risultato è memorizzato in equ channel symbols;

7. timing fine: si calcola tramite l’algoritmo di Kim-Do-Cho (vedi la sezione 3.3)


un errore di timing frazionario (cioè minore di un tempo di simbolo) sfruttando
le sottoportanti modulate con dati noti che sono presenti in ogni simbolo OFDM
(di dati utili). Questo valore verrà utilizzato al passo 1 precedentemente descritto
per il simbolo OFDM successivo;

8. decisione hard sui simboli di canale equalizzati: per tutte le Nu ef f coppie di


valori (parte reale e immaginaria) memorizzate nell’array equ channel symbols si
procede a calcolare la distanza euclidea da tutti i punti della costellazione ideale
(composta dagli stessi M punti utilizzati dal trasmettitore in fase di mapping)
e poi si sceglie a favore del punto a distanza minore (criterio ML di massima
verosimiglianza) memorizzando il risultato nell’array pam output bits; durante
60 3. Implementazione con processori DSP

5
x 10 Channel symbols before equalization
4

1
Quadrature

−1

−2

−3

−4
−4 −2 0 2 4
Inphase 5
x 10

Channel symbols after equalization

1.5

0.5
Quadrature

−0.5

−1

−1.5
−1.5 −1 −0.5 0 0.5 1 1.5
Inphase

Figura 3.27: Simboli di canale ricevuti prima e dopo l’equalizzazione; si noti che, oltre
a compensare il CPO, l’equalizzatore elimina anche fattori di scala non voluti.
3. Implementazione con processori DSP 61

Plot of the equalized channel symbols for all OFDM symbols of a frame

1.5

0.5
Quadrature

−0.5

−1

−1.5

−1.5 −1 −0.5 0 0.5 1 1.5


In−Phase

Figura 3.28: Simboli di canale ricevuti in un frame OFDM contenente 50 simboli in


totale (8 di sincronismo), con N = 128. In rosso i simboli di canale ricevuti nel primo
simbolo OFDM; in blu quelli ricevuti nell’ultimo; in verde tutti gli altri. I quattro
cerchi neri rappresentano la costellazione ideale.

questa operazione viene salvato per ogni simbolo OFDM il valore di errore me-
dio quadratico (mean square error - MSE) per consentire una valutazione delle
performance del sistema a fine simulazione;

Di tutti i passaggi descritti sopra è il timing-fine quello più critico. Nella figura
3.28 sono mostrati i simboli di canali ricevuti durante un intero frame OFDM.
Come si nota dalla figura inizialmente i simboli di canale sono molto dispersi ed
è grazie al timing fine (la stima fine del canale influisce assai poco) che convergono
vicino ai punti ideali.
Quando tutti i simboli OFDM sono stati demodulati nei passi sopra, allora si
procede alla ricostruzione dei caratteri ASCII trasmessi raggruppando gli m = log2 M
bit memorizzati nell’array pam output bits.
Vengono infine stampati alcuni dei parametri prestazionali misurati duranti l’ese-
cuzione della funzione.
62 3. Implementazione con processori DSP

3.4.3 Simulazione dell’intero sistema


Come precedentemente accennato, è lo script OFDM system.m che si occupa di richia-
mare le funzioni OFDM tx() e OFDM rx() precedentemente descritte. Tale script si
occupa di inizializzare le costanti relative alla modulazione da usare, le cui più im-
portanti sono elencate (molte sono state già introdotte in precedenza) nella tabella
riportata di seguito:

Costante Descrizione
α Fattore di roll-off nell’impulso a radice di coseno rialzato
F IRresponse length Lunghezza della risposta impulsiva in campioni
Ts Tempo di simbolo (sec)
M Ordine della modulazione PAM usata per le sottoportanti
N Numero di sottoportanti (ordine della FFT/IFFT)
Np Lunghezza del prefisso ciclico in numero di simboli
Fcarrier Frequenza della portante utilizzata (Hz)
Nsymbols per OF DM f rame Numero di simboli OFDM che compongono un frame
Ndata symbols per synch symbol Numero di simboli OFDM di dati utili inseriti
dopo ciascun simbolo OFDM di sincronizzazione
Npilots Numero di sottoportanti pilota utilizzate per
l’algoritmo di timing fine
Fc Frequenza di campionamento (Hz)
SN R Rapporto segnale rumore all’ingresso del ricevitore (dB)

Un’altro importante parametro disponibile (che non riguarda però la modulazio-


ne) è MODE ; se impostato al valore “DEBUG SYSTEM TEST ” il simulatore viene
avviato con alcuni parametri che semplificano notevolmente il debugging del sistema
(ad esempio, invece che un impulso a radice di coseno rialzato utilizza un impulso
triangolare che, pur non essendo bandalimitato, permette però di identificare facil-
mente la posizione ideale degli istanti di campionamento). Se impostato al valore
“IDEAL SYSTEM TEST ” il simulatore viene avviato con tutti i parametri relativi al
CFO, SFO e sampling jitter a zero, con SNR pari a +∞ e con un impulso a radice di
coseno rialzato di durata molto lunga, permettendo quindi di verificare il funzionamen-
to in condizioni ideali. Se impostato al valore “REALISTIC SYSTEM TEST ” invece
il simulatore viene avviato con tutte i parametri utilizzati nel sistema effettivamente
implementato (descritto nelle sezioni a seguire), in particolare con differenti valori per
la costante Fc nel ricevitore e nel trasmettitore, nonchè con i CFO, SFO e sampling
jitter misurati.
Infine se MODE è impostato sul valore “ADC SYSTEM TEST ” il simulatore for-
nisce alla funzione OFDM rx() i valori dei campioni salvati dal ricevitore effettivamente
implementato sul DSP, permettendo quindi di capire se il segnale generato dal tra-
smettitore e passato attraverso le conversioni digitale-analogico e analogico-digitale è
corretto oppure no.
3. Implementazione con processori DSP 63

Parametric analysis of the BER


1.2
BER(Nsym)
BER(N)
BER(Np)
BER(Ts us)
BER(SNR dB)
1 −12 BER(Fcarrier Mhz)
BER(FIRlength)
BER(Alfa)

0.8

0.6

0.4

−9
0.2
−6

−3

0
3
0 6 21 24 27 30

0 2 4 6 8 10 12 14 16

Figura 3.29: Analisi parametrica della Bit Error Rate (BER) di un sistema OFDM in
cui tutti i parametri eccetto quello analizzato di volta in volta sono impostati su valori
ideali.

La flessibilità del linguaggio MATLAB e del simulatore realizzato consente di utiliz-


zare le funzioni OFDM rx() e OFDM tx() (e le altre sviluppate a loro supporto) ad alto
livello per effettuare una analisi parametrica delle performance del sistema OFDM.
Nelle figure 3.29 e 3.30 sono dunque riportati i risultati ottenuti rispettivamente
simulando il sistema in condizioni ideali e più realistiche al variare di alcuni parametri.
Come si può vedere sono principalmente il rapporto segnale-rumore (SNR) all’in-
gresso del ricevitore, il CFO e il jitter di campionamento a determinare il peggiora-
mento della BER del sistema, il quale rimane invece abbastanza robusto (BER nulla
su tutto il segnale simulato) al variare degli altri parametri listati nelle legende.

3.4.4 Dimensionamento del sistema


Nella sezione precedente sono state riportate le principali costanti relative alla modu-
lazione implementata. Per scegliere con esattezza i loro valori è necessario considerare
il legame fra la banda occupata dal segnale OFDM e tali costanti (vedi il rif. [1]):

Nu
BWOF DM ≈ (3.80)
N Ts
Poichè:
) *
1−α
Nu = 2Nα + 1 = 2 N +1
2
se si sceglie α = 0.5, si ottiene:
64 3. Implementazione con processori DSP

Parametric analysis of BER


1.2
BER(SNR)
BER(Tc jitter (ns))
BER(Fc offset (kHz))

1 −12

0.8

0.6

0.4
60

0.2

50

0 0 60

0 10 20 30 40 50 60

Figura 3.30: Analisi parametrica della Bit Error Rate (BER) di un sistema OFDM in
cui tutti i parametri eccetto quello analizzato di volta in volta sono impostati su valori
realistici per il sistema realizzato nella pratica.

N
2+1 1
BWOF DM ≈ ≈
N Ts 2 Ts

che rappresenta una comoda formula di progetto e, pur essendo approssimata, mette
bene in luce che la banda della modulazione OFDM dipende quasi esclusivamente dal
tempo di simbolo.
Oltre all’eq. (3.80) è comunque importante tenere presente anche le espressioni
della durata di un frame OFDM TOF DM f rame :

TOF DM f rame = Nsymbols per OF DM f rame Nt Ts


= Nsymbols per OF DM f rame (N + Np ) Ts (3.81)

della bit rate netta (ovvero considerando i dati utili effettivamente trasmissibili senza
codice a correzione d’errore) del sistema BROF DM :
3. Implementazione con processori DSP 65

Nbits per symbol Ndata symbols per OF DM f rame


BROF DM ≈
TOF DM f rame
Nu ef f (log2 M )Nsymbols per OF DM f rame

TOF DM f rame
+ ,
Nu − Npilots 2 N 1−α 2 + 1 − Npilots
= log2 M = log2 M
(N + Np ) Ts (N + Np ) Ts
N 1 Npilots
+ 1 − Npilots
2 − log2 M log2 M
= log2 M ≈ 2 N
Np

(N + Np ) Ts (1 + Ts 2Ts
N )
= BWOF DM log2 M (3.82)

e infine della efficienza spettrale η OF DM :

BROF DM
η OF DM = ≈ log2 M (3.83)
BWOF DM
Da tali equazioni, pur se approssimate, si deduce che la bit rate del sistema rea-
lizzato dipende principalmente dalla banda del segnale OFDM e dall’ordine M della
modulazione PAM utilizzata per le varie sottoportanti, cosı̀ come pure l’efficienza
spettrale dipende solo dall’ordine M .
Considerando l’hardware a disposizione, si sono dunque scelte due differenti mo-
dulazioni di test:

Parametro 1o mod. Valore scelto Parametro 2o mod. Valore scelto


α 0.5 α 0.5
F IRresponse length 256 F IRresponse length 256
Ts 2µs Ts 10µs
M 4 M 4
N 16 N 16
Np 1 Np 1
Fcarrier 800kHz Fcarrier 800kHz
Nsymbols per OF DM f rame 10 Nsymbols per OF DM f rame 10
Ndata symbols per synch symbol 9 Ndata symbols per synch symbol 9
Npilots 6 Npilots 6
Fc del tx 19.78MHz Fc del tx 3.86MHz
Fc del rx 11.10MHz Fc del rx 11.10MHz
BWOF DM 281kHz BWOF DM 56kHz
BROF DM 122kbps BROF DM 24kbps
η OF DM 0.44bit/s/Hz η OF DM 0.44bit/s/Hz

Tali parametri sono conservativi e servono per testare il sistema; in particolare la


seconda modulazione in cui la frequenza del trasmettitore è artificialmente rallentata
da quella massima possibile fino alla frequenza misurata di 3.86M Hz.
66 3. Implementazione con processori DSP

Può venire utile comparare tali costanti con quelle usate in lavori precedenti (vedi
[5]) limitati all’utilizzo dei convertitore pensati per applicazioni audio:

Parametro mod. Valore scelto


Ts 125us
Fc del tx 44kHz
F IRresponse length 68
N 512
Fcarrier 7kHz

3.5 Implementazione del trasmettitore


3.5.1 La scheda EVM TMS320C6424
La scheda EVM C6424 è una piattaforma di sviluppo che può funzionare tramite porta
PCI o in modalità standalone, e permette di valutare e sviluppare applicazioni per la
famiglia di processori TI C64xx. Caratteristiche chiave della scheda (il cui schema a
blocchi è disponibile nella figura 3.31) sono:

• un processore TMS320C6424 operante a 600MHz;

• 128MB di memoria DDR2;

• interfaccia UART di I/O;

• 16MB di memoria Flash non volatile, 64MB di Flash NAND, 2MB di SRAM;

• codec audio stereo AIC33;

• interfaccia I 2 C;

• interfaccia Ethernet 10/100 Mbps;

• interfaccia di emulazione JTAG;

• interfaccia VLYNQ;

• interfaccia S/PDIF analogica e ottica;

Il processore C6424 si interfaccia con le periferiche sulla scheda tramite on bus


EMIF a 16bit e interfacce dedicate. La memoria DDR2 è connessa al suo bus dedicato
a 32bit. Il bus EMIF può essere connesso tramite jumper alle memorie Flash, SRAM,
NAND e ai connettori di espansione disponibili per l’interfacciamento con schede di
add-on.
Un alimentatore stabilizzato esterno a +5V è utilizzato per alimentare la scheda
che tramite dei convertitori switching DC-DC produce le tensioni +1.2V e +3.3V
necessarie per il DSP e le periferiche, nonchè i +1.8V per la memoria DDR2.
Il Code Composer comunica con la scheda EVM tramite un emulatore integrato o
tramite il connettore esterno JTAG a 14pin.
3. Implementazione con processori DSP 67

Figura 3.31: Schema a blocchi della scheda EVM del DSP C6424.

Figura 3.32: Mappa di memoria per la scheda C6424 EVM.


68 3. Implementazione con processori DSP

La famiglia dei processori C64xx ha uno spazio di indirizzamento molto vasto


ma alcune limitazioni sono determinate dalle interconnessioni con le periferiche. Il
codice di programma e i dati possono essere posizionati in qualunque punto dello
spazio di indirizzamento. La mappa di memoria della figura 3.32 mostra lo spazio
di indirizzamento di un processore C6424. In particolare le memorie Flash, NAND o
SRAM possono essere mappate nello spazio CS2 e sono selezionabili attraverso JP2.

3.5.2 La scheda EVM DAC2904

I primi test di interconnessione della scheda EVM del C6424 sono stati effettuati con la
scheda di valutazione del DAC5682 (DAC a 16bit, 1GSPS); tale integrato si è rivelato
tuttavia troppo performante per gli scopi del progetto qui descritto e nella pratica
inutilizzabile a causa di PLL interni non in grado di agganciarsi ai segnali generati dal
DSP (perchè a frequenze troppo basse).

Si è quindi passati all’uso di una scheda più adatta, nella fattispecie la scheda EVM
dell’integrato DAC2904, il cui schema elettrico è riportato nella figura 3.33. Si noti
in particolare che ingressi e uscite sono adattate a 50Ω (tramite R38 e R27-R30) e
che l’uscita (IOUT1 sul connettore J4) è accoppiata in AC (tramite il trasformatore
T2; questa configurazione di uscita è quella suggerita nel datasheet del DAC2904 per
la conversione differenziale-single/ended). Il risultato è che il DAC non è in grado di
generare segnali a frequenze troppo basse, le quali sono tagliate dal filtro passa-alto di
uscita. Una caratterizzazione accurata della funzione di trasferimento della circuiteria
analogica di uscita è difficile ma sarebbe importante per un uso corretto della scheda.

La scheda DAC2904-EVM è progettata per rendere più semplice la valutazione


del DAC2904, un convertitore digitale-analogico ad alta velocità (14bit, 125MSPS),
e grazie alla sua struttura flessibile consente svariate configurazioni differenti per il
clocking della scheda, l’uso di un riferimento interno od esterno, etc.

Fra i dati più importanti listati nel relativo datasheet è riportato nella fig. 3.34
il set delle specifiche temporali da rispettare per inviare correttamente dati digitali
al DAC; il funzionamento è in effetti molto semplice: quando sul pin di ingresso del
clock il DAC avverte una transizione basso-alto, allora campiona gli ingressi dei dati
(14 pin) e usa il valore quantizzato su quei 14bit per generare una tensione analogica
di uscita.

Una importante caratteristica da notare è che il DAC2904 funziona da interpo-


latore a ordine zero (interpolatore a mantenimento noto anche come sample&hold ) e
+∞
!  
non ha filtri sull’uscita. Il segnale ricostruito x̂(t) = x[n] rect t−Tc /2−nT
Tc
c
a
n=−∞
partire dalla sequenza tempo-discreta x[n] che codifica il segnale tempo-continuo x(t)
ha dunque una trasformata data da (vedi [2, pag. 246]):
AVDD AVDD
(0-1.25V) J13

8
R5 U4A W1 SMA
1K 3 EXTIO
R7 1 R9 1 3
U2
LT1004D-1.2 2 1K
C6

2
3
4
5
500

2
TLV2462D FSA2
FSA1

4
+ C5 .1uF
R14
J1 CLK1
C7 R15 R16 R10
22 10uF
DATA PORT 1 2K 2K 0 Ohm
R1 0.1uF AVDD
34 33 R11
32 31 22 Ohms

1
0 Ohm
30 29 AVDD R12
D0_1 BD0_1
28 27 W2
D1_1 BD1_1 C21 2 0 Ohm
26 25
D2_1 BD2_1 R13
24 23 .1uF
D3_1 BD3_1
22 21 0 Ohm (Note 1)
D4_1 BD4_1

3
20 19 J14
D5_1 BD5_1
18 17
D6_1 BD6_1 SMA
16 15
D7_1 BD7_1
14 13
D8_1 BD8_1 U4B AVDD 1
12 11 5
D9_1 BD9_1
10 9 7
D10_1 BD10_1 R40
8 7 6
2
3
4
5

D11_1 BD11_1 TLV2462D


6 5 500 (Note 1)
D12_1 BD12_1 DVDD
4 3

1
D13_1 BD13_1 R44
2 1 W5 J3
NOT USED 2 0 Ohm IOUT2
R2 DVDD

1
22 Ohms W6 1 T1 6 1

3
AVDD 2
POWER DOWN R19
2
100
2
3
4
5

3
C11

48
47
46
45
44
43
42
41
40
39
38
37
0.1uF 3 4
T1-1T-KK81
R45

PD
C12 R18 (Note 1) J15

N/C
+VA
R17 0 Ohm

FSA1
FSA2
SMA (Note 1)

GSET
49.9

IOUT1
IOUT1
IOUT2
IOUT2
AGND
C13 (Note 1)

REF_IN
BD13_1 1 36 BD0_2 49.9 22 pF
D13_1 D0_2 1
BD12_1 2 35 BD1_2
D12_1 D1_2 (Note 1) 22 pF
BD11_1 3 34 BD2_2
D11_1 D2_2
BD10_1 4 33 BD3_2
2
3
4
5

D10_1 D3_2 C14


BD9_1 5 32 BD4_2 R20
D9_1 D4_2
BD8_1 6 31 BD5_2 AVDD 24.9 .1uF
D8_1 U5 D5_2
J2 BD7_1 7 30 BD6_2
D7_1 D6_2 1
BD6_1 8 29 BD7_2 R41 J16
DATA PORT 2 D6_1 DAC290x D7_2
BD5_1 9 28 BD8_2 500 SMA
D5_1 D8_2
BD4_1 10 27 BD9_2
34 33 R3 D4_1 D9_2 (Note 1) (Note 1)
BD3_1 11 26 BD10_2 J4
2
3
4
5

32 31 22 Ohms D3_1 D10_2 R43


BD2_1 12 25 BD11_2 IOUT1
3. Implementazione con processori DSP

30 29 D2_1 D11_2 0 Ohm


D0_2 BD0_2
28 27
D1_2 BD1_2 3 4 1
26 25
D2_2 BD2_2
24 23

D1_1
D0_1
DGND
+VD
WRT_1
CLK_1
CLK_2
WRT_2
DGND
+VD
D13_2
D12_2
D3_2 BD3_2 R29
22 21
D4_2 BD4_2 2 T2
20 19 100
2
3
4
5

D5_2 BD5_2
18 17 T1-1T-KK81

13
14
15
16
17
18
19
20
21
22
23
24
D6_2 BD6_2 BD1_1
16 15
D7_2 BD7_2 BD0_1 BD12_2 1 6
14 13
D8_2 BD8_2 BD13_2
12 11 (Note 1)
D9_2 BD9_2 R46
10 9 C22 C23 J17
D10_2 BD10_2 0 Ohm
8 7 DVDD R27 R28
D11_2 BD11_2 (Note 1) SMA
6 5 49.9 22pF 49.9
D12_2 BD12_2 WRT_1 22pF 1
4 3 (Note 1)
D13_2 BD13_2 C19 R38 (Note 1)
2 1 C20 R32 WRT_2
2
3
4
5

R4 0.1uF R36 (Note 1) 49.9


0.1uF 49.9 CLK_2 R30
22 Ohms C24

CLK_1
(Note 1) 49.9 24.9
R34 (Note 1) .1uF
49.9
R31 CLK1

1
CLK2
W10 R23 R24 R25
22 R21
2 0 Ohm 0 Ohm 0 Ohm
0 Ohm
(Note 1) R33 R35 R37
CLK2

3
R22 R26 0 Ohm 0 Ohm 0 Ohm

0 Ohm 0 Ohm (Note 1) (Note 1) (Note 1)

(Note 1) (Note 1)
(Note 1)

Figura 3.33: Schematico della scheda DAC2904-EVM.


WRT_1 CLK_1 CLK_2
WRT_2
J5 J6 J7 J8
NOTES:
1 1 1 1
1. PART NOT INSTALLED
5
4
3
2
5
4
3
2
5
4
3
2
5
4
3
2
69
70 3. Implementazione con processori DSP

Figura 3.34: Specifiche delle tempistiche da rispettare per la comunicazione con il


DAC2904.

 +∞ +∞
  +∞  
j2πf t t − Tc /2 − nTc
X̂(f ) = F[x̂(t)] = x̂(t)e dt = x[n] rect ej2πf t dt =
−∞ n=−∞ −∞ Tc
+∞
    +∞

t − Tc /2 − nTc
= x[n]F rect = x[n]Tc sinc(f Tc )ej2πf (Tc /2+nTc ) =
n=−∞
Tc n=−∞
+∞

= Tc sinc(f Tc )ejπf Tc x[n]ej2πnf Tc = Tc sinc(f Tc )ejπf Tc X̄(f ) =
n=−∞
+∞
  
jπf Tc k
= sinc(f Tc )e X f−
Tc
k=−∞

Questo comporta due problemi:

1. nel segnale
 ricostruito sono presenti le ripetizioni spettrali dell’intervallo base
Fc Fc
− 2 ; 2 a cavallo delle frequenze ±kFc con k ∈ {N\1}. Per rimuovere tali
repliche si è quindi provveduto ad usare un filtro anti-immagine in cascata al
convertitore (un semplice filtro RC passa-basso del 1o ordine);
   
2. anche nell’intervallo base − F2c ; F2c = − 2T1 c ; 2T1 c lo spettro di X̂(f ) è diverso
dallo spettro voluto X(f ) a causa della presenza del termine sinc(f Tc )ejπf Tc che
determina lo smorzamento delle frequenze vicine a ± F2c di un fattore sinc( F2c Tc ) ≈
0, 64 ovvero una riduzione del 36%. Per compensare tale effetto si può filtrare
3. Implementazione con processori DSP 71

la sequenza x[n] prima di inviarla al DAC in modo da amplificare le frequenze


vicine a ± F2c di un fattore 0,64
1
= 1, 56 per “equalizzare” il risultato finale. Il
filtro da mettere prima del DAC è chiamato in seguito filtro di pre-distorsione.

3.5.3 Interconnessione DSP-DAC


Uno fra i primi problemi che si è dovuto risolvere è stato quello di scegliere un bus
digitale sufficientemente veloce per effettuare l’interconnessione fisica fra le due schede
precedentemente descritte. Nella tabella che segue sono quindi listate le velocità e
la tipologia per i principali bus digitali disponibili sulla scheda EVM del DSP c6424
elaborati dal relativo datasheet.

Nome bus Massima velocità Tipo


EMIFA <25MHz Parallelo (16bit)
I 2C ∼400Kbps Seriale
GPIO ∼25MHz Parallelo (32bit)
McBSP ∼50MHz Seriale

Appare dunque evidente che l’unico bus digitale parallelo (il DAC ha ingressi pa-
ralleli; questo permette di ridurre la velocità necessaria al master del bus per spedire
una parola dati a parità di bit rispetto una soluzione seriale) utilizzabile è il General
Purpose Input/Output (GPIO); tale bus permette di raggiungere una bitrate teorica
pari a 14bit 25MHz
2 = 175M bps (il fattore due tiene conto del fatto che un ciclo comple-
to di fetch dati al DAC richiede che il pin del clock effettui una transizione basso-alto
seguita da una transizione alto-basso; si veda la fig. 3.34) sufficiente per gestire fino a
circa 12.5M Hz di banda con i 14bit di risoluzione del DAC.
Più nel dettaglio, per effettuare la comunicazione dei dati fra DSP e DAC si è
deciso di generare il segnale di clock tramite uno dei piedini GPIO del DSP. Da un
lato questo permette di essere sicuri che i dati siano già pronti quando il clock effettua
una transizione basso-alto (via software questo si ottiene impostando prima lo stato
dei pin relativi ai dati e solo dopo effettuando la transizione sul pin del clock), dall’al-
tro comporta che il clock ricevuto dal DAC non sia un segnale pulito (in termini di
jitter o phase noise e di frequenza) come quello che si potrebbe ottenere da un PLL
opportunamente agganciato al segnale di clock del DSP.
Poichè tuttavia la scheda EVM del DSP non consente di fornire il clock da una
sorgente esterna (ciò permetterebbe di sincronizzare DSP e DAC con un semplice
generatore di funzioni), nè di prelevarlo su un qualche connettore, si è stati costretti ad
implementare la soluzione precedentemente descritta. Come sarà descritto in seguito
questo si è rivelato un problema critico.
Stabilito dunque l’uso del GPIO come bus digitale di interconnessione, si è pro-
ceduto alla realizzazione di un cavo ad-hoc (vedi foto 3.35 e 3.36) per mappare i pin
disponibili per l’I/O su bus GPIO del connettore J1 della scheda del DSP ai giusti pin
del connettore J5 della scheda del DAC:
72 3. Implementazione con processori DSP

Figura 3.35: Foto della scheda EVM del DSP C6424 collegata alla scheda DAC2904-
EVM.

Figura 3.36: Foto della scheda EVM del DSP C6424 collegata alla scheda DAC2904-
EVM.
3. Implementazione con processori DSP 73

Pin sul conn. Pin sul conn. Bit nel Pin sul conn. Pin sul conn. Bit nel
J1 del DAC DC P1 del DSP banco 23 J1 del DAC DC P1 del DSP banco 23
del GPIO del GPIO
1 = DB13 25 = GP[45] 13o 15 = DB6 9 = GP[38] 6o
3 = DB12 27 = GP[44] 12o 17 = DB5 11 = GP[37] 5o
5 = DB11 14 = GP[43] 11o 19 = DB4 13 = GP[36] 4o
7 = DB10 12 = GP[42] 10o 21 = DB3 17 = GP[35] 3o
9 = DB9 10 = GP[41] 9o 23 = DB2 18 = GP[34] 2o
11 = DB8 8 = GP[40] 8o 25 = DB1 36 = GP[33] 1o
13 = DB7 7 = GP[39] 7o 27 = DB0 32 = GP[32] 0o

Oltre ai pin sopra elencati bisogna ricordare anche che il cavo contiene un pin
dedicato alla massa (pin 98 su DC P1, pin 28 su J1) e un pin dedicato al clock (pin
28 su DC P1 che si connette tramite cavo SMA al conn. J5).
Infine, riguardo all’alimentazione della scheda DAC2904-EVM è stata collegata la
analog VDD (J9) e la digital VDD (J11) assieme ad un alimentatore DC impostato su
4.5V cosı̀ come i relativi connettori di massa (J12 e J10) sono stati collegati assieme.

Per quanto invece concerne il lato software, per poter utilizzare i pin in modalità
GPIO, è necessario agire su alcuni registri interni del DSP al fine di disabilitare le
funzioni di più alto livello con cui quei pin sono multiplexati. La funzione che se ne
occupa è gpioConfig():

void gpioConfig()
{
GPIO_Handle gpio_handle2;
Uint16 pin;

// inizializzo il GPIO
EVM6424_GPIO_init();

// cambio il valore dei registri per abilitare i pin del GPIO


CFG_PINMUX0 = 0x00040000;

CFG_PINMUX1 = 0
| ( 1 << 24 ) // SPBK1 - McBSP1 disabled
| ( 1 << 22 ) // SPBK0 - McBSP0 disabled
| ( 2 << 20 ) // TIM1BK - UART1 enabled, Timer1 disabled
| ( 0 << 16 ) // TIM0BK - Timer0 enabled
| ( 2 << 14 ) // CKOBK - CLKOUT disabled, PWM2 enabled
| ( 0 << 12 ) // PWM1BK - PWM1 disabled, GIO84 enabled
| ( 1 << 10 ) // UR0FCBK - UART0 HW flow control enabled
| ( 1 << 8 ) // UR0DBK - UART0 data enabled
| ( 0 << 4 ) // HOSTBK - VLYNQ + MII + MDIO Mode
// (permette il funz. di GP[64] GP[65] GP[66])
| ( 0 << 0 ); // PCIEN - PCI disabled
74 3. Implementazione con processori DSP

// imposto la direzione d’uscita per tutti i pin del GPIO


for (pin=GPIO00;pin<=GPIO110; pin++)
{
EVM6424_GPIO_setDir( pin, OUTPUT_DIRECTION );
}

// definisco il banco del GPIO


gpio_handle2 = &GPIO_MODULE_23;

// inizializzo a 0 tutti i pin del banco


gpio_handle2->regs->CLR_DATA = 0xFFFFFFFF;
}

dove le funzioni EVM6424 GPIO init() e EVM6424 GPIO setDir(), nonchè la varia-
bile globale GPIO MODULE 23, sono definite nella libreria di supporto del DSP.
Assieme a gpioConfig(), la quale va chiamata all’inizio del programma che intende
usare il GPIO, è utile anche la funzione gpioFree(), che dualmente va chiamata al
termine del programma:

void gpioFree()
{
// rimetto i registri al loro valore iniziale disabilitando il GPIO
EVM6424_init( );
}

Per testare la corretta funzionalità del bus si sono svolti numerosi test; si riman-
da per maggiori informazioni alla funzione gpioGenerateTestTone() nel software del
trasmettitore.
Per la trasmissione dei dati vera e propria si è invece dapprima scritta una routine
in C:

void gpioTransmitData(Uint16*rf_real, size_t buff_size)


{
volatile Uint32* outreg;
volatile Uint32* setreg;
Uint16 *p, *end_array;

gpioConfig();

outreg = (Uint32*)(0x01C6703C);
// equivalent to (&GPIO_MODULE_23->regs->OUT_DATA);
setreg = (Uint32*)(0x01C67040);
// equivalent to (&GPIO_MODULE_23->regs->SET_DATA);
3. Implementazione con processori DSP 75

end_array = rf_real + buff_size*sizeof(Uint16);


while (1) // endless transmission
{
p = rf_real;
while (p<end_array)
{
// before making the low->high transition on the
// clock pin, prepare data on the bus
(*outreg) = *(p++);
(*setreg) = 1<<PIN_DAC_CLOCK; // Set to HIGH
}
}

gpioFree();
}\bigskip
Le prestazioni misurate usando questa funzione sono tuttavia abbastanza distanti
dal limite teorico; nel tentativo di aumentare la banda di trasmissione e soprattutto di
migliorare la qualità del segnale di clock (vedi sez. 3.7) si è poi riscritta tale funzione
in assembler:

; ---------------------------------------------------------
; C-CALLABLE FUNCTION:
; void gpioTransmitRealData_asm(Uint16* real_data,
; int data_size)
;
; DESCRIPTION: transmits the samples in real_data to the DAC
;
; C-EQUIVALENT CODE:
; while (real_data<(real_data+data_size*sizeof(Uint16)))
; {
; GPIO_BANK2_OUT_DATA = *real_data++ & 0x3FFF;
; // two effects: 1) puts data on the BUS
; // 2) drives low the PIN_DAC_CLOCK pin
; GPIO_BANK2_SET_DATA = 1<<PIN_DAC_CLOCK; // Set to HIGH
; }
;
; PERFORMANCE: measured frequency up to 21MHz
;
_gpioTransmitRealData_asm:
; real_data pointer is in register A4
; data_size is in register B4
; return location is in register B3
;
; NOTE: constant 0x01C67000 is the base address of GPIO modules 2&3
76 3. Implementazione con processori DSP

; (see TMS320C6424 datasheet)


;
; loop counter ’i’ is allocated in register A9
; registers A1,A3,A5,B0,B1 are used as temporaries
;
MV A4,B2 ; save initial pointer location
MVK 0,A9 ; i=0
MVKL 0x01C67000,A3 ; move 0x703C constant in lower part of A3 reg
MVKH 0x01C67000,A3 ; move 0x01C6 constant in upper part of A3 reg
MVKL 1<<PIN_DAC_CLOCK,A5
; move (1<<PIN_DAC_CLOCK)==(1<<CSL_GPIO_PIN0)==1 into A5
MVKH 1<<PIN_DAC_CLOCK,A5
; move (1<<PIN_DAC_CLOCK)==(1<<CSL_GPIO_PIN0)==1 into A5
MVKL 0x3FFF,A2
MVKH 0x3FFF,A2
ADD A4,B4,B1 ; B1 = real_data+data_size
ADD B1,B4,B1 ; B1 now points to the end of the real_data array
STW A5,*+A3[17] ; put A5 into A3+(17<<2)=A3+0x44 == GPIO’s CLR_DATA
NOP 4 ; required

TransmissionLoop2:
LDH *A4++,A1 ; [4-slots] load into A1 the contents of
; A4 memory pointer==data[i]
NOP 4
STW A1,*+A3[15] ; put A1 into A3+(15<<2)=A3+0x3C == GPIO’s OUT_DATA
NOP 6 ; (this also drives low the DAC clock pin)
STW A5,*+A3[16] ; put A5 into A3+(16<<2)=A3+0x40 == GPIO’s SET_DATA

CMPLT A4,B1,B0 ; [single cycle] real_data<real_data+data_size?

; code for transmitting once the given samples and then stop:
; NOP 1 ; to simulate code for forever-tx
; [B0] BNOP TransmissionLoop2,5 ; if B0 == 1, goto TransmissionLoop

; code for transmitting the given samples FOREVER:


[!B0] MV B2,A4 ; if B0==0, real_data = original
; real_data pointer
BNOP TransmissionLoop2,5 ; always goto TransmissionLoop2

NOP 9
B B3 ; return
NOP 5

Con questa funzione si sono verificati notevoli miglioramenti prestazionali (pin del
clock in grado di commutare fino a 21MHz, molto vicino quindi alla max. frequenza
3. Implementazione con processori DSP 77

teorica), ma nessun miglioramento della qualità del segnale di clock.


Un ulteriore miglioramento possibile (in termini di velocità), che però non è stato
implementato, consiste nel pipelining e unrolling della routine di trasmissione dati:
invece che caricare dalla memoria l’i-esimo campione e poi spedirlo al DAC (opera-
zioni che non possono essere eseguite contemporaneamente dalle unità parallele di
elaborazione del DSP) si potrebbe caricare il campione i-esimo, ma spedire al DAC
il campione (i-1)-esimo e cosı̀ via. In questo modo si potrebbe trarre vantaggio dal-
l’architettura ottimizzata dei DSP della famiglia C64xx in grado di eseguire fino a 4
istruzioni contemporaneamente.

3.5.4 Codice per il trasmettitore


Appurato che il collegamento fra DAC e DSP funziona, si è proceduto alla scrittura
in codice C del trasmettitore OFDM descritto nella sezione 3.4.
Rispetto al codice MATLAB la scrittura in C, per un DSP in virgola fissa come
il C6424, comporta necessariamente una maggiore attenzione alle costanti di scala nel
segnale lungo la catena di elaborazione; da una parte infatti è necessario lavorare in
ogni fase sfruttando il maggior numero possibile degli n bit con cui si codificano i dati
(con valori vicini quindi ai limiti ±2n−1 − 1 per numeri interi con segno) per mantere
il rapporto segnale-rumore-di-quantizzazione SN Rq ≈ 6n maggiore possibile (vedi rif.
[2, pag. 541]). D’altra parte bisogna evitare problemi di overflow, soprattutto nelle
operazioni di FFT/IFFT e di moltiplicazione in generale.
Le costanti di scala e il range di ingresso/uscita dei segnali nelle varie fasi di
elaborazione sono rappresentate nella fig. 3.37, che riassume le funzioni principali
del signal-processing implementate nel file signalproc.c del software sviluppato in
questo progetto.
Per realizzare il sistema si è fatto ampio uso delle librerie di supporto alla fa-
miglia di processori C64xx e descritte nel documento “TMS320C64x+ DSP Little-
Endian DSP Library Programmer’s Reference” (Texas Instruments literature number:
SPRUEB8B). In particolare, si è fatto uso delle funzioni DSP ifft32x32() e DSP fft32x32()
che effettuano rispettivamente le operazioni di IFFT e FFT a 32bit e sono scritte in
un assembler altamente ottimizzato.
Uno dei punti più critici (dal punto di vista delle performance e della memoria
richiesta) per il modem real-time che si è voluto realizzare è infatti non tanto la
generazione dei simboli complessi di canale da trasmettere (cosa di cui si occupa la
funzione tx OFDM symbol(); vedi la fig. 3.37) quanto invece il filtraggio a radice di
coseno rialzato di tali simboli (cosa di cui si occupa la funzione filter()).
L’implementazione dei filtri FIR si può effettuare in vari modi; in altri lavori (vedi
[5]) si è adottata la soluzione classica a linea di ritardo. Tuttavia in questo progetto,
considerata la lunghezza che si è scelta per la risposta impulsiva e il numero di simboli
di canale da filtrare si è preferito optare per l’uso della tecnica di convoluzione veloce
(vedi [2]); la soluzione a linea di ritardo infatti è tendenzialmente più efficiente solo
per filtri di ordine ridotto (meno di 60-80 prese).
Grazie alle funzioni delle librerie di supporto l’implementazione è abbastanza im-
mediata ed è riportata qui di seguito come riferimento per futuri lavori sui DSP:
78 3. Implementazione con processori DSP

Chars Chars bits


[char*] [Bit*] tx_OFDM_frames(): Array di tipo Bit di lunghezza fissa a
NUM_BITS_PER_OFDM_FRAME
tx_chars(): tx_OFDM_frame()
Conversione char=>Bit Incapsulamento e zero-padding x Nframes

Array di tipo Bit di lunghezza fissa a


x Nsymbols NUM_BITS_PER_OFDM_SYMBOL

Array di tipo Bit di lunghezza fissa a


map_QPSK_symbols(): NUM_BITS_PER_OFDM_SYMBOL tx_OFDM_symbol()

Array complesso di int32 lungo


NUM_USEFUL_SUBCARRIERS
[-PAM_MAX;PAM_MAX] Array reale di uint16 lungo
OFDM_FILTERED_SYMBOL_LENGTH
[0;UINT16_MAX]

dac_conversion()
insert_virtual_carriers():

Array complesso di int32 lungo Array complesso di int32 lungo


PAM_MAX=(2^31-1)/NUM_SUBCARRIERS NUM_SUBCARRIERS OFDM_FILTERED_SYMBOL_LENGTH
[-PAM_MAX;PAM_MAX] [-INT_MAX;INT_MAX]

DSP_ifft32x32(): upconvert()

Array complesso di int32 lungo Array complesso di int32 lungo


NUM_SUBCARRIERS CONVOLUTION_ORDER
[-INT_MAX;INT_MAX] [-INT_MAX;INT_MAX]

add_cyclic_prefix(): Array complesso di int32 lungo filter():


NUM_SYMBOLS_EXT_BLOCK fast convolution FIR
[-INT_MAX/CONV_ORDER;
+INT_MAX/CONV_ORDER]

Figura 3.37: Rappresentazione della catena di signal-processing che implementa il


trasmettitore OFDM. Le frecce indicano la relazione “chiama la funzione”.
3. Implementazione con processori DSP 79

void filter(int* input, // NUM_TOTAL_SYMBOLS*2 long


int* output) // CONVOLUTION_ORDER*2 long
{
int i;

if (OFDM_SYM_LENGTH+FILTER_RESPONSE_LENGTH-1 > CONVOLUTION_ORDER)


{
printf("ERROR!!! Invalid sequence length\n");
return;
}

// build the complex input sequence


// (which results OFDM_SYM_LENGTH samples long) and zero-pad it
// so that it becomes long up to CONVOLUTION_ORDER samples
memset(g_buffer1, 0, sizeof(int)*CONVOLUTION_ORDER*2);
for (i=0; i<NUM_TOTAL_SYMBOLS; i++)
{
g_buffer1[((i+1)*SYMBOL_INTERVAL - 1)*2] = input[i*2];
g_buffer1[((i+1)*SYMBOL_INTERVAL - 1)*2 + 1] = input[i*2 + 1];
}

// compute the FFT of the first sequence saving the


// result in g_buffer2
// IMPORTANT: the function requires the input to be in the
// [-INT_MAX/CONVOLUTION_ORDER;+INT_MAX/CONVOLUTION_ORDER]
// range
DSP_fft32x32(getTwiddlesFor(CONVOLUTION_ORDER), CONVOLUTION_ORDER,
g_buffer1, g_buffer2);

// IMPORTANT: g_buffer2 should now be in the range


// [-8*INT_MAX/CONVOLUTION_ORDER;+8*INT_MAX/CONVOLUTION_ORDER]

// multiply one FFT by the FFT of the other sequence


// saving the result in g_buffer1
for (i=0; i<CONVOLUTION_ORDER; i++)
{
// multiplication of two 32bits integers generally leads to 64bits
// integers; however here we’re multiplying g_filter_response_fft
// (which is precomputed and that occupies the entire INT_MAX
// range) with g_buffer2 which however is limited to the
// [-8*INT_MAX/CONVOLUTION_ORDER;+8*INT_MAX/CONVOLUTION_ORDER]
// range which corresponds to 23 bits when CONVOLUTION_ORDER=2048
// => integer_23bit*integer_32bit = integer_55bit
// we need g_buffer1 to be in the
// [-INT_MAX/CONVOLUTION_ORDER;+INT_MAX/CONVOLUTION_ORDER]
80 3. Implementazione con processori DSP

// range (i.e. in 20 bits of precision);


// => the shift must be of 55 - 20 = 35 positions
// => for now keep it to 32

g_buffer1[i*2] = \
(_mpy32ll(g_buffer2[i*2],g_filter_response_fft[i*2]) -
_mpy32ll(g_buffer2[i*2+1],g_filter_response_fft[i*2+1]))>>32;

g_buffer1[i*2+1] = \
(_mpy32ll(g_buffer2[i*2],g_filter_response_fft[i*2+1]) +
_mpy32ll(g_buffer2[i*2+1],g_filter_response_fft[i*2]))>>32;
}

// do the inverse FFT...


// IMPORTANT: the function requires the input to be in the
// [-INT_MAX/CONVOLUTION_ORDER;+INT_MAX/CONVOLUTION_ORDER]
// range
DSP_ifft32x32(getTwiddlesFor(CONVOLUTION_ORDER), CONVOLUTION_ORDER,
g_buffer1, output);

// IMPORTANT: the output range should be in the


// [-8*INT_MAX/CONVOLUTION_ORDER;+8*INT_MAX/CONVOLUTION_ORDER]
// range
// NOTE: of all the samples of the ’output’ buffer only those
// with index [0;OFDM_SYM_LENGTH+FILTER_RESPONSE_LENGTH-1]
// are ’valid’
}\bigskip
Un ulteriore vantaggio della tecnica a convoluzione veloce è la facilità con cui si
possono combinare più filtri assieme (vedi la fig. 3.38)
Nel nostro caso specifico, questo può venir utile per unire all’operazione di filtraggio
a radice di coseno rialzato anche il filtro di pre-distorsione per compensare la distorsione
introdotta poi dal DAC (vedi la sez. 3.5.2).

Per maggiori dettagli sulle altre parti di codice relative all’elaborazione del segnale
si può fare riferimento alla sezione 3.4 che contiene la spiegazione dettagliata dei passi
da eseguire in modulatore OFDM, o direttamente al codice sorgente.
Nella figura 3.39 è mostrato il segnale finale visualizzato su un oscilloscopio all’u-
scita del DAC. Nella figura 3.40 è mostrato il relativo spettro di potenza cosı̀ come è
stato misurato.

Passando invece all’analisi dell’infrastruttura generale del trasmettitore, i dati da


trasmettere vanno comunicati al DSP mediante una qualche interfaccia. La scelta è
caduta sull’interfaccia Ethernet di cui la scheda EVM del DSP c6424 è dotata. Il DSP
infatti può funzionare come nodo di una rete grazie all’implementazione hardware che
esso contiene dei livelli 1 e 2 (PHY e MAC) dello stack ISO/OSI, e grazie al pacchetto
software NDK (Network Development Kit) che implementa gli strati superiori.
3. Implementazione con processori DSP 81

Figura 3.38: Combinazione dei filtri h1 , h2 ...hk per il filtraggio di una sequenza x[n]
con la tecnica della convoluzione veloce.

Figura 3.39: Segnale OFDM per la modulazione di test implementata sul trasmettitore
(basato su DSP C6424).
82 3. Implementazione con processori DSP

Figura 3.40: Spettro del segnale OFDM generato dal trasmettitore e misurato
attraverso uno spectrum analyzer.

Grazie alla User’s Guide relativa (Texas Instruments literature number: SPRU523G)
si è implementato dunque un piccolo web server HTTP sul DSP in grado di generare
pagine HTML al volo. Il codice relativo è nel file client.c e sostanzialmente si limita
a configurare la scheda EVM con un indirizzo IP statico (192.168.2.1) ed ad impostare
come gateway predefinito un altro indirizzo IP statico (192.168.2.100).
Collegando quindi con un cavo Ethernet cross il DSP con un PC configurato con
l’indirizzo IP statico impostato come gateway e accedendo con un normale browser
internet alla pagina http://192.168.2.1 appare la pagina inviata dal DSP all’host-
PC (vedi la fig. 3.41).
L’uso del framework Ethernet tuttavia pone alcuni vincoli sulla struttura del pro-
gramma, visto che il DSP viene internamente configurato per rispondere agli even-
ti generati dalla ricezione di ogni pacchetto dati. Nella pratica questo costringe ad
abbandonare il consueto paradigma del main() tipico del C; nel programma svilup-
pato l’esecuzione inizia dalla funzione StackTest() e la chiamata alla funzione interna
NC NetStart() mette il DSP in una attesa infinita di richieste dall’interfaccia Ether-
net. Il codice quindi che esegue la modulazione è parte di una routine (cgiTx())
che viene chiamata quando si accede ad una certa pagina del webserver (nella fat-
tispecie, http://192.168.2.1/tx.cgi). Difatti, per usare il framework NDK tutte
le funzioni che rispondono a input dall’utente devono essere callback ovvero funzioni
precedentemente collegate alla richiesta di una certa pagina web.
Questo sistema costringe (ma non si tratta di una limitazione eccessiva per i nostri
scopi) ad una trasmissione a burst perchè se la funzione cgiTx() non restituisce il
controllo al chiamante in tempi brevi, il DSP non è più in grado di rispondere ad
ulteriori richieste provenienti dall’interfaccia Ethernet.
3. Implementazione con processori DSP 83

Figura 3.41: Pagina web generata dal DSP e accessibile sull’host-PC all’indirizzo
http://192.168.2.1.

3.6 Implementazione del ricevitore


3.6.1 La scheda EVM TMS320C6455
La scheda EVM6455, composta dal DSK Base Board e dal Mezzanine Board, è de-
scritta dai diagrammi a blocchi presentati nelle figure 3.42 e 3.43. Lo scopo di questo
capitolo è descrivere i componenti più importanti della scheda di valutazione, cioè il
codec AIC23, la memoria, la logica CPLD, l’interfaccia ethernet, la porta McBSP, le
interfacce JTAG e UTOPIA, il Serial Rapid IO, il I 2 C, LED e DIP.

La memoria
Con un bus di indirizzi di 32 bit il DSP C6455 può indirizzare fino a 4 GB di memoria,
liberamente utilizzati per la memorizzazione del codice e dei dati. In questa sezione
si riportano le due mappe di memoria del processore posizionato sul DSK Base Board
e di quello del Mezzanine Board al solo scopo di illustrare come viene utilizzata la
memoria esterna, cioè quella residente sulla piattaforma EVM.

La memoria del DSK Base Board


La mappa di memoria presentata nella figura 3.44 mostra lo spazio di indirizzamento
del processore TMS320C6455 sulla colonna sinistra e i dettagli sull’utilizzo di ciascuna
regione sulla destra. Per impostazione predefinita la memoria interna alla CPU risiede
all’inizio dello spazio di indirizzamento, mentre è possibile rimappare delle sezioni di
memoria via software come cache L2 piuttosto che come RAM.
84 3. Implementazione con processori DSP

Figura 3.42: Schema a blocchi della scheda EVM del DSP C6455.

Figura 3.43: Schema a blocchi della Mezzanine Board del DSP C6455.
3. Implementazione con processori DSP 85

Figura 3.44: Mappa di memoria per il DSP C6455 del DSK Base Board.

L’interfaccia EMIFA (External Memory Interface A) presenta 4 distinte regioni


indirizzabili chiamate chip enable (CE2-CE5). In CE0 viene mappata la memoria
DDR2 presente sulla scheda EVM costituita da due blocchi da 512 Mb utilizzati in
parallelo per creare un’interfaccia di 32 bit. La memoria totale disponibile è di 128
MB alla quale si può accedere tramite indirizzi da 0xE000 0000 a 0xE800 0000. Il DSK
utilizza per la memoria DDR2 un clock a 250 MHz; il controller di questa memoria
può essere attivato configurando EMIF via software.
Il DSK Base Board presenta anche una memoria flash esterna di 4 MB come
opzione per il boot connessa alla regione CE3 di EMIFA da un’interfaccia a 8 bit e
accessibile con indirizzi da 0xB000 0000 a 0xB01F FFFF. Poichè la memoria flash non
perde il suo contenuto quando viene interrotta l’alimentazione, in fase di lettura si può
considerare come una semplice ROM asincrona. Questo tipo di memoria può essere
cancellata in grandi blocchi detti settori (sectors) o pagine (pages).
La regione EMIFA CE2 è dedicata alla logica programmabile CPLD, per la quale
si rimanda alla sezione 3.6.1.

CPLD (programmable logic)

Il dispositivo CPLD è un esempio di programmable logic device, cioè un componente


elettronico che non implementa una specifica funzione logica predeterminata (come
un gate), ma che può essere programmato per svolgere una funzione desiderata. Il
CPLD, evoluzione dei più semplici dispositivi detti PAL (programmable array logic)
86 3. Implementazione con processori DSP

e GAL (generic array logic), permette di realizzare circuiti logici molto complessi,
corrispondenti a molti dispositivi PAL collegati fra loro e a migliaia o decine di migliaia
di porte logiche. Caratteristiche della logica CPLD sono: una memoria non volatile
che permette di ottenere la configurazione desiderata già all’avvio del sistema senza
utilizzo di ROM esterne e la possibilità di implementare numerose funzioni, semplici o
complesse. I CPLD vengono usati per applicazioni particolari dove sono richieste alte
velocità e bassi costi o (come nel caso della nostra piattaforma EVM) funzionalità di
glue logic ovvero di interfacciamento tra due dispositivi complessi.
Il DSK C6455 utilizza un CPLD Altera EPM3128TC100-10 che possiede le seguenti
funzionalità:

• cinque registri di controllo/stato mappati in memoria che permettono la gestione


via software di varie caratteristiche della scheda,
• logica per la decodifica degli indirizzi e l’accesso in memoria,
• controllo dell’interfaccia e dei segnali della scheda figlia,
• glue logic.

L’interfaccia ethernet
Una interfaccia ethernet Intel LTX971ACE da 10/100 Mbps è collegata al controller
interno EMAC (ethernet MAC) del DSP. Tale interfaccia è risultata estremamente
utile nell’implementazione del ricevitore ed è descritta più nel dettaglio in seguito.

I 2 C Serial ROM e I 2 C BUS


La scheda EVM TMS320C6455 possiede un sistema di comunicazione seriale bifilare
detto I 2 C (Inter Integrated Circuit) che collega il processore al codec AIC23 e alla
memoria I 2 C ROM. Attraverso il collegamento seriale la periferica può trasmette-
re/ricevere dati a 8 bit a/da la CPU. La ROM di 1 Mb può essere utilizzata come
periferica di memorizzazione generica o essere configurata come il dispositivo di boot
per la scheda.

L’interfaccia JTAG
Il DSK prevede un controller di emulazione integrato come strumento principale per
il debug, tuttavia ha la possibilità di supportare un emulatore esterno attraverso una
connessione JTAG a 14 o 60 pin. Quando l’interfaccia a 14 o 60 pin è inserita nella
scheda l’emulatore integrato è disattivato. L’interfaccia a 60 pin supporta la funzione
di trace se viene utilizzata con una appropriata piattaforma di emulazione.

Il dispositivo McBSP
Il dispositivo Multichannel Buffered Serial Port (McBSP) fornisce un’interfaccia di
comunicazione seriale sincrona e ad alta velocità fra la CPU e alcuni dispositivi esterni.
La piattaforma TMS320C6455 possiede due di tali dispositivi (porte seriali) indicati
dagli acronimi McBSP0 ed McBSP1.
3. Implementazione con processori DSP 87

Figura 3.45: Schema a blocchi dell’interfaccia McBSP.

Figura 3.46: Lista dei pin per l’McBSP.


88 3. Implementazione con processori DSP

Come illustrato nella figura 3.45, il dispositivo McBSP prevede un percorso per i
dati e uno di controllo. La lista dei pin è presente nella figura 3.46 in cui I indica un
pin di ingresso, O indica un pin di uscita e Z un pin ad alta impedenza. I dati vengono
scambiati attraverso il pin Data Transmit (DX) in trasmissione ed il pin Data Receive
(DR) in ricezione. Le informazioni di controllo (temporizzazione e sincronizzazione di
frame) sono comunicate attraverso i pin CLKX, CLKR, FSX e FSR.
La CPU comunica con il dispositivo McBSP attraverso dei registri di controllo
accessibili mediante un bus periferico interno. Il blocco di controllo genera il clock in-
terno, il segnale di sincronizzazione del frame, controlla la correttezza di questi segnali
e seleziona i canali da utilizzare nella comunicazione. In caso di errore nell’esecuzio-
ne di una delle precedenti operazioni esso invia segnali di interrupt alla CPU o al
controllore del DMA attraverso i pin RINT, XINT, REVT e XEVT.
Come mostrato nella figura 3.45, le operazioni di ricezione e trasmissione vengono
entrambe gestite mediante dei buffer. In ricezione il dato arriva sulla linea DR e viene
shiftato nel registro Receive Shift Register (RSR). Una volta che un intero elemento (a
8, 12, 16, 20, 24 o 32 bit) viene ricevuto, il contenuto del registro RSR viene copiato
nel Receive Buffer Register (RBR) solo se questo non è ancora stato svuotato dalla
precedente operazione di ricezione. In trasmissione il dato viene scritto dalla CPU o
dal controllore del DMA sul registro DXR. Se il registro XSR è vuoto, ovvero il dato
precedentemente trasmesso è già stato inviato al codec, il dato in DXR viene copiato
nel registro XSR. In caso contrario il contenuto di DXR viene copiato nel registro XSR
solamente quando l’ultimo bit del dato è stato shiftato sulla linea di trasmissione DX.
Il compander 3 hardware permette la compressione e l’espansione dei dati nei formati
µ-law e A-law e il trasferimento dei dati iniziando dal LSB o dal MSB.

I segnali di controllo

Le informazioni di controllo sono scambiate tra i dispositivi esterni e la porta McBSP


attraverso quattro pin bidirezionali ed uno unidirezionale; i segnali ad essi associati
sono: il transmit clock (CLKX), il receive clock (CLKR), il transmit frame sync (FSX),
il receive frame sync (FSR) e il signal clock (CLKS). Il clock CLKS è il master clock che
temporizza tutti i dispositivi della scheda; i clock seriali CLKX e CLKR definiscono
i limiti temporali tra bit consecutivi, rispettivamente, in trasmissione e ricezione; i
segnali FSX e FSR definiscono l’inizio del trasferimento di un frame.

I registri di controllo
Il meccanismo di controllo della porta McBSP viene configurato mediante i bit di stato
di otto registri a 32 bit accessibili attraverso il peripheral bus. La lista dei registri della
porta seriale viene illustrata nella figura 3.47 (i registri RBR, RSR, XSR non sono
direttamente accessibili dalla CPU e dal DMA/EDMA controller, mentre il registro
DRR può solo essere letto, non scritto dalla CPU e dal DMA/EDMA controller ).
Il Serial Port Control Register (SPCR) e il Pin Control Register (PCR) configura-
no la porta seriale. Il Receive Control Register (RCR) e il Transmit Control Register
3
Questo termine deriva dall’unione delle parole compressor ed expander.
3. Implementazione con processori DSP 89

Figura 3.47: Lista di registri per la porta seriale McBSP.


90 3. Implementazione con processori DSP

(XCR) configurano i parametri delle operazioni, rispettivamente, di ricezione e trasmis-


sione. Il Sample Rate Generator Register (SRGR) configura i parametri del sample
rate generator. Il Multichannel Control Register (MCR), il Transmit Channel Enable
Register n (XCERn) e il Receive Channel Enable Register n (RCERn) configurano le
operazioni multicanale.

I segnali di stato
La porta seriale McBSP possiede quattro segnali di stato che sincronizzano le ope-
razioni di lettura/scrittura della CPU e del controller EDMA3, evitando cosı̀ che un
dato vecchio venga letto due volte o che si scriva su un dato nuovo. Il Receive Event
(REVT) segnala al controller EDMA3 che il contenuto di RBR è stato copiato in DRR
e che il nuovo dato può essere letto. Il Transmit Event (XEVT) segnala al controller
EDMA3 che il contenuto di DXR è stato copiato in XSR e che il nuovo dato può essere
scritto. Il Receive Interrupt (RINT) e il Transmit Interrupt (XINT) segnalano alla
CPU il cambiamento di stato, rispettivamente, del ricevitore e del trasmettitore della
porta seriale. L’interrupt che segnala il cambiamento di stato può essere configurato
secondo una delle seguenti opzioni:

R/XRDY - si verifica un interrupt in corrispondenza della ricezione o della trasmis-


sione di ogni elemento seriale, in modo del tutto analogo ai segnali R/XEVT;

Blk - si verifica un interrupt in corrispondenza della fine di un subframe;

Frame - si verifica un interrupt in corrispondenza della rilevazione di un impulso di


sincronizzazione di frame;

SyncErr - si verifica un interrupt in corrispondenza di un errore di sincronizzazione


di frame.

Il Serial Rapid IO (SRIO)


Come si è illustrato all’inizio di questo capitolo, la piattaforma EVM6455 è composta
da due schede connesse fra loro: DSK Base Board e Mezzanine Base Board. Ognuna
di queste schede ospita un microprocessore DSP TMS320C6455. Il collegamento fra
queste due CPU viene svolto dal sistema SRIO (Serial Rapid IO), le cui principali
caratteristiche sono:

• prestazioni molto elevate in termini di bit-rate (superiore alle decine di gigabit


al secondo);

• utilizzo della commutazione di pacchetto;

• architettura flessibile che permette la comunicazione peer-to-peer;

• metodi per la rilevazione degli errori;

• frequenza di lavoro e ampiezza delle porte scalabili.

L’architettura del sistema Rapid IO è gerarchica e distribuita su tre livelli:


3. Implementazione con processori DSP 91

1. livello logico: specifica i protocolli, incluso il formato dei pacchetti, necessari


alle due parti per completare la transazione;

2. livello trasporto: definisce gli schemi di indirizzamento per recapitare corret-


tamente i pacchetti all’interno di un sistema;

3. livello fisico: contiene le informazioni sull’interfaccia a livello del dispositivo


elettronico (caratteristiche elettriche, gestione degli errori e controllo del flusso
di dati).

Il pacchetto è l’elemento di base della comunicazione e consiste di campi di dati


corrispondenti a ciascun livello:

• il livello logico prevede una intestazione che specifica il tipo di accesso e il payload
di lunghezza massima 256 byte (se previsto);

• il livello trasporto dipende dalle caratteristiche topologiche del sistema fisico e


consiste negli identificatori del mittente e del destinatario del pacchetto;

• il livello fisico comprende campi relativi alla priorità, al controllo degli errori e
all’acknowledgement.

Le transazioni del SRIO sono basate sulla richiesta e sull’invio di pacchetti: un


dispositivo master genera la richiesta di un pacchetto che viene trasmessa al dispositivo
destinatario che a sua volta risponde con l’invio del pacchetto desiderato.

3.6.2 La scheda EVM ADS62P45


I primi test di interconnessione della scheda EVM del C6455 sono stati effettuati con
la scheda di valutazione ADS6244 (ADC a 14bit, 125MSPS seriale); tale integrato
si è rivelato tuttavia troppo impegnativo da usare in congiunzione ad un DSP data
l’enorme bitrate richiesta (pari a 16Fc dove Fc è la frequenza del segnale di clock) e
dato lo standard di interconnessione LVDS non supportato direttamente dai DSP e
difficile da usare altrimenti.
Si è quindi passati ad un convertitore ADC più adatto: il modello ADS62P45
con uscite parallele con standard LVCMOS (0/+3.3V). La relativa scheda EVM di
valutazione permette tramite l’installazione di appositi buffer (U12 e U13 nello schema
elettrico della scheda) di usare un comodo connettore (J1) per prelevare il segnale
campionato e quantizzato.
Nella figura 3.48 sono riportate le tempistiche da rispettare per poter usare corret-
tamente tale convertitore. Il funzionamento dell’ADC è abbastanza elementare: quan-
do avverte una transizione basso-alto sul suo pin di ingresso del clock, allora effettua
una acquisizione del segnale analogico fornitogli in ingresso; contemporaneamente al
suo interno vengono effettuate le conversioni (o meglio quantizzazioni) di precedenti
campioni e dopo un certo ritardo (indicato con tP DI nel datasheet e nella figura 3.48)
presenta dati validi all’uscita (evento segnalato dalla transizione basso-alto del clock
di uscita).
92 3. Implementazione con processori DSP

Figura 3.48: Tempistiche da rispettare nella comunicazione DSP-ADC.


C 13
R27
1 2 IN P _ A SH4
C 11 4.99
T1 T2 .1uF R5 R 25
S MA C70
J6 1 S IG N A L _ IN A 1 2 4 3 R4 1 6 24.9 49.9
5.6pF
A IN _ C H -A EN D 49.9
DNI C 12
4
3
2
5 .1uF
DNI NOTE 1 C 65
5 2 2 5 1 2 CM SH4 3.3pF NOTE 2

S MA R 66 .1uF
J7 1 2 1 6 1 R7 3 4 R6 R 26
1 C71
DNI EN D WBC1-1 49.9 WBC1-1 24.9 49.9
5.6pF
DNI R67 DNI C 66
4
3
2
5 DNI R28
2 2 1 2 IN M _ A SH4
4.99
C15 C16 .1uF
2
1 .1uF 1 .1uF

NOTE: FOR ADS6 2 PX2 / X3 / X4 / X5


1) R5 , R6 , R1 1 , R1 2 = 4 9 . 9 OHMS
2) REMOVE R2 5 , C6 5 , R2 6 , R7 1 , C6 5 , & C6 9

Figura 3.49: Schematico per l’ingresso analogico (canale A) della scheda ADS63P45-
EVM.

E’ importante notare che il convertitore non integra un filtro anti-aliasing e quindi


è necessario usarne uno esterno al suo ingresso per evitare problemi di aliasing con
segnali spuri e picchi di rumore a frequenze maggiori di metà frequenza di clock.
Un altra importante considerazione è quella relativa al percorso del segnale analo-
gico in ingresso mostrato nella fig. 3.49.
I due trasformatori T1 e T2 hanno lo scopo di effettuare la conversione da single-
ended a differenziale, nonchè di adattare a 50Ω l’ingresso. Il risultato è che l’ingresso è
accoppiato in AC e il convertitore non è quindi in grado di campionare segnali a bassa
frequenza (a 500kHz l’attenuazione della circuiteria di ingresso è di circa 60dB!).

3.6.3 Interconnessione ADC-DSP


Come già per il DSP c6424 e il relativo DAC, nella tabella che segue sono raccolte le
velocità e la tipologia dei principali bus digitali disponibili sulla scheda EVM del DSP
c6455 elaborati dal relativo datasheet.
3. Implementazione con processori DSP 93

Nome bus Massima velocità Tipo


EMIFA <40MHz Parallelo (32bit)
SRIO 9Gbps Seriale
GPIO ∼50MHz Parallelo (32bit)
McBSP ∼100MHz Seriale

Anche in questo caso la scelta è stata il General Purpose Input/Output (GPIO) e


come già per il DAC2904 si è scelto di cloccare l’ADC con un segnale di clock generato
da un piedino GPIO del DSP (perchè la scheda EVM del DSP non supporta segnali di
clock esterni). A differenza del DAC però in questo caso la sorgente dati non è il DSP
bensı̀ l’ADC; questo significa che il campionatore effettua sı̀ una acquisizione quando
riceve la transizione basso-alto generata dal DSP sul suo pin di ingresso del clock, ma
ciò non significa che sui suoi pin di uscita siano presenti dati validi, evento che è invece
segnalato da una transizione del clock di uscita dell’ADC.

Una possibile soluzione per rilevare tale evento sarebbe quella di impostare un pie-
dino GPIO del DSP come sorgente di interrupt e collegarlo al clock di uscita dell’ADC;
questo significherebbe però dover processare interrupt ad una frequenza Fc ovvero al-
la frequenza con cui si genera il segnale di clock dell’ADC. Purtroppo il DSP non
è progettato per gestire un gran numero di interruzioni al secondo (per campionare
a 10MHz sarebbero necessarie 10 milioni di interruzioni al secondo!) e quindi tale
approccio non è fattibile.

Il sistema utilizzato è stato semplicemente quello di effettuare una transizione


basso-alto sul pin di ingresso del clock dell’ADC e supporre che i dati in uscita siano
già validi nel momento in cui il DSP esegue l’operazione successiva (che consiste nel
salvare in memoria lo stato dei pin GPIO collegati all’uscita dati dell’ADC). Tale
sistema si è rivelato funzionare grazie al fatto che il tempo tP DI (vedi sez. precedente)
è particolarmente piccolo (meno di 8ns da datasheet).

Di seguito viene riportata la mappatura (realizzata fisicamente con un cavo ad-hoc;


vedi foto 3.50 e 3.51) fra i pin disponibili per l’I/O su bus GPIO del connettore J1 e
J3 della scheda del DSP e i relativi pin del connettore J1 della scheda dell’ADC:
94 3. Implementazione con processori DSP

Figura 3.50: Foto della connessione fra la scheda EVM del DSP c6455 e il convertitore
ADS62P45.

Figura 3.51: Foto della connessione fra la scheda EVM del c6455 e il convertitore
ADS62P45.
3. Implementazione con processori DSP 95

Pin sul conn. Pin sulla scheda Bit nel banco


J1 dell’ADC del DSP 1 del GPIO
35 = DA0 10 su J1 = GP[2] 2o
33 = DA1 33 su J3 = GP[3] 3o
31 = DA2 53 su J3 = GP[4] 4o
29 = DA3 48 su J3 = GP[5] 5o
27 = DA4 67 su J3 = GP[6] 6o
25 = DA5 68 su J3 = GP[7] 7o
23 = DA6 42 su J3 = GP[8] 8o
21 = DA7 36 su J3 = GP[9] 9o
19 = DA8 41 su J3 = GP[10] 10o
17 = DA9 35 su J3 = GP[11] 11o
15 = DA10 68 su J1 = GP[12] 12o
13 = DA11 72 su J1 = GP[13] 13o
11 = DA12 76 su J1 = GP[14] 14o
9 = DA13 73 su J1 = GP[15] 15o

Oltre ai pin sopra-listati bisogna ricordare anche che il cavo contiene un pin dedi-
cato alla massa (pin 2 su J1 sull’ADC, pin 1 su J1) e un pin dedicato al clock (pin 39
su J3 che si connette tramite cavo SMA al conn. J4 sulla scheda dell’ADC).
Infine, riguardo la alimentazione è stata collegato un alimentatore DC impostato
su 5V al connettore P5 e i connettori di massa P4 e P2 sono stati collegati assieme.

Per quanto invece concerne il lato software le procedure di inizializzazione del GPIO
sono diverse da quelle usate per il DSP c6424; di seguito si riportano quindi le versioni
delle funzioni gpio config() e gpio free() per il DSP c6455 nonchè la funzione gpio init()
che va anch’essa chiamata ad avvio programma:

void gpio_init()
{
Bool gpioEn;

/* Unlock the control register */


CSL_FINST(((CSL_DevRegs*)CSL_DEV_REGS)->PERLOCK,
DEV_PERLOCK_LOCKVAL, UNLOCK);

/* Enable the GPIO */


CSL_FINST(((CSL_DevRegs*)CSL_DEV_REGS)->PERCFG0,
DEV_PERCFG0_GPIOCTL, ENABLE);
do {
gpioEn = (Bool)
CSL_FEXT(((CSL_DevRegs*)CSL_DEV_REGS)->PERSTAT0,
DEV_PERSTAT0_GPIOSTAT);
} while (gpioEn != TRUE);
96 3. Implementazione con processori DSP

/* Set CPLD Misc_register to McBSP1 off board */


do
DSK6455_rset(6, 0x1);
while( (0x1 & DSK6455_rget(6)) != 1);

printf("CPLD configured to disable McBSP1 "


"(to unlock GPIO pins)\n");
}

void gpio_config(int allinputs)


{
CSL_GpioPinConfig config;
CSL_Status status;
CSL_GpioHwSetup hwSetup;
CSL_GpioContext pContext;
CSL_GpioObj gpioObj;
int i;

if (g_bAlreadyConfigured == 1)
return;

/* Initialize the GPIO CSL module */


status = CSL_gpioInit(&pContext);
if (status != CSL_SOK) {
printf("GPIO: Initialization error.\n");
return;
}

/* Open the CSL module */


g_hGpio = CSL_gpioOpen(&gpioObj, CSL_GPIO, NULL, &status);
if ((g_hGpio == NULL) || (status != CSL_SOK)) {
printf("GPIO: Error opening the instance.\n");
return;
}

/* Setup hardware parameters */


hwSetup.extendSetup = NULL;

/* Setup the General Purpose IO */


status = CSL_gpioHwSetup(g_hGpio, &hwSetup);

// configure all GPIO pins as INPUTs


// (except for the pin used for the clock of the ADC)
for (i=(int)CSL_GPIO_PIN0; i <= (int)CSL_GPIO_PIN15; i++)
{
3. Implementazione con processori DSP 97

if (i == (int)CLOCK_ADC_PIN && allinputs == 0)


{
config.pinNum = (CSL_GpioPinNum)i;
config.trigger = CSL_GPIO_TRIG_CLEAR_EDGE;
config.direction = CSL_GPIO_DIR_OUTPUT;
}
else
{
config.pinNum = (CSL_GpioPinNum)i;
config.trigger = CSL_GPIO_TRIG_RISING_EDGE;
config.direction = CSL_GPIO_DIR_INPUT;
}

status = CSL_gpioHwControl(g_hGpio,
CSL_GPIO_CMD_CONFIG_BIT, &config);
if (status != CSL_SOK) {
printf("GPIO: GPIO pin %d configuration error.\n", i);
return;
}
}

printf("All GPIO pins have been configured\n");


g_bAlreadyConfigured = 1;
}

void gpio_free()
{
CSL_Status status;

if (g_bAlreadyConfigured == 0)
return; // nothing to free

status = CSL_gpioClose(g_hGpio);
if (status != CSL_SOK) {
printf("GPIO: Unable to close the instance. "
"[status = 0x%x].\n", status);
return;
}

printf("Released the GPIO pins\n");


g_bAlreadyConfigured = 0;
}

La routine per l’acquisizione effettiva dei dati viene presentata qui di seguito
direttamente nella sua forma ottimizzata in assembler scritto a mano:
98 3. Implementazione con processori DSP

; ------------------------------------------------------------
; C-CALLABLE FUNCTION:
; void gpioGetSamples_asm(Uint16*data, int data_size)
;
; DESCRIPTION:
; generates the ADC clock (on GPIO pin #0) and
; stores data_size samples in *data location.
; Note that data memory location has to be big enough!
; Before storing data, first 256 samples from the ADC
; are discarded as they usually contain invalid values
;
; C-EQUIVALENT CODE:
;\qquad for(i=0; i<data_size; i++)
; {
; GPIO_CLR_DATA = (1<<CLOCK_ADC_PIN);
; GPIO_SET_DATA = (1<<CLOCK_ADC_PIN);
;\qquad data[i] = GPIO_IN_DATA;
;\qquad }
;
_gpioGetSamples_asm:
; data pointer is in register A4
; data_size is in register B4
; return location is in register B3
;
; loop counter ’i’ is allocated in register A9
; registers A1,A3,A5,B0,B1 are used as temporaries
MVKL 0x2B00000,A3
; move 0x0000 constant in lower part of A3 reg
MVKH 0x2B00000,A3
; move 0x02B0 constant in upper part of A3 reg
MVK 1,A5
; move (1<<PIN_ADC_CLOCK)==(1<<CSL_GPIO_PIN0)==1 into A5
MVK 256,B1 ; move 256 in B1
NOP 9

; discard some initial samples:

MVK 0,A9 ; i=0


STW A5,*+A3[7] ; put A5 into A3+(7<<2)=A3+0x1C ==
; GPIO’s CLR_DATA
NOP 2 ; required
DiscardLoop:
STW A5,*+A3[6] ; put A5 into A3+(6<<2)=A3+0x18 ==
; GPIO’s SET_DATA
3. Implementazione con processori DSP 99

; NOTE: following operations are interleaved to take


; advantage of instruction pipelining:

LDW *A3[8],A1 ; [4-slots] load into A1 memory contents


; of A3+(8<<2)==GPIO’s IN_DATA
|| ADD A9,1,A9 ; i++
STH A1,*+A4[0] ; always save in A4[0]=data[0] the contents of A1
STW A5,*+A3[7] ; put A5 into A3+(7<<2)=A3+0x1C == GPIO’s CLR_DATA
|| CMPLT A9,B1,B0 ; [single cycle] i<256?
[B0] BNOP DiscardLoop,5 ; if B0 == 1, goto DiscardLoop

; now start the real acquisition!

MVK 0,A9 ; i=0


STW A5,*+A3[7] ; put A5 into A3+(7<<2)=A3+0x1C == GPIO’s CLR_DATA
NOP 2 ; required
AcquireLoop:
STW A5,*+A3[6] ; put A5 into A3+(6<<2)=A3+0x18 == GPIO’s SET_DATA

; NOTE: following operations are interleaved to take


; advantage of instruction pipelining:

LDW *A3[8],A1 ; [4-slots] load into A1 memory contents


; of A3+(8<<2)==GPIO’s IN_DATA
|| ADD A9,1,A9 ; [single cycle] i++
STH A1,*+A4[A9] ; [??] save in A4[A9]=data[i] the contents of A1
STW A5,*+A3[7] ; [??] put A5 into A3+(7<<2)=A3+0x1C == GPIO’s CLR_DATA
|| CMPLT A9,B4,B0 ; [single cycle] i<data_size?
[B0] BNOP AcquireLoop,5 ; if i<data_size, goto AcquireLoop

NOP 9
B B3 ; return
NOP 5

Per testare la corretta funzionalità del collegamento fra DSP e ADC si sono poi
svolti numerosi test (campionamento di un’onda sinusoidale, etc). Per maggiori infor-
mazioni vedi [7].

3.6.4 Codice per il ricevitore


Il codice sviluppato per il ricevitore è anch’esso basato sull’NDK (Network Develop-
ment Kit) fornito dalla TI per il DSP c6455. Dualmente al trasmettitore, il ricevitore
ha il compito di prendere i dati in ingresso dal campionatore analogico-digitale e fornirli
poi sottoforma di pagine web all’interfaccia Ethernet.
100 3. Implementazione con processori DSP

Figura 3.52: Schermata principale dell’interfaccia web del ricevitore implementato su


DSP C6455.

Per velocizzare i tempi di sviluppo e fornire un feedback visivo sui dati acquisiti
il firmware per il DSP del ricevitore utilizza una applet in tecnologia Flash deno-
minata FusionCharts Free (vedi http://www.fusioncharts.com/free); tale applet
richiede l’utilizzo di file XML per la graficazione delle forme d’onda acquisite e quindi
il programma sviluppato è in grado di generare “al volo” tali file.
Nelle figure 3.53 e 3.52 sono mostrate alcune schermate dell’interfaccia web imple-
mentata sul DSP.
La realizzazione del ricevitore è sempre più impegnativa rispetto a quella del tra-
smettitore (per questo si è utilizzato il DSP C6455, il più potente, a tale scopo); questo
significa in particolare che è necessario fare attenzione alle risorse (di elaborazione e
memoria) richieste da ogni fase della demodulazione.

In particolare, è l’acquisizione dei campioni del segnale e il loro processing in tempo


reale che rappresenta la vera sfida da risolvere con un sistema a DSP. In altri lavori
(vedi il riferimento [5]) si è optato per un sistema ad interrupt in cui tramite il sistema
DMA, senza occupare il processore principale, i dati vengono trasferiti in un certo
blocco di memoria e quando questo è pieno viene generato un interrupt. La routine
di risposta all’interrupt indica poi al sottosistema DMA una nuova zona libera di
memoria in cui salvare i dati e avvia contemporaneamente il processing nella zona di
memoria piena di dati “freschi”. Tale tecnica (denominata di “double-buffering”) è
sicuramente un metodo efficace e da tenere presente per future implementazioni ma di
3. Implementazione con processori DSP 101

Figura 3.53: Esempio di schemata di acquisizione dell’interfaccia web del ricevitore.

più difficile applicazione nel nostro caso a causa della presenza del framework Ethernet.
Rimane infatti da esplorare come può funzionare il sottosistema EDMA del DSP in
concomitanza con il framework Ethernet.
In ogni caso, a differenza del codice per il trasmettitore, il codice per il ricevitore
su DSP non è stato completato a causa dei problemi che sono di seguito descritti.

3.7 Conclusioni per l’implementazione a DSP


Nonostante tutti gli sforzi profusi nell’implementazione a DSP le conclusioni non sono
state positive. Il segnale generato dal trasmettitore sembra infatti corretto ad una
prima analisi (mediante oscilloscopio e analizzatore di spettro) ma è risultato impos-
sibile da demodulare quando si sono forniti i campioni raccolati dall’ADC allo script
MATLAB.
Come descritto nella sezione 3.4.3, lo script del ricevitore MATLAB può essere im-
postato nella modalità “ADC SYSTEM TEST ” (tramite il parametro MODE ) nella
quale invece che analizzare il segnale prodotto dallo script MATLAB del trasmettitore,
analizza il segnale salvato facendo uso del toolbox MATLAB chiamato “Link for Code
Composer Studio” che a sua volta permette di interfacciarsi ad un DSP collegato al
software Code Composer Studio della Texas Instruments e in particolare di leggere la
memoria della scheda EVM del DSP c6455 direttamente.
Facendo uso di tale strumento appena possibile si è provato ad analizzare il segnale
generato dal trasmettitore implementato su DSP c6424 e poi convertito dal DAC2904
e dall’ADS62P45.
Tale segnale è mostrato nelle figure 3.54 e 3.55 come appare all’uscita del DAC.
Nella figura 3.56 è invece mostrato come appare la metrica calcolata per il segnale
102 3. Implementazione con processori DSP

Figura 3.54: Foto del segnale di clock spedito dal DSP al DAC come viene mostrato
da un oscilloscopio a 4GSPS (per la modulazione a tempo di simbolo minore).

Figura 3.55: Foto del segnale di clock spedito dal DSP al DAC come viene mostrato
da un oscilloscopio a 4GSPS (per la modulazione a tempo di simbolo maggiore).
3. Implementazione con processori DSP 103

Bhargava−Letaief coarse timing metric


0.5

0.45

0.4

0.35

0.3

0.25

0.2

0.15

0.1

0.05

0
0 500 1000 1500 2000 2500 3000 3500

Figura 3.56: Metrica di coarse-timing calcolata dalla funzione OFDM rx() di MATLAB
sui dati campionati dall’ADS62P45.

come è stato salvato in memoria dopo il campionamento dal DSP c6455. Pur effet-
tuando numerosi tentativi il risultato non si discosta mai molto da quello mostrato.
Come appare evidente la metrica è molto diversa da quella tipica che si ha per un
segnale modulato (crf con fig. 3.16) e non supera mai o quasi mai un valore di soglia
adeguato (tipicamente si usa 0.8 o 0.9) che consenta di evitare false detections.
Come si può notare dalla fig. 3.30, il sistema è particolarmente sensibile all’offset
e al jitter di frequenza nelle frequenze di campionamento (da non confondere con il
CFO che è l’offset di frequenza nella portante). Si è dunque proceduto ad una analisi
più accurata dei segnali di clock forniti all’ADC e al DAC.

Funzione utilizzata Frequenza media Deviazione standard


rx: gpioGenerateClockTest asm() 11.10M Hz = 90.1ns 4.3ns
tx: gpioAsmTransmitRealData() 19.78M Hz = 50.5ns 1.8ns
tx: gpioAsmTransmitRealData SLOW() 3.84M Hz = 260ns 5.8ns

Per confronto la deviazione standard sul periodo di una sinusoide di frequenza


40MHz generata da un generatore di funzioni Agilent e misurata su un oscilloscopio
con ingresso adattato a 50Ω risulta essere di circa 30ps, ovvero circa 100 volte minore;
anche i datasheet dei convertitore utilizzati pongono particolare enfasi sull’importanza
di usare un clock a bassissimo jitter e consigliano l’uso di sorgenti di clock filtrate con
jitter dell’ordine dei femtosecondi, o senza voler spingersi al limite, nell’ordine dei
picosecondi.
104 3. Implementazione con processori DSP

I motivi di una metrica di coarse timing non funzionante sono quindi da ricercarsi
con tutta probabilità nella qualità dei segnali di clock che determinano la generazione
e l’acquisizione di un segnale analogico non corretto; le possibili fonti di un jitter cosı̀
elevato sono principalmente tre:

1. le schede EVM dei DSP non sono pensate per trasportare segnali ad alta velocità
e in particolare i buffer e i connettori che i segnali in uscita al DSP devono
attraversare non hanno ingressi e uscite adattate, determinando forti onde riflesse
che, pur non alterando il riconoscimento dei valori logici 1 e 0, cambiano il
periodo della forma d’onda in modo aleatorio, dando quindi origine a jitter;
a tale proposito bisogna notare che i segnali in ingresso e uscita al DSP sono
correttamente adattati a 50Ω ma che il problema è la scheda su cui tali segnali
viaggiano.

2. i cavi realizzati per l’interconnessione delle schede ADC e DAC ai DSP (e le


saldature realizzate su di essi) non sono particolarmente adatti alla trasmissione
ad alta frequenza dei segnali, nè tantomeno permettono un buon grounding fra
le due schede (che difatti presentano elevati disturbi sulla massa).

3. i DSP e i convertitori DC-DC switching presenti sulle schede EVM generano


un fondo di rumore molto elevato a frequenze multiple di quelle di funziona-
mento, rendendo quasi impossibile preservare un buon rapporto segnale-rumore
all’uscita del DAC e all’ingresso dell’ADC.

Purtroppo è difficile ovviare a questi problemi; inoltre anche le alternative di cloc-


king possibili (quali l’uso della stessa sorgente “pulita” di clock condivisa tra il DSP
e il DAC) non sono possibili nella pratica visto che le schede EVM dei DSP non
permettono l’uso di una fonte di clock esterna.
Identificati dunque questi problemi e la criticità dei fattori da cui derivano, si è
infine deciso di cambiare completamente la piattaforma hardware su cui realizzare il
modem, passando dunque dai DSP alle FPGA.
Capitolo 4

Implementazione con dispositivi


FPGA

4.1 Architettura del sistema


Come già trattato nella sez. 3.1, le caratteristiche del sistema da realizzare (in par-
ticolare la bassa frequenza della portante) rendono molto competitiva l’architettura
“direct digital synthesis”, che quindi si è scelto di perseguire non solo con i DSP ma
anche con le FPGA. Non è stato però possibile all’interno del progetto di tesi occupar-
si anche dei dettagli di interconnessione dei vari sistemi coinvolti (PC, FPGA, ADC
e DAC), vista anche la momentanea mancanza delle relative schede hardware; nelle
sezioni seguenti ci si concentrerà quindi sulle caratteristiche hardware delle FPGA, che
come già accennato, richiedono l’uso di un approccio completamente diverso rispetto
ai DSP, le MCU e le CPU in generale.

4.1.1 Cenni relativi alla storia delle FPGA


L’industria delle FPGA è nata dalle memorie programmabili a sola lettura (PROM)
e dai dispositivi logici programmabili (PLD).
Sia i dispositivi PROM che i PLD avevano entrambi la possibilità di essere program-
mati in serie in fabbrica o direttamente “sul campo” (field programmable) ma la logic
programmabile che essi contenevano era interconnessa in modo fisso, non alterabile,
fra le varie celle logiche.
Il co-fondatore della Xilinx, Ross Freeman, e Bernard Vonderschmitt, inventarono
il primo FPGA (field-programmable gate array) nel 1985 — il chip XC2064. Il XC2064
aveva porte programmabili e interconnessioni fra tali porte anch’esse programmabili,
e segnava quindi gli inizi di una nuova tecnologia e di un nuovo mercato. Il dispositivo
XC2064 vantava giusto 64 blocchi logici configurabili (configurable logic blocks - CLB),
con due tabelle di lookup (LUT) a 3 ingressi.
Più di 20 anni dopo Freeman entrò nella “National Inventor’s Hall of Fame” degli
Stati Uniti per la sua invenzione. In seguito, alcuni dei concetti e delle tecnologie
basilari dell’industria FPGA furono brevettati da David W. Page e LuVerne R. Peter-
son nel 1985. A fine del 1980 l’esercito statunitense finanziò un esperimento proposto

105
106 4. Implementazione con dispositivi FPGA

da Steve Casselman per sviluppare un computer che implementasse 600 mila porte
riprogrammabili. Casselman ebbe successo e il suo sistema fu brevettato nel 1992.
La Xilinx continuò senza rivali e crebbe velocemente dal 1985 fino a metà anni ’90,
quando iniziarono a presentarsi dei concorrenti, erodendo quote di mercato significa-
tive, tantè che nel 1993 l’Actel, rivale della Xilinx, arrivò a servire il 18 percento del
mercato.
Gli anni ’90 furono un periodo di grande crescita delle FPGA, sia nella loro com-
plessità interna sia nel volume di produzione. Nei primi anni ’90 le FPGA erano
usate principalmente nelle telecomunicazioni e negli impianti di rete; a metà degli an-
ni ’90 le FPGA avevano trovato applicazione nei mercati consumer, automobilistico e
industriale.
E’ da citare anche un’applicazione che ebbe un certo successo e portò alla ribalta le
FPGA nel 1997, quando Adrian Thompson fuse la tecnologia degli algoritmi genetici
con le FPGA per creare un dispositivo di riconoscimento audio.
Una tendenza più recente è stata quella di portare ad un grado superiore l’ap-
proccio architetturale combinando i blocchi logici e le interconnessioni delle FPGA
tradizionali con microprocessori embedded e periferiche correlate per formare un com-
pleto “programmable system-on-chip” (PSOC); esempi di tale tecnologia ibrida può
essere trovata nei dispositivi Xilinx Virtex-II PRO e Virtex-4, che includono uno o più
processori PowerPC integrati; l’Atmel FPSLIC è un’altro dispositivo di tal genere, che
usa un processore AVR in combinazione con l’architettura logica programmabile.
Un approccio alternativo all’uso di processori cablati è quello di fare uso dei pro-
cessori “soft” (o meglio di “soft processor cores”) che sono funzionalmente analoghi
a quelli cablati ma implementati sulle stesse celle logiche general-purpose messe a
disposizione dall’FPGA.
Come accennato precedentemente, molte FPGA moderne hanno la capacità di
essere riprogrammate in tempo reale e questo sta conducendo all’idea di realizzare
sistemi completamente riconfigurabili: CPU che possono adattarsi al meglio al compito
da svolgere.
Per meglio capire l’evoluzione e la crescita del settore sono di seguito forniti alcuni
dati.

Anno Blocchi/elementi logici


1985 64 (Xilinx, XC2064)
1992 208 (Altera, Flex8k EPF8282A)
1995 576 (Altera, Flex10K EPF10K10)
1999 7.4k (Xilinx, XC4085XL)
2001 27.6k (Xilinx, Virtex1 XCV1000)
2002 20k (Altera, Cyclone1 EP1C20)
2008 820k (Altera, Stratix IV)
2009 566k (Xilinx, Virtex6 XC6VHX565T)
4. Implementazione con dispositivi FPGA 107

PLL IOEs PLL

Embedded
Multipliers

Logic Logic Logic Logic


IOEs IOEs
Array Array Array Array

M4KBlocks M4KBlocks

PL L IOEs PL L

Figura 4.1: Struttura generica delle FPGA Cyclone II. Le colonne IOEs indicano gli
Input/Output Elements; i blocchi M4K sono memoria SRAM integrata.

Anno Dimensione mercato


FPGA (M$=106 $)
1987 14M$
1993 385M$
2005 1900M$
2010 2750M$ (stima)

4.1.2 Funzionamento interno dei dispositivi Cyclone II


Introduzione
In questa sezione verrà analizzata la struttura interna di una famiglia di dispositivi FP-
GA prodotto dalla Altera, denominata “Cyclone II” (vedi la fig. 4.1); tali dispositivi
appartengono alla fascia medium-level e sono un buon esempio di rapporto presta-
zioni/consumo/prezzo; difatti la loro architettura riflette quella di gran parte delle
FPGA in commercio (anche se per i prodotti della Xilinx viene in generale usata una
differente terminologia: CLB invece che LE, etc).
Le informazioni proposte in questa sezione non vanno dunque viste come specifiche
per il modello sopra citato di FPGA, ma piuttosto come una generica presentazione
delle caratteristiche tipiche di tali dispositivi.
A tal proposito vengono di seguito elencate le caratteristiche generiche per la
famiglia Cyclone II:

• blocchi di memoria integrati (nella forma di SRAM);


• supporto per clock fino a 260MHz;
108 4. Implementazione con dispositivi FPGA

• moltiplicatori integrati (fino a 150 moltiplicatori 18x18 bit o 9x9 bit);

• rete del clock gerarchica;

• 4 PLL (digitali, per la distribuzione del clock);

• supporto per svariati sistemi di configurazione (seriale, JTAG, etc);

e quelle relative al supporto I/O avanzato:

• supporto per interfacce a diverse tensioni: 1.5V, 1.8V, 2.5V, 3.3V;

• corrente di uscita dei pin programmabile;

• uscite open-drain programmabili;

• terminatori on-chip programmabili;

• standard differenziali supportati:

1. Low Voltage Differential Signalling (LVDS);


2. Low-voltage positive emitter-coupled logic (LVPECL);
3. Reduced Swing Differential Signaling (RSDS);
4. High-Speed Transceiver Logic (HSTL);
5. Stub Series Terminated Logic (SSTL);

e standard single-ended supportati:

1. versione single-ended degli standard SSTL, HSTL;


2. Peripheral Component Interconnect (PCI);
3. Low Voltage CMOS ( LVCMOS);
4. Low Voltage TTL (LVTTL).

Come si può intuire dalla breve lista presentata, le FPGA sono estremamente
flessibili ed inoltre sono capaci di trasferire notevoli quantità di dati in ingresso e uscita,
sia grazie al loro elevatissimo parallelismo interno, sia grazie alla grande compatibilità
con tutti gli standard elettrici in uso oggigiorno nei sistemi digitali.

Gli elementi logici


La più piccola unità logica dell’architettura delle FPGA Cyclone II è il logic element
(LE; vedi la fig. 4.2); esso integra varie funzioni:

• Una look-up table (LUT) a quattro ingressi, con la quale è possibile implementare
qualsiasi funzione di quattro variabili;

• registi programmabili;
4. Implementazione con dispositivi FPGA 109

Register Chain
Routing From
Previous LE
LAB-Wide Register Bypass
Synchronous
LABCarry-In
Load Programmable
LAB-Wide Packed Register
Synchronous Register Select
Clear

data1 Row, Column,


data2 Look-Up Synchronous And Direct Link
data3 Carry D Q
Table Load and Routing
Chain
(LUT) Clear Logic
data4
ENA
CLRN Row, Column,
And Direct Link
Routing
labclr1
labclr2 Asynchronous
Clear Logic Local Routing
Chip-Wide
Reset
(DEV_CLRn)
Register Chain
Clock & Register Output
Clock Enable Feedback
Select
labclk1
labclk2

labclkena1
labclkena2
LABCarr y-Out

Figura 4.2: Struttura di un elemento logico (LE).


110 4. Implementazione con dispositivi FPGA

• una connessione per la catena di riporto (carry chain);

• la possibilità di gestire tutti i tipi di interconnessione: local, row, column, register


chain, and direct link interconnects;

• supporto per un registro di packing;

• supporto per un registro di feedback.

I registri o latch delle LE posso essere configurati in modalità D, T, JK oppure


SR. I registri hanno pin di dati, clock, clock enable e clear input. I segnali che usano
il clock globale o i pin generici di I/O possono gestire il clock del registro ed il clear
control signal; i pin generici di I/O o la logica interna possono comandare il clock
enable. Per le funzioni combinatorie l’uscita della LUT può bypassare il registro ed
agire direttamente sulle uscite del LE.
La funzionalità “register packing”, che consiste nell’usare la LUT per gestire un’u-
scita ed il registro per gestirne un’altra indipendentemente, permette di migliorare
l’utilizzo del dispositivo.
Le uscite di riporto del registro consentono ai registri contenuti nella stessa LAB
di essere configurati in cascata.
Le LUT presenti possono operare in uno dei seguenti modi:

• modalità normale;

• modalità aritmetica.

Ogni modalità utilizza le risorse degli elementi logici in modo diverso. La pri-
ma è usata per applicazioni logiche generali e per l’implementazione di funzioni lo-
giche combinatorie; in tale modalità gli ingressi della LUT sono collegati a quat-
tro interconnessioni locali provenienti dall’array di blocchi logici (LAB) descritto in
seguito.
La modalità aritmetica (vedi la fig. 4.3) è invece l’ideale per l’implementazione
di sommatori, contatori, accumulatori e comparatori. Un LE in Arithmetic Mode
implementa un full adder a 2 bit ed un catena di riporto.

Gli array di blocchi logici


Gli elementi logici descritti prima sono organizzati in array. Ciascun array di blocchi
logici (Logic Array Blocks - LAB; vedi la figura 4.4), consiste in:

• 16 elementi logici (LE);

• segnali di controllo del LAB;

• catene di riporto dei elementi logici (LE);

• catene di registri;

• interconnessioni locali;
4. Implementazione con dispositivi FPGA 111

sload sclear
(LABWide) (LABWide)

Register chain
connection

data1
Three-Input Q Row, column, and
data2
LUT D direct link routing

Row, column, and


ENA
CLRN direct link routing
cin (from cout Three-Input clock (LABWide)
of previous LE) LUT
ena (LABWide)
Local routing
aclr (LABWide)

cout

Register
chain output

Register Feedback

Figura 4.3: Struttura di un elemento logico (LE) configurato in modalità aritmetica.

Le interconnessioni locali trasferiscono i segnali fra gli elementi logici (LE) all’in-
terno dello stesso array di blocchi logici (LAB): le connessioni fra le catene di riporto
infatti trasferiscono le uscite del registro di un elemento logico a quello adiacente (al-
l’interno dello stesso LAB). Il compilatore Quartus II posiziona la logica associata
dentro il LAB o nei LAB adiacenti.
La interconnessione LAB locale è pilotata dalle interconnessioni di riga e di colonna
e dalle uscite degli elementi logici di quel LAB. Gli array adiacenti, cosı̀ come pure le
PLL, i moltiplicatori integrati e i blocchi di RAM M4K possono anch’essi pilotare le
interconnessioni locali grazie alle connessioni dirette (direct links), le quali minimizzano
l’uso delle interconnessioni locali di riga e di colonna. Ciascun elemento logico può
pilotare 48 altri elementi logici attraverso interconnessioni locali veloci e “direct link”
(che sono mostrati nella fig. 4.5).
Ciascun LAB contiene logica dedicata per pilotare i segnali di controllo dei suoi
elementi logici, che sono:

• due clock;

• due clock enable;

• due “clear” asincroni;

• un “clear” sincrono;

• un “load” sincrono;
Ciascun LAB può anche avere fino a 4 segnali non-globali di controllo; lo schema
relativo è mostrato nella fig. 4.6.
112 4. Implementazione con dispositivi FPGA

Row Interconnect

Column
Interconnect

Direct link
Direct link interconnect
interconnect from adjacen t
from adjacent block
block

Direct link Direct link


interconnect interconnect
to adjacent to adjacent
block block

LAB Local Interconnect

Figura 4.4: Struttura dell’array di blocchi logici (LAB) della famiglia di FPGA Cyclone
II.
Direct link interconnect from Direct link interconnect from
left LAB, M4Kmemory right LAB, M4Kmemory
block, embedded multiplier, block, embedded multiplier,
PLL, or IOEoutput PLL, or IOEoutput

Direct link Direct link


interconnect interconnect
to left to right

Local
LAB
Interconnect

Figura 4.5: Connessione diretta (direct link).


4. Implementazione con dispositivi FPGA 113

Dedicated 6
LABRow
Clocks

Local
Interconnect

Local
Interconnect

Local
Interconnect

Local
Interconnect
labclkena1 labclkena2 labclr1 synclr

labclk1 labclk2 syncload labclr2

Figura 4.6: Segnali di controllo all’interno di un array di elementi logici (LAB).

E’ infine da notare che i dispositivi Cyclone II sono forniti di un segnale di reset


globale per l’intero chip (denominato DEV CLRn); tale segnale resetta tutti i registri
dell’FPGA e ha una priorità più alta di tutti gli altri segnali di controllo.

La rete globale di clock e i PLL


I dispositivi Cyclone II prevedono un rete di clock globale e quattro PLL (vedi la fig.
4.7). Le PLL fornite possono essere usate per fornire le seguenti funzioni:

• moltiplicazione e divisione del clock;

• shift di fase;

• duty cycle programmabile;

• uscite di clock per supporto all’I/O differenziale;

• cambio manuale del clock;

I moltiplicatori integrati
Le FPGA della famiglia Cyclone II integrano al loro interno dei blocchi moltiplicatori
(vedi la fig. 4.8) ottimizzati per calcoli intensivi per il digital signal processing (DSP),
per i filtri FIR, per la FFT, e per la discrete cosine transform (DCT). I moltiplicatori
hanno due modalità di utilizzo, che dipendono dalle necessità dell’applicazione:

• un moltiplicatore a 18bit;

• fino a due moltiplicatori indipendenti a 9bit.

L’operando di ciascun moltiplicatore può essere un numero con segno o senza segno.
114 4. Implementazione con dispositivi FPGA

VCO Phase Selection


Selectable at Each
PLL Output Port
Post-Scale
Counters

Manual Clock 8
Switchover Reference Global
Input Clock ÷c0
Select Signal Clock
fREF = fIN /n
fVCO
CLK0 (1) up
CLK1 inclk0 fIN 8
Charge Loop Global
÷n PFD VCO ÷k ÷c1
Pump Filter Clock
CLK2 (1) inclk1
down (3)
CLK3

fFB 8
÷c2 Global
(2) Clock

÷m
PLL< #>_OUT

Lock Detect To I/O or


& Filter general routing

Figura 4.7: Schema di funzionamento di una PLL digitale all’interno delle FPGA
Cyclone II.

signa (1)
signb (1)
aclr
clock
ena

Data A D Q
ENA
Data Out
D Q
CLRN ENA

CLRN
Data B D Q
ENA Output
Input Register
CLRN Register

Embedded Multiplier Block

Figura 4.8: Moltiplicatore integrato nelle FPGA Cyclone II.


4. Implementazione con dispositivi FPGA 115

channel Matched baseband


data in {dn} Symbol symbols {cn} signal s(t) sRF(t)
filter
mapper
p(t)

exp{j2pfct}
Local
oscillator

FIR filter Re{s(t)}


(Ts-1) p[n] DAC

cos(2pfct)
m bits
Re{cn}
bits in {dn} Bit groups Symbol Local sRF(t)
generator … mapper Oscillator
Im{cn}
sen(2pfct)

FIR filter Im{s(t)}


(Ts-1) p[n] DAC

Figura 4.9: In alto: schema base di un trasmettitore PAM. In basso: schema più
dettagliato dello stesso trasmettitore, con implementazione digitale dei filtri adattati.

4.2 Generalità sui sistemi PAM a singola portante


Come si è visto nella sez. 3.2, la modulazione OFDM comporta una certa complessità
implementativa (dovuta sia alle operazioni di FFT/IFFT sia al framework di sincroniz-
zazione che richiede) nel trasmettitore e soprattutto nel ricevitore. Questa complessità
addizionale unita alla assenza di know-how legato alla tecnologia FPGA (che a dispet-
to dei DSP richiede una differente “impostazione concettuale”) ha fatto propendere la
scelta del formato di modulazione, per quanto riguarda l’implementazione descritta in
questo capitolo, su una soluzione più semplice quale quella PAM a singola portante.

4.2.1 Il trasmettitore
Nella figura 4.9 sono riportati due schemi (uno più generico ed uno più pratico) della
struttura di un trasmettitore PAM [1]; in tali schemi a blocchi {dn } è una sequenza di
bit zero/uno WSS (wide sense stationary; stazionaria in senso lato)1 . Il symbol mapper
traduce tale sequenza in una sequenza complessa di simboli di canale {cn } appartenenti
ad un alfabeto M -ario Ac ; esso associa cioè ad ogni gruppo di m = log2 M bit della
sequenza {dn } una coppia di valori che rappresenta un punto nel piano complesso.
L’alfabeto Ac è detto costellazione della modulazione e viene normalmente scelto
fra una delle seguenti classi:

l
1. M -PSK: Ac = {sl = ej2π M , l = 0, 1, ..., M − 1} che consiste nella disposizione
degli M punti su una circonferenza di raggio unitario; il nome phase-shift-keying
deriva dal fatto che i vari simboli complessi sl differiscono solo per la loro fase e
non per il modulo;
1
Ovvero che rispetta le condizioni E{dn } = costante; E{dn+k dn } dipendente solo da k.
116 4. Implementazione con dispositivi FPGA

2. M -ASK: Ac = {±1, ±2, ..., ±(M − 1)} = {sl = (M − 1) − 2l, l = 0, 1, ..., M − 1}


che consiste nella disposizione degli M punti sulla retta dei numeri reali, centrati
rispetto l’origine; da qui il nome di amplitude-shift-keying;

3. M -QAM: Ac = {±1 ± j, ±2 ± 2j, ..., ±(M − 1) ± j(M − 1)} che consiste nella
disposizione degli M punti su un reticolo centrato nell’origine del piano comples-
so; il nome quadrature-amplitude-modulation deriva dal fatto che le proiezioni dei
simboli
√ che compongono Ac si possono pensare come appartenenti a due segnali
M -ASK indipendenti (quindi due segnali modulati solo in ampiezza), uno asso-
ciato alla parte reale ed uno associato alla parte in fase (e quindi in quadratura,
ovvero ortogonali, l’uno rispetto all’altro);

Tali simboli sono poi forniti, a frequenza di simbolo T1s , in ingresso ad un filtro adat-
tato con risposta impulsiva p(t); il segnale (complesso) risultante s(t, c) è il cosiddetto
inviluppo complesso del segnale modulato e si esprime analiticamente come:

+∞

s(t, c) = cn p(t − nTs )
n=−∞

Tale segnale, se si utilizza un impulso p(t) a radice di coseno rialzato con roll-off α,
di dimostra avere una occupazione di banda pari circa a 0; 1+α 2Ts . Per adattarlo al ca-
nale di trasmissione (che tipicamente è di tipo passa-banda e non passa-basso) è quindi
necessaria una operazione di conversione di frequenza, che si esprime analiticamente
come:

sRF (t) = Re{s(t, c)ej2πfc t }


Si veda a tal proposito anche l’eq. equivalente 3.78.
In basso nella figura 4.9 è poi mostrato uno schema più pratico di generazione
del segnale PAM in cui si sono messi in evidenza i due rami in fase e in quadratura
(corrispondenti a Re{s(t, c)} e a Im{s(t, c)}) nonchè il blocco “bit groups generator”
che effettua l’operazione di conversione seriale/parallelo per la mappatura dei bit in
ingresso.
Come si può notare tale sistema è in pratica lo stesso sistema descritto nel cap. 3
e in particolare nella sezione 3.4, eccetto per l’operazione di FFT/IFFT che qui non è
richiesta.

4.2.2 Il ricevitore
Nella figura 4.10 sono riportati due schemi equivalenti della struttura di un demodu-
latore PAM. In tali schemi, assumendo il canale AWGN e con guadagno unitario, il
segnale rRF (t) vale sRF (t) + w(t) dove w(t) è rumore AWGN. L’operazione di down-
conversion, come già illustrato nella sez. 3.4, permette la ricostruzione quasi-perfetta
dell’inviluppo complesso r(t):

r(t) = s(t) + n(t)


4. Implementazione con dispositivi FPGA 117

received RF received baseband


Matched xk channel
~
signal rRF(t) signal r(t) signal x(t) Optimum symbols {c~n} Symbol data out {dn}
filter
detector demapper
p(t) tk
exp{j2pfct}
Local
oscillator

Re{r(t)} FIR filter Re{x(t)}


ADC
p[n] tk
Re{xk}
cos(2pfct)
~ m bits
Re{cn}
~
rRF(t) Local Synch Optimum Symbol Bit groups bits out {dn}
Oscillator recovery detector demapper … generator
Im{c~n}
sen(2pfct)
Im{xk}
Im{r(t)} Im{x(t)}
FIR filter
ADC
p[n] tk

Figura 4.10: In alto: schema base di un ricevitore PAM. In basso: schema più
dettagliato dello stesso ricevitore, con implementazione digitale dei filtri adattati.

dove n(t) è un processo aleatorio di rumore AWGN. Tale segnale, passando attraverso
il filtro adattato, viene campionato a frequenza di simbolo generando la sequenza xk ; il
blocco optimum detector poi si occupa di decidere per ogni campione il simbolo com-
plesso, appartenente all’alfabeto Ac , a cui associarlo (tipicamente secondo il criterio
ottimo ML) generando dunque la sequenza {c̃n }. Tale sequenza differisce da {cn } solo
se si sono verificati errori a causa di problemi di sincronismo o di picchi di rumore. La
sequenza viene infine demappata generando la sequenza di bit ricostruiti.
In basso nella figura 4.10 è nuovamente mostrato uno schema pratico di demodu-
lazione in cui si sono messi in evidenza i due rami in fase e in quadratura nonchè il
blocco che si occupa del recupero di sincronismo di clock e di frequenza di portante (il
“synch recovery”); gli algoritmi che si utilizzano per realizzare quest’ultima funzione
sono l’oggetto della sezione che segue.

4.3 Sincronizzazione nei sistemi PAM a singola portante


Data la maggiore semplicità di un sistema PAM rispetto ad uno OFDM, la letteratura
relativa convenzionalmente non presenta un’architettura di sincronizzazione troppo
evoluta: di solito non vi è distinzione fra coarse e fine timing, ma in generale sono
disponibili solo algoritmi di symbol timing e carrier recovery.
Tuttavia, nel nostro caso si è voluto implementare una architettura simile a quella
usata per il sistema OFDM; ciò permette sia un riutilizzo e un maggior velocità di
conversione fra un tipo di sistema e l’altro, nonchè un recupero del sincronismo più
veloce, cosa molto utile per un sistema con trasmissioni a burst.

4.3.1 Algoritmi per la temporizzazione grezza


Come descritto nella sez. 3.3.4 la prima cosa che un ricevitore OFDM, ma anche uno
PAM, deve effettuare normalmente è la rilevazione di un eventuale frame presente sul
118 4. Implementazione con dispositivi FPGA

canale.
Poichè gli algoritmi descritti nella sopracitata sezione non sono in realtà specifici
per l’OFDM in quanto non richiedono nel trasmettitore e nel ricevitore alcuna ope-
razione di FFT o IFFT, si è deciso di riutilizzarli per la temporizzazione coarse del
sistema PAM.
Scartato l’algoritmo proposto da Schmidl e Cox (troppo impreciso) si è preferito
adottare la metrica ed il reference-block proposto da Shi&Serpedin, vista la sua minore
complessità computazionale rispetto quello di Bhargava e Letaief. Si rimanda alla
sezione sopracitata relativa al sistema OFDM per maggiori dettagli.

4.3.2 Algoritmi per la temporizzazione fine


Per ciò che riguarda la temporizzazione fine (nel contesto delle modulazioni PAM
detta symbol timing), sono disponibili vari algoritmi (vedi [8], [20], [21]); la necessità
di semplicità ha fatto propendere per la scelta dell’algoritmo detto “zero crossing
time-error detector” (o anche semplicemente “zero crossing detector”, ZCD).
Tale algoritmo (presentato in [22] ma descritto anche in [8]) calcola una stima
dell’errore di timing e(k) per il k-esimo simbolo PAM mediante l’equazione:

e(k) = (ĉk−1 − ĉk )y(kTs − Ts /2 + τ̂ k−1 ) k = 1, 2, ...N − 1 (4.1)


dove i simboli (complessi) ĉk−1 , ĉk rappresentano le decisioni effettuate dal demodula-
tore rispettivamente per il (k − 1)-esimo e per il k-esimo simbolo PAM (nel caso in cui
l’algoritmo sia usato in modo non-data-aided, ma decision-directed, NDA DD) oppure
il (k −1)-esimo e il k-esimo simbolo di canale noto (nel caso in cui l’algoritmo sia usato
in modo data-aided, DA).
Il segnale tempo-continuo y(t) è l’uscita del filtro adattato del ricevitore, mentre
τ̂ k−1 indica l’offset frazionario del tempo di simbolo Ts calcolato grazie allo ZCD stesso
nell’iterazione precedente (si assume τ̂ 0 = 0).
Per completare la presentazione dell’algoritmo è necessaria un’equazione addizio-
nale, che stabilisca come viene usato l’errore e(k) per il calcolo dell’offset τ̂ k da usare
per i successivi campionamenti. Nel nostro caso si è semplicemente posto:

τ̂ k = τ̂ k−1 + |e(k)| (4.2)


Si può dare una spiegazione intuitiva dell’eq. (4.1): il termine y(kTs − Ts /2 + τ̂ k−1 )
rappresenta il valore (complesso) del segnale ricevuto mezzo tempo di simbolo dopo
l’istante di campionamento usato per decidere a favore di ĉk−1 e metà tempo di simbolo
prima dell’istante di campionamento che verrà usato per decidere ĉk . Se ĉk−1 = ĉk ,
allora il segnale in fase e/o quello in quadratura effettuano una transizione fra gli
istanti relativi ai due simboli che, nel caso si utilizzi una costellazione 4-PSK o una
BPSK, deve necessariamente passare per lo zero (visto che ĉk si trova necessariamente
in un altro quadrante del piano complesso rispetto ĉk−1 ).
Tale transizione per lo zero si verifica solo approssimativamente (a causa del fil-
traggio del trasmettitore e del ricevitore) a metà “strada” fra ĉk−1 e ĉk . Comunque
il risultato è che se ĉk−1 = ĉk , non vi sono correzioni nell’istante di campionamento
(e(k) = 0), mentre se ĉk−1 = ĉk , allora e(k) ≈ 0 solo se y(kTs −Ts /2+τ̂ k−1 ) ≈ 0, ovvero
4. Implementazione con dispositivi FPGA 119

Figura 4.11: Curva S per lo zero-crossing detector (ZCD) per diversi valori dell’ordine
M della costellazione; vedi [8, fig. 7.17, pag. 386].

se l’offset di campionamento τ̂ k−1 è già corretto e fa sı̀ che l’istante t = kTs −Ts /2+τ̂ k−1
si trovi a metà fra gli istanti di campionamento ideali per ĉk−1 e ĉk .
Per valutare le prestazioni di un algoritmo di symbol timing si può fare riferimento
alla curva S, ovvero all’aspettazione della quantità e(k) al variare di τ̂ = Tδs (che è
l’offset temporale da stimare ad anello aperto); se lo stimatore è perfettamente lineare
la curva S diviene una retta. La curva S per lo ZCD è mostrata nella fig. 4.11.
Si rimanda a [8, pag. 386] per ulteriori informazioni dello ZCD (self-noise, confronto
con l’algoritmo Mueller&Mueller, etc).

4.4 Simulazione MATLAB del sistema


Per testare il sistema si è proceduto come già fatto per i DSP nel realizzare dapprima
un simulatore in MATLAB.
Gli script del trasmettitore e del ricevitore PAM sono organizzati all’incirca nello
stesso modo in cui sono organizzati i rispettivi script per la modulazione OFDM,
descritti in dettaglio nella sez. 3.4; quindi in questa sezione si forniranno informazioni
solo sulle principali differenze.
120 4. Implementazione con dispositivi FPGA

4.4.1 Il trasmettitore
Lo script PAM tx.m contiene la funzione PAM tx() che proprio come OFDM tx() richiede
che siano dapprima inizializzate alcune costanti presenti sia nel trasmettitore che nel
ricevitore (cosa di cui si occupa lo script PAM system.m).
La funzione calcola i campioni di uscita per un frame PAM, il quale è composto da
un numero fisso Nsynch symbols per f rame di simboli noti (il reference block della metrica
di Shi&Serpedin descritto nella sezione precedente, usato anche per il symbol timing
fine) e da un numero fisso Ndata symbols per f rame di simboli PAM che codificano dati
utili.
Non vi sono altre sostanziali differenze con quanto già detto a proposito della
funzione OFDM tx().

4.4.2 Il ricevitore
La funzione PAM rx() si occupa della demodulazione utilizzando gli algoritmi descritti
nella sez. precedente. Il valore del parametro SIGNAL SOURCE determina la sorgente
dei dati analizzati dalla funzione; in modalità “MATLAB TX ” vengono analizzati i
dati generati da MATLAB; in modalità “SIMULINK TX ” vengono analizzati quelli
prodotti dal modello Simulink che verrà descritto nella sez. 4.5.
Sui dati caricati la funzione effettua le operazioni di conversione di frequenza
(down-conversion), filtraggio e calcolo della metrica di coarse timing in maniera del
tutto simile a quanto fa OFDM rx().
Relativamente al calcolo della metrica di coarse timing, per il nostro sistema si
è scelto un blocco di dimensione N = 16 e la metrica classica (vedi eq. (3.67)) è
stata modificata per renderne più agevole l’implementazione (in Simulink, descritta in
seguito):

Γ(θ̃) = Λ1 (θ̃) + Λ2 (θ̃) + Λ3 (θ̃) (4.3)


dove:

Λ1 (θ̃) = rT0 (θ̃)r1 (θ̃) − rT1 (θ̃)r2 (θ̃) − rT2 (θ̃)r3 (θ̃)
Λ2 (θ̃) = rT1 (θ̃)r3 (θ̃) − rT0 (θ̃)r2 (θ̃)
Λ3 (θ̃) = rT0 (θ̃)r3 (θ̃)

in cui l’operatore rT rappresenta il vettore r trasposto: il reference-block dell’algorit-


mo di Shi&Serpedin è infatti modulato solo in fase e quindi dei vettori del segnale
ricevuto r sono state prese solo le parti reali e all’operatore hermitiano (che effettua
la trasposizione e l’operazione di complesso coniugato) si è sostituito quello di traspo-
sizione. Si sono inoltre eliminate le operazioni di modulo nonchè il denominatore di
normalizzazione della metrica.
Quest’ultima operazione si può giustificare grazie al fatto che in una implementa-
zione concreta il range dei valori della sequenza in ingresso al blocco di coarse timing
(ovvero l’escursione dei valori rj (θ̃)) è circa costante grazie alla presenza di un amplifi-
catore a guadagno automatico (automatic gain control - AGC) prima del campionatore
4. Implementazione con dispositivi FPGA 121

A/D; non c’è quindi bisogno di effettuare l’operazione aggiuntiva di normalizzazione


a patto di fissare una soglia per la metrica opportunamente calibrata.
Sempre per motivi di semplicità dell’implementazione Simulink descritta in segui-
to, la funzione PAM rx() non effettua l’equalizzazione come descritto per l’OFDM, in
cui si utilizzava uno stimatore per la CIR basata sull’intero reference-block di Bhar-
gava&Letaief, ma piuttosto si limita unicamente a correggere il CPO (Carrier Phase
Offset) sfruttando la conoscenza della fase assoluta di un singolo simbolo noto.
In particolare, supponendo il canale AWGN, una volta che si è effettuata la stima
coarse dell’inizio del frame, basta controruotare tutto il segnale ricevuto, effettuando
l’operazione:

 
Ts
φ̂CP O = ∠r θ̃ + m − ∠β(m)
Tc
requ (t) = r(t)e−j φ̂CP O (4.4)

in cui m è l’indice del simbolo noto scelto per l’equalizzazione, β(m) è il simbolo di
canale scelto, θ̃ è l’indice del campione ritornato dalla metrica di coarse-timing, r(t) è
il segnale (complesso) ricevuto in banda base dopo il filtraggio adattato.
Un fattore importante da tenere in conto nella scelta del valore esatto del parametro
m è che in questa fase non si è ancora effettuata
 l’operazione di stima fine del symbol
Ts
timing e quindi in generale r θ̃ + m Tc non corrisponde al campione del simbolo m-
esimo del reference-block ma disterà da esso fino a ± TTsc campioni. Per questo è bene
scegliere una “zona” (tramite la selezione del valore di m) del reference-block trasmesso
che sia costituita da più di due-tre simboli dello stesso valore, in modo da essere il più
insensibile possibile nella fase di equalizzazione agli errori di timing.
Ottenuto il segnale equalizzato requ (t) la funzione PAM rx() procede con la stima
fine del symbol-timing tramite l’eq. (4.1) dello stimatore ZCD descritto nella sez.
precedente.
Un esempio di andamento del segnale di errore e(k) computato è mostrato nella
fig. 4.12; si può notare che la funzione va spesso a zero a causa di punti nel reference-
block in cui ĉk−1 − ĉk = 0; tuttavia complessivamente l’inviluppo del segnale ha un
andamento che tende a zero (senzaperò raggiungerlo perfettamente).
Questo è dovuto, come già detto, al fatto che lo stimatore ZCD assume che il
segnale attraversi lo zero sempre a metà della coppia di simboli di canale filtrati che
determinano la transizione; questo non è vero, come appare evidente, ad esempio, dalla
fig. 4.13: il segnale segue traiettorie varie e passa per lo zero alle volte prima, alle volte
dopo rispetto la metà di un tempo di simbolo Ts .
Due note ulteriori sullo stimatore di symbol timing fine sono:

1. dopo l’aggiornamento di τ̂ k (vedi eq. (4.2)) la funzione MATLAB effettua un


controllo sul nuovo valore di τ̂ k per evitare che diventi negativo (imponendo come
limite inferiore lo zero) o maggiore di un tempo di simbolo (imponendo come
limite superiore per l’appunto Ts ); questo serve ad evitare che un passo sbagliato
nell’algoritmo (a causa del rumore, di un coarse timing offset molto lontano
122 4. Implementazione con dispositivi FPGA

ZCD error e(k)


0

−50

−100

−150

−200

−250

−300

−350

−400

−450
0 5 10 15 20 25 30 35
Index k of the synchronization symbol

Figura 4.12: Segnale errore e(k) per un frame PAM contenente 16 simboli di sincro-
nizzazione (e in cui la stima coarse fornisce l’indice di un campione posizionato oltre
l’istante ideale di campionamento).
6 Eye Diagram for In−Phase Signal
x 10
1

0.5
Amplitude

−0.5

−1
−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4
Time

6 Eye Diagram for Quadrature Signal


x 10
1

0.5
Amplitude

−0.5

−1
−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4
Time

Figura 4.13: Diagramma ad occhio relativo alla trasmissione di 4000 simboli PAM
(4-PSK), con filtro a radice di coseno rialzato di ordine 99 con coefficiente di roll-off
α = 0.5, e con un SNR infinito.
4. Implementazione con dispositivi FPGA 123

dall’istante di campionamento ideale o di errori numerici) comprometta tutta la


demodulazione forzando il campionamento successivo ad avvenire eccessivamente
lontano da quello precedente;

2. l’equazione di stima dell’errore e(k) non è esattamente l’eq. (4.1) ma piuttosto:

e(k) = γ(ĉk−1 − ĉk )requ (kTs − Ts /2 + τ̂ k−1 ) (4.5)

Per spiegare il fattore γ aggiuntivo è utile considerare un caso specifico: suppo-


niamo che sia k = 1, ĉ1 = 1, ĉ2 = −1, e che a causa di un offset di − T2s nel coarse
timing sia requ (Ts /2) ≈ requ,max = max |requ (t)| invece che requ (Ts /2) ≈ 0; in
questa situazione deve risultare e(1) ≈ + T2s in modo da correggere l’offset non
voluto:
Ts
γ(ĉk−1 − ĉk )requ (kTs − Ts /2 + τ̂ k−1 ) =
2
Ts
2 γ requ,max =
2
Ts
γ =
4requ,max

E’ chiaro quindi che il fattore γ rappresenta un grado di libertà in più che consen-
te di ottenere un valore e(k) che si possa effettivamente usare nell’aggiornamento
dell’offset fine τ̂ k . Si noti poi che γ è a tutti gli effetti una costante perchè il valo-
re requ,max è una costante grazie alla presenza dell’AGC prima del campionatore
A/D, come già descritto a proposito del timing coarse.

Proseguendo nell’analisi di PAM rx(), dopo il symbol timing fine rimangono solo
le operazioni di campionamento a tempo di simbolo e di decisione, che avvengono in
maniera uguale a come quelle descritte per OFDM rx().
Infine bisogna notare che il ricevitore è, nonostante la scelta di base di mantenerlo il
più semplice possibile per facilitare la successiva implementazione in Simulink, piutto-
sto robusto nei confronti del rumore introdotto dal canale. Nella fig. 4.14 sono infatti
mostrati i simboli di canale ricevuti per tre diversi valori di rapporto segnale-rumore.

4.5 Implementazione del trasmettitore in Simulink


L’ambiente Simulink, parte di MATLAB, permette la simulazione di sistemi dinamici
tempo-continui o tempo-discreti; proprio come per un circuito elettronico (o una FP-
GA che è un microcircuito digitale riprogrammabile) in un modello Simulink tutte le
varie parti vengono simulate contemporaneamente. A differenza quindi delle funzioni
MATLAB descritte nelle sezioni precedenti, caratterizzate da un modello di esecuzione
di tipo seriale (tipico di dispositivi quali MCU, DSP e CPU), il modello Simulink è
intrinsecamente parallelo.
Se da un lato questa caratteristica determina che in generale lo sviluppo di un mo-
dello Simulink è più difficile e richiede più tempo rispetto lo sviluppo di un programma
124 4. Implementazione con dispositivi FPGA

6 Received channel symbols


x 10

1.5

0.5
Quadrature

−0.5

−1

−1.5

−1.5 −1 −0.5 0 0.5 1 1.5


In−Phase x 10
6

Figura 4.14: Simboli di canale ricevuti (dopo l’equalizzazione) per un rapporto segnale-
rumore infinito (punti rossi), pari a 6dB (punti blu) e per 0dB (punti verdi).
4. Implementazione con dispositivi FPGA 125

C o MATLAB, dall’altro permette poi di traslare direttamente il modello Simulink su


hardware parallelo quale le FPGA. Grazie infatti agli strumenti software messi a dispo-
sizione dai principali produttori (il “DSP Buider” per l’Altera e il “System Generator
for DSP” per quanto concerne i prodotti Xilinx) è possibile programmare le FPGA
direttamente senza dover scrivere il codice HDL che normalmente si utilizza per la
programmazione di tali dispositivi. Complessivamente quindi l’utilizzo di Simulink
riduce notevolmente i tempi di sviluppo per le piattaforme FPGA.
La struttura a più alto livello del modello Simulink del modulatore è mostrata nella
fig. 4.15: si notino le affinità con la fig. 4.9.
Per una prima implementazione di test, non si è incluso nel modello Simulink
alcun sistema di input dei bit da trasmettere, che sono invece memorizzati in una
LUT (look-up table) all’interno del blocco “data bit groups generator”; prima però
di trasmettere i dati utili il modulatore invia i dati noti per il sincronizzatore del
ricevitore; di questo compito si occupa il blocco “synchronization channel symbols
insertion” che emette un impulso (a frequenza di simbolo) sulla uscita “DATA NEXT”
solo una volta che tutti i simboli noti sono stati trasmessi (dopodichè si limita a mettere
sulle uscite i bit che riceve in ingresso). Il blocco “data bit groups generator” inizia
allora ad emettere a frequenza di simbolo le coppie di m = log2 M = 2 bit che vengono
trasformate dal blocco “channel symbols mapper” in valori che codificano la parte in
fase e in quadratura del simbolo di canale da trasmettere. Completato l’invio di un
certo numero prestabilito di dati utili, il blocco “data bit groups generator” avverte i
blocchi a valle portando a zero il segnale “VALID OUTPUT”, forzando cosı̀ il “channel
symbols mapper” ad emettere una sequenza infinita di zeri in uscita.
I valori che codificano parte reale e parte immaginaria dei simboli da trasmettere
arrivano al blocco “inphase and quadrature zero-stuffers and filters” che come dice il
nome provvede a generare due segnali che contengono i valori in ingresso per un singolo
periodo di clock e poi valgono zero per altri Ts − 1 periodi di clock (ovvero effettua lo
zero-stuffing delle sequenze di ingresso); tali segnali sono poi forniti in ingresso ai filtri
FIR adattati.
I filtri sono stati realizzati usando lo strumento “FIR compiler ” della tool-suite
DSP Builder di Altera e per l’esattezza sono filtri ad architettura completamente pa-
rallela (per ogni periodo di clock forniscono in uscita un campione valido) e coefficienti
costanti. La loro uscita è l’ingresso del blocco “up conversion” che effettua la conversio-
ne di frequenza sfruttando i blocchi multiplier e il blocco NCO (numerically-controlled
oscillator ) facenti anch’essi parte della tool-suite di Altera. Si noti come tale blocco
richieda un certo tempo di start-up in cui la sua uscita non è valida; per questo ha un
segnale di uscita “VALID OUTPUT” che assume il valore 1 solo quando il blocco è
pronto e che determina l’avvio del blocco generatore del clock di simbolo.
Il segnale RF è infine salvato su file e contemporaneamente anche sul workspace
di MATLAB, per facilitare il debug; in un’implementazione pratica sarà necessario
effettuare l’invio dei campioni calcolati di volta in volta ad un DAC.
Nella figura 4.16 sono mostrati i principali segnali precedentemente descritti.
E’ importante notare come nel modello globale il clock sia pari a 50MHz ma che
tutti i blocchi del trasmettitore, eccetto per i filtri e per l’NCO, lavorino in realtà a
frequenza molto più bassa ( T1s ). Questo è possibile grazie all’inerente parallelismo di
126

PAM.
SIGNAL PROCESSIN
G SIGNAL OUTPU
T

D1
START CLK OUT
TS CLOCK D1 D1 D1 D1
I I RF SIGNAL o33:0
Ts clock D1
TS CLOCK I BITS INPUT I BITS
outSig
generator accuracy RF signal
D1 D1 reducer
Q Q VALID OUTPUT
D1 INPUT Q BITS
B0 B0 D1 D1
I BITS DATA I BITS Q BITS The RF signal is then
D1 Up conversion RF signal samples should be comprised transmitted to the DAC
NEXT B1 B1

D1 D1
D1 Q BITS DATA Q BITS DATA NEXT
VALID OUTPUT VALID INPUT
PAM_dac_input.mat
Data bit groups Channel symbols
Synchronization To File
generator mapper
channel symbols
insertion

SIM_rf

To Workspace

50Mhz global clock

20 ns Once the frame has been transmitted, it endlessly transmit zeroes to the .DAC
Clock Signal Compiler
NOTE: the number of cycles simulated by Simulink must be greater or equal to (Nsynch_symbols+Ndata_symbols)*Ts+TstartupNCO
where TstartupNCO ~= 50 clock cycles

Figura 4.15: Rappresentazione a più alto livello del modello Simulink del trasmettitore
4. Implementazione con dispositivi FPGA
4. Implementazione con dispositivi FPGA 127

Ts clock generator −> CLK OUT


1

0.5
0

Data bit groups generator −> VALID OUTPUT


1
0.5
0

Channel symbol mapper −> I BITS


1

−1

Synchronization channel symbols insertion −> I BITS


1

−1

Inphase and quadrature zero−stuffers and filters −> I

100
0
−100

4 Up conversion −> RF SIGNAL


x 10
2

−2
200 400 600 800 1000 1200
Sample index

Figura 4.16: Principali segnali generati dai blocchi del modulatore PAM.

tutto il sistema.
Per il modello sviluppato si sono scelti i seguenti parametri di modulazione (per
facilitare il debugging):

Parametro mod. Valore scelto


Ts 500ns
Fc 50M Hz
F IRresponse length 99
α 0.5
Nsynch symbols per f rame 16
Ndata symbols per f rame 16
Fcarrier 4M Hz

da cui risulta che la larghezza di banda è:


1+α
BWP AM = = 1.5M Hz
2Ts
la durata di un frame PAM TP AM f rame vale:

TP AM f rame = (Nsynch symbols per f rame + Ndata symbols per f rame ) Ts = 16us

la bitrate netta del sistema BRP AM vale:


128 4. Implementazione con dispositivi FPGA

Nbits per symbol Ndata symbols per f rame 2bit · 16


BRP AM = = = 2M bps
TP AM f rame 16us
e infine l’efficienza spettrale η P AM vale:

BRP AM
η P AM = = 1.33 bit/s/Hz
BWP AM
Come già accennato tali valori sono solo di prova e serviranno in futuri lavori a
testare il sistema hardware per valutare eventuali criticità del sistema; in caso positivo
sarà facile migliorare le prestazioni del sistema agendo sui parametri di modulazione
e migliorando il sistema in termini di compattezza e di numero di bit utilizzato.
Il sistema di test, sempre per facilitare il debug, è stato infatti realizzato utiliz-
zando un ampio numero di bit per tutti i segnali; con uno studio di bit-accuracy sarà
però possibile diminuire l’accuratezza della rappresentazione usata in numerosi punti
diminuendo cosı̀ la quantità di risorse hardware dell’FPGA attualmente richieste dal
modello.
A tal fine sarà importante valutare il rapporto segnale rumore di quantizzazione
SN Rq lungo tutto il percorso del modulatore, tenendo conto del rumore (dovuto agli
errori numerici) introdotto da ciascun blocco, assicurandosi che tutti i bit forniti al
DAC per rappresentare i campioni di uscita siano utilizzati per rappresentare segnale
(e non rumore). Naturalmente bisognerà poi assicurarsi che all’uscita del DAC il
rapporto segnale rumore SN R sia circa uguale al rapporto SN Rq , cioè che il rumore
analogico all’uscita sia circa uguale al rumore di quantizzazione.

4.6 Implementazione del ricevitore in Simulink


Nella fig. 4.17 è riportato lo schema generale del modello Simulink del ricevitore PAM,
che si vede subito essere parecchio più complesso del trasmettitore, come del resto è
lecito attendersi.
Il segnale di ingresso viene caricato dal file generato dal modello Simulink del
trasmettitore e viene elaborato dal blocco “down conversion” (che come il suo duale
nel trasmettitore utilizza un NCO che lavora alla stessa frequenza); i segnali in fase e
in quadratura cosı̀ ottenuti sono filtrati (con filtri FIR adattati identici a quelli usati
nel trasmettitore) e vengono utilizzati per il calcolo della metrica di timing coarse
mediante l’algoritmo di Shi&Serpedin semplificato come da eq. (4.3).
Tale blocco, il cui schema interno è mostrato nella fig. 4.18, campiona a tempo
di simbolo il segnale in-fase ed utilizza una linea di ritardo a N prese in modo da
avere disponibili in ogni istante (eccetto per la fase iniziale in cui la linea di ritardo
contiene ancora degli zeri) gli N campioni distanziati di Ts che compongono i vettori
rj (θ̃) con j = 0, 1, 2, 3; i valori di tali vettori sono poi forniti ai blocchi trapezoidali
che rappresentano gli operatori di dot-product e sommati assieme. Vengono quindi
eseguite le operazioni di ricerca del massimo (tramite l’analisi della derivata della
metrica, implementata con un blocco differenziatore tempo-discreto) e di controllo
della soglia. Il risultato finale è il segnale “COARSE TRIGGER” che ha un transizione
0>1 e 1>0 nel caso in cui venga rilevato un frame in ingresso; quello dunque che era un
PAM.
SIGNAL INPUT SIGNAL PROCESSING

I LNA FEEDBACK

Q POWER LEVEL POWER LEVEL

Automatic gain control (AGC


)
The RF signal is COARSE TRIGGE
R TS CLOCK SYNCH
acquired from the ADC
COARSE TRIGGE
R
I I IN I OUT I I EQU TS CLOCK SYNCH
RF signal I TSS
Fine timing (clock recovery)
PAM_dac_input.ma
t i13:0 RF SIGNAL Q Q IN Q OUT Q Q TSS EQU TRIGGE
R I EQU I EQU
Input
From File Accuray reducer
VALID OUTPUT I TSS

Q TSS Q EQU Q EQU


Down conversion
I

READY
Q

Equalizer
4. Implementazione con dispositivi FPGA

Logical Bit Operator

system_ready AND
50Mhz global clock

20 ns
Clock
Signal Compiler

Logic: N/A
RAM: N/A
transitions indicate the points where the signal SIM_output_bits encodes two valid output bits.
DSP: N/A
Resource Usage NOTE: the number of cycles simulated by Simulink must be greater or equal to
129

Figura 4.17: Rappresentazione a più alto livello del modello Simulink del ricevitore
130

I
1 d x25 q

0
Ts sampler
signal

reset
SI(43:0)
DL_inphase

Delay_line

word_1(43:0)
word_2(43:0)
word_3(43:0)
word_4(43:0)
word_5(43:0)
word_6(43:0)
word_7(43:0)
word_8(43:0)
word_9(43:0)
word_10(43:0)
word_11(43:0)
word_12(43:0)
word_13(43:0)
word_14(43:0)
word_15(43:0)
word_16(43:0)

dl_end

dl_start

I TSS Goto Goto1 Goto2 Goto3 Goto4 Goto5 Goto6 Goto7 Goto8 Goto9 Goto10 Goto11 Goto14 Goto15 Goto12 Goto13
[R0_0] [R0_1] [R0_2] [R0_3] [R1_0] [R1_1] [R1_2] [R1_3] [R2_0] [R2_1] [R2_2] [R2_3] [R3_0] [R3_1] [R3_2] [R3_3]
2

[R0_0] A
0 R0 dot R1
[R0_1] A
1
[R0_2] A
2
[R0_3] A R0dotR1
3
[R1_0] B A dot B +
0
[R1_1] B
1
[R1_2] B
2
[R1_3] B
3

[R1_0] A R1 dot R2
0
[R1_1] A
1
[R1_2] A
2
[R1_3] A R1dotR2
3
[R2_0] B A dot B
0
[R2_1] B
1
[R2_2] B
2
[R2_3] B
3

a
>= sel(0:0)
[R2_0] A R2 dot R3 4000000 b
0
[R2_1] A 0 MUX 1
1 Threshold Comparator coarse trigger
[R2_2] A COARSE TRIGGE
R
2 R2dotR3 Metric value
[R2_3] A too low
3
[R3_0] B A dot B
0 Multiplexer
[R3_1] B
1 n
[R3_2] B
2 metric
[R3_3] B
3

+ r INPUT MAX DETECTED


metric max detector
[R1_0] A R1 dot R3
0
[R1_1] A metric
1
Maximum detector
[R1_2] A
2
R1dotR3
[R1_3] A DEBUG
3
[R3_0] B A dot B +
0
[R3_1] B
1
[R3_2] B
2
[R3_3] B IMPORTANT: on this wire valid output is available
3

with a delay of 5 clock cycles respect the delay line status


[R0_0] A R0 dot R2
0
[R0_1] A
1
[R0_2] A
2
[R0_3] A R0dotR2
3
[R2_0] B A dot B
0
[R2_1] B
1
[R2_2] B
2
[R2_3] B
3

[R0_0] A R0 dot R3
0
[R0_1] A
1
[R0_2] A
2
[R0_3] A R0dotR3
3
A dot B + NOTE: the quadrature samples are discarded by
[R3_0] B
0
the coarse timing logic since the Shi&Serpedin
[R3_1] B
1 metric works well also considering only the real
[R3_2] B parts of the samples (see PAM_rx.m)
2
[R3_3] B
3

Parallel Adder Subtractor


Q

Figura 4.18: Modello Simulink del blocco “Shi-Serpedin coarse timing metric”.
2 d x25 q QUADRATUR
E QUADRATURE_DELAYED 3
Q TSS
IMPORTANT: on these wires valid outputs are available Ts sampler1

Delay matcher
4. Implementazione con dispositivi FPGA

with a delay of 2 clock cycles respect the delay line status


4. Implementazione con dispositivi FPGA 131

valore θ̃ calcolato tramite uno stimatore nello script MATLAB diviene la transizione
di un segnale nel modello Simulink.
Tale segnale aziona tutto il resto del ricevitore ed in particolare l’equalizzatore
(vedi la fig. 4.19), il quale memorizza N TTsc campioni sia per la parte in fase che per la
parte in quadratura in memorie FIFO, cosı̀ da introdurre nei segnali da elaborare un
ritardo pari a quello introdotto dal blocco di coarse-timing. Se infatti il primo simbolo
PAM del frame è localizzato al campione di indice θ, il segnale “COARSE TRIGGER”
ha una transizione in corrispondenza del campione di indice θ̃ + N TTsc (dove θ̃ = θ in
caso di una stima perfetta).
L’equalizzatore utilizza il campione di indice θ̃ + (N + m) TTsc per effettuare la sti-
ma del CPO e genera i segnali di uscita “I EQU” e “Q EQU” tramite l’eq. (4.4)
opportunamente semplificata:

requ [n] = r[n]e−j φ̂CP O = (Re{r[n]} + j Im{r[n]}) (cos φ̂CP O − j sin φ̂CP O ) =
= Re{r[n]} cos φ̂CP O + Im{r[n]} sin φ̂CP O +
 
j Im{r[n]} cos φ̂CP O − Re{r[n]} sin φ̂CP O

da cui:

Re{requ [n]} = Re{r[n]} cos φ̂CP O + Im{r[n]} sin φ̂CP O


Im{requ [n]} = Im{r[n]} cos φ̂CP O − Re{r[n]} sin φ̂CP O

La vera semplificazione consiste però nel modo in cui si possono esprimere il coseno
ed il seno:

   
Ts
cos φ̂CP O = cos ∠r θ̃ + (N + m) − ∠β(m) =
Tc
   
Im{r θ̃ + (N + m) TTsc }
= cos arctan   − ∠β(m) =
Ts
Re{r θ̃ + (N + m) Tc }
 
q0
= cos arctan − ∠β(m)
i0
   
in cui si è posto q0 = Im{r θ̃ + (N + m) TTsc } e i0 = Re{r θ̃ + (N + m) TTsc } (parte
reale e immaginaria del campione di ingresso usato per la stima).
Posto poi y = tan x, x = arctan y per il teorema della funzione inversa2 risulta:
2
Le ipotesi di tale teorema richiedono che la funzione tan x sia continua, strettamente crescente e
derivabile con derivata non nulla in un intervallo [a, b] (vedi [4, equ. 42.11,
 p.127]).

Nel caso specifico le ipotesi sono soddisfatte nell’intervallo aperto − π2 , + π2 (difatti dx
d
tan x =
1
cos2 x
=
 0 in tale intervallo).
132

1000000

KeqN_per_KeqR
FIXME: q_a and q_b are 22 bits; multiplier inputs are 44bits!!!

KeqR
KeqR*Q/I Scope2 Scope5 1 EQU TRIGGE
R
Ieq
a(21:0) q(21:0)
3 Ieq [IEQ]
d 1000 r a(43:0) q(43:0) a(43:0)
q a = b X q +r
Q TSS X r (43:0) a
a=bXq+r
i b(43:0) + r d(43:0) q(21:0) b(21:0) r(21:0)
2 b(43:0) r(43:0) [TRIGGER]
i 1000000 b
I TSS Multiplier
Divider1
Divider KeqR_squared Pipelined Adder Square Root

data_a(21:0) NOTE: the equation which is implemented: is


q_a o21:0
0 addr_a(0:0) Ieq
denominator Output1 Ieq = KeqR*KeqN/(KeqD*sqrt(KeqR^2 + (KeqR*Q/I)^2))
Constant4 wren_a True DPRA
M
data_b(21:0) (2 x 22)
IMPORTANT: the output of the RAM block is considered by Simulink
to be unsigned; to correctly see the values entered in the RAM we need
1 addr_b(0:0)
q_b o21:0 to use the Output Block and explicitely specify that the signal
Qeq
[TRIGGER] Constant5 wren_b Output is SIGNED

DEBUG inputs M Qeq_Ieq_stored


d r a(21:0) q(21:0)
Qeq
a = b X q +r Qeq
KeqN_sign_inverted
b(21:0) r(21:0) [QEQ]

Divider3
IMPORTANT: the input range of I & Q samples is
IMPORTANT: Ieq and Qeq values are valid after 2 clock cycles respect the
current status of the input I & Q samples

I
q a(43:0)
4 d i_delayed
y_i
full X r (43:0)
rreq FIFO
empty [IEQ] b(43:0)
1 wreq usdw(9:0)
Multiplier1
Single Pulse inphase FIFO
a
i_delayed_equ
r 1
i_delayed_equ
b I EQU

a(43:0) Pipelined Adder1


i_delayed_equ
X r (43:0)
[QEQ] b(43:0)
Q
Multiplier2
q
5 d q_delayed
y_i full
rreq FIFO
empty
1 wreq usdw(9:0) a(43:0) equalized baseband
quadrature FIFO X r (43:0) signal
[QEQ] b(43:0)

Multiplier3

3 a
READY + r 2
q_delayed_equ
b Q EQU

a(43:0) Pipelined Adder2


X r (43:0)
[IEQ] b(43:0)

Multiplier4 q_delayed_equ

DEBUG1
i_delayed

q_delayed

Figura 4.19: Modello Simulink del blocco “equalizer”.


NOTE: the blocks above implement a complex multiplication between the [TRIGGER]
ct
baseband signal INPHASE+j*QUADRATURE and the
IEQ+j*QEQ signal
4. Implementazione con dispositivi FPGA
4. Implementazione con dispositivi FPGA 133

d d 1

tan−1 y = arctan y = d
= cos2 (arctan y)
dy dy dx tan x

x=arctan y
 π π
∀x ∈ − ,+ → ∀y ∈ (−∞; +∞)
2 2
d 1
e ricordando che ∀y ∈ ℜ, dy arctan y = 1+y 2
allora è facile dimostrare che:
1
cos (arctan y) = + 1 ∀y ∈ ℜ
1 + y2
(nell’estrarre la radice si è tenuto conto che cos (arctan y) > 0, ∀y ∈ ℜ) e analogamente:
y
sin (arctan y) = + 1 ∀y ∈ ℜ
1 + y2
da cui, se si sceglie l’indice m in modo tale che ∠β(m) = 0:

q0 1
cos φ̂CP O = cos(arctan )= 2
i0
1 + (q0 /i0 )2
q0 q0 /
i0
sin φ̂CP O = sin(arctan )= 2
i0
1 + (q0 /i0 )2

In conclusione l’equalizzatore si limita quindi a calcolare dapprima i coefficienti


q0 /
qeq =  1 2
e ieq =  i0
2
memorizzandoli in un blocco “dual port RAM”
1+( 0 /i0 )
q 1+( 0 /i0 )
q

(fornito da Altera) e poi a calcolare per tutti i campioni del resto del segnale ricevuto:

Re{requ [n]} = Re{r[n]}qeq + Im{r[n]}ieq


Im{requ [n]} = Im{r[n]}qeq − Re{r[n]}ieq

in cui tutte le quantità che vanno moltiplicate sono numeri reali.


Il segnale in fase una volta equalizzato è fornito (a frequenza di clock e non di
simbolo!) in ingresso al blocco che si occupa di implementare la stima fine del sym-
bol timing (vedi la fig. 4.20) tramite l’equazione (4.5). Tale blocco si è dapprima
provato ad implementarlo utilizzando una linea di ritardo programmabile, ma visti
poi i problemi causati da tale approccio (riguardo allo stato interno della linea che
inevitabilmente veniva compromesso), si è preferito ripiegare su una soluzione diversa:
si può pensare che l’algoritmo ZCD fornisca di volta in volta il numero di campioni
(τ̂ k − τ̂ k−1 ) di cui ritardare l’istante di campionamento successivo. Quindi il blocco
denominato “fine symbol timing (clock recovery)” si limita a calcolare, partendo dal
campione θ̃ + ∆ + T2s (in cui ∆ rappresenta il ritardo introdotto sia dal coarse-timing
che dall’equalizzatore), l’errore e(k); attesi e(k) periodi di clock, genera una transi-
zione sul clock interno denominato “TED CLOCK”. In risposta a tale evento viene
134

d z q (3:0) q(3:0) a(43:0)


AUTO X r (87:0) a(87:0) q(87:0) +
err
3 b(43:0) a=bXq+r + r d(5:0)
i_equ
I EQU tau_new

T Multiplier 100000 b(87:0) r(87:0) 24 + RAM


0 addr(0:0) q
(2 x 6) tau
FIXME: here there should Divider add
be POWER LEVE L wren
TED clock delay RA
M

and TED clock generator FD


PERIOD
TODO: use also the power level signal to determine frame presence COARSE TRIGGE
R
CLK OUT fd z frame_detector
2
FD q d frame_detected Coarse_trigger 2
NOTE: in ideal conditions the TED clock signal AUTO
1 should be aligned with the points where the TED clock AND
POWER LEVE
L equalized inphase signal crosses the zero. fd

is_synchronizing
sset
mod25 q(4:0) a
NOT clock == d z q 1
AUTO synch_clock
AND 24 b TS CLOCK SYNCH
ena

current_zero
clk_enamod21 q(4:0) a and1 synch Ts clock generator
current_zero Data symbols counter
IMPORTANT: the FRAME DETECTED signal and the bit/Ts clock signal must be aligned! <
is_synchronizing
15 b
Zero counter mod2^5
Number of synch data_symbols_availabl
e < a q(4:0) clk_ena
15
b

Figura 4.20: Modello Simulink del blocco “fine timing (clock recovery)”.
4. Implementazione con dispositivi FPGA
4. Implementazione con dispositivi FPGA 135

Down conversion −> RF SIGNAL


1
0
−1
−2
5 Down conversion −> I
x 10
2
0
−2

Inphase and quadrature filters −> I OUT


1000
0
−1000
Shi−Serpedin coarse timing metric −> I TSS
1000
0
−1000
Shi−Serpedin coarse timing metric −> COARSE TRIGGER
1
0.5
0
6 Automatic Gain Control (AGC) −> POWER LEVEL
x 10
10
5
0
6 Equalizer −> I EQU
x 10
1
0
−1
Fine timing (clock recovery) −> TS CLOCK SYNCH
1
0.5
0
200 400 600 800 1000 1200 1400 1600 1800
Sample index

Figura 4.21: Principali segnali generati dai blocchi del demodulatore PAM.

calcolato il valore e(k + 1) e cosı̀ via. Le transizioni nel segnale “TED CLOCK” non
sono quindi equidistanziate.
Nell’eseguire il calcolo di e(k) si utilizza una look-up table per i fattori ĉk−1 −ĉk che
sono noti a priori e dopo aver generato N − 1 transizioni sul “TED CLOCK” il sincro-
nizzatore fine si disattiva. Da quel momento in avanti si limita a generare transizioni
sul clock che fornisce in uscita denominato “TS SYNCH CLOCK” equidistanziate di
un tempo di simbolo.
Infatti l’ultimo blocco del ricevitore (cioè il “channel symbol detector”) utilizza
quel clock per campionare il segnale equalizzato, per stabilire in quale quadrante si
trova (per fare questo, essendo M = 4 si limita a controllare il segno della parte in fase
e di quella in quadratura) e per segnalare che le sue uscite sono valide. Controllando
il valore di tali uscite in corrispondenza degli eventi di “TS SYNCH CLOCK” si può
risalire ai bit decodificati e verificare se erano effettivamente quelli trasmessi (per
automatizzare tale operazione si è scritta una funzione in MATLAB presente nel file
sample output bits.m).
L’evoluzione temporale dei segnali principali descritti finora è mostrata nella fig.
4.21.
Come considerazione conclusiva bisogna specificare che anche per il ricevitore sarà
importante in futuro effettuare un lavoro di ottimizzazione e uno studio di bit-accuracy
(come già accennato nella sezione precedente a proposito del trasmettitore). Inoltre a
differenza del trasmettitore che per sua natura è relativamente semplice, per il ricevito-
re ci sono architetture utilizzabili potenzialmente più ottimizzate in termini di risorse
richieste sull’FPGA (per il modello sopra esposto le parti che richiedono il maggior
136 4. Implementazione con dispositivi FPGA

numero di celle logiche sono i filtri adattati, l’NCO e i buffer FIFO utilizzati nell’equa-
lizzatore, nonchè il gran numero di moltiplicatori presenti nei vari sottosistemi) che
non si è avuto modo di esplorare per motivi di tempo.

4.7 Conclusioni per l’implementazione a FPGA


I modelli Simulink del trasmettitore e del ricevitore sono stati testati più volte e con
diversi segnali e risultano funzionare correttamente, nonostante tutte le varie non-
idealità.
Bisogna comunque aspettarsi che nel passaggio dal modello Simulink all’hardware
vero e proprio ci saranno correzioni da apportare, in quanto il modello Simulink non
tiene conto dei ritardi di propagazione del segnale all’interno dell’FPGA.
Ad ogni modo, per giungere a modelli Simulink funzionanti sono state necessarie
intense ore di lavoro e un continuo raffronto fra i risultati di Simulink e quelli dei
relativi script MATLAB. Il lavoro svolto è stato però stimolante e mi ha dato modo
di conoscere meglio i dispositivi FPGA e le tecniche con cui si programmano.
Capitolo 5

Conclusioni

In questo lavoro di tesi sono state analizzate due possibili implementazioni di un mo-
dem digitale a larga banda. Sebbene l’approccio a DSP non si sia rivelato proficuo
ha comunque permesso di studiare e di mettere in pratica numerosi algoritmi senza i
quali è impossibile oggigiorno realizzare un sistema ad elevate prestazioni, nonchè di
guadagnare esperienza preziosa per la realizzazione di sistemi futuri.
L’implementazione con dispositivi FPGA si è invece rilevata assai più promettente
e, sebbene non sia stato possibile per motivi di tempo effettuare una verifica sperimen-
tale dei modelli sviluppati, dovrebbe essere possibile convertire il modello Simulink in
files atti alla programmazione dell’hardware senza eccessivi sforzi e in tempi brevi.

In futuri progetti, si spera anche grazie alle informazioni qui contenute, sarà più fa-
cile scegliere la giusta piattaforma hardware tenendo a mente che, se da un lato i DSP
consentono tempi di sviluppo ridotti grazie all’uso di un linguaggio di programmazione
“convenzionale” quale il C, hanno in generale un throughput limitato. Le FPGA dual-
mente abbinano ad un throughput molto elevato (grazie all’elevatissimo parallelismo
interno) tempi di sviluppo sensibilmente più lunghi a causa della necessità di usare
linguaggi di descrizione dell’hardware o simulazioni di elaborazione parallela (come
consente di fare Simulink).
In questa luce appare vincente un design che faccia uso dei DSP o di un processore
soft per quelle parti algoritmiche di signal-processing caratterizzate da frequenze ri-
dotte (ad esempio, le operazioni di equalizzazione e di decodifica eseguite a frequenza
di simbolo) e delle FPGA per quelle parti in cui è invece necessario un elevato pa-
rallelismo per fare fronte alla mole di dati da processare (ad esempio, le operazioni
di filtraggio e di coarse- e fine- timing del demodulatore). Per questo sarà importan-
te in futuro esplorare le modalità di uso e le funzionalità offerte dai processori soft
integrabili su FPGA, quali il processore Nios II offerto da Altera.
Rimangono inoltre aperte numerose possibilità di miglioramento, sia sulla parte
algoritmica che sulla quella hardware, che vengono riassunte nell’appendice A.

137
Appendice A

Sviluppi futuri

Eventuali futuri sviluppi sul lavoro presentato in questo documento possono riguarda-
re:

• miglioramento dell’elettronica analogica; in particolare inserimento di un filtro


anti-immagine di ordine elevato dopo il DAC e di un filtro anti-aliasing uguale
prima dell’ADC;

• esecuzione di misure accurate sulla circuiteria (analogica) di ingresso e uscita dei


convertitori (in cui ci sono trasformatori per l’accoppiamento AC del segnale);

• a lato trasmettitore unire all’operazione di filtraggio a radice di coseno rialzato


anche il filtro di pre-distorsione per compensare la distorsione dal DAC (vedi sez.
3.5.2);

• utilizzare mixer di up- e down- conversione esterni per guadagnare banda; in


questo modo a lato ricevitore si può campionare alla notevolmente più bassa
frequenza di simbolo e per effettuare il timing fine si può utilizzare un ritarda-
tore di fase programmabile per il clock del campionatore oppure utilizzare un
interpolatore interno;

• aumentare l’efficienza della metrica di coarse timing generando reference block


modulati sia in fase che in quadratura;

• aggiungere un codice a correzione o rilevazione d’errore;

• implementare lo strato 2 (MAC), aggiungendo una procedura di automatic repeat


request (ARQ);

• studio degli algoritmi di sincronizzazione utilizzati negli standard a larga banda


per identificare ulteriori punti che necessitano di miglioramento;

• studio del processore soft Nios II offerto da Altera per la creazione di un sistema
ibrido;

138
Bibliografia

[1] G.M.Vitetta, “Tecniche di Trasmissione Digitali”, appunti del corso di


Trasmissione Numerica A.

[2] G.M.Vitetta, M. Luise, “Teoria dei segnali”, seconda edizione, McGraw Hill, 2003.

[3] J.G. Proakis, “Digital communications”, quarta edizione, 2001.

[4] P. Marcellini, C. Sbordone, “Elementi di Analisi Matematica uno”, prima


edizione, Liguori Editore, 2002.

[5] F. Morselli, “Realizzazione di un sistema di trasmissione OFDM per Power Line


Communication”, Tesi di laurea specialistica, Università degli Studi di Modena e
Reggio Emilia, 2007.

[6] R. Basso Brusa, “Introduzione all’utilizzo della scheda DSP Texas Instruments
EVM TMS320C6455”, Tesi di laurea triennale, Università degli Studi di Modena
e Reggio Emilia, 2008.

[7] I. Baroni, “Gestione dell’ingresso e dell’uscita digitali su scheda DSP Texas In-
struments EVM TMS320C6455”, Tesi di laurea triennale, Università degli Studi
di Modena e Reggio Emilia, 2009.

[8] U. Mengali, A. D’Andrea, “Synchronization Techniques for Digital Receivers”,


Plenum Press, New York and London, 1997.

[9] F. Gianaroli, A. Barbieri, F. Pancaldi, A. Mazzanti, G. M. Vitetta, “A novel


approach to powerline channel modeling”, IEEE PES Transactions on Power
Delivery, 2009.

[10] M. Morelli, C.C. Jay Kuo, Man-On Pun, “Synchronization Techniques for Or-
thogonal Frequency Division Multiple Access (OFDMA): A Tutorial Review”,
Proceedings of the IEEE, vol. 95, No. 7, July 2007.

[11] M. Morelli, U. Mengali, “An Improved Frequency Offset Estimator for OFDM
Applications”, IEEE Communications Letters, vol. 3, no. 3, March 1999.

[12] Hlaing Minn, Vijay K. Bhargava, Khaled Ben Letaief, “A Robust Timing and
Frequency Synchronization for OFDM Systems”, IEEE Transactions on Wireless
Communications, vol. 2, no. 4, July 2003.

139
140 BIBLIOGRAFIA

[13] Giovanni Santella, “A Frequency and Symbol Synchronization System for OFDM
Signals: Architecture and Simulation Results”, IEEE Transactions on Vehicular
Technology, vol. 49, no.1, January 2000.

[14] Michael Speth, Stefan A. Fechtel, Gunnar Fock, Heinrich Meyr, “Optimum Re-
ceiver Design for Wireless Broad-Band Systems Using OFDM - Part I”, IEEE
Transactions on Communications, vol. 47, no. 11, November 1999.

[15] Michael Speth, Stefan A. Fechtel, Gunnar Fock, Heinrich Meyr, “Optimum Re-
ceiver Design for Wireless Broad-Band Systems Using OFDM - Part II: A Case
Study”, IEEE Transactions on Communications, vol. 49, no. 4, April 2001.

[16] Kai Shi, Erchin Sherpedin, “Coarse Frame and Carrier Synchronization of OFDM
Systems: A New Metric and Comparison”, IEEE Transactions on Wireless
Communications, vol. 3, no 4, July 2004.

[17] T. M. Schmidl e D. C. Cox, “Robust frequency and timing synchronization for


OFDM”, IEEE Transactions on Communications, vol. 45, no. 12, pp. 1613-1621,
Dec. 1997.

[18] Dong Kyu Kim, Sang Hyun Do, Hong Bae Cho, Hyung Jin Choi and Ki Bum
Kim, “A new Joint Algorithm of Symbol Timing Recovery and Sampling Clock
Adjustment for OFDM Systems”, IEEE Transactions on Consumer Electronics,
vol. 44, no. 3, August 1998.

[19] Thomas Keller, Lajos Hanzo, “Adaptive Multicarrier Modulation: A Convenient


Framework for Time-Frequency Processing in Wireless Communications”, IEEE
Procedings of the IEEE, Vol. 88, No. 5, pp. 611-640, May 2000.

[20] William G. Cowley, Lesley P. Sabel, “The performance of two symbol timing reco-
very algorithms for PSK demodulators”, IEEE Transactions on Communications,
vol. 42, no. 6, June 1994.

[21] M. H. Meyers, L. E. Franks, “Joint carrier phase and symbol timing recovery for
PAM systems”, IEEE Transactions on Communications, vol. 28, no. 8, August
1980.

[22] F. M. Gardner, “Demodulator reference recovery techniques suited for digital


implementation”, European Space Agency, Final report, ESTEC contract no.
6847/86/NL/DG, August 1988.
BIBLIOGRAFIA 141

Bibliografia per PLC:

[23] E. Sironi, “Analisi sperimentale delle interferenze nelle comunicazioni a larga ban-
da su linee elettriche”, Tesi di laurea triennale, Università degli Studi di Modena
e Reggio Emilia, 2009.

[24] K. Dostert, Powerline Communications, Prentice Hall, 2001.

[25] M. Gebhardt, F. Weinmann e K. Dostert, “Physical and Regulatory Constraints


for Communication over the Power Supply Grid”, IEEE Commun. Mag., vol. 41,
no. 5, mag. 2003.

[26] Hrasnica, A. Haidine e R. Lenhert, Broadband Powerline Communications


Networks — Network design, John Wiley & Sons, 2004.

[27] S. Martini, “Sistemi di comunicazione su linee elettriche (Powerline Communi-


cations)”, Tesi di Laurea in Ingegneria delle Telecomunicazioni, Università degli
Studi di Pisa, 2001.

[28] S. Galli e O. Logvinov, “Recent Developments in the Standardization of Power


Line Communications within the IEEE”, IEEE Comm. Mag., lug. 2008.

[29] S. Galli, “PLC Standardization Progress and Some PHY Considerations”,


Keynote Talk, 13th Int. Symp. Power-Line Comm. Appl., apr 2009.

[30] ETSI TS 101 867 v. 1.1.1, “Powerline Telecommunications (PLT); Coexistence of


Access and In-House Powerline Sytems”, nov. 2000.

[31] ETSI TR 102 494 v. 1.1.1, “Powerline Telecommunications (PLT); Technical


requirements for In-House PLC modems”, giu. 2005.

[32] ETSI TR 102 578 v. 1.2.1, “Powerline Telecommunications (PLT); Coexistence


between PLT Modems and Short Wave Radio broadcasting services”, ago. 2008.

[33] Sito web dell’ IEEE P1901 Working Group. Disponibile on-line:
http://grouper.ieee.org/groups/1901/.

[34] Sito web dell’associazione PLCforum. Disponibile on-line:


http://www.plcforum.org/.

[35] M. Zimmermann e K. Dostert, “A multipath model for the powerline channel”,


IEEE Trans. Comm., vol. 50, no. 4, Apr. 2002.

[36] F. J. Cañete, J. A. Cortés, L. Dı́ez, e J. T. Entrambasaguas, “Modeling and


Evaluation of the Indoor Power Line Transmission Medium”, IEEE Comm. Mag.,
vol. 41, apr. 2003.

[37] F. J. Cañete, J. A. Cortés, L. Dı́ez, J. T. Entrambasaguas e J. L. Carmona, “Fun-


damentals of the Cyclic Short-Time Variation of Indoor Power-line Channels”, in
Proc. 9th Int. Symp. Power-Line Comm. Appl., apr. 2005.
142 BIBLIOGRAFIA

[38] F. J. Cañete, J. A. Cortés, L. Dı́ez, e J. T. Entrambasaguas, “Analysis of the


Cyclic Short-Time Variation of Indoor Power Line Channels”, IEEE J. Sel. Areas
Comm., vol. 24, no. 7, lug. 2006.
Ringraziamenti

Lo svolgimento del progetto descritto in questa tesi è stato possibile grazie all’aiuto di
varie persone che desidero qui ringraziare di cuore.

Un sentito grazie va al prof. G. M. Vitetta che mi ha messo a completa dispo-


sizione strumenti e fondi economici per lo sviluppo del progetto e che mi ha sempre
incoraggiato e motivato nonostante i (tanti) insuccessi.
Un’altro ringraziamento speciale va all’ing. Fabrizio Pancaldi e all’ing. Andrea
Mazzanti per aver ascoltato le mie lamentele e i miei problemi (per la parte di tele-
comunicazioni e per la parte più strettamente elettronica rispettivamente) e avermi
suggerito immancabilmente tante buone idee e soluzioni.
Ringrazio anche i vari tesisti che hanno condiviso con me parti ausiliare e non
del progetto di tesi: Ivano Baroni, Raffaella Miranda, Alessandro Lipari, Michele Po
e Alessandro Gulli (anche se alle volte hanno messo alla prova la mia pazienza con
domande non troppo profonde!). Ringrazio Roberto Formentini che, anche se in modi
alle volte un pò burberi, ci ha fornito aiuti indispensabili nelle saldature lillipuziane e
in tante altre cose.

Ringrazio il dott. Paganelli che è sempre un passo avanti nel campo delle tele-
comunicazioni (e non solo) e che mi ha fornito aiuto disinteressato in tanti problemi
piccoli e grandi senza che potessi contraccambiare(!). Ringrazio il dott. Setti perchè
nei pochi stralci di tempo libero che siamo riusciti a trovare in questo periodo di tesi
mi ha aiutato ad accudire i nostri progetti di elettronica.
Ringrazio inoltre anche tutte le altre persone dell’ottimo ambiente di lavoro in
cui mi sono trovato in questi mesi: Simone, Alessandro e Daniela nonchè i ragazzi di
AUTOLAB (Giovanni, Davide, Federica, Marco...) e di OPTOLAB (Stefano, Matteo,
Less, Lullo, Luca...).

Ringrazio infine la mia famiglia per avermi supportato durante tutta l’attività di
tesi (e non solo).

143

Vous aimerez peut-être aussi