Home
Accesso / Registrazione
 di 

Il trattamento dei segnali audio con il DSP - 5

trattamento dei segnali audio con il DSP

A questo punto è necessario ripristinare il valore originale di AR7 tramite l’ istruzione “LAR AR7,TEMP” per poter eseguire l’ istruzione successiva: SACH *+ Qui la somma totale viene scritta nel buffer dando un colpettino al nostro motore AR7. Infatti l’operando *+ incrementa di un indirizzo AR7.

E se siamo già all’indirizzo 1FFF? Semplice, per via della proprietà caratteristica del buffer circolare, AR7 invece di passare all’indirizzo 2000h torna automaticamente a 1000hex che coincide con il valore contenuto in CBSR1, visto che 1FFFhex è il valore contenuto in CBER1 il quale stabilisce il confine del buffer. Il fatto di scrivere solo alla fine dell’intero processo il segnale risultante dalle varie somme ci permette di avere un “pacchetto di segnale” scritto nel buffer già pronto per il ciclo successivo. E’ ovvio che al lancio del programma la SARAM che ospita il buffer circolare sarà piena di “spazzatura” e questa verrà letta, sommata e “riverberata” come se fosse un segnale audio, fino alla sua estinzione.

Per quanto riguarda la routine di trasmissione, essa non fa proprio nulla visto che il registro DXR, che provvede ad inviare i dati al D/A, è già stato caricato precedentemente tramite l’istruzione “SACH DXR”. Prima di scrivere dei dati nel registro DXR è necessario pulire i 2 bit meno significativi con l’istruzione “AND 0FFCh,16” altrimenti si corre il rischio che l’AIC scambi i campioni con i bit di comando perdendo quindi le impostazioni iniziali. Infatti ciò che distingue i dati (CAMPIONI) dai comandi sono proprio i due bit meno significativi: se questi bit risultano a zero indicano all’AIC che la parola in arrivo rappresenta un dato e non un comando.

Tornando per un attimo alla figura del tamburo magnetizzabile, possiamo notare la presenza di una testina di CANCELLAZIONE che serve a ripulire il tamburo dagli echi precedenti che altrimenti resterebbero sul tamburo creando una confusione incredibile di suoni e portando il tamburo stesso o, peggio, il nastro alla saturazione. Nel nostro caso questo processo di cancellazione avviene automaticamente in quanto i dati vengono continuamente sovrascritti nel buffer circolare, eliminando ad ogni giro completo i dati vecchi.

TEMPO DI RITARDO ECO E LUNGHEZZA RIVERBERO

Le riflessioni, nel caso del riverbero naturale, permangono per un certo tempo visto che il suono viene riflesso continuamente all’interno del locale le cui pareti sono riflettenti. Il TEMPO DI RIVERBERO, ovvero il tempo in cui il suono decade dopo la sua cessazione, è dato dalla formula T = 60 (t/a). In questa formula, valida solo nel caso in cui sia implementata una sola riflessione (come nel nostro esempio), la lettera “t” rappresenta il TEMPO DI TRANSITO (ovvero la distanza che impiega il suono a partire dalla sorgente e raggiungere la parete riflettente), mentre la lettera “a” indica l’ATTENUAZIONE (cioè l’assorbimento del suono da parte degli oggetti non riflettenti). E’ ovvio che nel caso di un locale reale, con più di una parete riflettente, le cose si complicano oltremodo. Nel nostro particolare caso sappiamo che Fs = 8 KHz (quindi 125 µSec) e abbiamo deciso anche che la lunghezza del buffer circolare sia 1000hex cioè 4096 locazioni; il TEMPO DI TRANSITO sarà 4096 x 125 µSec = 512000 µSec, ovvero 0,512 secondi.

Nel nostro programma, c’è inoltre una controreazione che riporta all’ingresso il segnale eco, ogni volta però un po’ più attenuato. Tale controreazione risulta dal modo di scrivere i dati nel buffer circolare con l’ istruzione SACH *+ . Difatti ciò che scriviamo nel buffer è la somma del segnale originale con tutte le varie riflessioni appropriatamente attenuate di volta in volta. Calcolare a questo punto il tempo di riverbero diventa un po’ complicato e lo lascio a chi si vuole divertire con un piccolo sistema di equazioni. Una cosa importante circa l’ attenuazione è il fatto che, se fosse ridotta a zero, il nostro eco o riverbero non si estinguerebbe mai, o peggio si trasformerebbe in un sibilo continuo, come l’ effetto LARSEN che si verifica quando avviciniamo un microfono al rispettivo altoparlante. Questo programma, così come è strutturato, produce qualcosa che assomiglia ad un generatore di riverbero sintetico ma, date le prestazioni del convertitore A/D e D/A impiegato, nonché l’esiguità della RAM a bordo del TMS , non ci si può attendere risultati strabilianti, tuttavia ha lo scopo di chiarire come si ottengono questi effetti utilizzando le nuove tecniche digitali ed in particolare il DSP.

Lascio al lettore la possibilità di sbizzarrirsi per modificarlo come meglio crede, magari introducendo un passo di lettura diverso per ogni riflessione od eliminandole tutte, salvo una, per ottenere il solo ECO. Tralascio inoltre la spiegazione della routine di inizializzazione dell’AIC poiché esula dallo scopo dell’articolo ed è comunque descritta nella documentazione della scheda DSK. Vi ricordo che per quanto riguarda la descrizione del DSP TMS 320C50 sono già stati pubblicati su questa rivista vari articoli della serie “ALLA SCOPERTA DEI DSP” curati da Alberto Colombo.

Il kit è disponibile da Futura Elettronica

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 3 utenti e 41 visitatori collegati.

Ultimi Commenti