Manuale
Tecnico
In questo capitolo viene esposto il manuale tecnico del nostro programma in
cui vengono approfondite le
differenti funzioni dei blocchi forniti dalla National Instruments e come gli
stessi sono stati implementati insieme per dar vita al software OFDM Simulator.

Nella paragrafo 3.1 spieghiamo il diagramma a blocchi del modulatore
illustrando le singole caratteristiche.
Il canale di comunicazione simulato è descritto nel paragrafo 3.2.
Nel paragrafo 3.3 infine sono descritte le caratteristiche del demodulatore.
Nella pagina seguente è stampato il block diagram completo di OFDM
Simulator.
3.1
Block Diagram: Modulatore OFDM
In
figura 3.1 è mostrato lo schema a blocchi base del nostro modulatore OFDM. A
differenza dello schema completo di figura 1.6 si può notare che non viene
applicata la codifica di canale. Questa decisione è stata presa in quando
abbiamo trovato difficoltà nella sua implementazione con LabVIEW.
Inoltre nel nostro software non effettuiamo l’operazione di upconversion, cioè lavoriamo sempre con segnali in banda base.

Fig 3.1: Schema a blocchi base del nostro modulatore OFDM
3.1.1
Codifica di sorgente

Fig 3.2: Block Diagram: codifica di sorgente
Read
BMP file.vi : Legge
un’immagine bitmap (.bmp) a 8bit scelta dall’utente e crea i dati necessari
per elaborare l’immagine;
Draw Flattend
Pixmap.vi : Visualizza l’immagine caricata;
Unflattend
Pixmap.vi : Crea una matrice X di
dimensioni LxH (dove L è il numero di pixel della larghezza dell’immagine, H
è il numero di pixel dell’altezza), in cui ogni elemento X[i][j] è
codificato il valore decimale del colore del pixel nella posizione [i][j]
dell’immagine.
Nel
nostro caso la risoluzione dell’immagine a 8 bit corrisponde a 256 possibili
valori di colore del pixel. Ad esempio un pixel bianco viene codificato in 255dec.
Per
quanto riguarda le dimensioni dell’immagine selezionata, queste sono calcolate
nella parte tratteggiata di figura 3.3 e comunicate al ricevitore
(nell’esempio in figura verranno comunicate le due dimensioni L=186, H=186))
per permettere la ricostruzione dell’immagine ricevuta.
La
matrice viene successivamente trasformata in un array monodimensionale V, cioè
un vettore, di dimensione LxH, nel nostro esempio 186x186 = 34596, come mostrato
in figura 3.3

Fig
3.3: Calcolo dimensioni immagine e conversione da matrice a vettore
A
questo punto il vettore, in cui in V[i] è contenuto il valore decimale del
colore del pixel, viene codificato nel corrispondente valore binario e quindi
viene creato un flusso binario di lunghezza LxHx8bit, nel nostro esempio
186x186x8bit = 276768 bit, come mostrato in figura 3.4.

Fig
3.4: Creazione flusso di bit
3.1.2
Interleaving

Fig 3.5: Block Diagram: interleaving
Block
Interleaver (Matrix).vi :
Effettua
l’interleaving scrivendo i dati in ingresso in una matrice m(righe) x
n(colonne) riga per riga e successivamente i dati in uscita vengono letti
colonna per colonna, quando la matrice è piena. Noi utilizziamo una matrice di
dimensione 7x13.
Come
esempio mostriamo l’applicazione di questa tecnica con una matrice 4x4.
Bit
Stream Input: 1,1,0,1,0,1,1,0,1,0,0,1,1,1,0,0.
|
1 |
1 |
0 |
1 |
|
0 |
1 |
1 |
0 |
|
1 |
0 |
0 |
1 |
|
1 |
1 |
0 |
0 |
Bit
Stream Output: 1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0.
3.1.3
Sequenza di training o Preamble

