• Non ci sono risultati.

3 Analisi del set-up sperimentale

3.2 Interfono

La struttura ed il collegamento al bus CAN dei due nodi che costituiscono l’interfono è mostrata in Figura 3.3 [15]; in ciascun nodo la scheda interfono è predisposta per lavorare con due microfoni e due auricolari ma gli esperimenti sul sistema sono stati effettuati utilizzando un solo microfono ed un auricolare collegati al dispositivo.

NODO CAN Scheda Interfono Tx Rx GND Auricolare Microfono Bus CAN

Figura 3.3: Struttura e collegamenti di un nodo dell’interfono.

Ogni nodo vocale della rete svolge sia la funzione di trasmettitore del segnale audio sul bus CAN, sia quella di ricevitore.

Nella fase di trasmissione, il segnale analogico proveniente dal microfono viene inviato alla scheda interfono che, attraverso un codec (realizzato con il processore MSM6588), effettua il campionamento della tensione di ingresso e la conversione in formato digitale utilizzando una codifica ADPCM.

Poichè l’ampiezza di banda della voce umana si estende da 300 Hz fino a 3.4 kHz con una notevole quantità di armoniche concentrata nella parte inferiore di tale intervallo, è possibile effettuare il campionamento del segnale ad una frequenza di 8 kHz rispettando a pieno il criterio di Nyquist.

La codifica ADPCM (Adaptive Differenzial Pulse Code Modulation) permette di comprimere la lunghezza di ciascun campione utilizzando soltanto 4 bit e garantisce un’occupazione di banda dimezzata rispetto alla codifica PCM tradizionalmente utilizzata nelle applicazioni che riguardano l’elaborazione dei segnali vocali. Inoltre, nella ADPCM, il “passo di quantizzazione” non è più fisso ma variabile in base al tasso di variazione del segnale da codificare e questo la rende particolarmente adatta a trattare la voce umana. Quando il codec, configurato come registratore, ha prodotto due campioni, essi vengono uniti in un unico byte ed inviati immediatamente, attraverso il collegamento seriale Tx, al nodo CAN dove sono memorizzati in un buffer circolare di tipo FIFO. Ciascuna

delle 10 locazioni del buffer può contenere fino a 8 byte (16 campioni ADPCM) e corrisponde ad un message object (dal numero 0 al 9) del processore CAN. Non appena una locazione risulta completa, il rispettivo message object viene configurato in trasmissione e da quel momento un nuovo messaggio vocale si accoda sul bus CAN. Poiché il codec invia i propri campioni con scadenza fissa e ciascun messaggio viene attivato all’arrivo di 16 campioni consecutivi, il traffico vocale avrà un andamento periodico. Quindi, detto Tc il periodo di

campionamento del codec, è possibile calcolare il periodo di trasmissione dei messaggi vocali:

Tvocale = Tc*16 = 125 µs*16 = 2 ms

Poichè l’interfono presente in laboratorio è costituito da due nodi vocali, il traffico risultante sul bus è dato dall’insieme di due stream periodici. Inoltre, in accordo con le considerazioni fatte sulla priorità delle trasmissioni vocali, i messaggi in oggetto hanno gli identificatori (in formato standard) 7EE h e 7EF h: come si può notare, i due canali audio non hanno la stessa priorità in quanto non è possibile assegnare lo stesso ID a due messaggi differenti. La lunghezza di tali messaggi varia in base al contenuto dei dati da trasmettere a causa del meccanismo di bit stuffing e varia da 112 bit (con un solo bit di stuffing aggiunto) fino a 131 bit (con 20 bit di stuffing).

