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