Inseriamo nel nostro blog questo interessante contributo di Davide Zilli attualmente ricercatore presso lo spin off Mind Foundry e Junior Research Fellow a Somerville College, University of Oxford.
Visto che il tema che unisce Machine Learning e zanzare malariche è decisamente affascinante, vi lasciamo da subito alla lettura di questo articolo!
Ringraziamo Davide per questo suo contributo, un vero esempio di divulgazione di qualità!
Introduzione
Quali sono gli animali più pericolosi per l’uomo? Sicuramente lo squalo! No, lo squalo uccide solo una decina di uomini all’anno. Il coccodrillo allora? Di più, ma ancora solo un migliaio. In ordine di fatalità, il secondo animale che uccide più essere umani al mondo è… l’uomo, ovviamente!
Dunque il primo classificato dev’essere una bestia feroce. In effetti lo è, nel suo piccolo. La zanzara uccide oltre 700 mila persone all’anno, in gran parte bambini sotto i 5 anni. Anche questo, però, non è proprio vero, in quanto la zanzara solo trasporta, e solamente in alcuni casi, un parassita o un virus, che colpisce l’uomo in maniera talvolta fatale.
Non c’è da meravigliarsi, allora, se grosse quantità di fondi di ricerca vengono stanziate per capire come si comportino le zanzare, che effetto abbiano sull’uomo, quante specie ci siano al mondo, quali siano i metodi migliori per difendersi da esse, e così via. Ecco, anche in questo caso la matematica e l’informatica posso venire in nostro soccorso.
1- I suoni delle zanzare
Come molti insetti, la zanzara si sposta volando, e il battito delle ali produce un suono caratteristico. Questo suono ci è molto familiare, soprattutto a chi vive in Italia o in uno dei diversi paesi al mondo dove le zanzare sono molto comuni. È proprio questo infatti quel famoso ronzio che ci tiene svegli la notte, che ha una frequenza fondamentale generalmente tra i 300 e gli 1000 Hz, a seconda della specie. Infatti, si dice che il suono più debole che l’uomo possa sentire al massimo delle sue capacità sia il ronzio di una zanzara a tre metri di distanza.
HumBug, un progetto dell’Università di Oxford di cui ho la fortuna di far parte, si ripropone di utilizzare proprio questo suono per determinare innanzitutto la presenza di zanzare nei pressi di un essere umano, utilizzando dei microfoni a basso costo, e poi di riconoscere la specie di zanzara per determinare se è possibile che trasmetta un agente patogeno per l’uomo, come un virus o un parassita, oppure no. Specie diverse, infatti, emettono un ronzio a frequenze diverse, e questo può essere utilizzato per riconoscere le une dalle altre.
Figura 1: Aedes albopictus . di James Gathany, CDC, pubblico dominio, presso Wikimedia Commons
Prendiamo per esempio una specie ormai molto comune in Italia. La zanzara tigre. Con questo nome si indica comunemente la zanzara Aedes albopictus (Figura 1), a strisce bianche e nere che le danno il nome. La femmina della zanzara tigre emette un suono la cui frequenza fondamentale è intorno ai 600 Hz, che significa che le ali battono 600 volte al secondo. Cominciamo a dare un’occhiata a questo suono.
Figura 2: Forma d’onda, 20 secondi di una zanzara tigre. La zanzara ronza solo in alcuni tratti, non distinguibili da questa figura
In Figura 2 potete vedere un esempio del suono di una zanzara tigre. Non molto chiaro, vero? Questa rappresentazione è una forma d’onda, una linea che rappresenta il valore del potenziale elettrico misurato da un microfono.
Siccome il valore non ci dice molto sul volume del suono registrato, spesso si omette, normalizzando l’asse delle ordinate tra -1 e 1, come in questo caso. Sull’asse delle ascisse c’è invece il tempo. Questa è infatti una serie storica (o temporale), cioè una sequenza di punti ordinati cronologicamente. La linea è continua, ma è solo un’interpolazione. I valori infatti sono discreti, e in numero uguale alla frequenza di campionamento. Bene, ora dobbiamo definire la frequenza di campionamento. È semplice: è il numero di campioni presi in un 2 secondo. Un valore di 8000 Hz, per esempio, ci dice che in un secondo sono stati presi 8000 misurazioni del suono in questione. Questo è stato discusso in dettaglio nel post di Pasquale sul campionamento dei segnali (leggi qui).
Però, uno potrebbe obiettare, non ci hai ancora detto perché da questo segnale non si capisce niente. Ebbene ci sono due motivi. Il primo e il più banale è che ci sono troppi punti. In questa registrazione, che ha un campionamento di 8.000 Hz ci sono poco più di 20 secondi. 160.000 punti sono semplicemente troppo schiacciati in questa figura. Il secondo motivo è che il segnale è distorto dal rumore, molto rumore rispetto al suono che ci interessa. Se esso non ci fosse, vedremmo una linea orizzontale, centrata sullo zero (quando il segnale è normalizzato), e un’onda in corrispondenza del nostro segnale, in questo caso il ronzio della zanzara, come nell’esempio in Figura 3, che è però artificiale.
Figura 3: Forma d’onda, 20 secondi di un segnale (in questo caso rumore bianco, ma non lo si può capire da questa figura) circondato da silenzio.
Dunque come facciamo a trovare questo flebile suono in cotal rumore? Potremmo usare dei filtri, ma questo è un argomento così ampio che è almeno materiale per un altro post, se non un’intera sezione. Per il momento, limitiamoci a trasformare il segnale dal dominio del tempo a quello delle frequenze.
2- Non ci capiamo, non siamo sulla stessa lunghezza d’onda
La zanzara non emette un suono solo come effetto collaterale del suo movimento, ma anche per comunicare. La femmina trova uno sciame tramite indizi visivi e uditivi, e sceglie il maschio per l’accoppiamento. A questo punto i due partner allineano la frequenza del loro ronzio—sì!, cambiano la frequenza del battito delle ali perché combaci con quella del partner! Quando questo non è possibile, per esempio perché il maschio, come spesso accade, ha una frequenza parecchio superiore a quella della femmina, si incontrano a un’armonica in comune, per esempio la seconda armonica del maschio e la terza della femmina.
La frequenza armonica è una frequenza che è un multiplo intero di un’altra frequenza, chiamata frequenza fondamentale. Pertanto una frequenza di 1200 Hz, per esempio, è la seconda armonica di una frequenza di 600, 1800 la terza armonica e così via. La prima armonica è la frequenza fondamentale stessa.
Secondo una certa teoria, l’anatomia della zanzara è tale che il battito delle ali avviene lungo una traiettoria triangolare, che produce a sua volta un’onda triangolare. Dall’analisi dei segnali sappiamo che un’onda triangolare ha solo armoniche dispari. Io credo che questo giustifichi il fatto che nel segnale delle zanzare siano spesso meglio demarcate le armoniche dispari di quelle pari.
Figura 4: Spettrogramma della registrazione di una zanzara tigre, Ae. albopictus .
Ma arriviamo al dunque. Quello a cui siamo interessati è la frequenza del segnale e come essa si evolva nel tempo. Per capire ciò, non c’è modo migliore che vedere uno spettrogramma. Della registrazione di cui abbiamo parlato fin adesso, in Figura 4 vediamo lo spettrogramma. Cominciamo ad analizzarlo.
Sull’asse delle ascisse vediamo, come in Figura 2, il tempo, mentre sull’asse delle ordinate c’è la frequenza, qui espressa in kHz (1000 Hz) per comodità. La terza dimensione è l’intensità del colore, che esprime l’ampiezza del segnale a una particolare frequenza e punto nel tempo. Come si vede dalla barra dei colori, il rosso indica valori forti, a scendere nel giallo, verde e blu. Come si calcola? Lo spettrogramma non è altro che una STFT (short-time Fourier transform, o trasformata di Fourier a tempo breve): il segnale viene suddiviso in finestre temporali, che spesso si accavallano, e su ciascuna viene calcolata una trasformata di Fourier (anche questa riportata nel post di Pasquale). Il risultato, che è lo spettro di potenza di quella finestra, viene rappresentato lungo l’asse delle ordinate come una riga verticale, dove l’ampiezza è rappresentata dal colore. Ciascuna finestra è poi affiancata alla finestra precedente, creando l’effetto desiderato, cioè una rappresentazione di come le frequenze si evolvono nel tempo.
Dunque ecco alcune osservazioni importanti relative al nostro esempio.
Nella fascia più bassa dello spettrogramma, nei primi 200 Hz, c’è una forte componente di rumore di sottofondo. Questa è sempre la parte più difficile da classificare, perché anche in un ambiente relativamente silenzioso c’è sempre rumore alla basse frequenze.
In secondo luogo si notino le righe rosse verticali, o meglio i tratti in cui si possono individuare dei puntini disposti in una fila verticale, più o meno uniti da una linea. Questi sono i veri suoni della zanzara. I puntini rossi sono i picchi delle armoniche della zanzara, che avendo una base piuttosto ampia, si espandono su diverse frequenze (la linea che li unisce). Il più delle volte il microfono utilizzato per questa registrazione, che è quello di cellulare Android di pochi soldi, capta il segnale della zanzara solo quando è molto vicina, e pertanto noi osserviamo (e sentiamo nella registrazione), solo un brevissimo ronzio, un po’ come quando ci passa vicino all’orecchio mentre cerchiamo di dormire.
Se tagliamo una fetta di questo spettrogramma in corrispondenza del ronzio e la plottiamo con le frequenze sull’asse delle ascisse e l’ampiezza sull’asse delle ordinate (quindi tralasciando il tempo), notiamo più facilmente i picchi, e possiamo identificarli al meglio. Questa “fetta”, che riporto in Figura 5, è lo spettro di potenza della finestra temporale da cui siamo partiti, ed è essenzialmente la caratteristica (feature) principale su cui si basano i nostri metodi di classificazione automatica.
Figura 5: Lo spettro di potenza calcolato con il metodo di Welch su una finestra dove il segnale della zanzare è molto forte. I punti sono annotati manualmente sui multipli di 618 Hz, la frequenza fondamentale di questa zanzara.
Notiamo ancora una cosa interessante. Nella parte più alta dello spettrogramma, corrispondente qua a 4 kHz, l’ampiezza crolla a valori molto più bassi. Ricordiamo il teorema di Nyquist-Shannon (vedi qui e qui) , che ci dice che la massima frequenza che possiamo osservare, data una frequenza di campionamento $$f_c$$, che nel nostro esempio è 8 kHz, è $$f_c/2$$ —o al contrario, la minima frequenza di campionamento necessaria per digitalizzare un segnale analogico senza perdita di dati è il doppio della massima frequenza. Qualsiasi frequenza al di sopra essa produrrà l’effetto aliasing.
Per capirlo, guardiamo un momento la Figura 6—da che segnale vengono i campioni corrispondenti ai pallini rossi?
Di certo non sembrerebbe quello delineato dalla linea blu, che è ha 10 Hz, ma piuttosto un segnale a 1 Hz. Il campionamento a 10 Hz (i pallini rossi), di conseguenza non è sufficiente. Tornando allo spettrogramma, non è chiaro cosa abbia prodotto l’effetto che notiamo nella parte più alta. Alcuni motivi potrebbero essere:
- i filtri anti-aliasing usati per decimare il segnale e ridurne la frequenza di campionamento,
- dei filtri imposti dal sistema di registrazione (il cellulare Android)
- semplicemente l’incapacità del microfono di registrare frequenze più alte.
Figura 6: Un segnale a 10 Hz. Il campionamento a 10 Hz non è sufficiente per ricostruire il segnale originale.
3- I metodi di classificazione e la mappatura della posizione geografica
Non posso annoiarvi troppo, ma questo sarebbe solo l’inizio. Questa parte del procedimento di classificazione rientra nella fase del pre-processamento e dell’estrazione delle caratteristiche che ci servono per stabilire se un segnale appartiene a una classe o a un’altra, in questo caso se è una zanzara o no, oppure se è un tipo di zanzara o un altro. Altre trasformate sono spesso necessarie per sintetizzare il segnale in maniera più efficace. Tra quelle che noi utilizziamo merita citare i coefficienti del cepstrum (la trasformata di Fourier applicata allo spettro vedi qui e qui), e le wavelet, che risolvono in parte i problemi di risoluzione della STFT.
Queste caraetteristiche vengono poi date in pasto a un classificatore, che varia da algoritmi semplicissimi, come il k-nearest neighbour, a cose più complicate e moderne, come il random forest (foresta casuale, che è costituita da una combinazione di alberi di decisione) e metodi più probabilistici come i processi gaussiani. Se vi può interessare, questo sarà l’argomento di un altro post.
Una volta ottenuta una buona classificazione dei suoni delle zanzare, il progetto HumBug si ripropone di usare questo metodo per mappare la posizione delle specie a noi nocive (e possibilmente tutte le altre) nel mondo, in modo da capirne il comportamento e la distribuzione geografica.
È ancora presto per discutere di tutto ciò, visto che la classificazione acustica è ancora in via di sviluppo. Ciò nonostante, stiamo già sviluppando i metodi che ci permetteranno di costruire questi modelli, e anche qua c’è moltissima matematica. Questa parte non è proprio la mia specialità, ma se sono riuscito a tenere la vostra attenzione fino a qua e se avete la pazienza di leggere ancora qualche paragrafo, la prossima volta mi piacerebbe condividere il nostro lavoro su questo tema.
Per il momento, grazie per l’ascolto (la lettura?) e a risentirci presto!
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Ciao,
decisamente un articolo molto interessante e sopratutto esauriente, mi domandavo, visto che dici che la frequenza del maschio è molto più alta, quale fosse quest’ultima.
grazie
un saluto
Ciao ragazzi, ringrazio anch’io Davide per il post interessantissimo. Spero davvero che prosegua come promesso…
Io sono un neo studente in ingegneria ed articoli come questo sono nettare …
Buon lavoro!
Alessandro