Fig 3.6: Block Diagram: creazione e inserimento sequenza di training
Il
blocco dopo l’interleaving permette l’inserimento della sequenza di training
o preamble, cioè una sequenza nota di bit che viene inserita in testa al flusso
di bit da trasmettere. Questa sequenza di bit ha una lunghezza P di un numero di
bit pari al numero di bit contenuti in un simbolo OFDM, cioè
P=(#Sottoportanti)*(Bit per Simbolo).
Ad
esempio con un mapping 16QAM e 32 sottoportanti si ha una sequenza di training
di log2(16) * 32 = 4 * 32 = 128 bit.
La
generazione dei bit costituenti il preamble è effettuata con l’apposito
blocco “Bit Generation.vi” che crea una sequenza di bit pseudocasuale. La
sequenza di training così creata viene ovviamente comunicata a lato ricevitore
per poter poi essere rilevata durante la fase di sincronizzazione.
P bit
LxHx
8 bit

P:
dimensione del preamble
L:
larghezza immagine (nel nostro esempio 186)
H:
altezza immagine (nel nostro esempio 186)
Generate
Synchronization Parameters.vi : permette il trasferimento dei parametri per la sincronizzazione, cioè la
sequenza di training e la sua lunghezza in bit, necessari per permettere di
poter effettuare correttamente l’operazione di sincronizzazione a lato
demodulatore.
L’utente
può decidere anche di non effettuare l’inserimento del preamble selezionando
False.
3.1.4
Mapping M-QAM

Fig 3.7: Block Diagram: operazione di mapping
Questo
blocco permette di effettuare il Mapping Gray M-QAM. Il blocco riceve in
ingresso il flusso di bit e, attraverso i parametri specificati dall’utente,
in uscita dal blocco si avrà un insieme di simboli complessi della
costellazione M-QAM;
3.1.5 S/P +
IFFT + CP + P/S

Fig 3.8: Block Diagram: operazione di calcolo IFFT e inserimento del CP
Analizzando il blocco IFFT / Cyclic Prefix, si può notare innanzitutto che
viene fatta una conversione serie-parallelo. Vengono raggruppati tanti simboli
in base a quante sottoportanti l’utente ha specificato, figura 3.9.

Fig
3.9: Seriale / Parallelo
Inverse
FFT.vi: Dall’insieme
degli N simboli da trasmettere
,
attraverso questo blocco vengono calcolati gli N valori complessi
eseguendo la trasformata inversa veloce di Fourier
(IFFT).
Successivamente viene inserito il prefisso ciclico CP. La lunghezza del
prefisso ciclico è definita come il numero di simboli complessi in uscita dal
blocco IFFT che devono essere copiati in testa a tutti gli altri.
Ad esempio con:
N=32 sottoportanti
LCP=8
All’uscita del blocco IFFT si avranno
valori complessi. Di questi gli ultimi 8 verranno ricopiati in testa, in modo da avere in totale N+ LCP
valori complessi,

Fig
3.10: IFFT + CP
Dopo aver applicato

Fig 3.11: Parallelo / Seriale
3.1.6
Pulse Shaping

Fig 3.12: Block Diagram: operazione di pulse shaping
L’ultimo
blocco da analizzare, lato trasmettitore, è il blocco di Pulse Shaping.
Generate
Filter Coefficients.vi: Permette
di definire i coefficienti per i blocchi di pulse shaping e matched filter. In
ingresso riceve tre parametri:
Apply
Pulse Shaping
Filter.vi: Crea
l’onda da trasmettere sul canale in base ai simboli di ingresso. I parametri
di input del filtro sono dati dal blocco precedente.
3.2 Block Diagram: Canale AWGN
Fig 3.13: Block Diagram della sezione relativa al canale AWGN e relativo
controllo del rapporto Eb/No
3.3 Block Diagram: Demodulatore OFDM

Fig 3.14: Schema a blocchi di base del nostro demodulatore OFDM
3.3.1
Matched Filter

Fig 3.15: Block Diagram: sezione relativa al matched filter
Apply Matched
filter.vi: questo
blocco applica i coefficienti di matched filter, creati dal blocco “Generate
Filter Coefficients.vi”,
all'ingresso della forma d'onda complessa IQ in banda
base. Il VI restituisce l'uscita filtrata con una durata uguale al numero intero
dei simboli.
Align
To Ideal Symbols:
questo blocco applica il ricampionamento di fase continua per allineare il primo
campione della forma d'onda complessa in ingresso all'istante di tempo del
simbolo ideale. La forma d'onda restituita è allineata nel tempo così che il
suo primo campione corrisponde all'istante del primo simbolo ideale.
Decimate
Oversampled Waveform.vi: questo
blocco effettua l’operazione di decimazione alla forma d'onda complessa
d'ingresso e restituisce la forma d'onda complessa decimata, cioè con un numero
di campioni ridotto di un fattore pari ai campioni per simbolo. Questa
operazione viene effettuata per ridurre il numero di campioni da elaborare in
modo da diminuire la complessità di elaborazione.
3.3.2
Sincronizzazione

Fig 3.16: Block Diagram: sezione relativa alla sincronizzazione
Questo blocco permette di effettuare la sincronizzazione del
demodulatore, aspettando di ricevere la sequenza di preamble stabilita a lato
trasmissione e una volta trovata può iniziare a ricevere le informazioni.
3.3.3 S/P +
CP Remover + FFT + P/S

Fig 3.17: Block Diagram: rimozione del CP e operazione di calcolo FFT
I simboli di ingresso vengono disposti in parallelo a blocchi di
dimensione = (LCP)+(Numero di sottoportanti), figura 3.18.

Fig 3.18: Seriale/Parallelo
A questo punto viene rimosso il Cyclic Prefix e quindi il blocco
successivo calcola
ricostruendo così i simboli di informazione
.

Fig 3.19: Rimozione CP + FFT
Dopo aver applicato

Fig 3.20: Parallelo / Seriale
3.3.4 M-QAM Demapping

Fig 3.21: Block Diagram: operazione di demapping QAM
Questo blocco
permette di effettuare il Demapping Gray M-QAM. Il blocco riceve in ingresso i
simboli dell’uscita della FFT, e attraverso i parametri specificati
dall’utente a lato modulatore, in
uscita dal blocco si avrà il flusso di bit.
3.3.5 Deinterleaving

Fig 3.22: Block Diagram: deinterleaving
MT
Block Deinterleave (Matrix).vi :
Effettua il
deinterleaving scrivendo i dati in ingresso in una matrice m(righe) x n(colonne)
colonna per colonna, e successivamente i dati in uscita vengono letti riga per
riga, quando la matrice è piena. Le dimensioni della matrice corrispondono
ovviamente a quelle impostate nel blocco di interleaving, cioè 7x13. In seguito è mostrato un esempio
che effettua il deinterleaving 4x4.
Bit
Stream Input: 1,0,1,1,1,1,0,1,0,1,0,0,1,0,1,0.
|
1 |
1 |
0 |
1 |
|
0 |
1 |
1 |
0 |
|
1 |
0 |
0 |
1 |
|
1 |
1 |
0 |
0 |
Bit
Stream Output: 1,1,0,1,0,1,1,0,1,0,0,1,1,1,0,0.
3.3.7
Decodifica di sorgente

Fig 3.23: Block Diagram: decodifica di sorgente
Come ultima operazione, vengono prelevati di volta in volta gruppi
di 8 bit, che corrispondono alla risoluzione dell’immagine, per poi
decodificarli nel corrispondente valore decimale. La conversione da valore
binario a decimale è necessaria per visualizzare l’immagine con gli opportuni
blocchi della National Instruments.
Successivamente viene ricostruita la matrice in cui ogni elemento
di essa è decodificato il valore decimale del colore del pixel corrispondente.
La dimensione della matrice è pari alla dimensione dell’immagine. I valori
dell’altezza e della larghezza vengono ricevuti dal trasmettitore come
spiegato nel paragrafo 3.1.1.
La matrice così creata viene trasferita al blocco “Flatten
Pixmap.vi” che crea tutti i parametri necessari per la corretta
visualizzazione effettuata infine dal blocco “Draw Flattened Pixmap.vi”.