C
Ca
ap
pi
it
to
ol
l
o
o
II
I
I
D
D
e
e
s
s
c
c
r
r
i
i
z
z
i
i
o
o
n
n
e
e
d
d
e
e
l
l
P
P
r
r
o
o
g
g
r
r
a
a
m
m
m
m
a
a
d
d
i
i
S
S
i
i
m
m
u
u
l
l
a
a
z
z
i
i
o
o
n
n
e
e
II.1 Introduzione
Lo scopo di questo capitolo è fornire una descrizione di alcune parti fondamentali del programma di simulazione utilizzato. Nella prima parte, si evidenziano le procedure e le funzioni relative ai vari blocchi del sistema MC-CDMA, nella seconda, l’attenzione è rivolta al canale di propagazione ed infine, si descrivono le linee guida per effettuare una simulazione.
Viene volutamente trascurata la parte riguardante i codici di spreading a cui è dedicato il capitolo successivo.
Il modello del sistema sotto esame è già stato analizzato nel capitolo precedente. Si ripropongono solo per comodità lo schema a blocchi del trasmettitore e del ricevitore così come è implementato nel programma di simulazione.
S/P
COPY
COPY
IFFT
Aggiuntaprefisso ciclico 1/T q=0 q=Ns-1 1/(NsT) l=L-1 l=L-1 Nc=Ns*LP/S
gT(t) bk 1/Ts l=0 l=0 ( )i n a ( ) 0 i c ( ) 0 i c ( ) 1 i L c− ( ) 1 i L c−FigII.1- Schema del trasmettitore MC-CDMA
FFT
S/P Decisore ( )• ∑ ( )• ∑S/P
gR(t) Rimozione prefisso ciclico ( ) 1 i L c − ( ) 1 i L c − ( ) 0 i c ( ) 0i c q=0 q=Ns-1 m( )i n a l=0 l=0 l=L-1 l=L-1 r(t)Fig.II.2-Schema del ricevitore MC-CDMA
Negli schemi mostrati sono assenti i blocchi relativi all’amplificatore di potenza, al canale di propagazione e al rumore termico AWGN.
Si procede con la descrizione dei vari blocchi del sistema evidenziando le parti del codice di programma corrispondenti.
II.2 Sorgente dei Dati
Il programma di simulazione prevede due tipi di formato per i dati da trasmettere. Tali dati appartengono quindi a due diversi tipi di modulazione. La MxM-QAM e la M-PSK. Per ognuna di queste è prevista una funzione che ritorna dei valori reali rappresentanti la parte in fase o in quadratura del simbolo trasmesso. Le funzioni risiedono nella libreria Funzioni.h.
II.2.1 Modulazione QAM
La generazione di una delle due componenti del simbolo MxM-QAM è affidata alla funzione
int GenSymbQAM (int M, int& jseed)
Dall’intestazione della procedura si nota che vi è bisogno di parametro M da fornire alla funzione che stabilisce il tipo di modulazione, MxM-QAM, e l’indirizzo
jseed.
La funzione sfrutta a sua volta la unif(int& jseed) che genera un double un, uniformemente distribuito tra 0 è 1. Questo, viene ricondotto ad un intero compreso tra 0 e 2M-1 tramite l’istruzione x=(int)(2*M*un). Se x>M-1 si definisce y=x-M, altrimenti y=-x. Così facendo alla fine y assumerà valori compresi fra –M+1 e M-1. Infine, se y è dispari si assegna y a z, z=y; mentre se y è pari si definisce: z=y+1 se x>M-1, z=y-1 altrimenti.
Riportiamo i valori delle tre variabili nel caso M=4. X Y Z 0 0 -1 1 -1 -1 2 -2 -3 3 -3 -3 4 0 1 5 1 1 6 2 3 7 3 3 Tabella II.2
II.2.3 Modulazione PSK
Differentemente rispetto al caso precedente la funzione non produce solo una delle due componenti ma il simbolo complesso M-PSK sottoforma di vettore di reali.
void GenSymbPSK (double* VetPSK, int MPSK, int& jseed)
I parametri richiesti dalla procedura sono:
l’intero MPSK che specifica la particolare modulazione presa in esame il vettore
VetPSK (come riferimento) di dimensione due sul quale andare a memorizzare le
due componenti del simbolo appena generato. Int& jseed è l’indirizzo del seme che serve per aggiornare la funzione unif(int& jseed) usata anche in questo caso.
La variabile fase viene inizializzata a 2*Pg/MPSK. Ovvero, la variabile indica lo sfasamento (in radianti) tra due punti successivi.
Tramite la funzione unif(Int& jseed) si genera il double un uniformemente distribuito tra 0 e 1, che viene ricondotto ad un intero compreso tra 0 e MPSK-1 tramite l’istruzione x=(int)(MPSK*un). A questo punto, se la modulazione è una 2-PSK x assume valori 0 ed 1. Ad x=0 si associa il simbolo di coordinate (1, 0); mentre ad x=1 si associa il punto di sinistra di coordinate (-1, 0).
Per ogni altra modulazione basta definire:
componente fase: * (VetPSK) = cos (x*fase)
componente quadratura: * (VetPSK+1) = sin(x*fase)
II.3 Operazione di Spreading/Despreading
I simboli della costellazione una volta generati passano in un convertitore serie/parallelo di ordine 1 (come evidenziato dallo schema del trasmettitore MC-CDMA). Ciascun simbolo viene ricopiato L volte, dove L è il fattore di spreading, effettuando di fatto un operazione di sovracampionamento. Quindi avviene lo spreading moltiplicando la sequenza dei simboli per la sequenza di codice. I codici utilizzati dal programma di simulazione possono essere di cinque tipi.
/NS
Nel programma le sequenze di codice vengono generate da una funzione, presente sempre in libreria, Funzioni.h che ha il compito di costruire la matrice di
dimensione L L× (L fattore di spreading). Qui la funzione è solo definita, la sua
analisi completa è rimandata al Capitolo III interamente riservato alle sequenze di Spreading.
void CreaCodici(int riga,int colonna,int** CodMat,int type_code, int L,int* portanti_virtuali)
Questa funzione accetta in ingresso i due interi riga e colonna che specificano rispettivamente il numero di righe e di colonne della matrice dei codici ed una matrice di interi. CodMat, è passato come puntatore, ed è la matrice di uscita dove vengono memorizzate tutte le sequenze. type_code è un intero che viene acquisito direttamente dal file d’ingresso e specifica il tipo di sequenza di codice generata.
type_code Sequenza 0 Walsh-Hadamard 1 msequences 2 Orthogonalgold 3 Kasami 4 Gold Tabella II.2
In tabella II.2 sono riportate le corrispondenze tra i valori di type_code ed il tipo di sequenza di codice implementata. L è la lunghezza di una sequenza relativa ad un utente e deve essere fornita alla funzione in quanto questa autonomamente adegua gli algoritmi di generazione. Infine, la funzione fornisce il valore di
portanti_virtuali , questo si rende necessario perché non sempre si riesce a costruire
sequenze lunghe L (gold-kasami) si ovvia ponendo un certo numero di portanti virtuali a 0 e calibrando opportunamente il rumore. In pratica, si effettua lo spreading su di n numero di sottoportanti inferiore e successivamente ripristina il valore L impostato, ma con assenza di segnale su quelle portanti virtuali.
II.4 FFT ed FFT inversa (IFFT)
La funzione che implementa sia la FFT che la IFFT è la seguente
void fft(double *x, long nn, int dir)
Questa accetta in ingresso un vettore di reali (x) di lunghezza 2N dove N è il numero di sotto-portanti che coincide con il numero di punti della FFT. In questo vettore sono contenute parte reale e parte immaginaria dei simboli che vanno a modulare le varie sotto-portanti. Ulteriori parametri richiesti sono long nn che indica il numero di punti su cui fare la FFT, nel nostro caso: N =NS⋅ , e l’intero L dir che specifica l’operazione che vogliamo svolgere, se una FFT o una IFFT, in
particolare se -1 una IFFT, se 1 una FFT.
II.5 Prefisso Ciclico
Nel programma usato per le simulazioni è implementata, come anticipato nel
Capitolo I, l’inserzione del prefisso ciclico. Lo scopo è quello di compensare la
dispersione temporale del canale selettivo, eliminando l’interferenza intersimbolica (ISI) tra i simboli (blocchi). Questa tecnica consiste nell'inserire un intervallo di guardia (della stessa durata del ritardo del canale) alla fine od all'inizio di ciascun blocco periodicamente. In realtà, si spezza in due parti l’intervallo di guardia, ponendone metà all’inizio è metà alla fine, per permettere l’estinzione delle code del blocco precedente e di quello successivo. Nell'intervallo di guardia alla fine del blocco viene ripetuto l'inizio del blocco stesso, in quello all’inizio ne viene ripetuta la coda. In figura II.3 è schematizzata l’inserzione del post-fisso in coda, mentre in
figura II.4 l’inserzione del prefisso. Questa operazione avviene direttamente nel
main non c’è una funzione dedicata.
ν
ν
Fig.II.3-Inserzione del prefisso ciclico alla fine (post-fisso)
ν
ν
ν
Nel dimensionamento dell’intervallo di guardia si tiene conto delle specifiche fornite in ambito del progetto “PRIMO FIRB” tabella I.1.
Nelle simulazioni condotte sono state assunte una durata del simbolo e del prefisso ciclico rispettivamente di 0.5 sµ e di 0.125 sµ in modo da assicurare che la perdita
nel rapporto segnale-rumore dovuta all'inserzione del prefisso ciclico si mantenga sotto ad 1dB, il calcolo della grandezza dell'intervallo di guardia in base al numero dei campioni è fatto nel seguente modo, si calcola prima il rapporto tra la durata del prefisso ciclico e la durata del simbolo, con questo rapporto vado a moltiplicare il numero delle sotto-portanti, ovvero il numero di punti della FFT, ottenendo la quantità desiderata.
Nel nostro caso
0.125 1 0.5 4 s s µ µ = (1.5.1) da cui ottengo ( 256) 1 64 4 Nfft = ⋅ ≅ (1.5.2)
La perdita nel rapporto segnale-rumore dovuta all'inserzione del prefisso ciclico sarà 10log Nfft N 0.969dB 1dB N ν ν ⎛ + ⎞ = < ⎜ ⎟ ⎝ ⎠ (1.5.3)
I risultati possono essere facilmente scalati in base a questa perdita, inoltre nel calcolo delle curve di total degradation è ininfluente poiché si considera la differenza tra due rapporti segnale-rumore (uno senza amplificatore inserito l'altro con l'amplificatore). Essendo costante la perdita dovuta all’inserzione del prefisso ciclico, questa si cancella nell'effettuare la differenza.
II.6 HPA-High Power Amplifier
In questo paragrafo sono elencate brevemente le intestazioni delle funzioni che implementano i modelli degli amplificatori. Per ogni modello implementato vengono mostrate le caratteristiche AM/AM e AM/PM.
void Rapp (double *xfq)
Fig. II.5 – Amplificatore SSPA modello di Rapp – Caratteristica AM/AM
void Twt(double *xfq)
Fig.II.6– Amplificatore TWT modello di Saleh – Caratteristica AM/AM
void Twta(double *xfq)
Fig. II.8 – Amplificatore TWTA – Caratteristica AM/AM
void Ssa(double *xfq)
Fig. II.10 – Amplificatore SSPA – Caratteristica AM/AM
void Gaudenzi(double* xfq)
Fig. II.12 Amplificatore di De Gaudenzi – Caratteristica AM/AM
Tutte queste funzioni richiedono in ingresso un vettore reale di dimensione due in cui sono inserite la componente in fase ed in quadratura del campione da amplificare. Una volta effettuata l’elaborazione, la procedura utilizza lo stesso vettore per restituire i campioni amplificati al programma principale.
II.7 Normalizzazione Potenza media e
Funzione PowerAnalysis
Questo paragrafo e dedicato a verificare come il programma affronta il problema di mantenere costante il back-off di uscita dell’amplificatore. Il cuore del problema è affrontato dalla procedura PowerAnalysis (libreria Funzioni.h) la cui intestazione è
void PowerAnalysis (double* Calc, double ind, int* Walshrand, int prefisso2, int Ns2, int L2, int NcIc2, int Dur2, double RO2, char tipo_mod2,
int cost2, int num_utenti2,char tipo_amp2,int max_point2, int max_block2, double Kappa, double PassoKappa,
double** b_fase2, double** b_quad2, int camp, int pred2, int** interf2,int** monitor, int type_code2)
Nella funzione è contenuta quasi una copia del programma principale, mancando solo le decisioni e il calcolo delle BER.
In ingresso vengono richiesti un numero elevato di parametri, alcuni dei quali servono per descrivere il sistema. In particolare: prefisso2, Ns2, L2, NcIc2, Dur2,
RO2, tipo_mod2, cost2, num_utenti2 e tipo_amp2 che descrivono i filtri di
utenti, il fattore di spreading, il numero delle sottoportanti e la lunghezza del prefisso ciclico utilizzato. Altri parametri molto importanti per il calcolo della potenza sono i due interi max_point2 e max_block2. Il primo indica il numero di cicli necessari per il calcolo della potenza, in particolare questo sarà pari a 2 , necessitando di un primo ciclo per il calcolo della potenza in ingresso e di un secondo per la normalizzazione della la potenza ad uno. Il secondo intero indica il numero di simboli necessari al calcolo della potenza. La scelta effettuata è 2000 simboli, che rappresenta un numero sufficiente di campioni per una stima accettabile della potenza media.
Scorrendo ulteriormente l’intestazione si incontrano i double Kappa e
PassoKappa. Il primo indica il valore iniziale della costante moltiplicativa Kappa
con il quale si attenua il segnale in ingresso all’amplificatore. Ad ogni ciclo la costante moltiplicativa Kappa viene scalata di una quantità PassoKappa fino ad ottenere il back-off desiderato. Si segnala il vettore double Calc di dimensione tre così composto: Calc[0] contiene la potenza media in ingresso all’amplificatore,
Calc[1] è la costante che si deve utilizzare per moltiplicare la parte in fase ed in
quadratura del segnale all’ingresso dell’amplificatore in modo da ottenere il
back-off di uscita desiderato mentre Calc[2] è la potenza media in uscita all’amplificatore
dopo tutte le operazioni di scalatura effettuate e dopo il ripristino della dinamica del segnale. Quindi una variabile double ind che indica il back-off di uscita che si vuole ottenere, un vettore di interi Walshrand che contiene l’ordine delle linee della matrice di codice che si vanno ad utilizzare per le operazioni di spreading e de-spreading (qualsiasi sia il tipo di codice), la matrice double b_fase2 in cui è memorizzata la costellazione predistorta che viene passata dal programma principale e le due variabili intere camp e pred rispettivamente il numero di campioni effettivi su cui si calcolano tutte le potenze ed un interruttore che indica se usare la costellazione predistorta o meno. Quindi la matrice int** interf2 che contiene i maggiori interferenti relativi ad ogni utente, solo nel caso di sequenze di spreading di Walsh-Hadamard. Infine, restituisce l’intero monitor di flag e prende in ingressi l’intero type_code per il tipo di codici di canalizzazione.
Per maggior chiarezza mostriamo lo schema a blocchi per il calcolo della potenza e di tutte le varie costanti di interesse per la simulazione
in Kappa P in P Kappa
Fig. II.14- Diagramma a blocchi funzione PowerAnalysis
Quindi si commenta brevemente il diagramma a blocchi. Inizialmente, sfruttando il valore Kappa impostato da file esterno la funzione effettua un primo ciclo (curr_point2=0) dove calcola la potenza di ingresso ( ) dividendo per il numero di campioni impostato dal file esterno, e la scrive in Calc[0] in modo da poterla usare per la normalizzazione della potenza media.
in
P
Quindi il programma incrementa curr_point2 e rifà un altro ciclo in cui, dopo aver normalizzato le componenti in fase e quadratura dei campioni da amplificare tramite la radice quadrata della , le moltiplica per Kappa. Di seguito amplifica e calcola la potenza di uscita dell’amplificatore ( ) e di conseguenza il back-off di
in
P
out
uscita (OBO), confronta questo back-off con quello che si vuole ottenere e se è maggiore
calcola tramite interpolazione lineare con il valore al passo precedente di Kappa e del back-off il nuovo valore della costante che si deve utilizzare nel programma principale e lo memorizza in Calc[1]. Quindi la funzione de-normalizza le componenti in fase e quadratura per ripristinare la dinamica del segnale e calcola la potenza di uscita dell’amplificatore mettendola in Calc[2], passa infine il vettore
Calc al programma principale e prosegue con la simulazione.
II.8 Filtri di trasmissione e di Ricezione
I filtri GT(f) e GR(f), rispettivamente, il filtro di trasmissione e di ricezione ideali,
hanno risposta in frequenza del tipo a Radice di Coseno Rialzato RRCR
( )
α (RootRaised Cosine Roll-Off α) di assegnato Roll-Off α.
Dal file di ingresso MC-CDMA_Input.txt vengono letti alcuni parametri fondamentali per il dimensionamento dei filtri
• Dur, specifica la durata della risposta impulsiva dei filtri di trasmissione e ricezione misurata in intervalli di segnalazione, valori tipici sono superiori a 10.
• RO, Roll-Off (compreso tra 0 ed 1).
• NcIc, numero di campioni per intervallo di segnalazione (valori tipici sono compresi tra 4 e 10).
Nelle simulazioni effettuate si assume un Roll-Off pari 0.3, la durata dei filtri in termini di intervalli di segnalazione è assunta pari a 20. La frequenza di campionamento utilizzata è 8/TS (N Ic c = campioni per intervallo di 8 segnalazione), ampiamente maggiore del doppio della banda del sistema pari a
(
1+ α)
TS , in modo da rispettare le ipotesi del teorema di Nyquist ed avere unadiscreta rappresentabilità del segnale. Riportiamo l’impulso a radice di coseno rialzato in base ai parametri utilizzati nelle simulazioni
Fig. II.15- Radice di coseno rialzato Roll-Off=0.3
Con i dati sopra indicati, viene creato il vettore NVet di dimensione
DimCamp=Dur * NcIc che definisce proprio la risposta impulsiva del filtro ideale
di trasmissione e di quello di ricezione; contiene infatti i campioni della risposta impulsiva
(
RRCR( )
α .)
Tale vettore è inizializzato attraverso la chiamata della procedura Nyquist, presente in libreria Funzioni.h.
II.9 Il Canale di Propagazione
Il mezzo di propagazione di tipo radio presenta caratteristiche, che a differenza del mezzo cablato, mutano in concomitanza di vari fattori.
I segnali trasmessi in aria sono soggetti infatti, ai fenomeni di attenuazione e multipath, ne consegue, che il modello di propagazione in spazio libero non è più applicabile. La propagazione è quindi influenzata dallo scenario in cui avviene, in ragione della presenza di ostacoli, che provocano riflessione diffrazione e rifrazione delle onde elettromagnetiche, e della mobilità del ricevitore (siamo in down link).
Fig.II.16-Scenario di tipo multipath
Lo scopo di questa analisi è determinare il modello matematico adeguato alla situazione appena illustrata e la conseguente implementazione software.
II.9.1 Modello di canale
Il modello del canale di propagazione per comunicazioni radio (wireless) in accordo con le specifiche del progetto” PRIMO FIRB”, per un sistemo SISO (Single Input Single Output) è identificato con l’acronimo WSSUSS (Wide-sense-stationary-uncorrelated-scattering).
Il canale wireless è caratterizzato da una risposta impulsiva tempo- variante, la quale analiticamente può essere descritta dalla
τ ( , ) N1 ( ) ( ( )) ( 2.9.1 ) i i i hτ t =
∑
= a tδ τ − t DoveN è il numero di cammini multipli
a ti( ) è l’attenuazione relativa all’i-esimo cammino ( )τi t è il ritardo relativo al cammino i-esimo
il carattere tempo- variante è imputabile a fenomeni quale la mobilità del ricevitore, le condizioni meteo e possibili ostacoli in movimento.
Per motivi di semplicità di analisi e di giustificazione dei risultati, si prenderà in considerazione prima una situazione statica, quindi viene discussa la tempo-varianza.
II.9.2 Il
Multipath
Il fenomeno del multipath può essere schematizzato tramite un banco di ritardi in cascata e delle attenuazioni complesse relative ad ogni cammino, vedi figura II.17
Fig. II.17- Schematizzazione Canale Multipath
In questo caso la risposta impulsiva può essere scritta come
1 ( ) N i ( i) i h t aδ t τ = =
∑
− ( 2.9.2 )dove i coefficienti moltiplicativi rappresentano l’ampiezza del contributo i-esimo ed i
i
a
i
τ i corrispondenti ritardi.
Si può dimostrare che gli sono variabili aleatorie (siamo nel caso statico) complesse, il cui modulo ha distribuzione di Rayleigh, nel caso sia assente il cammino in visibilità ( line-of-sight ) di Rice nel caso opposto; la fase è uniformemente distribuita nell’intervallo
i
a
[
0,2π]
.Risulta quindi, che si tratta di variabili aleatorie complesse di tipo gaussiano, le quali presentano modulo e fase indipendenti ed identicamente distribuiti.
La classificazione del multipath viene fatta in relazione alla selettività in frequenza. La selettività frequenziale è valutata in relazione all’intervallo di segnalazione Ts
( che ricordiamo nell’ambito del progetto “PRIMO FIRB” è assunto pari a ) è apprezzabile in modo semplice analizzando la risposta in frequenza del canale
ns 50
( )
1 2 0 c i N j f i i H f a e π τ − − = =∑
(2.9.3) Quindi per un dato symbol rate 1/ , è possibile dividere i canali Multipath in dueclassi:
Ts
• quelli non selettivi in frequenza o alternativamente non dispersivi nel tempo, nei quali le diverse componenti frequenziali sono attenuate nello stesso modo.
• quelli selettivi in frequenza o alternativamente dispersivi nel tempo, nei quali le diverse componenti frequenziali sono attenuate in modo diverso.
In figura II.18a) è riportata la situazione spettrale nel caso di canale non selettivo in frequenza, in figura II.18b) è riportato il caso di canale selettivo in frequenza.
Fig. II.18a) non selettivo II.18b) selettivo
H(f)
f f
Spettro del
segnale Spettro del segnale
La selettività in frequenza del canale trasmissivo si traduce in una distorsione lineare del segnale trasmesso, che a sua volta genera interferenza intersimbolica (ISI) al ricevitore. Questa deve essere opportunamente compensata per evitare una severa degradazione delle prestazioni del sistema.
In relazione alle definizioni precedenti, una misura della selettività in frequenza del canale, è fornita dal Multipath Intensity Profile. Tale profilo riporta la potenza ricevuta in funzione dei ritardi τi inoltre, è valutabile Multipath delay spread τms
cioè il ritardo oltre al quale il profilo di canale è nullo.
In base a τms è possibile calcolare la banda di coerenza del canale, data dalla
relazione C 1 ms B τ ≅ ( 2.9.4 )
La banda di coerenza, rappresenta una misura statistica del range di frequenze, rispetto al quale, il canale attenua le componenti frequenziali del segnale allo stesso modo con fase lineare. In figura II.19 è ripotato il profilo di canale tipico usato nelle simulazioni che è fornito dal progetto “PRIMO FIRB”.
0.6 0.5 0.4 0.3 0.2 0.1 0.0 po te nz e n o rm al iz z a te 8 7 6 5 4 3 2 1 0 Ritardi normalizzati [t/Ts]
Multipath intensity profile
)
Poiché il reciproco della banda del segnale trasmesso (Ts=1/B=50ns risulta
minore di τms il canale ha una risposta in frequenza variabile entro la banda del segnale stesso ed è dunque selettivo in frequenza (Frequency Selective fading). In figura II.20 è ripotato il modulo della risposta in frequenza in ampiezza del canale (una delle realizzazioni). La figura II.21 è relativa ad una realizzazione di
. | ( ) |H f dB 1.2 1.0 0.8 0.6 0.4 0.2 R is p os ta i n f req ue nz a i n a m pi ez z a | H (f )| 240 220 200 180 160 140 120 100 80 60 40 20 0 frequenza normalizzata [f/f0]
Fig. II.20- modulo della risposta in frequenza
-15 -10 -5 0 20 Lo g |H (f )| 240 220 200 180 160 140 120 100 80 60 40 20 0 frequenza normalizzata [f/f0]
Il valore di f corrisponde alla spaziatura tra le sottoportanti e vale 0
f0 =1/Ts ( 2.9.5 )
risulta evidente che il canale è selettivo in frequenza cioè B>Bc.
II.9.3 Canale multipath tempo-variante
Il modello Multipath finora considerato è relativo ad un canale statico, nel quale i parametri caratteristici sono variabili aleatorie indipendenti dal tempo.
Questa ipotesi è molto riduttiva, infatti come precisato in II.9.1 il canale non è statico, ma tempo-variante perché il moto relativo tra trasmettitore e ricevitore, provoca il cambiamento dei parametri caratteristici del mezzo.
La risposta impulsiva del canale, può essere scritta come
h( , )τ t =
∑
iN=1a ti( ) (δ τ −τi( ))t ( 2.9.6 )dove a ti( )e τi( )t non sono più variabili aleatorie, ma processi stocastici.
Si rende necessario quindi, determinare un modello matematico per i processi suddetti.
L’inviluppo complesso del segnale ricevuto r(t) è espresso dalla
(2.9.7) 1 ( ) 0 ( ) C ( ) i ( ( )) N j t i i i r t ρ t eϑ s t τ t − = =
∑
⋅ ⋅ −In forma più compatta possiamo scrivere i d (2.9.8) 1 0 ( ) C ( ) ( ( )) N i i r t a t s t τ t − = =
∑
⋅ −dove il processo a ti( ) è espresso da
( ) ( ) j i( )t (2.9.9)
i i
a t =ρ t e⋅ ϑ
Un modello particolarmente interessante e suggerito anche dal progetto “PRIIMO FIRB” per caratterizzare a ti( ) è quello di Clarke.
Il processo complesso è di tipo gaussiano stazionario a media nulla, con componenti reale ed immaginaria tra loro incorrelate ed indipendenti.
( )
i
a t
L’autocorrelazione viene definita come
2 0
( ) (2 )
a
R τ =σ J π f τ ( 2.9.10 )
dove f è detta frequenza doppler, costituisce la velocità di variazione del canale d
ed è data dalla relazione
fd f0 v c
= ( 2.9.11 )
dove v è la velocità del mobile c è la velocità della luce nel vuoto ed f è la 0
portante del sistema di trasmissione ( è evidente l’effetto mobilità del ricevitore). Si è definito l’ampiezza dello spettro doppler , cioè il Doppler spread, pari a f . d
Questo è motivato dal fatto che effettuando la trasformata di Fourier dell’autocorrelazione, si ottiene la Densità Spettrale di potenza di a ti( )
( ) 1 ( / ) a d A S f f f = − ( 2.9.12 ) dove 2/ 2 d A=σ πf ( 2.9.13 )
tale densità spettrale è limitata nell’intervallo − < <fd f fd.
L’effetto doppler provoca fluttuazioni temporali che contribuiscono ad abbassare le prestazioni del sistema di trasmissione ad elevati bit rate.
La misura della selettività temporale o alternativamente dispersione spettrale del canale, è data proprio da f .Come per la banda di coerenza è possibile definire un d
intervallo di coerenza durante il quale il canale può essere considerato statico. Tc
L’intervallo di coerenza è pari a
c 1 d
T f
≅ ( 2.9.14 )
Nelle attuali applicazioni, le velocità di segnalazione sono assai elevate, quindi si hanno intervalli di segnalazione molto più piccoli dell’intervallo di coerenza e risulta valida l’ipotesi fading lento.
Per avere un’idea delle grandezze in gioco possiamo valutare f in corrispondenza d
di una frequenza della portante pari a f0=3GHz e c=3·108m/sec i valori sono
riportati in tabella II.3 dove compaiono le velocità del mobile.
Km/h fd (Hz) fd/B 3.6 10 0.5·10-6 36 100 5·10-6 108 300 15·10-6
In base al rapporto fra banda doppler e banda del segnale e in base al tipo di contesto in cui avviene la trasmissione, si riescono a definire i seguenti due tipi di
fading:
• fading lento, che provoca lente variazioni sul segnale ricevuto
(causato da ostacoli di grandi dimensioni) e per il quale risulta
fd/B<10-3;
• fading veloce, che provoca rapide fluttuazioni del segnale ricevuto
(associato al moto recicproco di trasmettitore e ricevitore) e si verifica per fd/B>10-2. Si ottengono massimi e minimi del segnale ricevuto a
distanze di circa λ 2.
Nelle attuali applicazioni, nello specifico nel sistema in esame, le velocità di segnalazione sono così elevate da ritenere valida l’ipotesi di fading lento.
Trattando i canali con fading lento, si è affermato che l’attenuazione introdotta dal canale può essere ritenuta costante per molti intervalli di segnalazione e si può trascurare la sua dipendenza dal tempo per la durata di tali intervalli. Alternativamente, come riporta il paragrafo successivo è necessario un dimensionamento opportuno della banda doppler del filtro.
II.9.4 Modello di fading lento
Prima di accennare ai riferimenti software usati per la simulazione, viene effettuata una piccola descrizione del modello di fading lento.
Il doppler spread valef . A livello sperimentale si verifica che non è necessario d
implementare un filtro che abbia risposta in frequenza pari a ma è sufficiente un filtro di Butterworth del secondo ordine a quattro poli passa-basso di banda
( )
a
S f
d
Si deve tenere presente che il filtro da implementare è numerico quindi è necessario rispettare alcuni accorgimenti rispetto ad una implementazione analogica.
La classe deputata alla generazione del filtro opera con un bit rate che dipende dal programma e dalle impostazioni del sistema. A causa del mal condizionamento, non è possibile implementare bande relative (normalizzate) troppo piccole.
ns
Si è scelto di simulare bande doppler relative, non inferiori a 0.001. Da notare che la banda del sistema è 20 MHz, ma le procedure di filtraggio avvengono a tempo di blocco OFDM e questo dipende da quante sottoportanti sono disponibili e dal formato di modulazione. Si ricorda, infatti, che l’intervallo di segnalazione è e il rate di blocco si adegua di conseguenza. Nell’eventualità che la banda minima normalizzata sia inferiore a 0.001 il programma automaticamente mantiene costante la realizzazione del canale per un numero di blocchi tale ripristinare la banda di fading impostata. In pratica, è come se il filtro avesse una banda maggiore rispetto a quella reale, e successivamente venisse effettuata l’interpolazione. Risulta evidente che almeno per la durata di un blocco OFDM, la realizzazione del canale rimane fissa, questo per permettere l’operazione di FFT e di equalizzazione altrimenti impossibili.
50
s
T =
Naturalmente si tratta di un banco di filtri tanti quanti sono i cammini, in relazione al profilo scelto. Viene fatto riferimento ad un filtro per semplicità di trattazione. Si genera un processo gaussiano bianco a valor medio nullo e varianza σ2 (acquisita dal profilo di canale) che viene filtrato con banda f normalizzata. I campioni d
estratti dal filtraggio vanno ad aggiornare i valori delle prese del canale. Tali campioni sono complessi e devono essere trattati come parte reale e parte immaginaria; il modulo di ciascuna presa complessa risulta quindi pari alla radice quadrata del valore della potenza assegnata a ciascun raggio dalle specifiche, mentre la fase è uniformemente distribuita in
[
0, 2π]
.II.9.5 Implementazione software del fading lento
Dal punto di vista dell’implementazione software si procede come segue:
• si definisce un tipo puntatore bw* f = alloc_bw_vect(num_cam) • si definisce la banda normalizzata minima Bdn=0.001
• si definisce la Bdnreal di ogni filtro di butterworth
Bdnreal freq doppler_ _
rate OFDM
= (2.9.15)
Dove freq_doppler si carica dal file d’ingresso MC-CDMAinput.txt mentre rate_OFDM è pari a
_ 1
(
)
s rate OFDM
T L prefisso
= + (2.9.16)
• si effettua un ciclo While per controllare che Bdnreal > 0.001 altrimenti si incrementa lettura_ogni in modo rispettare la condizione mantenendo la realizzazione del canale per più di un blocco. In pratica si sovradimensiona la banda del filtro di butterworth while (Bdnreal< Bdn) { lettura_ogni++; Bdnreal=((lettura_ogni*freq_doppler)/rate_OFDM); }
• si definisce ciascun filtro di Butterworth in termini di banda e selettività tramite la funzione bwDef(&f[i], n° poli, Bdnreal) dove
f[i] è l’ordine del filtro di butterworth, n° poli è il numero di poli del filtro, Bdnreal è data dalla (2.9.16).
• si calcola la varianza delle varie prese del canale, chiamate
sigmaquadro_w[i] e ricavate dalla relazione seguente
2 1 2 _ 2
2 _ 2
i wi i
rate OFDM
freq doppler Bdnreal
α α σ σ = σ = (2.9.17) Dove 2 wi
σ è la varianza della i-esima presa dopo il filtraggio 2
i
α
σ è la varianza della i-esima presa del canale data dal profilo (vedi Fig.II.19)
Bdnreal è sempre data dalla (2.9.16)
• Si calcola la deviazione standard relativa ad una delle due componenti reale o immaginaria (sono identiche) del processo complesso con varianza sigmaquadro_w[i] per ogni presa i-esima,
sigma_w[i]= sqrt((Sigmaquadro_w[i])*0.5)
Esiste, infatti, in Funzioni.h una funzione Noise (in, sigma_w[i], &noiseseed); la quale genera la una variabile gaussiana con le caratteristiche richieste come parte reale e parte immaginaria. Queste vengono restituite dalla funzione in double in[2], in base alla deviazione sigma_w[i] e al seme noiseseed.
• Si effettua un ciclo di 10 milioni di simboli per far giungere a regime le operazioni di filtraggio. for (j=0;j<10000000;j++){ for (k=0;k<num_cam;k++) { Noise(in_two, 1, fadingseed); in[0]=(Sigma_w[k])*(in_two[0]); in[1]=(Sigma_w[k])*(in_two[1]);
bwFilter(&f[k], in, out);
}
}
• Si creano le prese del canale con la cadenza opportuna e la relativa trasformata di fourier che serve all’equalizzatore per poter equalizzare il canale. C’è una funzione in Funzioni.h dedicata alla trasformata
void trasf_canale(double* C_Sel_fase, double* C_Sel_quad, int num_cam, double* C_Sel_Freq_fase, double* C_Sel_Freq_quad, int Ns, double* mod_quad_can, int NcIc, int L)
Tale funzione prende in ingresso due double C_Sel_fase e
C_Sel_quad che sono parte reale e parte immaginaria delle prese nel tempo, il numero di prese num_cam, restituisce in C_Sel_Freq_fase
e C_Sel_Freq_quad parte reale e parte immaginaria della trasformata di fourier per un numero totale di campioni pari a Ns*L (parametri interi che devono essere passati alla funzione).
Inoltre restituisce in un double mod_quad_can il modulo quadro della trasformata, anche questo valore è necessario nel processo di equalizzazione.
L’inserzione del canale avviene direttamente nel dominio del tempo, ritardando e attenuando opportunamente ogni chip, la gestione dei simboli trasmessi è di tipo ciclico, si riportano le linee di programma, deputate allo scopo, direttamente nel
main if (Multy==1) { Ch_win_fase[PuntC]=SAmpl[0]; Ch_win_quad[PuntC]=SAmpl[1]; if (win_full==1) {
for (i=0; i<num_cam; i++)
{
ch_delay=PuntC-i*NcIc; if (ch_delay<0)
SCanaleFase+=(Ch_win_fase[ch_delay]*C_Sel_fase[i]- Ch_win_quad[ch_delay]*C_Sel_quad[i]); SCanaleQuad+=(Ch_win_fase[ch_delay]*C_Sel_quad[i]+Ch_win_quad[ch_delay]*C_Sel_fase[i] ); } } PuntC++; if (PuntC==num_cam*NcIc) { PuntC=0; win_full=1; } } else { SCanaleFase=SAmpl[0]; SCanaleQuad=SAmpl[1]; }
Ovviamente SAmpl[0] e SAmpl[1] sono i simboli in uscita dall’amplificatore in trasmissione, c’è una finestra temporale che gestisce il canale in fase ed in quadratura Ch_win_fase[i], Ch_win_quad[i] insieme al ritardo ch_delay ed al puntatore PuntC.
II.10 Calibrazione del rumore
Nel programma di simulazione il canale complessivo è affetto anche da rumore additivo gaussiano bianco AWGN (Additive White Gaussian Noise), con densità spettrale di potenza nota e pari a N0 2.
Il rumore si somma alle componenti di segnale in uscita dal canale complessivamente non lineare (HPA+Multipath fading), quindi il problema si riconduce a quello di dover generare delle componenti, fase e quadratura, di rumore (ricordo la gestione parallela di parte reale e parte immaginaria).
Tali campioni di rumore devono rispondere a dei requisiti particolari, ovvero devono essere caratterizzati da una distribuzione di tipo gaussiano con valor medio nullo e deviazione standard σ.
La procedura che si occupa della generazione del rumore è
void Noise(double* w,double dev,int& jseed)
alla quale passiamo, oltre alla deviazione Dev, un vettore Rum di dimensione due (per riferimento) in cui vengono scritte le componenti del rumore ed un intero che fornisce il seme per la funzione random.
Si fissa l’attenzione sulla variabile Dev e sulla calibrazione del generatore di rumore Gaussiano, in modo tale da riprodurre un desiderato valore del rapporto segnale-rumore. Per semplicità, si limita la trattazione al caso in cui si desideri generare un processo di rumore Gaussiano bianco reale w t
( )
con DSP bilateraPw
( )
f = N0 ( 2.10.1)Il processo può rappresentare una delle due componenti di rumore in banda base o che sono presenti nel modello di simulazione realizzato con gli
( )
w t
( )
c
inviluppi complessi. Dal punto di vista teorico, il processo dovrebbe avere potenza infinita, in pratica siamo in grado di generare solo una sequenza di variabili Gaussiane
( )
w t
nk, a media nulla e varianza finita σn
2. Si assume che tali variabili
rappresentino una versione campionata a frequenza fsa =1/Tsa di un processo
Gaussiano a tempo continuo n t( ), avente DSP bilatera costante, pari a N0
nell’intervallo frequenziale (−fsa / 2, fsa/ 2) espressa da
n
( )
0 rect sa f f N f ⎛ ⎞ = ⋅ ⎜ ⎝ ⎠ P ⎟)
sa ( 2.10.2 ) Si definisce quindi nk=∆n kT(
( 2.10.3 )con le seguenti proprietà
E
{ }
nk =0 E{ }
nk2 =σ ( 2.10.4 ) ∆ 2n( ) {
}
2 2 ,0 per 0 =E 0 per 0 n n k k m n m m R m n n m + ⎧σ = ⋅ = σ ⋅δ = ⎨ ≠ ⎩ ( 2.10.5 )La DSP del processo a tempo discreto così definito è data da nk
( )
( )
e j2 sa k mT f n n m sa f R m T ∞ ∆ − π =−∞ =∑
⋅ P ⋅ ( 2.10.6 )Dove il coefficiente T serve per mantenere l’omogeneità delle unità di misura (in sa
dt della TCF della autocorrelazione del processo a tempo continuo). Ricordando la (2.10.5) si ottiene
( )
2 2 k n n n sa sa f T f σ = σ ⋅ = P ( 2.10.7 )Uguagliando l’equazione (2.10.7) con la (2.10.1), si ha, nell’intervallo ,
(
−fsa/ 2, fsa/ 2)
0 2n sa N f σ = ( 2.10.8 )da cui si ottiene infine la relazione tra la varianza del generatore di variabili Gaussiane e la DSP del processo che si desidera simulare
2 ( 2.10.9 ) 0 n N f σ = ⋅ sa Si noti che
( )
( )
( )
2 2 2 2 2 0 2 2 2 2 d d d d sa sa sa sa k sa sa sa sa f f f f w n n f f f f f f f f f f N f − − − − = = =∫
P∫
P∫
P∫
= σ ( 2.10.10 ) ne quindi la ( 2.10.9 ) rappresenta anche la potenza del processo di rumore valutata nell’intervallo di frequenza
( )
w t
1 f fsa/2 -fsa/2 w(t) f N0 P w(f) H(f) kTsa n(t) f N0 P n(f) nk fsa/2 -fsa/2 -fsa -fsa/2 fsa/2 fsa f N0 σ2 n P n k(f)
Fig. II.21 – Schema a blocchi concettuale della simulazione a tempo discreto di un processo di rumore Gaussiano bianco
Per esprimere la varianza in funzione di Eb/N0 si procede come segue
( ) 2 0 0 2 0 2 1 1 log log RF b b s s n sa sa sa sa b b b b E E E P T N f f f f E E N M E N M E σ = ⋅ ⋅ = ⋅ = ⋅ ⋅ = ⋅ ⋅ ⋅ 0 N
(
)
( ) ( ) ( ) 2 2 0 2 0 2 0 1 1log log log
RF RF RF s s s n sa b sa b b P T P P f T Nsa M E N T M E N M E N σ = ⋅ ⋅ ⋅ = ⋅ ⋅ = ⋅ ( 2.10.11 )
Nelle simulazioni per sistemi MC-CDMA e con una modulazione M-QAM si può scrivere (attenzione M è il numero di punti della costellazione, ed equivale a cost nel programma) ( ) ( 1) 3 RF S sa M L NcIc P ⋅N = − ⋅ ⋅ ( 2.10.12 )
Da cui si ricava la deviazione standard (Dev) da utilizzare nel programma
2 0 ( 1) 3log b/ M L NcIc Dev M E N − = ⋅ ( 2.10.13 )
Per una modulazione M-PSK facendo analoghe considerazioni si può concludere 2 0 2log b/ L NcI Dev c M E N = ⋅ ( 2.10.14 )
Nella deviazione standard è necessario tenere conto anche di un altro problema. Il segnale, passando nella non linearità, subisce un effetto clipping, ovvero un taglio dei picchi di segnale. Per cui il segnale all’uscita dell’amplificatore non lineare ha una potenza inferiore rispetto al segnale in ingresso. Il livello di potenza su cui si effettua la calibrazione del rumore, per ottenere dei risultati corretti, deve essere riferito al ricevitore. Per cui la formula precedente per il calcolo della deviazione standard di rumore deve essere corretta inserendo un termine che tenga conto della perdita di potenza subita dal segnale nel passaggio attraverso la non linearità.
Per risolvere questo problema, nella simulazione, quando si va a calcolare la costante moltiplicativa che serve per ottenere un determinato back-off si calcola anche la potenza in ingresso all’amplificatore e quella d’uscita a quel determinato back-off di uscita. Queste due quantità vengono memorizzate nella matrice Calc, rispettivamente in Calc[0] ed in Calc[2], la deviazione standard viene quindi modificata come segue
2 0 ( 1) [2] 3log [0] b/ M L Calc NcIc Dev M Calc E N − ⋅ =
⋅ ⋅ per modulazioni M-QAM (2.10.15)
2 0 [2] 2log [0] b/ L Calc NcIc Dev M Calc E N ⋅ = ⋅ ⋅ per modulazioni M-PSK (2.10.16)
Rimane un ultimo problema da affrontare. Per particolari codici di spreding non è possibile ottenere sequenze con lunghezza 2n
L= come richiesto per effettuare la
virtuali, cioè si effettua lo spreading su L, ma su di un certo numero di sottoportanti non viene trasmesso il segnale è come se queste non ci fossero, il numero di campioni che viene dato in pasto alla FFT (sottoportanti +portanti virtuali) è comunque una potenza di 2. Si deve scalare nella calibrazione del rumore l’aliquota di potenza che non è in realtà trasmessa, altrimenti si ottengono prestazioni peggiorative rispetto a quelle reali. La deviazione finale risulta essere
(
)
(
)
2 0
( 1) / tan _ [2]
3log [0] b/
M L L L por ti virtuali Calc NcIc
Dev M Calc E N − ⋅ − ⋅ = ⋅ ⋅ (2.10.17)
(
)
(
)
2 0 / tan _ [2] 2log [0] b/L L L por ti virtuali Calc NcIc
Dev
M Calc E N
⋅ − ⋅
= ⋅
⋅ (2.10.18)
Naturalmente la (2.10.17) è relativa a modulazioni M-QAM la (2.10.18) a modulazioni M-PSK.
II.11 Equalizzazione del canale
A causa dell’effetto del multipath, ogni chip viene ritardato e moltiplicato per un coefficiente complesso che ha come risultato quello di distorce il segnale complessivo; la distorsione dovuta al solo canale di propagazione è lineare ma compromette le prestazioni del sistema. Infatti l'ortogonalità fra gli utenti (quando si usano codici di spreading ortogonali) non viene mantenuta, la si può ripristinare perfettamente grazie a varie forme di equalizzazione del segnale ricevuto.
Una volta eseguito l'algoritmo FFT sui vari campioni, si esegue la cosiddetta equalizzazione del segnale, direttamente nel dominio della frequenza, la quale può essere interpretata in vari modi. Si ricorda che il sistema prevede la perfetta conoscenza della risposta in frequenza del canale, non vi è nessun algoritmo di stima. In figura II.22 è schematizzato il processo di distorsione e quello di equalizzazione del segnale.
II.11.1 Tecniche di equalizzazione
Sono state individuate quattro soluzioni diverse, le quali utilizzano a valle il ricevitore convenzionale a soglia descritto in precedenza[1],[10],[11],[12].
.
Esaminiamo le prime due:
• ORC (Orthogonality Restoring Combining)
• EGC (Equal Gain Combining)
Entrambe le tecniche si rifanno al principio di equalizzazione Zero-forcing e prevedono la conoscenza della risposta in frequenza del canale, in modo da poterla usare per aggiustare il guadagno di sistema, agendo semplicemente sulla risposta in frequenza del canale stesso, secondo le seguenti relazioni.
Tecnica ORC ' ', 2 k m m k m m
H
P
d
H
∗=
⋅
( 2.11.1 ) Tecnica EGC ' ', k m m k m mH
P
d
H
∗=
⋅
( 2.11.2)dove m rappresenta l’m-esima sottoportante e k’ l’utente attivo.
In base alla (2.11.1) e alla (2.11.2) l’ortogonalità fra gli utenti viene ristabilita perfettamente e ciò fa sì che le prestazioni di tale equalizzatore non peggiorino all’aumentare del carico d’utenza.
La facile implementazione di queste tecniche è però contrastata da alcuni svantaggi che essa presenta; infatti, può capitare che dati utili allocati su di una sottoportante particolarmente attenuata dalla selettività del canale, risultino immersi
completamente al di sotto della soglia di rumore termico e pertanto, al momento dell'equalizzazione, quello che viene esaltato è il livello di rumore e non del segnale utile. E' ovvio che in un contesto del genere alcune informazioni utili vadano a perdersi e ciò contribuisce a degradare le prestazioni dell'intero sistema.
Tali tecniche sono applicabili solo con collegamenti downlink, com’ è nel sistema in esame, in cui è garantita la sincronizzazione fra gli utenti serviti, all’interno della medesima cella, dalla stessa BTS.
Fig II.23-azione del rumore e del canale selettivo sul segnale utile
Un’ulteriore tecnica è la MRC:
• MRC ( Maximum Ratio Combining)
Anche questa tecnica si rifà al principio di equalizzazione Zero-forcing e prevede la conoscenza della risposta in frequenza del canale, in modo da poterla usare per aggiustare il guadagno di sistema agendo semplicemente sulla risposta in frequenza
del canale, secondo la seguente relazione m ' ', ( 2.11.3 ) k m k m
P
=
d
⋅
H
∗dove m rappresenta l’m-esima sottoportante e k’ l’utente attivo.
Con la ( 2.11.3 ) viene ristabilita nuovamente l’ortogonalità tra i vari utenti ed in più rispetto alle due tecniche precedenti, nel caso di un solo utente si recuperano perfettamente anche quei dati utili, che a causa della selettività del canale erano allocati su portanti particolarmente “sfortunate” .
Infatti nel caso di un solo utente si ottengono prestazioni che coincidono con quelle di un canale additivo Gaussiano bianco ( AWGN ) comunque sia fatto il particolare profilo del canale. Naturalmente ci si riferisce alla sola distorsione imputabile al canale di propagazione lineare, e nel caso specifico, all’utilizzo di codici di canalizzazione ortogonali ( Walsh-Hadamard e Orthogonalgold).
Al crescere del numero degli utenti non si riesce a contrastare il fenomeno dell’interferenza dovuta agli altri utenti e le prestazioni peggiorano spesso anche in maniera molto accentuata , dipendendo in questo caso anche e soprattutto dal profilo di canale selezionato. Come quelle analizzate in precedenza, anche questa tecnica, è applicabile solo con collegamenti downlink, per cui è garantita la sincronizzazione fra i segnali trasmessi dalla stazione base.
• MMSEC (Minimum Mean Square Error Combining)
Con questo metodo si riesce a mitigare il fenomeno di non ricuperabilità del segnale utile in corrispondenza di quelle sottoportanti per cui il livello del rumore termico è più elevato del segnale utile stesso (forti notch del canale).
Esso infatti necessita della perfetta conoscenza del canale e si basa sul criterio MMSE per cui l'errore deve risultare ortogonale a tutte le componenti in banda base delle sottoportanti ricevute
{
(
' l')
( )
'}
j j
E a −a ⋅r∗ l = 0
= r l
( )
'( 2.11.4 )
con , = componente complessa in bandabase del segnale ricevuto dopo la demodulazione, = j-esimo dato trasmesso,
' 0,1, 2,..., l L ' j a al'j =j-esimo dato stimato.
Viene effettuata una sorta di rivelazione MMSE sottoportante per sottoportante, nel senso che ciascuna di esse viene moltiplicata per il termine
' ', 2 2 k m m k m m m H P d H σ ∗ = ⋅ + ( 2.11.5 ) dove la varianza di rumore al denominatore ha il compito di contrastare l'eccessivo innalzamento del rumore stesso; infatti per ampiezze piccole di sottoportante (e quindi di bit di informazione) il guadagno diventa piccolo limitando così l'effetto del rumore sui dati utili, mentre per ampiezze di sottoportante più grandi, il guadagno diventa simile a quello della tecnica ORC.
E’ di fondamentale importanza che la varianza del rumore usata nella ( 2.11.5 ) sia quella relativa ad ogni componente frequenziale del segnale e non quella relativa all’intero segnale trasmesso. In quest’ultima infatti entra in gioco il fattore di spreading che invece viene normalizzato nel calcolo della varianza del rumore componente per componente. Inoltre come riportato in [10], si deve tenere conto del valor quadratico medio dei simboli della costellazione complessa, E ck } la quale { 2 deve dividere la varianza totale.
Per una costellazione M-QAM E ck = { 2} 2( 1) 3
M −
( 2.11.6 )
In altre parole si può scrivere per le diverse modulazioni 2 m σ come 2 2 0 1 ( ) log m Eb M N
σ = per modulazioni M-QAM ( 2.11.8 )
2 2 0 1 ( ) log m Eb M N σ = per modulazioni M-PSK ( 2.11.9 )
per ogni sottoportante. Si ricorda che tale varianza è relativa a tutto il processo complesso e non ad una sola componente in fase o in quadratura.
Una nota importante riguarda l’implementazione suddetta varianza a livello software, infatti nel programma si dispone di Dev (2.10.17) (2.10.18) che può essere sfruttata nel calcolo delle (2.11.8) e (2.11.9).
(
)
2 2 0 1 2 _ _ 2 1 ( ) log 3 mDev equal Dev equal
Eb M M L N σ = = ⋅ ⋅ − per M-QAM (2.11.10) 2 2 0 1 2 _ _ ( ) log m
Dev equal Dev equal
Eb M L N σ = = ⋅ ⋅ per M-PSK (2.11.11) Dove _ c c Dev Dev equal N I = (2.11.12)
Dovendo eliminare il fattore di sovracampionamento essendo l’equalizzazione posteriore al blocco di FFT in ricezione. Tenere presente che L è quello reale e quindi si devono togliere eventuali portanti virtuali presenti.
Le tecniche di equalizzazione viste, non sono di tipo adattivo, ma prevedono a valle dell’equalizzatore un decisore a soglia di tipo convenzionale.
Si riporta l’implementazione software dell’ MMSEC che fornisce le prestazioni senza dubbio migliori, l’inserzione avviene direttamente nel main non c’è funzione dedicata
Equalizzatore MMSEC:
for (i=0; i<(2*Ns*L); i+=2)
{ s_bloccoRIC_eq[i]=(s_bloccoRIC_prefix[i]*C_Sel_Freq_fase_Old[i/2]+s_ bloccoRIC_prefix[i+1]*C_Sel_Freq_quad_Old[i/2])/(mod_quad_can_Old[i/2]+(n oisy*Dev_equal*Dev_equal/(((cost-1)/3)*(L-portanti_virtuali)))); s_bloccoRIC_eq[i+1]=(s_bloccoRIC_prefix[i+1]*C_Sel_Freq_fase_Old[i/ 2]-s_bloccoRIC_prefix[i]*C_Sel_Freq_quad_Old[i/2])/(mod_quad_can_Old[i/2]+(n oisy*Dev_equal*Dev_equal/(((cost-1)/3)*(L-portanti_virtuali)))); }
Il tipo di equalizzatore è selezionato dal file d’ingresso MC-CDMAinput.txt; da notare le grandezze denominate Old perché ovviamente si equalizza sempre il blocco precedente in quanto già interamente ricevuto rispetto a quello attuale non completamente disponibile.
II.12 Decisione
Per modulazioni MxM-QAM la decisione è affidata alla funzione
int DecisQAM (double camp, int M)
Viene fatto riferimento ad una modulazione 16-QAM (4x4-QAM). Si riporta di seguito la costellazione dei segnali sul piano complesso.
La strategia di decisione è quella a soglia (rivelatore a soglia); in altri termini, si decide per il punto più vicino all’osservato, decidendo in favore del simbolo che appartiene alla zona di decisione in cui cade l’osservato.
Per questo tipo di modulazione, le componenti in fase e quadratura sono indipendenti, ciò permette di trattarle separatamente. Prima si decide per la componente in fase e poi per quella in quadratura.
Alla procedura di decisione vengono passati due parametri: l’intero M per specificare il tipo di modulazione e il reale camp che rappresenta l’osservato (componente in fase o in quadratura dell’osservato).
Prima di tutto, si inizializza la variabile soglia a -(M-2). Così facendo la variabile
soglia rappresenta la prima linea a sinistra per la definizione delle zone di decisione (per una modulazione 16-QAM si ha: soglia=-2, vedi linea indicata dalla freccia). A questo punto se l’osservato cade a sinistra della prima soglia (camp<=soglia) si decide in favore del punto che appartiene a tale zona dec=-(M-1), (âi = -3);
altrimenti se l’osservato sta a destra dell’ultima soglia (camp>-soglia) si decide in favore del punto appartenente a tale zona, ovvero dec=+(M-1), (âi = +3). Se nessuna
delle due condizioni è verificata ciò indica che l’osservato appartiene ad una zona di decisione interna, allora si incrementa la soglia di 2 fino a quando tale linea di demarcazione non supera il campione osservato e quando ciò avviene si decide per dec=soglia-1.
La procedura che si occupa di effettuare la decisione nel caso di modulazioni M_PSK è:
void DecisPSK (double* DecVetPSK, int MPSK, double Pg)
La strategia di decisione utilizzata è ancora quella a minima distanza. Viene fatto riferimento ad un caso particolare: 8-PSK e riportiamo la costellazione nella figura II.24
Fig. 2.24 – Costellazione 8-PSK
La strategia di decisione è quella a soglia (rivelatore angolare). Alla procedura vengono passati i seguenti parametri: un intero MPSK per specificare la particolare modulazione PSK presa in esame, ed un vettore DecVetPSK (per riferimento) di dimensione due nel quale sono memorizzate le componenti fase e quadratura dell’osservato. Al termine della funzione, sullo stesso vettore si trovano le componenti fase e quadratura del simbolo deciso.
Se la modulazione è 2-PSK si decide per il simbolo (1, 0) se la componente in fase dell’osservato è positiva (la componente in quadratura non porta alcuna informazione), si decide per il simbolo (-1, 0) se la componente in questione è negativa.
Per ogni altra modulazione si definisce la variabile phase=180°/MPSK. Quindi, conoscendo il campione osservato e conoscendo le sue componenti, è possibile ricavare l’angolo che quest’ultimo forma con l’asse in fase, θ.
Se l’angolo formato dall’osservato, θ, è maggiore di 360°-phase, ciò implica che l’osservato cade nella zona del simbolo a0, pertanto si decide per (1, 0).
Altrimenti si applica il seguente procedimento: semplicemente, si decrementa θ di una quantità pari a 2*phase, ovvero si sottrae a θ un angolo pari all’apertura angolare di una singola zona di decisione. Così facendo si sposta l’osservato da una zona di decisione a quella immediatamente precedente (procedendo in senso
orario). Tale tecnica viene portata avanti fino a quando l’angolo non risulta inferiore a phase, ovvero fino a quando l’osservato non cade nella zona di decisione associata al simbolo a0. Quando si esce da tale loop la variabile cont contiene il
numero di decrementi effettuati e a quel punto è immediato capire in che regione cade il campione osservato e quindi decidere per:
componente fase: * (DecVetPSK) = cos (cont*2*phase)
componente quadratura: * (DecVetPSK+1) = sin (cont*2*phase)
II.13 Simulazione
Sono stati descritti i blocchi che permettono la realizzazione del programma di simulazione, tranne la parte relativa ai codici di canalizzazione che è descritta nel capitolo successivo. L’obiettivo di questo paragrafo è quello di descrivere brevemente la linea guida per effettuare una simulazione, partendo dalla descrizione del file d’ingresso. Sembra doveroso illustrare al lettore il significato dei parametri da settare, unitamente ai valori congrui di questi, in modo che il simulatore non li rifiuti terminando anzitempo la simulazione.
La prima parte del programma prevede la dichiarazione delle variabili, quindi la lettura del file d’ingresso MC-CDMAinput.txt riportato di seguito
****************************** ***Impostazioni Calcolo BER*** ******************************
Eb/N0 [dB] ( Starting, Step, Number of points ): 15,2,2
Massimo numero di blocchi da trasmettere: 1000000
500000
************************** ***Impostazioni Sistema*** **************************
Tipo di modulazione (P = Psk, Q = Qam): Q
Punti costellazione: 16
Numero di sottoblocchi di simboli d'informazione (Ns): 1
Dimensione dei sottoblocchi (L): 256
Lunghezza prefisso ciclico: 64
Numero di campioni per intervallo di chip (NcIc): 8
Durata del filtro di trasmissione in intervalli si segnalazione (Dur):
20
Roll Off (RO): 0.125
Intervallo di segnalazione (nsec): 50
********************************** ***Impostazioni Gestione Utenti*** ********************************** Numero utenti:
32
Tipo di codice di canalizzazione (0=Walsh-Hadamard / 1=m-sequence/ 2=Orthogonal-Gold/ 3=Small-Kasami/ 4=Gold-Sequences):
4
Seme per l'allocazione degli utenti: 11478
Allocazione codici di Walsh-Hadamard (0=Guidata / 1=Dall'ultima linea a salire / 2=Random):
1
****************************** ***Impostazioni Nonlinerità*** ******************************
Uso Amplificatore di potenza (Si=1, No=0); 0
Tipo di amplificatore: R
Back-Off di uscita: 4
Numero di blocchi per il calcolo delle potenze medie: 2000
Valore di partenza della costante di normalizzazione della potenza media (Kappa): 1 Passo di Kappa: 0.01 ************************* ***Impostazioni Canale*** *************************
Accensione generatore di rumore (0 spento, 1 acceso): 1