amp templates

Ingegnerizzazione del problema

Implementazione Matlab

Realizzazione del prototipo

Ingegnerizzazione del problema

In questa prima fase abbiamo cercato di determinare una corrispondenza tra le sorgenti audio e la relativa pressione sonora espressa in decibel. Nel caso di colpi di arma da fuoco il segnale ha una intensità molto elevata, tale da coprire tutti i rumori ambientali, mentre la durata è variabile nell'ordine delle frazioni di secondo.
Questo ci ha portato fin da subito a considerare l'idea di cancellare completamente l'audio nel momento dello sparo, essendo l'audio ambientale non ricostruibile per via della sovrapposizione dominante.
Dalla teoria dei segnali, un buon criterio per l'individuzione di segnali forti è la valutazione dell'energia o potenza di essi. Ci siamo quindi concentrati sulla stesura di un algoritmo che sfruttasse le variazioni di potenza, calcolate in real-time con finestratura, al fine di elimare i rumori ad alta intensità. 

Implementazione Matlab

L' approccio in Matlab permette di eseguire diversi algoritmi e analizzarne l'efficacia in tempi molto più brevi rispetto all'implementazione diretta sulla scheda di sviluppo.
  1. REALIZZAZIONE AUDIO DI TEST - attraverso software per regitrazioni audio abbiamo realizzato una traccia di test. Il modo più semplice è stato quello di sovrapporre ad un parlato dei rumori impulsivi, in tempi casuali, comparabili a quelli generati da arma da fuoco.
  2. PROVA ALGORITMI - con l'approccio alla potenza del segnale, abbiamo sviluppato un algoritmo capace di analizzare la sorgente campionata mediante la suddivisione in buffer di opportuna dimensione. L'utilizzo dei buffer è necessario per garantire l'elaborazioni in real time, in particolare la sua dimensione deve essere un trade-off tra latenza massima e capacità computazionali. Si ricorda che una persona media non percepisce latenze inferiori a 30ms.

Realizzazione del prototipo

L'ambiente di sviluppo TrueSTUDIO Atollic ha permesso di implementare all'interno del microcontrollore le seguenti cose:

- Impulse detect: Attraverso alcune prove sperimentali è stato possibile fissare una soglia in modo da rilevare se c'è un impulso (sparo) in ingresso e quindi portare a zero i relativi campioni in uscita; 

- Noise detect: L'algoritmo per la cancellazione del rumore prevede un approcio probabilistico. All'avvio dello scheda, vengono analizzati circa 2 secondi di silenzio che corrispondono ad un gran numero di campioni audio in ingresso; il rumore è sostanzialmente bianco e gaussiano ed è possibile determinare la sua distribuzione di probabilità. Da essa è possibile determinare il valore medio del segnale (valore in DC) e l'intervallo entro il quale è molto probabile trovare segnali puramente rumorosi. Da questi parametri è possibile definire l'effetiva soglia del rumore e quindi correggere il segnale audio in elaborazione;

Esternamente, dal punto di vista HARDWARE, andrebbero implementati due filtri passa basso, al fine di non avere l'effetto aliasing in ingresso e "pulire" l'audio discretizzato in uscita. In ingresso il filtro è già presente nel modulo microfonico, mentre in uscita la cuffia ha già di sua natura un comportamento passa basso.

Problematiche principali

- ADC setting: L'impostazione dell'ADC ha richiesto particolare attenzione in quanto la frequenza di campionamento è settabile impostando prima dei prescaler alla frequenza di clock della CPU (84MHz) e poi un numero di cicli di clock per campionamento. Nel nostro caso è sufficiente campionare intorno ai 20KHz, in quanto ci interessa garantire la ricostruzione della dinamica dei segnali fino agli 8-10KHz.
Abbiamo quindi dovuto settare un prescaler di 8, ottenendo una Fosc=84/8=10.5MHz e poi un tempo di campionamento pari a 480 cicli. Considerando che l'ADC impiega 15 cicli di clock per la conversione a 12bit, abbiamo ottenuto un tempo finale di campionamento:
--> T = 1/10.5MHz * (480+15) = 47.14us
che corrisponde ad una frequenza di campionamento di circa 21.2KHz.
L'elaborazione del singolo campione, per il DAC in uscita, deve essere sincrona con l'ADC e deve essere garantita in un tempo minore di quello di campionamento.

N.B: Questo significa che in ogni tempo di campionamento T ci sono circa 3900 cicli di clock della CPU (84MHz/21.2KHz) che corrispondono ad un numero abbastanza limitato di operazioni eseguibili tra un campione e il successivo!


- Microphone noise: Una problematica che inizialmente non avevamo considerato e che si è presentata durante l'implementazione hardware, è il rumore di fondo generato dall'insieme del modulo microfonico e campionamento. Tale rumore risultava molto fastidioso se riprodotto in cuffia nei momenti di silenzio ambientale, quindi si è provveduto a rimuoverlo con un algoritmo di silent detect che sfrutta la soglia di rumore che viene determinata con l'algoritmo di noise detect.