Progetto intermodulare di telecomunicazioni (01KLSBN) Parte

Progetto intermodulare di telecomunicazioni (01KLSBN)
Parte relativa al modulo “Comunicazioni elettriche”, R. Gaudino
Obiettivo: simulazione di sistemi PCM con quantizzazione uniforme ed errori sui bit
L’obiettivo del lavoro è quello di studiare tramite simulazione in C alcuni aspetti relativi ai sistemi PCM
(Pulse Coded Modulation, o conversione analogico-digitale) che verranno spiegati a lezione. In particolare ci
si focalizzerà su:
•
•
Variazione del numero di bit di quantizzazione utilizzati per rappresentare i campioni
Trasmissione del flusso di bit su un canale BSC con una certa probabilità di errore sui bit pari a p .
Il programma in C che si dovrà realizzare deve prevedere:
• La lettura di una file “audio” in ingresso INPUT.OND, codificato secondo il formato utilizzato nelle
esercitazioni del modulo precedente. L’elaborazione dei dati contenuti nel file secondo le modalità
descritte nel seguito
• La scrittura dei dati risultanti in un file di uscita OUTPUT.OND (codificato nuovamente secondo il
formato .OND)
Ascoltanto il file OUTPUT.OND tramite suonaonda.m sarà possibile ascoltare “sperimentalmente” come gli
effetti della codifica PCM e degli errori sui bit agiscano sulla qualità del suono in uscita.
Per semplicità, si preveda di trattare solo il caso MONO. Di conseguenza, se il file di ingresso INPUT.OND
è in formato STEREO, all’inizio del programma si effettui una conversione in formato MONO, basata
semplicemente su una conversione ottenuta, per ciascuna coppia di campioni stereo, calcolando un singolo
valore pari alla media algebrica dei due valori.
L’obiettivo qui descritto deve essere ottenuto con un unico programma in C, che sia opportunamente
strutturato in (almeno) tre subroutine, ciascuna delle quali dovrà essere scritta in una delle tre esercitazioni al
LAIB
PRIMA ESERCITAZIONE: conversione Analogico Digitale
La parte di programma relativa alla prima esercitazione si deve occupare della conversione analogico
digitale, ed in particolare di
-
leggere il file di ingresso INPUT.OND, caricandone i valori in memoria
se necessario, effettuare il passaggio da stereo a mono calcolando la media di ciascuna
coppia di campioni
effettuare una conversione analogico digitale di ciascun campione su un numero di bit
arbitrario Nbit
Si assuma che nel file INPUT.OND i campioni siano dei generici numeri reali compresi nell’intervallo [-1,1].
Utilizzando la notazione che verrà utilizzata nelle lezioni del corso di “Comunicazioni Elettriche”, siano:
• N camp il numero di campioni totali del file di ingresso
•
•
Nbit il numero di bit utilizzati per la conversione analogico-digitale (nel programma C si lasci questo
parametro come libero di assumere qualunque valore da 3 a 16)
M = 2 N bit il numero di intervalli di quantizzazione, cioè il numero di intervalli in cui è suddiviso il
range [ −V ,+V ] dei campioni in ingresso (nel caso in esame [ −V ,+V ] = [ −1.0,+1.0] ). Si
considerino M intervalli identici, ciascuno dei quali di larghezza 2 ⋅ V / M , e si etichettino i vari
intervalli con numeri interi da 0 a M-1
000
001
010
…
Vin
111
−V
+V
M
analogico-digitale intervalli
implementata
Si consideri una conversione
in questo modo (quantizzazione uniforme).
Dato il campione in ingresso x da convertire, si determini in quale degli M intervalli cade il campione. Si K
l’etichetta di questo intervallo (K è un numero intero da 0 a M-1). La corrispondente M-upla di bit
corrispondente al campione in ingresso x è data dalla conversione in binario puro senza segno dell’intero K.
Scopo della seconda esercitazione (e della relativa subroutine, da denominare “conversione_AD”) è il
seguente:
1. per ciascuno degli N camp campioni in ingresso, convertire il campione secondo le regole della
quantizzazione uniforme sopra descritte, ottenendo Nbit per ciascuno dei campioni
2. ottenere in uscita una matrice MATRIX_AD di valori binari (0 e 1) organizzata in N camp righe e Nbit
colonne, che contenga in ciascuna riga il valore del campione di ingresso convertito da analogico a
digitale.
SECONDA ESERCITAZIONE: conversione Digitale Analogica
Scopo della seconda esercitazione, e della relativa subroutine (che dovrà essere denominata
“conversione_DA”), è quello di ri-convertire la matrice di bit MATRIX_AD in una serie di valori reali da
inserire nel file di uscita OUTPUT.OND.
A tale scopo, si consideri che per ciascuna riga della matrice MATRIX_AD, cioè per ciascun campione
ottenuto dopo la conversione analogico-digitale, si deve ritornare nel dominio “analogico”, cioè si deve
riportare il campione ad un numero reale. Questo valore DEVE ESSERE pari al valore centrale del
corrispondente intervallo di quantizzazione, come rappresentato nella figura sottostante.
k-esimo
intervallo
000
−V
001
010
111
vout
+V
−V
Si richiede inoltre di stimare numericamente il rapporto segnale-rumore sul segnale di uscita come segue:
N camp
SNR =
i =1
N camp
i =1
dove:
•
•
•
( x[i ])2
(e[i ])2
x[n ] è la sequenza di ingresso da intendere come vettore di numeri reali tra -1 e +1, cioè la
sequenza di reali contenuta in INPUT.OND
y[n ] la sequenza di uscita dopo le elaborazione (sempre di numeri reali)
e[n ] = x[n ] − y[n ] la sequenza di “errore”, cioè la differenza, campione per campione, tra
l’ingresso e l’uscita.
TERZA ESERCITAZIONE: trasmissione su canale BSC
Scopo della terza esercitazione, e della relativa subroutine (denominata “canale_BSC”), è quello di inserire
degli errori casuali sui bit con certa probabilità di errore sui bit pari a p , che deve essere settabile a piacere
dall’utente. Si vuole in questo modo simulare cosa avviene durante la trasmissione dei dati digitali su un
canale binario simmetrico (BSC) con una certa probabilità di errore.
La subroutine da implementare si inserirà “in mezzo” alle precedenti due subroutine, e agirà dunque sulla
matrice MATRIX_AD ottenuta con il codice sviluppato alla prima esercitazione.
Scopo della subroutine è di modificare la matrice MATRIX_AD secondo una certa probabilità di errore sui
bit. Ovviamente, per errore sul bit si intende una inversione di valore (da 0 a 1 o viceversa).
Questa funzionalità può essere implementata in vari modi. Si consiglia di scandire la matrice MATRIX_AD
per righe. Per ciascun bit di questa matrice, utilizzando il generatore interno di numeri casuali rand (o
similari) per derivare un generatore di condizione di errore con probabilità p . Per ogni condizione di errore,
si inverte il bit. A causa di problematiche di fluttuazione statistica, effettuare prove solo per probabilità di
errore superiori a 10-4.
In uscita al programma, la matrice MATRIX_AD deve essere inviata al codice di conversione digitale
analogico, al fine di
• Valutare il valore di SNR ottenuto in questo caso
• Generare il file .OND e poterlo ascoltare
Note finali
Si lascia allo studente ampia libertà nelle scelte implementative del programma. In particolare, a parte le
linee guida riportate nelle pagine precedenti, lo studente può usare all’interno del programma la struttura dati
che più preferisce.
Si richiede di:
• Strutturare il più possibile il programma in subroutine separate
• Inserire opportuni commenti in modo che il codice sia leggibile anche da persone diverse dall’autore
del codice stesso
Il lavoro si riterrà completamente concluso quando:
1. sarà possibile ri-ascoltare il file audio dopo averlo fatto passare attraverso le tre subroutine;
2. i valori di SNR che si ottengono al variare del numero di bit di quantizzazione e della
probabilità di errore saranno ragionevoli rispetto a quanto visto nelle lezione
Parti opzionali
Solo per gli studenti che abbiano completamente terminato le parti precedente, si lasciano, a titolo del tutto
opzionale, le seguenti possibilità di upgrade:
•
Gestione anche del caso stereo, semplicemente gestendo i due canali come due flussi dati del tutto
indipendenti, e quantizzandoli separatamente
•
Gestione del caso di riduzione della frequenza di campionamento. Semplicemente, implementare un
programma che riduca la frequenza di campionamento di un fattore N, considerando un campione
ogni N del flusso dati in ingresso, e trascurando i campioni intermedi.
Note sulla relazione finale
La relazione finale dovrà contenere, relativamente alla parte di Comunicazioni Elettriche:
• Un grafico e/o una tabella che contenga alcuni valori significativi di rapporto segnale rumore (SNR)
in funzione sia del numero di bit di quantizzazione che di probabilità di errore
• Una breve descrizione di come è stato strutturato il programma