Questo laboratorio è stato sviluppato da Giada Bamundo, Dennis Dalla Bona, Alessia Gandolfi, Gianluigi Sillano, Roberta Troisi e Cristian Zagan in collaborazione con il professor Danilo Comminiello (DIET), il progetto è stato coordinato dal professor Gualtiero Grassucci (lss G.B. Grassi di Latina).
Premessa
La cancellazione del rumore è un processo che consente di eliminare, o quantomeno ridurre, un rumore ambientale che corrompe un segnale utile. Quando si parla di rumore si può pensare ad un segnale non desiderato che si sovrappone all’informazione utile.
Il nostro obiettivo è quello di implementare un algoritmo LMS (Least Mean Square) in un’applicazione che sia in grado di scindere un segnale, che può essere acustico, multimediale, numerico ecc… dal rumore indesiderato.
Un caso pratico è la tecnica utilizzata per misurare il battito cardiaco fetale: anche in questo caso si utilizzano due segnali, il primo consistente in un elettrocardiogramma addominale che rileverà il battito cardiaco fetale con sovrapposto il battito cardiaco materno ed il secondo in una misura del battito del solo cuore materno: a questo punto l’elettrocardiogramma materno viene opportunamente filtrato in maniera adattativa e sottratto al segnale ottenuto con l’elettrocardiogramma addominale.
Un sistema di cancellazione del rumore è composto da due microfoni distanziati tra loro. Il primo microfono è indicato anche come riferimento primario e acquisisce il segnale d[n], dato dalla sovrapposizione del segnale utile s[n] con l’aggiunta di rumore v1[n]. Il secondo microfono è detto riferimento secondario e acquisisce solo il contributo di rumore v2[n]. Il riferimento secondario deve essere posizionato il più vicino possibile alla sorgente di rumore, in questo modo si può assumere v2[n] come segnale di rumore puro.
Con riferimento all’esempio della cabina di pilotaggio, il microfono primario è quello che indossa il pilota, quindi nelle vicinanze della sorgente utile, che in questo caso è la bocca del pilota. Il microfono secondario, invece, verrà sistemato in una zona della cabina distante dalla bocca del pilota ma dove è presente distintamente il rumore dell’aereo, e cioè nella zona esterna del padiglione delle cuffie indossate dal pilota.
La soluzione
L’algoritmo
Procediamo ora alla costruzione dell’algoritmo. Qui di seguito il significato delle variabili che useremo:
- sn segnale originale
- v2 rumore
- v1[n] stima del rumore
- dn segnale sporco
- en segnale ripulito
- wn filtro adattivo
- v2temp porzione campioni del segnale di rumore v2, un buffer dove memorizzare temporaneamente il segnale da processare
- M lunghezza vettori v2temp, wn
- L lunghezza vettori sn, v1[n], dn, en
- μ=0.001 valore costante
Inizializzazione
Per prima cosa impostiamo il valore di μ=0.001, il valore di M infinitesimo rispetto a L ed il valore di L (nel nostro caso è 10). Successivamente creiamo una lista v_2 con L numeri che corrispondono al rumore campionato e una lista d con L numeri che corrispondono al campionamento del segnale sporco. Impostiamo w come una lista di zeri ripetuti M volte. Questo poi verrà aggiornato a ogni ciclo, vedremo più avanti come funziona. Determiniamo v_2temp come una lista di zeri di M lunghezza.
Stabiliamo e come una lista vuota che verrà riempita da un valore ad ogni ciclo, per avere infine una lunghezza L. Conterrà il campionamento, i valori digitalizzati, del suono ripulito dal rumore.
Ciclo principale
Una volta impostati i valori iniziali possiamo procedere alla realizzazione del ciclo che va ripetuto per L volte, ossia fino alla fine del segnale da processare. Ad ogni iterazione una porzione pari ad M campioni del segnale di rumore v2 viene immagazzinata nel vettore buffer v2temp, come mostrato nella figura sottostante. Ad ogni iterazione il puntatore del buffer si muove di una posizione: in questo modo il segnale in ingresso viene processato un campione alla volta. In pratica utilizziamo una porzione del rumore per lavorare sul segnale in ingresso, quello da ripulire.
La porzione di rumore in esame è utilizzata per migliorare il filtro adattivo wn mediante una convoluzione, una moltiplicazione riga per colonna dei due vettori, v2temp per ottenere un campione, quello attuale, del rumore v1.
A questo punto possiamo sottrarre al segnale in ingresso il rumore stimato per avere un campione del segnale ripulito.
L’ultimo passo del ciclo iterativo è l’aggiornamento dei coefficienti del vettore wn, che verrà poi utilizzato nelle iterazioni successive. Per aggiornare il filtro bisogna sommare al filtro dell’iterazione precedente il vettore v2temp moltiplicato per la costante μ e per il valore di en. Questa operazione migliora il filtro adattivo perchè tiene conto anche della porzione appena analizzata del rumore, rendendo via via sempre più efficace il filtro che si adatta al rumore rilevato.
A questo punto il ciclo descritto dovrà essere ripetuto fino alla fine del segnale microfonico, ossia per L iterazioni. Quando la procedura iterativa sarà conclusa, il vettore en conterrà il segnale migliorato, ripulito, grazie al filtro adattivo.
Conclusioni
Nel grafico che segue sono rappresentati quattro tipi di segnale acustico: in blu vi è il segnale, ovvero il suono originale; in rosso vi è il rumore che si aggiunge al segnale originale a formare il segnale sporco, rappresentato in verde; infine abbiamo il segnale ripulito in viola che si ottiene dal filtraggio.
Per testare l’algoritmo e creare questa simulazione abbiamo immaginato un segnale composto da una sinusoide generica che potrebbe rappresentare, per esempio, la singola nota emessa da un diapason. I punti di colore blu rappresentano i valori campionati di questo suono. I punti in colore verde rappresentano il campionamento del suono – disturbato – che abbiamo ottenuto, in questo esempio, come somma del suono originale – che nella realtà non è possibile conoscere – e del rumore.
L’algoritmo, operando su questi dati, ha fornito un array di valori che rappresentano il (campionamento del) suono ripulito grazie al lavoro del filtro.
La spezzata che raffigura il segnale ripulito – la linea in colore viole che unisce i campioni del suono filtrato – tende ad avvicinarsi sempre di più a quella del segnale originale via via che il segnale è analizzato. Il filtro adattivo, infatti, migliora le sue prestazioni imparando dall’analisi dei primi segnali e migliorando la sua efficacia ad ogni campione processato.