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, 40 in questo esempio.

 

 

Fig 3.10: IFFT + CP

 

 

Dopo aver applicato la IFFT + CP, figura 3.10, è necessario riformattare il flusso da parallelo a seriale mediante un convertitore P/S, come mostrato in figura 3.11.

 

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:

  1. Roll-off;
  2. Bit per simbolo cioè log2(M);
  3. Pulse shaping filter. L’utente può scegliere tra tre forme:
    1. None
    2. Raised Cosine
    3. Root  Raised Cosine

 

 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

A questo punto l’immagine attraversa il canale. Nel nostro progetto abbiamo utilizzato il blocco della National Instruments “Add AWGN.vi”  il quale genera un rumore bianco che si somma all’onda complessa trasmessa. Questo rumore ha una densità spettrale di potenza uniforme. Il segnale in ricezione sarà formato dal segnale utile più il rumore introdotto. Attraverso il controllo presente sul front panel è possibile variare il rapporto Eb/N0 che si desidera avere in ricezione (Eb rappresenta l’energia per bit e N0 è la densità spettrale di potenza del rumore) come mostrato in figura 3.13.

 

             

Fig 3.13: Block Diagram della sezione relativa al canale AWGN e relativo controllo del rapporto Eb/No

 

 

 

3.3 Block Diagram: Demodulatore OFDM

In figura 3.14 è mostrato lo schema a blocchi di base del nostro demodulatore OFDM. Rispetto allo schema a blocchi completo illustrato nel capitolo 1 non è presente la sezione di decodifica di canale e di downcoversion.

 

 

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 la FFT   dei simboli  ricostruendo così i simboli di informazione .

 

Fig 3.19: Rimozione CP + FFT

 

Dopo aver applicato la FFT , figura 3.19, è necessario riformattare il flusso da parallelo a seriale mediante un convertitore P/S, come mostrato in figura 3.20.

 

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