|
Appunti informatica |
|
Visite: 1505 | Gradito: | [ Medio appunti ] |
Leggi anche appunti:Il dispositivo DMAIl dispositivo DMA Nelle operazioni di I/O, quando la velocità del trasferimento La gestione delle memorie di massaLA GESTIONE DELLE MEMORIE DI MASSA Un dato viene rappresentato su un SchedulingScheduling Con Scheduler o Schedulatore si intende generalmente il |
Descrizione del Programma di Simulazione
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 OFDM, nella seconda si descrivono le linee guida per effettuare una simulazione.
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.
Fig1- Schema del trasmettitore OFDM
Fig.2-Schema del ricevitore OFDM
Negli schemi mostrati sono assenti i blocchi relativi all'amplificatore di potenza, al canale di propagazione e al rumore termico AWGN.
Dovendo testare il funzionamento dell'algoritmo di minimizzazione è stato introdotto nello schema a blocchi, il "Sidelobe Suppression" che implementa l'algoritmo per la minimizzazione dell'emissione fuori banda [5].
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.
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tab. 1
2.2 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)
3 Sidelobe Suppression
Il blocco che implementa
void minimizzazione (int M, int N, double **C, double *signal, double *g, double alfa, double stepSize, int numero_iterazioni, complex <double> x[] , double &root)
Questa funzione accetta in ingresso le dimensioni della matrice C, e la matrice stessa, il vettore s che contiene i campioni dello spettro nel range di ottimizzazione del seganle originario, ed il vettore delle incognite g. I parametri alfa, stepSize, numero_iterazioni, root e x sono necessari per implementare il metodo di Newton [1] (la trattazione matematica si trova nel capitolo a seguire).
La funzione minimizzazione richiama a sua volta le funzioni
int zsvdc ( complex <double> x[], int ldx, int n, int p,
complex <double> s[], complex <double> e[], complex <double> u[], int ldu,
complex <double> v[], int ldv, int job );
void lsqi ( const int M, const int N, complex <double> b1[], complex <double> s[], complex <double> u[], complex <double> v[], int nIt, double alpha, double stepSize, int r, complex <double> x[], double &root);
La prima opera sulla matrice C una decomposizione SVD, i cui risultati vengono elaborati della funzione lsqi che implementa l'algoritmo ai minimi quadrati con vincolo di disuguaglianza.
4 FFT ed FFT inversa (IFFT)
La funzione che implementa sia
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
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 fig.3 è schematizzata l'inserzione del post-fisso in coda, mentre in fig.4 l'inserzione del prefisso. Questa operazione avviene direttamente nel main non c'è una funzione dedicata.
Fig.3-Inserzione del prefisso ciclico alla fine (post-fisso)
Fig.4-Inserzione del prefisso ciclico all'inizio del blocco
Nelle simulazioni non si è comunque tenuto in considerazione l'inserzione del prefisso ciclico, perché lo scopo era vedere come avrebbe reagito il sistema all'inserzione delle portanti per la riduzione delle emissioni fuori banda.
HPA-High Power Amplifier
Quando nella catena di comunicazione sono presenti dispositivi non lineari come gli amplificatori di potenza, si ha la ricrescita dei lobi secondari dello spettro del segnale. La presenza dell'amplificatore vanifica in tutto o in parte la limitazione dei lobi fuori banda ottenuta con il Sidelobe Suppression ed aggrava quindi i problemi relativi alla possibile interferenza sui canali adiacenti. Gli amplificatori non lineari deformano il segnale in banda base introducendo ISI in misura dipendente dal backoff impegato.
Per backoff di ingresso si intende la seguente quantità , mentre quello di uscita è definito come . Il punto di lavoro spesso è definito in termini di arretramento della potenza media rispetto alla potenza di saturazione e quindi in termini di IBO e OBO.
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. 5 - Amplificatore SSPA modello di Rapp - Caratteristica AM/AM per q=10
La caratteristica AM/PM può essere considerata nulla, ossia questo tipo di amplificatore non introduce distorsioni sulla fase del segnale amplificato.
void Twt(double *xfq)
Fig.6- Amplificatore TWT modello di Saleh - Caratteristica AM/AM
Fig.7 - Amplificatore TWT modello di Saleh - Caratteristica AM/PM
void Ssa(double *xfq)
Amplificatore SSPA
Fig. 8 - Amplificatore SSPA - Caratteristica AM/AM
Amplificatore SSPA
Fig. 9 - Amplificatore SSPA - Caratteristica AM/PM
void Twta(double *xfq)
Amplificatore TWTA
Fig. 10 - Amplificatore TWTA - Caratteristica AM/AM
Amplificatore TWTA
Fig.11 - Amplificatore TWTA - Caratteristica AM/PM
void Gaudenzi(double* xfq)
Fig. 12 Amplificatore TWT di De Gaudenzi - Caratteristica AM/AM
Fig. 13 Amplificatore TWT di De Gaudenzi - Caratteristica AM/PM
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.
7 Normalizzazione Potenza media e
Funzione PowerAnalysis
Questo paragrafo è dedicato a verificare come il programma affronti il problema di mantenere costante il back-off di uscita dell'amplificatore. Il cuore del problema è affrontato dalla procedura PowerAnalysis (libreria Funzioni.cpp) la cui intestazione
void PowerAnalysis (double* Calc, double ind, int prefisso2, int L2, int NcIc2, int Dur2, double RO2, char tipo_mod2, int cost2, char tipo_amp2, int max_block2, double Kappa, double PassoKappa, int camp, int* monitor,int portanti_virtuali2, double* portante_flag2, int CCs2, double ko2, double port02, double portend2, double lim_pot2, int portantiattive2, double stepSize2, int numero_iterazioni2, double alfa2, int portanti_zero, int range);
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, L2, NcIc2, Dur2, RO2, tipo_mod2, cost2, tipo_amp2 che descrivono i filtri di trasmissione e ricezione, il tipo di amplificatore e di modulazione, il numero delle sottoportanti, il numero delle sottoportanti utilizzate per la minimizzazione e la lunghezza del prefisso ciclico utilizzato. Le variabili double ko2, double port02, double portend2, double lim_pot2, int portantiattive2, double stepSize2, int numero_iterazioni2, double alfa2, int portanti_zero, int range servono per fare il calcolo delle portanti CCs.
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 e la variabile intere camp cioè il numero di campioni effettivi su cui si calcolano tutte le potenze. Infine, restituisce l'intero monitor di flag. Per maggior chiarezza mostriamo lo schema a blocchi per il calcolo della potenza e di tutte le varie costanti di interesse per la simulazione
Fig. 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.
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 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.
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 (Root Raised Cosine Roll-Off α) di assegnato Roll-Off .
Dal file di ingresso OFDM_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.125, la durata dei filtri in termini di intervalli di segnalazione è assunta pari a 40. La frequenza di campionamento utilizzata è ( campioni per intervallo di segnalazione), ampiamente maggiore del doppio della banda del sistema pari a , in modo da rispettare le ipotesi del teorema di Nyquist ed avere una discreta rappresentabilità del segnale. Riportiamo l'impulso a radice di coseno rialzato in base ai parametri utilizzati nelle simulazioni
Fig. 15- Radice di coseno rialzato Roll-Off=0.125
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 .
Tale vettore è inizializzato attraverso la chiamata della procedura Nyquist, presente in libreria Funzioni.cpp.
void Nyquist(double* V, int DimCamp, int NcIc, int Dur, double RO)
9 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 .
Il rumore si somma alle componenti di segnale in uscita dal canale complessivamente non lineare (HPA), 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 con DSP bilatera
( 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 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 , a media nulla e varianza finita . Si assume che tali variabili rappresentino una versione campionata a frequenza di un processo Gaussiano a tempo continuo , avente DSP bilatera costante, pari a nell'intervallo frequenziale espressa da
( 2.10.2 )
Si definisce quindi
( 2.10.3 )
con le seguenti proprietà
( 2.10.4 )
( 2.10.5 )
( 2.10.6 )
Dove il coefficiente serve per mantenere l'omogeneità delle unità di misura (in pratica si assimila la sommatoria della autocorrelazione discreta ad un integrale in della TCF della autocorrelazione del processo a tempo continuo). Ricordando la (2.10.5) si ottiene
( 2.10.7 )
Uguagliando l'equazione (2.10.7) con la (2.10.1), si ha, nell'intervallo ,
( 2.10.8 )
da cui si ottiene infine la relazione tra la
varianza del generatore di variabili Gaussiane e
( 2.10.9 )
Si noti che
( 2.10.10 )
e quindi la ( 2.10.9 ) rappresenta anche la potenza del processo di rumore valutata nell'intervallo di frequenza come illustrato in Fig.16
Fig. 16 - Schema a blocchi concettuale della simulazione a tempo discreto di un processo di rumore Gaussiano bianco
Per esprimere la varianza in funzione di si procede come segue
( 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)
( 2.10.12 )
Da cui si ricava la deviazione standard (Dev) da utilizzare nel programma
( 2.10.13 )
Per una modulazione M-PSK facendo analoghe considerazioni si può concludere
( 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
per modulazioni M-QAM (2.10.15)
per modulazioni M-PSK (2.10.16)
10 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.
Fig. 17 - Costellazione 16-QAM
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 (campsoglia) si decide in favore del punto che appartiene a tale zona , (); altrimenti se l'osservato sta a destra dell'ultima soglia (campsoglia) si decide in favore del punto appartenente a tale zona, ovvero . 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 .
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 Fig.18
Fig. 18 - 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)
11 Simulazione
Sono stati descritti i blocchi che permettono la realizzazione del programma di simulazione. 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 OFDMinput.txt riportato di seguito
***Impostazioni Calcolo BER***
Eb/N0 [dB] ( Starting, Step, Number of points ):
Massimo numero di blocchi da trasmettere (ogni blocco e' un numero=sottoportanti):
Massimo numero di bit errati(dipende dall'accuratezza che vogliamo):
***Impostazioni Sistema***
Tipo di modulazione (P = Psk, Q = Qam):
Q
Punti costellazione:
Numero di Sottoportanti (L=canali*sottoportanti_per_canale)(min L=16, max L=256):
Lunghezza prefisso ciclico (L*L*0.04):
Numero di campioni per intervallo di chip (NcIc):
Durata del filtro di trasmissione in intervalli di segnalazione (Dur) (filtro troncato a dx e sx di Dur/2):
Roll Off (RO):0.125
Intervallo di Segnalazione (nsec):
Numero di portanti virtuali (L*R0)
***Impostazioni calcolo CCs***
fattore sovracampionamento sinc (ko):
Prima portante attiva (port0):
prima portante attiva dopo il buco(portend):
Totale portanti attive(portantiattive):
Numero di portanti pesate (CCs):
Potenza da spendere sulle CCs (lim_pot, in percentuale):
Numero di portanti a zero che costituiscono il buco centrale(portanti_zero):
***Impostazioni Nonlinerità***
Accensione Nonlinearità (0 Off / 1 On)s
Tipo di amplificatore:
R
Back-Off di uscita:
Numero di blocchi per il calcolo delle potenze medie:
Valore di partenza della costante di normalizzazione della potenza media (Kappa):
Passo di Kappa:
***Impostazioni Canale***
Accensione generatore di rumore gaussiano(0 spento, 1 acceso):
Seme del rumore gaussiano:
***Monitoraggio Sistema***
Monitoraggio Potenza-BackOff (0 off/1 on)
Monitoraggio BER (0 off/1 on, intervallo di controllo in secondi)
Stampa dello Densità Spettrale di Potenza Normalizzata (0 off/1 on)
I primi dati che
vengano letti sono tre numeri interi che specificano di
partenza, lo step tra un e l'altro ed infine il
numero di punti del rapporto segnale-rumore
per i quali viene calcolata
Si fornisce la lunghezza del prefisso ciclico che nelle nostre simulazione è sempre settato a zero. Ci sono tre parametri che caratterizzano i filtri di trasmissione e di ricezione:
numero di campioni per intervallo di segnalazione solitamente posto ad 8, la durate dei filtri espressa in intervalli di segnalazione, pari a 40 ed il roll_off=0.125. Le impostazioni del sistema si chiudono con la durata dell'intervallo di segnalazione espressa in nsec. Volendo ricreare nelle nostre simulazioni, la condizione in cui si crea un gap di 25KHz, peri ad un canale, in un blocco OFDM contenente 5 canali, l'intervallo di segnalazione è pari a 7690nsec pari ad una banda di 130KHz.
Nella Sezione che riguarda il calcolo delle CCs troviamo il numero di sottoportanti dati, il numero di sottoportanti che vengono spente per creare il buco nello spettro su cui andiamo a fare la minimizzazione, il numero di CCs che vengono usate per l'ottimizzazione e la quantità di potenza spesa su tali sottoportanti in percentuale.
Il numero delle sottoportanti è pari ad L, e viene inserito nella sezione Impostazioni Sistema, in Impostazioni calcolo CCs andiamo a specificare quali CCs sono spente e tra queste quali sono le CCs di cui dobbiamo calcolare i pesi.
Fig.19 tutte le L=64 sottoportanti sono attive
Le portanti dati sono in numero pari a L-portanti_zero.
Inizialmente viene spento un numero di sottoportanti pari a portanti_zero al centro del blocco OFDM (Fig.20).
Quindi di queste portanti_zero indichiamo il numero di CCs che vogliamo utilizzare per la minimizzazione. Le CCs vengono messe ai bordi del buco creato spegnendo le portanti_zero (Fig.21).
Fig.20 spegnamo un numero di sottoportanti pari a portanti_zero, nel caso specifico portanti_zero=22
Gap in cui andiamo a ridurre l'OBR Portend=11 Port0=-32
Fig.21 delle 22 sottoportanti spente ne riattiviamo un numero pari a CCs (nel caso particolare abbiamo 6CCs) che però non trasportano informazione
Port0 e portend servono per parametrizzare al meglio l'algoritmo. Sappiamo che le portanti vengono spente al centro del blocco, quindi le portanti dati saranno in numero L-portanti_zero e si accendono con il seguente procedimento:
da port0 si accendono un numero di portanti pari a (L-portanti_zero)/2
da portend si accende un numero di sottoportanti pari a (L-portanti_zero)/2.
La sezione successiva riguarda la non-linearità, in particolare l'uso o meno dell'amplificatore (si=1,no=0), il tipo di amplificatore come riportato in tabella 4
Simbolo |
Modello Amplificatore |
R |
Modello di Rapp per SSPA |
X |
Modello di Saleh per TWT |
S |
SSPA per punti |
T |
TWT per punti |
G |
TWT di De Gaudenzi |
Tab.2-Modello non-linearità
Quindi la linea successiva del file di input, indica il Back-off di uscita.
Si imposta il numero di blocchi necessario alla funzione PowerAnalysis per il calcolo delle potenze medie, il valore della costante di normalizzazione Kappa ed il passo nell'algoritmo di calcolo.
Quindi si forniscono le impostazioni relative al canale di propagazione, nel nostro caso è strettamente lineare. Si imposta l'accensione o meno del generatore di rumore, il seme da fornire alla funzione Noise .
Appunti su: |
|