Il mio lavoro parla della sperimentazione di alcuni metodi per
l'acquisizione di segnali ed in particolare di immagini con
numero ridotto di campioni. Un sistema di acquisizione attuale è basato sull'applicazione pratica del teorema di Shannon: il segnale d'interesse viene campionato ad una frequenza che è il doppio della sua frequenza massima. Il risultato viene successivamente compresso e infine memorizzato. Tutto questo però è molto dispendioso dal punto di vista economico: un gran numero di sensori vengono impiegati per ottenere un flusso di poche centinaia di kilobyte. L'obiettivo del campionamento compresso invece, è quello di acquisire il segnale in modo che sia già compresso e successivamente ricostruito per essere memorizzato. Questa tecnica però è molto complessa? Perchè complessa? Perchè richiede l'uso di metodi di ottimizzazione che impiegano notevoli risorse di calcolo ed è quindi chiaro che l'elaborazione completa richiede molto tempo, perciò i processori moderni non hanno prestazioni sufficienti. E' stato quindi necessario l'uso delle GPU. Perchè la GPU? Fondamentalmente perchè hanno prestazioni migliori a costi più bassi. Perchè prestazioni migliori? Perchè la performance dei dispositivi grafici cresce più velocemente di quella della cPU, inoltre l'architettura delle GPU è dotata di un altissimo parallelismo. Perchè a costi più bassi? Perchè anche se il costo di una GPU è in linea con quello di una CPU, consumano molta meno energia. Dispongono inoltre di grande larghezza di banda per quanto riguarda i trasferimenti da e verso la memoria perchè hanno una memoria molto grande integrata nel chip. Infine sono anche flessibili e programmabili. La programmabilità di questi dispositivi ha permess il nascere e lo svilupparsi del GPU computing, ossia l'uso delle GPU per scopi diversi dalla creazione di immagini 3D. Sono quindi nate architetture che permettono il calcolo sulla GPU come Nvidia CUDA e ATI Close to Metal che a loro volta hanno permesso lo svilupparsi di ambienti di sviluppo software come GPUMat e Jacket che offrono la possibilità di usare le capacità delle GPU in MATLAB e JCUDA che offre invece la possibilità di usare l'architettura CUDA nei programmi Java. Il campionamento compresso, si basa su due concetti fondamentali: sparsità e incoerenza. Sparsità vuol dire che l'informazione contenuta in un segnale tempo-continuo è più basso della sua larghezza di banda. Incoerenza vuol dire che la forma d'onda di campionamento deve essere densa dove il segnale ha una rappresentazione sparsa. Per quanto riguarda le immagini, come dominio in cui l'immagine ha una rappresentazione è stata scelta la trasformata discreta del coseno per l'incoerenza si è fatto ricorso alle noiselet. Le noiselet sono funzioni binarie molto simili ad un disturbo casuale. I campioni acquisiti vengono poi ricostruiti con il metodo di ottimizzazione L1. Vengono qui mostrati degli esempi delle ricostruzioni fatte e i loro effetti parassiti. Nel primo l'immagine è stata ricostruita prendendo i primi 1000 coefficienti della trasformata discreta del coseno. L'effetto parassita che otteniamo in questo caso prende il nome di fenomeno di Gibbs o ringing che si ottiene quando ad un segnale viene trocato il suo sviluppo in serie. Nel secondo caso sono stati acquisiti maggiori campioni della DCT e la ricostruzione attraverso l'ottimizzazione della norma l1. Come effetto parassita si ha una perdita delle componenti ad alta frequenza e quello che ha il nome di effetto a mosaico. L'ultima ricostruzione è stata effettuata con le noiselet. Come effetto parassita si presenta un effetto di puntinatura. Un caso di studio interessante è quello delle immagini mediche dove si vede il successo di questa tecnologia, infatti tutte le ricostruzioni mantengono inalterati tutti i dettagli principali dell'immagine originale. Infine viene mostrata una tabella che mostra le differenze fra i tempi di esecuzione della GPU e quelli della CPU.