In fase di ricezione del segnale, il nodo CAN preleva sul bus il messaggio inviato dall’altra postazione interfono e lo memorizza in uno dei restanti 5 message object (dal 10 al 14) del processore CAN opportunamente configurati. Gli 8 byte del campo Data di ciascun messaggio vengono quindi trasferiti in un buffer circolare di tipo FIFO, mappato nella RAM del processore CAN, in grado di contenere 88 byte differenti (176 campioni ADPCM). Ciascun byte viene quindi inviato, attraverso il collegamento seriale Rx, alla scheda interfono per effettuare la decodifica dei dati. All’interno della scheda è presente un microcontrollore (ATMega163) che gestisce 4 codec differenti collegati ai due microfoni ed ai due auricolari. In fase di ricezione, il microcontrollore memorizza i dati provenienti dal nodo CAN in un buffer circolare FIFO costituito da 256 byte

di memoria RAM. Tale buffer ha lo scopo di garantire un continuo afflusso di campioni vocali al codec configurato come riproduttore in quanto, la mancanza di dati in ingresso al MSM6588 in fase di decodifica, provoca il malfunzionamento del dispositivo stesso. Infatti il microcontrollore ATMega163 inizia ad inviare i campioni al codec soltanto quando il buffer è pieno per metà (128 byte) e questo garantisce la presenza di dati da decodificare anche nei momenti in cui il bus è occupato e non permette la trasmissione dei messaggi vocali. Il codec configurato come riproduttore, deve inoltre ricevere i campioni ADPCM ad una frequenza pari a quella di campionamento; quindi ne effettua la decodifica, converte il segnale in formato analogico e lo invia all’auricolare.

In Figura 3.4 è mostrata la struttura del buffer circolare in ricezione (Buffer_Rx) e di quello in trasmissione (Buffer_Tx) presenti nel nodo CAN. Il primo permette di memorizzare il contenuto di 11 messaggi provenienti dal bus CAN ed è costituito da 88 locazioni di un byte ciascuna; il secondo riesce a memorizzare fino a 80 byte da inviare attraverso 10 messaggi differenti (ciascun messaggio vocale ha DLC pari a 8). First_rx e Last_rx (First_ch e Last_ch) rappresentano i puntatori del buffer in ricezione (trasmissione) gestito in modalità FIFO. Bisogna inoltre notare che, se Buffer_Tx è pieno ed il bus è occupato dalla trasmissione dei messaggi di controllo del sistema, il nuovo campione proveniente dal codec non va a sovrascrivere i dati presenti ma viene perso.

Byte n° 0 . . . Byte n° 79 Last ch First ch Byte n° 0 . . . Byte n° 87 Last rx First rx

Nota la struttura dell’interfono è possibile inoltre dare una stima della deadline dei messaggi vocali. La perdita di campioni audio dovuta all’occupazione del bus, si può verificare nei seguenti casi:

o L’interfono invia ogni 250 µs al nodo CAN un byte che viene memorizzato nel Buffer_Tx. Se il bus è occupato, la trasmissione dei messaggi vocali deve essere rimandata e quindi si può verificare il riempimento di tale buffer. I campioni provenienti dal codec che non trovano spazio nel Buffer_Tx vengono persi. Per inviare 80 byte e riempire completamente il buffer, la scheda interfono impiega 80*250 µs = 20 ms; se dopo tale periodo di tempo nel buffer non si è liberata neppure una locazione, il nuovo campione inviato al nodo CAN viene perso.

o Il Buffer_Rx si può svuotare perché non riceve più i messaggi vocali provenienti dal bus occupato dal traffico di controllo. Per questo motivo i campioni audio vengono forniti al codec dal buffer FIFO interno al processore ATMega163. Poiché tale buffer (costituito da 256 locazioni di un byte ciascuna) inizia a funzionare quando è pieno per metà e invia al codec un campione di 4 bit ogni Tc, il tempo necessario per il suo

svuotamento è dato da: 128*2*125 µs = 32 ms. Se dopo tale periodo non arriva nessun messaggio vocale dal bus, la scheda interfono non è più in grado di inviare il segnale vocale all’auricolare.

Poiché la condizione espressa al primo punto risulta più stringente, si può concludere che la deadline dei messaggi vocali (nel sistema in esame) è pari a:

Documenti correlati