Tesi Effetti Audio

103
UNIVERSIT ` A DEGLI STUDI DI UDINE Facolt` a di Ingegneria Corso di Laurea Triennale in Elettronica Tesi di Laurea EFFETTI AUDIO SU SISTEMI A MICROPROCESSORE Relatore: Laureando: Prof. RINALDO ROBERTO STEFANO RONCO Correlatore: Prof. PETRELLA ROBERTO ANNO ACCADEMICO 2009-2010

Transcript of Tesi Effetti Audio

Page 1: Tesi Effetti Audio

UNIVERSITA DEGLI STUDI DI UDINE

Facolta di Ingegneria

Corso di Laurea Triennale in Elettronica

Tesi di Laurea

EFFETTI AUDIOSU SISTEMI

A MICROPROCESSORE

Relatore: Laureando:Prof. RINALDO ROBERTO STEFANO RONCO

Correlatore:Prof. PETRELLA ROBERTO

ANNO ACCADEMICO 2009-2010

Page 2: Tesi Effetti Audio
Page 3: Tesi Effetti Audio

A mia madre e mio padre

Sara e Federica

Page 4: Tesi Effetti Audio
Page 5: Tesi Effetti Audio

Sommario

In questa tesi verranno analizzati e sviluppati alcuni dei piu importanti econosciuti effetti audio utilizzati per la creazione e la elaborazione di musi-ca, voce e strumenti musicali. Lo studio verra sviluppato nel dominio digitale;la naturale prosecuzione di questo lavoro ci portera ad implementare su unmicroprocessore, un sistema digitale, gli effetti studiati cosı da poter poi ancheverificare la buona riuscita o meno della ricostruzione dell’effetto desiderato.

I linguaggi di programmazione utilizzati in questa tesi sono essenzialmentedue: il linguaggio MATLAB per una prima fase di studio e sviluppo, il lin-guaggio C per la definitiva programmazione del microprocessore. Il micropro-cessore utilizzato appartiene alla famiglia “28x Delfino Floating-point Series”,del produttore TEXAS INSTRUMENTS. Questo processore e pre-montato suuna scheda; il tutto fa parte di un prodotto definito come TMDXDOCK28343experiment kit.

Non e obbiettivo di questo studio lo sviluppo di una apparecchiatura per usoprofessionale ma bensı cercare di comprendere quale sia il modello fisico di undeterminato effetto e come questo possa essere implementato in un sistemadigitale quale un microprocessore.

v

Page 6: Tesi Effetti Audio

vi Sommario

Page 7: Tesi Effetti Audio

Indice

Sommario v

Elenco delle figure ix

Introduzione xi

1 La Scheda di elaborazione 11.1 Caratteristiche tecniche . . . . . . . . . . . . . . . . . . . . . . . 11.2 Il processore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Il sistema di sviluppo . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3.1 Installazione del Code Composer Studio . . . . . . . . . 31.3.2 Installazione dei driver dell’emulatore . . . . . . . . . . . 41.3.3 Note preliminari . . . . . . . . . . . . . . . . . . . . . . 41.3.4 Avvio del programma Code Composer Studio . . . . . . 41.3.5 Esecuzione del programma . . . . . . . . . . . . . . . . . 5

2 Filtri Digitali 112.1 Filtri FIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2 Filtri IIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 Filtri Parametrici . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4 Filtri a Pettine . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3 Effetti Audio 173.1 Il buffer circolare . . . . . . . . . . . . . . . . . . . . . . . . . . 173.2 Motivazione delle scelte . . . . . . . . . . . . . . . . . . . . . . . 18

4 Ritardo temporale 214.1 Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.1.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2 Slapback Eco . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.2.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 264.3 Multi-tap Eco . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

vii

Page 8: Tesi Effetti Audio

viii INDICE

4.3.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5 Modulazione della linea temporale 335.1 Chorus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

5.1.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 365.2 Flanger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

5.2.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 415.3 Vibrato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5.3.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 445.4 Pitch Shifter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5.4.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 48

6 Riverbero digitale 516.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

7 Variazione di Ampiezza 597.1 Distorsione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

7.1.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 617.2 Tremolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

7.2.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 63

8 Processi sulla dinamica 658.1 Compressione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

8.1.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 698.2 Soppressore di rumore . . . . . . . . . . . . . . . . . . . . . . . 71

8.2.1 Parametri . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Conclusioni 75

A Codice C per la programmazione del DSP 77

Bibliografia 89

Page 9: Tesi Effetti Audio

Elenco delle figure

1.1 Diagramma Blocchi Funzionali . . . . . . . . . . . . . . . . . . . 21.2 Simulazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3 Menu Breakpoints. . . . . . . . . . . . . . . . . . . . . . . . . . 61.4 Il Sistema di Sviluppo . . . . . . . . . . . . . . . . . . . . . . . 7

2.1 Struttura di un filtro FIR . . . . . . . . . . . . . . . . . . . . . 122.2 Struttura di un filtro IIR . . . . . . . . . . . . . . . . . . . . . . 132.3 Risposta in frequenza di un filtro parametrico . . . . . . . . . . 142.4 Risposta in frequenza di un filtro a pettine . . . . . . . . . . . . 15

3.1 Struttura del buffer Circolare . . . . . . . . . . . . . . . . . . . 18

4.1 Struttura fisica del Delay . . . . . . . . . . . . . . . . . . . . . . 214.2 Implementazione, Delay . . . . . . . . . . . . . . . . . . . . . . 224.3 Filtro nel tempo, Delay . . . . . . . . . . . . . . . . . . . . . . . 234.4 Filtro in frequenza, Delay . . . . . . . . . . . . . . . . . . . . . 234.5 Implementazione, Slapback Eco . . . . . . . . . . . . . . . . . . 264.6 Filtro nel tempo, Slapback Eco . . . . . . . . . . . . . . . . . . 274.7 Filtro in frequenza, Slapback Eco . . . . . . . . . . . . . . . . . 274.8 Implementazione, Multi-tap Eco . . . . . . . . . . . . . . . . . . 294.9 Filtro nel tempo, Multi-tap Eco . . . . . . . . . . . . . . . . . . 304.10 Filtro in frequenza, Multi-tap Eco . . . . . . . . . . . . . . . . . 30

5.1 Implementazione, Chorus . . . . . . . . . . . . . . . . . . . . . . 345.2 Filtro in frequenza, Chorus . . . . . . . . . . . . . . . . . . . . . 345.3 Coefficienti, Chorus . . . . . . . . . . . . . . . . . . . . . . . . . 355.4 Parametri ritardo, Chorus . . . . . . . . . . . . . . . . . . . . . 365.5 Implementazione, Flanger . . . . . . . . . . . . . . . . . . . . . 395.6 Filtro in frequenza, Flanger . . . . . . . . . . . . . . . . . . . . 405.7 Coefficiente, Flanger . . . . . . . . . . . . . . . . . . . . . . . . 405.8 Implementazione, Vibrato . . . . . . . . . . . . . . . . . . . . . 435.9 Coefficiente, Vibrato . . . . . . . . . . . . . . . . . . . . . . . . 44

ix

Page 10: Tesi Effetti Audio

x ELENCO DELLE FIGURE

5.10 Implementazione, Pitch Shifter . . . . . . . . . . . . . . . . . . 465.11 Coefficiente, Pitch Shifter . . . . . . . . . . . . . . . . . . . . . 475.12 Filtro Passa-basso, Pitch Shifter . . . . . . . . . . . . . . . . . . 47

6.1 Risposta Impulsiva, Riverbero . . . . . . . . . . . . . . . . . . . 516.2 Implementazione, Riverbero . . . . . . . . . . . . . . . . . . . . 526.3 Filtro FIR, Riverbero . . . . . . . . . . . . . . . . . . . . . . . . 536.4 Cella IIR, Riverbero . . . . . . . . . . . . . . . . . . . . . . . . 54

7.1 Implementazione, Distorsione . . . . . . . . . . . . . . . . . . . 597.2 Segnali nel tempo, Distorsione . . . . . . . . . . . . . . . . . . . 607.3 Implementazione, Tremolo . . . . . . . . . . . . . . . . . . . . . 627.4 Coefficiente, Tremolo . . . . . . . . . . . . . . . . . . . . . . . . 63

8.1 Implementazione, Compressore . . . . . . . . . . . . . . . . . . 668.2 Comportamento, Compressore . . . . . . . . . . . . . . . . . . . 678.3 Segnale di Uscita, Compressore . . . . . . . . . . . . . . . . . . 688.4 Implementazione, Soppressore . . . . . . . . . . . . . . . . . . . 718.5 Comportamento, Soppressore . . . . . . . . . . . . . . . . . . . 728.6 Segnale nel tempo, Soppressore . . . . . . . . . . . . . . . . . . 72

A.1 Struttura del Programma . . . . . . . . . . . . . . . . . . . . . 77

Page 11: Tesi Effetti Audio

Introduzione

Gli effetti musicali trovano la loro applicazione pratica sin dagli inizi degli anni’60 con la comparsa sulla scena mondiale dei primi strumenti musicali elettrici ela nascita dei piu famosi gruppi rock. In quegli anni infatti gli artisti iniziaronoa sperimentare ed utilizzare dispositivi capaci di alterare le normali proceduredi registrazione e di riproduzione del flusso audio. I primi a sfruttare i risul-tati di queste sperimentazioni furono i Rolling Stone, Jimmy Page, Jeff Beck,Jimi Hendrix, per citarne alcuni; nei loro brani degli anni ’60 e gia possibileinfatti ascoltare i primi effetti di distorsione, vibrato, tremolo e wah wah. Conil passare degli anni se ne sono sviluppati e perfezionati altri come il flanger,il phaser, il chorus e il delay; potevano essere creati live dagli artisti durantegli spettacoli o aggiunti in fase di registrazione dai tecnici del suono; la lorocreazione era comunque sempre un processo che prevedeva l’alterazione fisicadel supporto di registrazione o l’alterazione dei dispositivi di lettura di talesupporto. Ad esempio il delay consiste nella riproduzione di due tracce audiouguali su due linee temporali diverse; il flanger e lo spostamento continuo sulnastro magnetico della testina di lettura.Gia agli inizi degli anni ’70 vennero sviluppati i primi sistemi digitali per la re-gistrazione di tracce audio, ancora sperimentali, ma che si dimostrarono subitoparticolarmente interessanti per le possibilita di sviluppo in campo musicale.Fu solo nel 1978 che si registro la prima canzone in digitale, una cover dei RoseRoyce cantata dai MorrisseyMullen. Questo sistema di registrazione digitalenecessitava di nuovi supporti di memorizzazione e l’anno dopo, frutto di unacollaborazione tra Philips e Sony, nasce il primo Compact-Disk. Nel 1982 fumesso in commercio il primo compact-disk musicale, “The visitors”, un suc-cesso degli Abba. I dispositivi analogici, quali dischi in vinile e audio-cassette,continuarono pero a svolgere il loro compito fino alla fine del secolo quandovennero definitivamente soppiantati. Dal ’78 ad oggi la tecnologia digitale sie sviluppata con un trend esponenziale che l’ha portata ad invadere il merca-to a discapito dei sistemi analogici. Questo non riguarda solamente il settoremusicale, si pensi ad esempio ai personal computer, ai telefoni cellulari e agliimpianti hi-fi. Il settore musicale non poteva che seguire lo standard che si sta-

xi

Page 12: Tesi Effetti Audio

xii Introduzione

va creando, unendo cosı alla qualita digitale le enormi potenzialita che questosistema offriva soprattutto nel settore della musica che tratta gli effetti audio.Ora si puo affermare con certezza che la maggior parte di questi viene oggiimplementata con algoritmi al computer o con dispositivi dedicati (DSP). Ledifferenze tra le due metodologie sono evidenti e riguardano essenzialmente ilflusso audio in ingresso e la catena di elaborazione del segnale. Nei sistemianalogici, il flusso audio e, a meno di amplificazioni, esattamente quello cheviene generato da un microfono, i processi mediante i quali il segnale vienealterato sono di natura analogica, prodotti da amplificatori valvolari prima eamplificatori operazionali o transistor dopo. Per i dispositivi digitali invece ilflusso audio viene filtrato e campionato prima di essere elaborato da un proces-sore ed al termine dell’elaborazione viene interpolato per renderlo nuovamenteanalogico, tale tipologia di segnale e richiesta dai dispositivi di diffusione.La possibilita di scegliere tra due tecnologie porta con se intrinsecamente l’ob-bligo di una valutazione delle caratteristiche favorevoli o meno di ogni tecnica.Se l’introduzione di campionatori ed interpolatori puo generare nel segnale delrumore indesiderato, l’utilizzo di un solo componente programmabile per laproduzione di effetti, ne permette la simultanea presenza senza doverne au-mentare le dimensioni ed i costi. L’utilizzo della tecnologia analogica presentaun vantaggio in termini di qualita del suono ed alta fedelta a discapito perodei costi e delle dimensioni dei dispositivi. Valutando opportunamente tuttii parametri sara cura del progettista operare una scelta verso la metodologiache piu si adatta alle richieste dell’utilizzatore.

Come anticipato nel sommario, in questo progetto si e deciso di utilizzare unsistema digitale per la creazione di un dispositivo capace di generare un insiemedi effetti digitali utili per un uso domestico dello stesso anche se le prestazionidel supporto permetterebbero di ottenere una qualita superiore. L’accuratezzadel convertitore analogico-digitale a 12 bit permette infatti di ottenere unabuona qualita e la velocita di elaborazione ci consentirebbe il campionamentoad una frequenza di 44100 Hz, standard utilizzato dai Compact-disk audiocomunemente in commercio. Si e pero deciso di utilizzare una frequenza inferio-re, 22050 Hz, per evitare alcuni problemi legati alle dimensioni della memoriadel dispositivo che verranno affrontati in seguito. Per semplicita si e decisodi affrontare il problema su un solo canale audio; quindi questo dispositivolavorera su tracce Mono e non Stereo. Nonostante questa risulti un’evidentelimitazione pratica, e interessante sapere che in futuro sara possibile applicarela tecnologia su tracce stereo, previa delle piccole modifiche al codice sorgente.Si e deciso di affrontare lo studio solamente degli effetti piu conosciuti notandocomunque che anche quelli piu particolari sono una semplice sovrapposizione

Page 13: Tesi Effetti Audio

xiii

e combinazione degli effetti base. Si possono suddividere in quattro grandifamiglie a seconda di come vengono realizzati:

• Effetti generati da un ritardo temporale: delay, slapback eco, multi-tapeco.

• Effetti generati dalla modulazione della linea temporale: chorus, flanger,vibrato, pitch shifter.

• Effetti generati dalla variazione dell’ampiezza: distorsione, tremolo.

• Effetti generati da processi sulla dinamica: soppressore di rumore, limi-tatore, compressore.

La struttura di questa tesi prevede un primo capitolo, dove viene presentatala scheda utilizzata e il sistema di sviluppo, una piccola guida pratica peravvicinarsi al suo utilizzo; un secondo capitolo in cui sono spiegati i concettialla base del funzionamento di principio di alcuni filtri digitali utilizzati. Nelterzo capitolo si effettua una introduzione dei vari effetti con approfondimentisulle strutture utilizzate e un paragrafo che contiene le motivazioni delle scelteeffettuate per le implementazioni. Nel successivo capitolo si concentrano tuttigli studi fatti sugli effetti creati con la struttura delay; per ognuno di essi sipuo trovare una breve introduzione dove si cerca di capire anche il processofisico che ne sta alla base, i grafici esplicativi e le strutture implementativeseguite dal codice Matlab con cui e stato simulato all’elaboratore. Nel quintocapitolo verranno invece affrontati gli effetti generati dalla modulazione dellalinea temporale; il sesto e interamente dedicato allo studio del riverbero. Nelsettimo affronteremo gli effetti legati alla variazione di ampiezza del segnale.L’ultimo dara una breve spiegazione delle strutture che attuano processi legatialla dinamica del segnale. A seguire vi sara un appendice nella quale e riportatoparte del codice necessario per la programmazione della scheda Texas.

Page 14: Tesi Effetti Audio

xiv Introduzione

Page 15: Tesi Effetti Audio

Capitolo 1

La Scheda di elaborazione

La scheda utilizzata per lo sviluppo di questa tesi e la TMDXDOCK28343, unkit di sviluppo prodotto da TEXAS INSTRUMENTS che comprende due parti:la scheda, che include il processore e le periferiche di supporto ed una basettaper interfacciare la suddetta con qualunque periferica esterna, e molto utile infase di progettazione perche permette di eseguire l’operazione in modo praticoportando all’esterno comodi connettori e consente la realizzazione di piccolicircuiti negli appositi spazi in essa ricavati. La scheda risulta inoltre idealeper operazioni in virgola mobile ed e studiata per applicazioni di controllo intempo reale.

1.1 Caratteristiche tecniche

Le periferiche di nostro interesse integrate su questa scheda sono:

• 6 canali DMA

• 3 CPU-Timer da 32 bit

• Fino a 9 moduli ePWM

• Convertitore Analogico-Digitale (ADC) da 12 bit

• Fino a 3 moduli di interfaccia per comunicazioni seriali

• Fino a 2 moduli per l’interfaccia seriale delle periferiche

• Ingressi e uscite digitali

• Interfaccia esterna

• Fino ad 88 GPIO pins programmabili singolarmente

1

Page 16: Tesi Effetti Audio

2 La Scheda di elaborazione

Figura 1.1: Diagramma Blocchi Funzionali

Page 17: Tesi Effetti Audio

1.2 Il processore 3

1.2 Il processore

Il processore montato su questa scheda si basa sull’architettura del precedentec28x MCUs al quale e stata aggiunta una FPU (floating-point unit) in singolaprecisione a 32 bit, il tutto con una frequenza di clock di 200 Mhz. Il risultatoe un sistema ad alte prestazioni che per la sua efficienza rende superfluo un se-condo core anche per le elaborazioni piu complesse. A questo poi si aggiunge unveloce sistema di risposta agli interupt che permette il salvataggio dei registrie la gestione di molti interupt asincroni con tempi di latenza davvero moltobrevi. Lo strumento della pipeline a 8 livelli di profondita, con la possibilitadi accesso alla memoria di pipeline, conferisce al dispositivo una gran velocitasenza richiedere dispendio di risorse ed elevata velocita alle memorie.

1.3 Il sistema di sviluppo

La scheda utilizzata viene accompagnata da un software di sviluppo chiamatoCode Composer Studio. E’ un programma sviluppato dalla casa produttrice,la Texas Instruments, quindi un programma studiato appositamente per i sis-temi Texas. Nella programmazione il linguaggio utilizzato e il C, un linguaggioad alto livello che verra opportunamente convertito dal software di svilupponel linguaggio macchina della scheda di elaborazione. Per completare la pro-grammazione della scheda e necessario l’utilizzo di un emulatore. L’emulatoree un dispositivo che permette di connettere la scheda di elaborazione al Pc,e dotato di una porta usb adatta alla connessione al Pc ed una porta con unconnettore a pettine adatta al DSP.

1.3.1 Installazione del Code Composer Studio

La suite di sviluppo viene installata aprendo il file setup.exe, a cui seguono lerichieste di dove e di quali componenti installare. E’ consigliabile seguire leimpostazioni tipiche. Al termine dell’installazione verra eseguito il programmaCode Composer Studio Setup. All’avvio sara necessario selezionare il dispos-itivo che si e deciso di utilizzare. E’ pero possibile che non sia presente nellalista; per ovviare a questo problema bisognera in primo luogo aggiornare ilCCS3, ed in seguito installare il software contenuto nel cd allegato all’emula-tore. In questa tesi e stato scelto il sistema C28343 con emulatore BlackHawk:selezioneremo quindi la voce Blackhawk USB2000 - C28343 Controller. Al ter-mine di questa procedura verra chiuso il programma e verra avviato il CodeComposer Studio.

Page 18: Tesi Effetti Audio

4 La Scheda di elaborazione

1.3.2 Installazione dei driver dell’emulatore

Per la programmazione e la simulazione su Pc della scheda e necessario uti-lizzare un emulatore. Come tutte le periferiche, anche questa va opportuna-mente installata sul pc attraverso il cd allegato. Il dispositivo a disposizioneper questo progetto e il Blackhawk USB2000. E’ importante installare corret-tamente questo software perche altrimenti il CCS3 non sara in grado di trovarei file necessari all’avvio del sistema per il DSP in nostro possesso.

1.3.3 Note preliminari

Trattandosi di un micro-controllore il programmatore dovra andare a definiretutti i parametri delle periferiche interne, dalla frequenza di clock all’uso omeno dei vari convertitori, quindi inizializzare tutti i registri di sistema. Questeoperazioni risultano estremamente complesse per una persona che si avvicinaper la prima volta al mondo dei DSP. Per questo motivo Texas mette a dispo-sizione dell’utilizzatore un software chiamato Baseline Software che, una voltainstallato, copia sull’hard disk nella cartella “TIF28xxxSysSW” un program-ma esempio dal quale partire per sviluppare i propri progetti. Quest’ultimoprogramma la scheda in modo che una volta avviato il programma questafaccia lampeggiare il LED integrato. Il lavoro forse piu complesso, quello diinizializzare tutto il sistema, viene quindi gia svolto dal programma creato daTexas. Ogni utilizzatore puo poi modificarlo per renderlo piu coerente alleproprie necessita, ma, per compiere i primi passi nel mondo dei DSP, e unaconfigurazione base che risulta sufficiente.

1.3.4 Avvio del programma Code Composer Studio

All’avvio il programma presenta sulla sinistra una finestra che mostra i file con-tenuti nella cartella di lavoro, il resto dello schermo restera vuoto in quanto none stato ancora aperto nessun progetto. Dal menu “project” selezioniamo “open”e apriamo il progetto “FlashingLeds”. Il programma vero e proprio di lampeg-giamento e contenuto nella cartella “source” alla voce “FlashingLed-main.c”.Ora l’utente ha a disposizione un programma funzionate da modificare per farcompiere al DSP i processi che desidera. Questo procedimento operativo estato seguito anche per lo sviluppo del progetto trattato in questa tesi.

Page 19: Tesi Effetti Audio

1.3 Il sistema di sviluppo 5

1.3.5 Esecuzione del programma

Per eseguire un programma si collega l’emulatore al pc quindi quest’ultimo allascheda; dal menu “debug” selezioniamo “connect” e la scheda verra connessaal pc. Una volta generato il programma in linguaggio C dal menu “project” siseleziona la voce “build”, il software generera il file in formato .out per il DSP.Il comando “re-build all” e disponibile anche in formato icona nella “projecttoolbar”, assieme a questa troviamo l’icona “incremental build” che realizzaun processo piu rapido andando a riscrivere solamente le parti di codice chesono state modificate dall’ultimo build. Dal menu “file” selezioniamo la voce“load program”, il programma viene trasferito alla scheda; infine si selezionadal menu “debug” la voce “run” ed il nostro programma verra eseguito dallascheda.

Connect. Build.

Load. Run.

Figura 1.2: Simulazione

Page 20: Tesi Effetti Audio

6 La Scheda di elaborazione

1.3.5.1 L’uso dei breakpoint

Figura 1.3: Menu Breakpoints.

Durante la simulazione di un pro-gramma uno degli strumenti piu utiliper verificare il funzionamento delsoftware e il breakpoint. Il Codecomposer studio permette di inserirebreakpoint nel codice semplicementecliccando sulla colonna grigia alla sin-istra del codice. Il breakpoint verraaggiunto nel menu dei breakpointe sara possibile selezionare la varieazioni da intraprendere. E’ infattipossibile, oltre al semplice blocco delprogramma implementare delle fun-zioni quali ad esempio leggere o scri-vere dati su file. Queste funzionalitasi sono rivelate, nel nostro progetto,molto utili perche hanno permesso disimulare un flusso audio che era stato precedentemente salvato in formato testosenza dover realizzare fisicamente un circuito di condizionamento del segnaleed utilizzare un dispositivo di riproduzione audio, viceversa la riproduzione delsegnale elaborato dalla scheda non ha richiesto hardware esterno come ampli-ficatori e diffusori. La procedura e la seguente: una volta inserito il breakpointsi apra la “property window”. Alla voce “action” si selezioni “read data fromfile”, alla voce “file” va inserito il percorso dove il file risulta salvato infineil campo “start address” va completato con il simbolo &, seguito dal nomedella variabile che si vuole aggiornare con il contenuto del file. E’ molto im-portante che il file sia in formato .dat e la prima riga del file deve contenereuna particolare stringa di valori formata da: un numero standard, un numerodi formato, un indirizzo di partenza, un numero di pagina ed una lunghezza.Il numero standard e 1651; il numero di formato e un numero da 1 a 4 cherappresenta esadecimali, integer, long, o float; l’indirizzo di partenza del bloc-co fornisce le informazione a riguardo del salvataggio del blocco; il numero dipagina rappresenta la pagina dal quale il blocco e stato estratto; la lunghezzae la dimensione del blocco. Una possibile stringa di valori e “1651 2 c00e 1 1”.

Page 21: Tesi Effetti Audio

1.3 Il sistema di sviluppo 7

1.3.5.2 Visualizzazione delle variabili

Risulta molto pratico in fase di simulazione controllare costantemente il valoredelle variabili del programma, il Code composer studio permette di visualiz-zarne il contenuto in tempo reale. Per fare cio e sufficiente selezionare dalmenu “View” la voce “Watch window”. Si aprira quindi una finestra vuota,in essa si selezionera la scheda “Watch 1”, da qui e possibile, semplicementescrivendo il nome della variabile, visualizzare il valore aggiornato in temporeale del contenuto stesso. E’ ora possibile ora inserire tutte le variabili dinostro interesse.

1.3.5.3 Salvataggio del Workspace

Durante lo sviluppo del progetto e necessario simularne delle parti, inseriredei breakpoint, mostrare il contenuto di alcune variabili o altro. Per farecio e necessario configurare tutti questi parametri, quindi aprire finestre divisualizzazione e tali settaggi vengono persi alla chiusura del Code ComposerStudio. Per evitare ad ogni riavvio di dover riconfigurare tutto, il softwarepermette di salvare il proprio workspace, cioe tutti i file aperti, i breakpointinseriti, le variabili visualizzate e tutto cio che e stato configurato all’ultimoutilizzo. Per effettuare questo e sufficiente dal menu “file” selezionare la voce“Workspace” e successivamente “save workspace” oppure “load workspace”.

Figura 1.4: Il Sistema di Sviluppo

Page 22: Tesi Effetti Audio

8 La Scheda di elaborazione

1.3.5.4 Organizzazione della memoria

Il programma di prova visto in precedenza organizza la memoria in due pagine,la pagina uno dedicata al programma mentre la pagina due dedicata ai dati.Le pagine vengono poi ulteriormente divise in blocchi di lunghezza variabile.La pagina dei dati invece ha blocchi di dimensione fissata pari a 2000 byte cias-cuno. Per i nostri scopi questa e una grande limitazione, vogliamo infatti crearevariabili di buffer della lunghezza di almeno 22050 campioni. Per risolvere ilproblema e sufficiente modificare il file “C28345-RAM-FlashingLeds.CMD”,che e il file in cui il programmatore gestisce la memoria, piu precisamente laparte relativa alla pagina due. Il codice modificato e quello mostrato di se-guito, si noti che si e preferito non cancellare la versione precedente del filema di trasformare il vecchio codice in commento ed aggiungere il nuovo codicea seguire. I commenti, le parti di codice compreso tra i simboli /* e */ nonvengono eseguiti dall’elaboratore.

MEMORY

{

...

PAGE 1 :

RAMM1 : origin = 0x000400, length = 0x000400

/* on-chip RAM block M1 */

/* RAML1 : origin = 0x00a000, length = 0x002000

RAML2 : origin = 0x00C000, length = 0x002000

RAML3 : origin = 0x00E000, length = 0x002000

RAML4 : origin = 0x010000, length = 0x002000

RAML5 : origin = 0x012000, length = 0x002000

RAML6 : origin = 0x014000, length = 0x002000

RAML7 : origin = 0x016000, length = 0x002000 */

RAMBUFFER : origin = 0x00a000, length = 0x00e000

ZONE7B : origin = 0x20FC00, length = 0x000400

/* XINTF zone 7 - data space */

RAMHBUFFER : origin = 0x300000, length = 0x010000

RAMH3 : origin = 0x318000, length = 0x008000

RAMH4 : origin = 0x320000, length = 0x008000

RAMH5 : origin = 0x328000, length = 0x008000

}

Page 23: Tesi Effetti Audio

1.3 Il sistema di sviluppo 9

Una volta definita la composizione della memoria, sempre nello stesso file“C28345-RAM-FlashingLeds.CMD” vengono definite le allocazioni delle variesezioni del codice. Imposteremo quindi che le variabili “buffer” siano allo-cate nella pagina 1 nelle sezioni create in precedenza “RAMBUFFER” eRAMHBUFFER” come mostra il listato seguente.

SECTIONS

{

/* Setup for "boot to SARAM" mode:

The codestart section (found in DSP28_CodeStartBranch.asm)

re-directs execution to the start of user code. */

codestart : > BEGIN, PAGE = 0

ramfuncs : > RAML0, PAGE = 0

.text : > RAML0, PAGE = 0

.cinit : > RAML0, PAGE = 0

.pinit : > RAML0, PAGE = 0

.switch : > RAML0, PAGE = 0

.stack : > RAMM1, PAGE = 1

.ebss : > RAML0, PAGE = 0

.ebss:buffer : > RAMBUFFER, PAGE = 1

.ebss:hbuffer : > RAMHBUFFER,PAGE = 1

.econst : > RAML0, PAGE = 0

.esysmem : > RAMM1, PAGE = 1

...

}

Per indirizzare le variabili create nel codice sorgente del programma nonsara sufficiente dichiarare solamente il tipo ed il nome del vettore ma saranecessario l’utilizzo del comando PRAGMA per dichiarare la creazione dellavariabile e la sua allocazione nella zona di memoria desiderata. Questa sintassie mostrata nel codice sorgente riportato di seguito.

#pragma DATA_SECTION(buffer , ".ebss:buffer")

int buffer[28000]; //e lungo e000

#pragma DATA_SECTION(h1buffer , ".ebss:hbuffer")

int h1buffer[28000];

#pragma DATA_SECTION(h2buffer , ".ebss:hbuffer")

int h2buffer[28000];

Page 24: Tesi Effetti Audio

10 La Scheda di elaborazione

1.3.5.5 Combinazioni di tasti rapide

Una volta presa confidenza con il software per velocizzare la creazione di unprogetto diventa naturale l’utilizzo di scorciatoie da tastiera, combinazioni ditasti rapide, senza dover cercare le voci nei menu. Di seguito vengono elencatealcune delle funzionalita piu utilizzate:

alt-C Connette il pc alla scheda;

ctr-L Apre una finestra nella quale selezionare il programma da caricare nellascheda;

ctr-shift-L Carica nella scheda il programma caricato in precedenza con leeventuali modifiche apportate;

F5 Avvia la simulazione del programma;

shift-F5 Blocca l’esecuzione del programma;

ctr-M Visualizza il file Main, utile quando sono aperte piu funzioni;

ctr-R Effettua un reset della scheda;

F11 Permette l’esecuzione di una singola istruzione C, e una esecuzione passopasso;

F10 Esegue interi cicli di codice;

shift-F11 All’interno di un ciclo permette di finire l’esecuzione del ciclo efermarsi al termine di questo;

Page 25: Tesi Effetti Audio

Capitolo 2

Filtri Digitali

La maggior parte degli effetti musicali viene generata, partendo dal flusso audiooriginale, semplicemente interponendo tra l’ingresso e l’uscita un opportunofiltro. Un semplice esempio puo essere un equalizzatore, al suo interno necontiene diversi che amplificano in modo opportuno determinate frequenze.I filtri qui utilizzati saranno di tipo digitale, dovendo essere elaborati da unprocessore, e come per i filtri analogici anche quelli digitali vengono classificatiin quattro gruppi: passa-basso, passa-alto, passa-banda ed elimina-banda. Lamodalita di progettazione genera due tipologie distinte di filtri: i filtri FIR equelli IIR. Dall’utilizzo combinato di questi si puo ottenere tutta la gamma difiltri analogici come i filtri parametrici, e i filtri a pettine.

2.1 Filtri FIR

Il termine FIR e l’acronimo di Finite Impulse Response che appunto significarisposta impulsiva di durata finita. Dal nome stesso del filtro si puo capire cheil valore in uscita sara una combinazione lineare di un numero finito di valoriprecedenti. Definendo x il valore in ingresso, h un opportuno coefficiente ey il valore del segnale in uscita; matematicamente possiamo esprimere questoconcetto come segue:

y(n) =K∑

i=0

hix(n − i) (2.1.1)

e anche graficamente come mostra Figura 2.1.

11

Page 26: Tesi Effetti Audio

12 Filtri Digitali

Figura 2.1: Struttura di un filtro FIR

Page 27: Tesi Effetti Audio

2.2 Filtri IIR 13

2.2 Filtri IIR

L’acronimo IIR sta per Infinite Impulse Response, cioe risposta impulsiva didurata infinita. Questo significa che il segnale processato dal filtro sara unacombinazione degli infiniti istanti precedente, ovviamente non ha un significatoletterale infatti risulta palese che un sistema non possa avere infiniti campi-oni ma tale espressione e da interpretare nel senso che l’ultimo campione inuscita dal filtro e formato in parte anche dal contributo dato dal primo. Cioe possibile in quanto assieme al segnale di ingresso viene elaborata una certapercentuale del segnale di uscita precedente.

Dal punto di vista matematico risulta:

y(n) =M∑i=1

−aiy(n − i) +L∑

j=0

bjx(n − j) (2.2.1)

Graficamente si puo esprimere come in Figura 2.2.

Figura 2.2: Struttura di un filtro IIR

Page 28: Tesi Effetti Audio

14 Filtri Digitali

2.3 Filtri Parametrici

I filtri parametrici sono molto utilizzati nella industria del suono perche hannola capacita di amplificare o attenuare particolarmente specifiche frequenze checompongono il segnale. I parametri di progetto sono la larghezza di banda, ilcentro di banda, ed il guadagno; da questi, utilizzando delle semplici formule siricavano i quattro coefficienti necessari alla realizzazione del filtro. Sono filtriche hanno una risposta in frequenza che e per lo piu piatta e di valore unitariosull’intero spettro di interesse mentre amplificano o attenuano molto in un in-torno ristretto di ω0 , come si puo osservare dalla Figura 2.3. Sono quindi deiNotch-filter oppure dei Peak-filter a seconda di come vengono impostati i polie gli zeri della funzione di trasferimento.

Esprimendo in termini matematici il valore dell’uscita risulta:

y(n) = b0x(n) + b1x(n − 1) + b2x(n − 2) + a1y(n − 1) + a2y(n − 2) (2.3.1)

Figura 2.3: Risposta in frequenza di un filtro parametrico

Page 29: Tesi Effetti Audio

2.4 Filtri a Pettine 15

2.4 Filtri a Pettine

I filtri a pettine, piu comunemente conosciuti con la loro traduzione inglesecomb-filter, vengono utilizzati per ridurre il disturbo dovuto a segnali periodi-ci e sono impiegati nella generazione di effetti musicali quali l’eco, il chorus,il flanger e il riverbero. Il loro funzionamento e molto semplice: al segnaleoriginale viene sommato il segnale ritardato ed attenuato: Questo processoaltera l’ampiezza del segnale in maniera non costante sullo spettro del segnale.Orfanidis [1] nel suo studio, ha dimostrato che tale filtro puo essere derivatosia attraverso l’utilizzo della struttura FIR sia attraverso quella IIR.

Matematicamente i concetti formulati da Orfanidis si possono esprimere cosı:

HIIR = b1 + z−D

1 − az−D(2.4.1)

HFIR =1

N

1 − z−ND

1 − z−D(2.4.2)

Come dice il nome stesso la risposta in frequenza di questo filtro ha unacaratteristica forma a pettine come si puo notare in Figura 2.4.

Figura 2.4: Risposta in frequenza di un filtro a pettine

Page 30: Tesi Effetti Audio

16 Filtri Digitali

Page 31: Tesi Effetti Audio

Capitolo 3

Effetti Audio

I vari effetti che si possono ricreare vengono suddivisi in effetti audio di ritardotemporale, effetti digitali basati sulla modulazione della linea temporale edeffetti audio basati sulle variazioni del valore di ampiezza. Per la realizzazionedei primi e dei secondi e necessario introdurre il concetto di linea temporale.In elettronica digitale un flusso audio e una sequenza di campioni equispaziatinel tempo di un valore T sample (equivalente a 1/F sample). Tutti i campionirispecchiano quindi un valore di ampiezza del segnale in ingresso in un deter-minato istante. La linea temporale e quindi un susseguirsi ordinato di questi,una riproduzione non ordinata dei campioni produce alcuni degli effetti piuinteressanti nel settore della manipolazione del suono. Gli effetti che sfruttanole modificazioni della linea temporale dovranno quindi necessariamente avere adisposizione intere porzioni del segnale e non solamente un singolo campione;per questo motivo e necessario dedicare parte di memoria all’immagazzinamen-to dei dati. Questo settore di memoria viene chiamato buffer ed organizzatosecondo lo schema del buffer circolare.

3.1 Il buffer circolare

La sua importanza, la semplicita di utilizzo e realizzazione rendono questo stru-mento fondamentale per l’implementazione digitale di effetti audio. Il buffer eun dispositivo in grado di immagazzinare informazioni; si puo immaginare intermini matematici come un vettore dotato di lunghezza finita. Supponendo divoler immagazzinare dati all’interno del vettore, ogni dato che viene ricevutoe salvato nella prima posizione. Per fare cio il codice avrebbe dovuto preven-tivamente traslare il dato che precedentemente occupava la prima posizionenella seconda, il secondo nella terza il terzo nella quarta e cosı via. Questoprocedimento avrebbe un costo computazionale notevole; pensando infatti che

17

Page 32: Tesi Effetti Audio

18 Effetti Audio

il buffer sia formato da 28000 campioni, significa che ad ogni nuovo dato iningresso il processore dovra compiere 28000 trasferimenti. Per ovviare a questoproblema si e sviluppato il concetto di buffer circolare: anziche traslare tuttii dati, ed inserire quello in ingresso nella prima posizione, viene consideratovariabile l’indice del vettore ed incrementato ad ogni nuovo dato. In tal modoi dati vengono lasciati fissi nelle loro posizioni e sostituiti di volta in volta chel’indice punta la locazione ed un nuovo dato e presente all’ingresso. Quandopoi l’indice raggiunge il fondo del vettore basta semplicemente riportarlo allaprima posizione e ricominciare il ciclo. In questo modo e possibile muoversicon semplicita all’interno della linea temporale variando solamente l’indice delbuffer.

Figura 3.1: Struttura del buffer Circolare

3.2 Motivazione delle scelte

Per lo sviluppo di questo progetto e stato utilizzato il software di calcolo Mat-lab, una e stata una scelta obbligata data dalla facilita nel suo utilizzo e la suavelocita di simulazione. Si e deciso quindi di creare un codice per ogni effetto epoi una volta testata la funzionalita si e convertito il codice in linguaggio C perl’elaboratore finale, il DSP. Per semplicita di simulazione in Matlab si e sceltodi non creare un sistema in grado di leggere un campione per volta ma si epreferito lavorare offline. Questa metodologia richiede quindi di inserire sottoforma di vettore l’intero flusso audio da elaborare; le modifiche da apportareper rendere il codice utilizzabile online sono minime. Per le simulazioni conMatlab non sara necessario l’uso del buffer circolare. Le funzioni realizzate nelseguito prevedono, dove possibile, l’utilizzo di algoritmi gia implementati nel

Page 33: Tesi Effetti Audio

3.2 Motivazione delle scelte 19

software Matlab, quali ad esempio le funzioni filter e freqz che hanno, pero, laparticolarita di ricevere in ingresso i vettori contenenti i coefficienti del filtroed il segnale da filtrare. Risultano molto utili per quel settore di effetti cheha filtri costanti perche ne rendono il codice piu snello e di facile lettura. Inquesta categoria rientra la famiglia degli effetti a ritardo temporale. E’ nec-essario precisare che tali funzioni nella traduzione al linguaggio C per il DSPsono state sostituite dalla implementazione matematica che le compone. Sonoinvece totalmente inefficaci nel settore della modulazione della linea temporaledove le funzioni filter e freqz non sono state utilizzate; si e deciso di realizzarleesplicitamente applicando la relazione matematica che ogni effetto comportaed utilizzando un ciclo che processa tutto il segnale. Proprio per questo motivosi evidenzia la necessita di dover lavorare offline.Un problema che e stato necessario affrontare riguarda la capacita di memoriadel DSP. La memoria viene suddivisa di default in sezioni di dimensioni re-lativamente ridotte per gli usi che ne faremo. La suddivisione della memoriaimpedisce infatti di creare lunghi vettori in quanto alla dichiarazione del vettoresegue un allocamento contiguo di memoria. E’ stato necessario riprogrammarequeste sezioni al fine di accorparne alcune e creare due gruppi di lunghezzae000 e 10000 espressi in base esadecimale (57344 e 65536 in base decimale).Nonostante queste modifiche abbiano migliorato la disposizione della memoriaper i nostri scopi, non e stato possibile dedicare ulteriore memoria alle variabilidel software cosı da costringere il programmatore a dedicare solamente 28000valori per il buffer circolare (vedi Figura 3.1). Questa e stata la motivazioneprincipale che ha portato alla scelta di una frequenza di campionamento pari a22050 Hz per ottenere un buffer di circa 1,27 secondi, necessario per la realiz-zazione di effetti quali ad esempio quelli appartenenti alla famiglia del ritardotemporale.

Page 34: Tesi Effetti Audio

20 Effetti Audio

Page 35: Tesi Effetti Audio

Capitolo 4

Ritardo temporale

Questa tipologia di effetti si basa su una riproduzione di campioni presenti iningresso e contemporaneamente di altri allocati in istanti di tempo precedenti,dove pero la distanza temporale resta sempre costante.

4.1 Delay

L’effetto delay e uno degli effetti piu semplici da realizzare, ma funge da baseper la realizzazione di quelli piu complessi. Fisicamente il delay e la ripropo-sizione del segnale, in forma attenuata, dopo un certo lasso di tempo. Leonde sonore, emesse dalla sorgente raggiungono l’ascoltatore in linea sia diret-ta che indiretta. Le prime dalla sorgente sono ricevute direttamente dall’as-coltatore, le seconde come conseguenza di diverse riflessioni dell’onda originalenell’ambiente circostante, saranno quindi ritardate ed attenuate.

Figura 4.1: Struttura fisica del Delay

21

Page 36: Tesi Effetti Audio

22 Ritardo temporale

Il ritardo e causa della maggior distanza percorsa mentre il valore di ampiez-za inferiore e una concausa di perdite nel mezzo trasmissivo, propagazione om-nidirezionale e perdite dovute alla non perfetta riflessione da parte dell’ostacoloche non puo essere definito uno specchio ideale con coefficiente di riflessioneunitario. Si parla di delay a singola riflessione.

L’implementazione matematica risulta essere quindi:

y(n) = x(n) + ax(n − D) (4.1.1)

dove y e il segnale di uscita, x quello di ingresso, α un coefficiente di at-tenuazione e D il valore in numero di campioni del ritardo. Alla frequenza dilavoro, 22050 Hz, se si vogliono ottenere 0,5 secondi di ritardo, D sara ugualea 11025.

La funzione di trasferimento e quindi:

H(z) = 1 + az−D (4.1.2)

Figura 4.2: Implementazione, Delay

Come si vede in Figura 4.3, data la frequenza di campionamento di 22050Hz, si e deciso di riproporre la versione riflessa del segnale dopo 17640 campioni,cio significa 0,8 secondi dopo la versione originale e con una attenuazione diun fattore 10. Dalla Figura 4.4 si nota invece che in frequenza il filtro haun comportamento sinusoidale. Questo significa che alcune frequenze vengonoamplificate ed altre attenute. L’onda che si propaga viene riflessa dall’ostacoloe l’onda riflessa va a sommarsi all’onda diretta, a determinate frequenze le dueonde saranno perfettamente in fase; producendo cosı un valore di ampiezzamaggiore, ad altre le due onde si trovano in contro-fase e la loro somma saraquindi inferiore.

Page 37: Tesi Effetti Audio

4.1 Delay 23

Figura 4.3: Filtro nel tempo, Delay

Figura 4.4: Filtro in frequenza, Delay

Page 38: Tesi Effetti Audio

24 Ritardo temporale

2 Effetto Delay

4 function out=delay(in)Fs=22050; %definisce la frequenza di campionamento

6 rit del ms=900; %definisce il ritardo del delay in msrit del=round(rit del ms∗Fs/1000); %ritardo in numero di campioni

8 temp=zeros(rit del, 1); %genera un vettore di zeri per estendere il segnaleingresso=vertcat(in, temp); %estende il segnale

10 b=zeros(1, Fs); %genera il vettore dei coefficienti del filtrob(rit del)=0.1; %definisce i coefficienti del filtro

12 b(1)=1; %definisce i coefficienti del filtrofigure(1)

14 stem(b); %stampa a video il filtrotitle(’Risposta nel tempo del filtro’)

16 axis([−500 Fs 0 1.1])[H,F] = freqz(b, 1, 10∗Fs, Fs); %trova la risposta in frequenza del filtro

18 figure(2)plot(F,abs(H)); %stampa a video il filtro

20 title(’Risposta in frequenza del filtro’)axis([0 20 0.85 1.15])

22 out=filter(b, 1, ingresso); %effettua il filtraggio del segnale in ingressosoundsc (out,Fs); %riproduce il segnale d’uscita

24 end

Il codice e il listato della funzione Matlab che genera l’effetto delay. Alsegnale di ingresso viene concatenata una stringa di zeri della lunghezza delritardo massimo, questo procedimento e necessario altrimenti l’elaborazionedell’ultimo campione del segnale di ingresso non verrebbe riprodotta in uscita.Il segnale elaborato con lo scopo di ottenere l’effetto eco e necessariamentepiu lungo del segnale di ingresso in quanto deve prevedere anche la ripetizionedegli ultimi campioni.Come si puo notare viene generato un vettore b che contiene i coefficienti delfiltro FIR che vengono successivamente passati alla funzione filter del Matlabche restituisce il vettore dei campioni uscita. L’utilizzo della funzione filter hacome unico scopo un maggior ordine ed una maggior leggibilita. La versionesenza tale funzione e in ogni caso semplice perche basterebbe semplicementeimplementare la 4.1.1.

Page 39: Tesi Effetti Audio

4.1 Delay 25

4.1.1 Parametri

I parametri che e possibile gestire per generare l’effetto che piu soddisfa lespecifiche dell’utente sono:

Ritardo del delay in questo progetto si puo variare tra 0 e 1 secondi;

Valore di ampiezza del segnale ritardato e stato selezionato un valorepari a 0,1;

Page 40: Tesi Effetti Audio

26 Ritardo temporale

4.2 Slapback Eco

Con la stessa architettura vista per l’effetto delay, Figura 4.5, modificandosolamente il ritardo della versione traslata si possono ottenere varianti inter-essanti come ad esempio lo Slapback Eco. Quest’ultimo ha la particolaritadi avere un ritardo estremamente breve (intorno ai 15-40 millisecondi) ed unrapporto unitario tra segnale originale e copia traslata, per evitare possibilioverflow vengono quindi amplificati entrambi di un fattore 1/2.

La formula risulta essere sempre:

y(n) = ax(n) + ax(n − D) (4.2.1)

Questa volta quindi con un D molto piccolo ed il coefficiente a pari a 0,5.

Figura 4.5: Implementazione, Slapback Eco

Il comportamento del filtro utilizzato si puo vedere in formato grafico inFigura 4.6 nella sua versione nel tempo e in Figura 4.7 nella sua versione infrequenza. Si nota la tipica forma a pettine che permette di realizzare questatipologia di effetti.

4.2.1 Parametri

I parametri che e possibile gestire per generare l’effetto che piu soddisfa lespecifiche dell’utente sono:

Ritardo del delay per ottenere un effetto realistico il ritardo deve esserecompreso tra i 15 e i 40 millisecondi;

Valore di ampiezza del segnale ritardato per un effetto migliore e con-sigliabile mantenere la configurazione proposta in questa tesi con i duecoefficienti uguali e pari a 0,5;

Page 41: Tesi Effetti Audio

4.2 Slapback Eco 27

Figura 4.6: Filtro nel tempo, Slapback Eco

Figura 4.7: Filtro in frequenza, Slapback Eco

Page 42: Tesi Effetti Audio

28 Ritardo temporale

2 Effetto Slapback Eco

4 function out=slapback(in)Fs=22050; %definisce la frequenza di campionamento

6 rit eco ms=20; %definisce il ritardo dell’eco in msrit eco=round(rit eco ms∗Fs/1000); %ritardo in numero di campioni

8 temp=zeros(rit eco, 1); %genera un vettore di zeri per estendere il segnaleingresso=vertcat(in, temp); %estende il segnale

10 b=zeros(1, Fs); %genera il vettore dei coefficienti del filtrob(rit eco)=0.5; %definisce i coefficienti del filtro

12 b(1)=0.5; %definisce i coefficienti del filtrofigure(1)

14 stem(b); %stampa a video il filtrotitle(’Risposta nel tempo del filtro’)

16 axis([−500 Fs 0 1.1])[H,F] = freqz(b, 1, 10∗Fs, Fs); %trova la risposta in frequenza del filtro

18 figure(2)plot(F,abs(H)); %stampa a video il filtro

20 title(’Risposta in frequenza del filtro’)axis([0 150 −0.15 1.15])

22 out=filter(b, 1, ingresso); %effettua il filtraggio del segnale in ingressosoundsc (out,Fs); %riproduce il segnale d’uscita

24 end

Il codice Matlab riportato realizza la funzione dell’effetto. L’effetto Slap-back, seppur molto semplice restituisce un segnale che fa si che l’impressionedell’ascoltatore sia che ad interpretare il brano siano due musicisti; da infattimaggior una profondita all’audio. Vedremo in seguito che esistono algoritmipiu raffinati per generare questo tipo di percezione. Applicando questo algo-ritmo ad un flusso audio che riproduce della voce in uscita avremo un suonoquasi metallico.

Page 43: Tesi Effetti Audio

4.3 Multi-tap Eco 29

4.3 Multi-tap Eco

Anche questo secondo effetto e una elaborazione del delay. Per generarlo esufficiente implementare una sequenza di delay (eco), questo permette di ot-tenere un suono piu realistico, che ripropone piu versioni ritardate e attenuatedel segnale originale. In questo progetto si e implementato un tri-tap eco, sonopresenti 3 riproposizioni con attenuazioni e ritardi diversi.

L’implementazione matematica del filtro e la seguente:

y(n) = x(n) + a1x(n − D) + a2x(n − 2D) + a3x(n − 3D) (4.3.1)

e la funzione del filtro risulta essere:

H(z) = 1 + a1z−D + a2z

−2D + a3z−3D (4.3.2)

In questo progetto, a causa di una ristrettezza della memoria da dedicare aibuffer, si e deciso di utilizzare come ritardo base D un valore di 8820 campioniche corrisponde a 400 millisecondi come si vede in Figura 4.9 . E’ decisamentetroppo poco per ricreare l’effetto di un eco in alta montagna, infatti sapendoche la velocita del suono e di circa 343 m/s possiamo stimare che con questoalgoritmo la distanza dall’ostacolo riflettente sia solamente di 68 metri cir-ca. Utilizzando DSP dotati di maggiore memoria, sara sufficiente modificareil codice sorgente e piu precisamente la variabile rit eco ms al valore che sidesidera.

Figura 4.8: Implementazione, Multi-tap Eco

Page 44: Tesi Effetti Audio

30 Ritardo temporale

Figura 4.9: Filtro nel tempo, Multi-tap Eco

Figura 4.10: Filtro in frequenza, Multi-tap Eco

Page 45: Tesi Effetti Audio

4.3 Multi-tap Eco 31

2 Effetto Multi−tap Eco

4 function out=multitap(in)Fs=22050; %definisce la frequenza di campionamento

6 rit eco ms=400; %definisce il ritardo dell’eco in msrit eco=round(rit eco ms∗Fs/1000); %ritardo in numero di campioni

8 temp=zeros(3∗rit eco, 1); %genera un vettore di zeri per estendere il segnaleingresso=vertcat(in, temp); %estende il segnale

10 b=zeros(1, Fs); %genera il vettore dei coefficienti del filtrob(rit eco)=0.1; %definisce i coefficienti del filtro

12 b(2∗rit eco)=0.05; %definisce i coefficienti del filtrob(2∗rit eco)=0.025; %definisce i coefficienti del filtro

14 b(1)=1; %definisce i coefficienti del filtrofigure(1)

16 stem(b); %stampa a video il filtrotitle(’Risposta nel tempo del filtro’)

18 axis([−500 Fs 0 1.1])[H,F] = freqz(b, 1, 10∗Fs, Fs); %trova la risposta in frequenza del filtro

20 figure(2)plot(F,abs(H)); %stampa a video il filtro

22 title(’Risposta in frequenza del filtro’)axis([0 20 0.85 1.2])

24 out=filter(b, 1, ingresso); %effettua il filtraggio del segnale in ingressosoundsc (out,Fs); %riproduce il segnale d’uscita

26 end

4.3.1 Parametri

I parametri che e possibile gestire per generare l’effetto che piu soddisfa lespecifiche dell’utente sono:

Ritardo del delay base in questo progetto non puo superare i 0,4 secondi,in caso di DSP con maggiore memoria e possibile aumentarlo;

Valore di ampiezza dei singoli segnali ritardati buona norma e ricordareche la somma di tutti coefficienti non deve scostarsi troppo da 1 perevitare possibili distorsioni per overflow nel segnale di uscita;

Page 46: Tesi Effetti Audio

32 Ritardo temporale

Page 47: Tesi Effetti Audio

Capitolo 5

Modulazione della lineatemporale

Questa classe di effetti trova le sue basi nella variazione della linea temporale.Vengono riprodotti sia i campioni del segnale originale sia alcuni campioniche compongono la linea temporale, con la condizione che non e necessariomantenere costante il ritardo D.

5.1 Chorus

Il chorus e uno degli effetti piu utilizzati e piu interessanti perche il flussoaudio elaborato ha una profondita e un corpo che lo rendono particolarmentepiacevole all’ascolto. Da l’impressione che piu musicisti stiano suonando lostesso brano anche se in realta il musicista e uno solo. L’implementazione ebasata sulla cella delay. I due musicisti non saranno mai perfettamente sin-cronizzati; si e stimato che il ritardo massimo e compreso circa tra i 15 e i35 millisecondi; non solo, anche il valore dell’ampiezza del segnale non sarasempre lo stesso quindi anche questo valore variera di intensita nel tempo. Ilflusso audio di uscita sara quindi la sovrapposizione del segnale originale euna versione traslata con un ritardo variabile e amplificata con un coefficienteanch’esso variabile nel tempo. Per ottenere un risultato ottimale e necessarioche il ritardo venga modulato da un oscillatore a bassa frequenza casuale (ran-dom low-frequency oscillator); per lo sviluppo di questo progetto e stato invecescelto, per comodita di programmazione, di utilizzare una sinusoide a bassafrequenza.

33

Page 48: Tesi Effetti Audio

34 Modulazione della linea temporale

Matematicamente possiamo esprimere questi concetti come mostrato diseguito:

y(n) = a1x(n) + a2(n)x(n − D(n)) (5.1.1)

la cui implementazione risulta essere quella mostrata in Figura 5.1

Figura 5.1: Implementazione, Chorus

Figura 5.2: Filtro in frequenza, Chorus

Page 49: Tesi Effetti Audio

5.1 Chorus 35

Nell’espressione precedente, a1 e fissato a 0,5 per evitare possibili distor-sioni dovute a overflow del segnale e a2 invece e, come mostra Figura 5.3, unsegnale sinusoidale lentamente variabile (0,3 Hz). Il termine D, che rappre-senta il ritardo, e anche un segnale sinusoidale lentamente variabile (0,1 Hz),rappresentato in Figura 5.3.

a2(n) = (1 + V ariazione)cos(2πnTsFa) (5.1.2)

D(n) =(Ritardo − massimo

2

)(1 + sin(2πnTsFd)) (5.1.3)

Figura 5.3: Coefficienti, Chorus

Page 50: Tesi Effetti Audio

36 Modulazione della linea temporale

5.1.1 Parametri

Per l’effetto chorus i parametri che l’utente puo definire sono molti e si possonosuddividere in parametri di ampiezza e parametri di ritardo. Una rappresen-tazione grafica dei parametri di ritardo e in Figura 5.4

Valore di variazione percentuale dell’ampiezza designa quanto l’inten-sita della seconda versione del segnale si discosta dalla prima;

Frequenza della sinusoide che modula la variazione di ampiezza e unvalore tipicamente inferiore ad 1 Hz, per valori superiori si profila unadistorsione eccessiva del segnale che deteriore le caratteristiche stessedell’effetto;

Ritardo nominale definisce la profondita media del ritardo applicato, inquesto progetto e stata fissata a meta del ritardo massimo;

Frequenza della sinusoide che modula la variazione temporale coefficientefissato attorno a qualche frazione di Hz, variazioni troppo rapide pro-ducono infatti modificazioni della frequenza del segnale originale;

Figura 5.4: Parametri ritardo, Chorus

Page 51: Tesi Effetti Audio

5.1 Chorus 37

2 Effetto Chorus

4 function out=chorus(in)Fs=22050; %definisce la frequenza di campionamento

6 Ts=1/Fs;Fa=0.3; %frequenza che modula la variazione di ampiezza

8 Fd=0.1; %frequenza che modula la variazione di ritardorit cho ms=25; %definisce il ritardo dell’eco in ms

10 rit cho max=round(rit cho ms∗Fs/1000); %ritardo massimo in campioniamp var max=30; %massima variazione di ampiezza percentuale

12 temp=zeros(rit cho max, 1); %genera un vettore per estendere il segnaleingresso=vertcat(in, temp); %estende il segnale

14 lung=length(ingresso);n=0:1:lung;

16 s=round((rit cho max/2)∗(1+sin(2∗pi∗Ts∗Fd∗n)));p=(1+(amp var max/100)∗cos(2∗pi∗Ts∗Fa∗n));

18 out=zeros(lung,1);for i=1:lung %effettua il filtraggio

20 a=i−s(i);if (a<=0);

22 a=1;end;

24 out(i)=0.5∗ingresso(i)+0.5∗p(i)∗ingresso(a);end;

26 figure(1) %stampa a video i segnalisubplot(2,1,1), plot(ingresso);

28 title(’segnale ingresso’);subplot(2,1,2), plot(out);

30 title(’segnale uscita’);figure(2) %stampa a video i coefficienti

32 subplot(2,1,1), plot(p);title(’fattore di ampiezza’);

34 subplot(2,1,2), plot(s);title(’coefficiente di ritardo’);

36 soundsc (out,Fs); %riproduce il segnale d’uscitaend

Page 52: Tesi Effetti Audio

38 Modulazione della linea temporale

Come si vede dal listato Matlab per questa implementazione non e statopossibile utilizzare la funzione filter, in quanto i coefficienti b del filtro sonovariabili nel tempo. Per ovviare a cio si e deciso di realizzare esplicitamente lostesso algoritmo della funzione filter con le opportune modifiche per renderevariabili i coefficienti. Si realizza quindi un ciclo FOR che percorre tuttala lunghezza del segnale e applica la 5.1.1. Questo procedimento e possibilesolamente perche stiamo elaborando segnali offline, cioe elaboriamo i dati dopoaverli acquisiti completamente. Il codice che invece e stato implementato sulDSP prevede comunque una elaborazione in real time. In appendice e possibiletrovare il listato di questo codice.

Page 53: Tesi Effetti Audio

5.2 Flanger 39

5.2 Flanger

L’effetto Flanger origina da un evento fortuito; la leggenda vuole che un tecni-co del suono in fase di registrazione di uno stesso brano su due nastri magneticicercando di riprodurre un effetto di sdoppiamento si rese conto che variandola velocita relativa tra i due nastri si otteneva un effetto simile a quello cre-ato dalle turbine dei jet, uno swooshing. L’implementazione di questo si basaquindi su una diversa velocita di riproduzione di un brano che va a sommarsial brano riprodotto alla velocita corretta. La struttura e quindi identica aquella dell’effetto chorus con la differenza che i coefficienti di amplificazionesono costanti e pari a 0,5 al fine di evitare possibili problemi di overflow ela modulazione del ritardo non avviene tramite un oscillatore casuale a bassafrequenza ma seguendo una sinusoide. Mentre per il chorus il ritardo era com-preso tra i 15 e i 35 millisecondi per ottenere un buon risultato il flanger deveavere un ritardo compreso tra 0,25 e 25 millisecondi.

Matematicamente:

y(n) = 0, 5x(n) + 0, 5x(n − D(n)) (5.2.1)

dove D(n) e appunto un segnale lentamente variabile.

D(n) =(Ritardo − massimo

2

)(1 − cos(2πnTsFd)) (5.2.2)

Questi concetti vengono poi implementati quindi nella forma che si puo trovare

sotto.

Figura 5.5: Implementazione, Flanger

Come si puo vedere in Figura 5.7 il valore del ritardo varia sinusoidalmentetra 0 e 221 campioni che corrispondono a 10 millisecondi.

Viene maggiormente apprezzato se applicato a segnali musicali piuttostoche a segnali vocali.

Page 54: Tesi Effetti Audio

40 Modulazione della linea temporale

Figura 5.6: Filtro in frequenza, Flanger

Figura 5.7: Coefficiente, Flanger

Page 55: Tesi Effetti Audio

5.2 Flanger 41

5.2.1 Parametri

Per l’effetto flanger i parametri che l’utente puo definire sono:

Ritardo nominale e la profondita media del ritardo applicato, in questoprogetto, e stata fissata a meta del ritardo massimo;

Ritardo massimo e la profondita massimo del ritardo applicato;

Frequenza della sinusoide che modula la variazione temporale e il co-efficiente fissato attorno a qualche frazione di Hz, variazioni troppo rapideproducono infatti modificazioni della frequenza del segnale originale, inquesto progetto si e deciso di imporla pari a 0,5 Hz;

Page 56: Tesi Effetti Audio

42 Modulazione della linea temporale

2 Effetto Flanger

4 function out=flanger(in)Fs=22050; %definisce la frequenza di campionamento

6 Ts=1/Fs;Fd=0.5; %frequenza che modula la variazione di ritardo

8 rit fla ms=20; %definisce il ritardo dell’eco in msrit fla max=round(rit fla ms∗Fs/1000); %ritardo massimo in campioni

10 temp=zeros(rit fla max, 1); %genera un vettore per estendere il segnaleingresso=vertcat(in, temp); %estende il segnale

12 lung=length(ingresso);n=0:1:lung;

14 s=round((rit fla max/2)∗(1−cos(2∗pi∗Ts∗Fd∗n)));out=zeros(lung,1);

16 for i=1:lunga=i−s(i);

18 if (a<=0);a=1;

20 end;out(i)=0.5∗ingresso(i)+0.5∗ingresso(a);

22 endfigure(1) %stampa a video i segnali

24 subplot(2,1,1), plot(ingresso);title(’segnale ingresso’);

26 subplot(2,1,2), plot(out);title(’segnale uscita’);

28 figure(2) %stampa a video i coefficientiplot(s);

30 title(’coefficiente di ritardo’);soundsc (out,Fs);

32 end

Page 57: Tesi Effetti Audio

5.3 Vibrato 43

5.3 Vibrato

Il vibrato si pone come obbiettivo quello di simulare quel particolare effettoche genera un chitarrista quando muove la ’whammy bar’ oppure un violin-ista quando muove ciclicamente la mano sinistra sulle corde. Fisicamente euna modificazione ciclica e ripetitiva della frequenza del segnale attorno al-la frequenza originale. Il segnale avra quindi un susseguirsi di suoni la cuifrequenza si incrementa e decrementa. Ipotizziamo per semplicita di voler sot-toporre all’elaboratore una nota di violino, come sappiamo ogni nota ha la suadeterminata frequenza che la rende distinguibile dalle altre, l’uscita sara unsuono variabile con continuita e sonorita che diventano piu acute e piu gravinell’intorno della nota originale.

La struttura implementativa ricalca a grandi linee quella degli altri effettiche fanno parte della famiglia della modulazione del ritardo. Infatti come sipuo vedere in Figura 5.8 e presente un filtro che introduce un ritardo variabile,modulato da una sinusoide. A differenza pero delle altre strutture questa nonprevede la sovrapposizione di due segnali, il segnale originale viene cancellatoe riprodotto solamente quello elaborato.

Questi concetti vengono espressi matematicamente dalle seguenti relazioni.

y(n) = x(n − D(n)) (5.3.1)

con

D(n) =(Ritardo − massimo

2

)(1 + sin(2πnTsFd)) (5.3.2)

Figura 5.8: Implementazione, Vibrato

Nell’esempio proposto in questa tesi si e fissato il ritardo massimo a 3millisecondi ed una frequenza Fd di 10 Hz, come si vede in Figura 5.9 .

Page 58: Tesi Effetti Audio

44 Modulazione della linea temporale

Aumentando il valore di ritardo massimo viene aumentato il range di frequenzeesplorato dal segnale attorno alla frequenza portante della nota in ingressomentre modificando la frequenza Fd varia il numero di ripetizioni cicliche chesi creano.

Figura 5.9: Coefficiente, Vibrato

5.3.1 Parametri

Per l’effetto vibrato i parametri che l’utente puo definire sono:

Profondita del ritardo ovvero la variazione di frequenze attorno alla fre-quenza di ingresso;

Frequenza di ripetizione rappresenta il numero di cicli da effettuarsi in unsecondo;

Page 59: Tesi Effetti Audio

5.3 Vibrato 45

2 Effetto Vibrato

4 function out=vibrato(in)Fs=22050; %definisce la frequenza di campionamento

6 Ts=1/Fs;Fd=10; %frequenza che modula la variazione di ritardo

8 rit vib ms=3; %definisce il ritardo dell’eco in msrit vib max=round(rit vib ms∗Fs/1000); %ritardo massimo in campioni

10 temp=zeros(rit vib max, 1); %genera un vettore per estendere il segnaleingresso=vertcat(in, temp); %estende il segnale

12 lung=length(ingresso);n=0:1:lung;

14 s=round((rit vib max/2)∗(1+sin(2∗pi∗Ts∗Fd∗n)));out=zeros(lung,1);

16 for i=1:lung %effettua il filtraggioa=i−s(i);

18 if (a<=0);a=1;

20 end;out(i)=ingresso(a);

22 end;figure(1) %stampa a video i segnali

24 subplot(2,1,1), plot(ingresso);title(’segnale ingresso’);

26 subplot(2,1,2), plot(out);title(’segnale uscita’);

28 figure(2) %stampa a video il coefficienteplot(s);

30 title(’coefficiente di ritardo’);axis([0 22050 0 80])

32 soundsc (out,Fs); %riproduce il segnale d’uscitaend

Page 60: Tesi Effetti Audio

46 Modulazione della linea temporale

5.4 Pitch Shifter

Il pitch shifter e uno dei piu interessanti ed utilizzati effetti per la modificazionedel timbro della sorgente. Viene realizzato in due diversi modi, utilizzando lastruttura implementativa del chorus, se si vuole ottenere un segnale in usci-ta che e una sovrapposizione del segnale originale e quello alterato, oppurela struttura del vibrato, che quindi riproduce in uscita solamente il segnalemodificato. La differenza rispetto a queste due strutture e il modulante delritardo, per chorus e vibrato era infatti un segnale sinusoidale, per generarequesto particolare effetto viene usata un rampa o meglio un segnale e dente disega. Viene applicato cioe un ritardo che varia linearmente fino ad un massimoper poi ripartire da zero come si vede in Figura 5.11. Modificare il timbro dellasorgente restituisce, applicato alla voce, un flusso audio nel quale e possibile didistinguere chiaramente il contenuto ma la voce risulta irriconoscibile. Vienecomunemente applicato nelle interviste televisive in cui l’interlocutore vuolerestare anonimo.

Questi concetti possono essere espressi matematicamente:

y(n) = x(D(n)) (5.4.1)

dove D(n) e come mostra Figura 5.11 un segnale a dente di sega.

Figura 5.10: Implementazione, Pitch Shifter

Come si puo vedere in Figura 5.10 il segnale modulato con il ritardo vari-abile viene, prima di essere portato in uscita, filtrato da un filtro passa basso.Questa operazione risulta necessaria per ottenere un segnale dal contenutodistinguibile e per attenuare le alte frequenze che vengono a crearsi in seguitoalla modulazione del ritardo. Il filtro che si e deciso di usare e mostrato inFigura 5.12 ed ha una frequenza della banda passante di 3000Hz e quella dellabanda attenuata di 3500Hz. Tale filtro viene creato con le funzioni Matlabellipord ed ellip che restituiscono i coefficienti del filtro ellittico. L’uscita vienepoi generata dalla funzione Matlab filter.

Page 61: Tesi Effetti Audio

5.4 Pitch Shifter 47

Figura 5.11: Coefficiente, Pitch Shifter

Figura 5.12: Filtro Passa-basso, Pitch Shifter

Page 62: Tesi Effetti Audio

48 Modulazione della linea temporale

5.4.1 Parametri

Per l’effetto Pitch Shifter i parametri che l’utente puo definire sono:

Profondita del ritardo ovvero la variazione di frequenze attorno alla fre-quenza di ingresso;

Pendenza della rampa imposta la velocita con cui avviene la variazione difrequenza, definendo un valore troppo alto il segnale elaborato presentafrequenze troppo elevate ed il contenuto diventa indistiguibile, sperimen-talmente e stato fissato il valore di 2.5 che comporta un buon compro-messo tra irriconoscibilita della voce e distinguibilita del contenuto;

Page 63: Tesi Effetti Audio

5.4 Pitch Shifter 49

2 Effetto Pitch shifter

4 function out=pitch shifter(in)Fs=22050; %definisce la frequenza di campionamento

6 indice=1;rit pit ms=4; %definisce il ritardo in ms

8 rit pit max=round(rit pit ms∗Fs/1000); %ritardo massimo in campionitemp=zeros(rit pit max, 1); %genera un vettore per estendere il segnale

10 ingresso=vertcat(in, temp); %estende il segnalelung=length(ingresso);

12 out temp=zeros(lung,1);saw=zeros(lung,1);

14 for i=1:lung %effettua il filtraggiowhile (indice>=rit pit max);

16 indice=indice−rit pit max; %genero il segnale a dente di segaend; %utilizzando l’asse dei tempi

18 saw(i)=round(2.5∗indice); %come base e la variabile indicea=(i−saw(i)); %tiene conto dell’azzeramento ogni

20 if (a<=0); %volta che si raggiunge il valore massimoa=1;

22 end;out temp(i)=ingresso(a);

24 indice=i;end;

26 Rp=−20∗log10(0.95);Rs=−20∗log10(0.05);

28 Wp=3000/Fs∗2;Ws=3500/Fs∗2;

30 [N, Wn] = ellipord(Wp, Ws, Rp, Rs);[b, a]=ellip (N,Rp,Rs,Wn);

32 [H, f]=freqz(b,a,220500,Fs);out=filter(b,a,out temp);

34 figure(1) %stampa a video i segnalisubplot(2,1,1), plot(ingresso);

36 axis([0 lung −1.1 1.1])title(’Segnale in ingresso’);

38 subplot(2,1,2), plot(out);axis([0 lung −1.1 1.1])

40 title(’Segnale in uscita’);figure(2) %stampa a video i coefficienti

42 plot(saw);title(’Coefficiente di ritardo’);

44 axis([0 350 0 250])figure(3) %stampa a video i coefficienti

46 plot(f, abs(H));title(’Filtro passa basso’);

48 soundsc (out,Fs); %riproduce il segnale d’uscita

50 end

Page 64: Tesi Effetti Audio

50 Modulazione della linea temporale

Page 65: Tesi Effetti Audio

Capitolo 6

Riverbero digitale

E’ chiamato riverbero l’effetto sonoro che si produce in un grande ambiente. E’quasi certamente una delle elaborazioni piu complesse da realizzare in quantoper ottenere un effetto realistico sono necessarie diverse manipolazioni suc-cessive del segnale. M.A Schroeder e James A. Moorer svilupparono un al-goritmo che permetteva di ottenere una simulazione sufficientemente realisti-ca, l’algoritmo da loro proposto sara quello che verra utilizzato e studiato inquesta tesi. Analizziamo ora in dettaglio quali fisicamente siano i fattori cheproducono l’effetto riverbero. Il flusso audio ricevuto dall’ascoltatore e unacombinazione lineare di principalmente tre contributi: il primo dovuto allaricezione diretta (direct sound), il secondo dalla formato dalle riflessioni sin-gole (early reflections) mentre il terzo composto dalle riflessioni multiple (latereflections).

Figura 6.1: Risposta Impulsiva, Riverbero

Le riflessioni singole rappresentano fisicamente le onde che, rimbalzandocontro le pareti della grande sala, raggiungono l’ascoltatore entro un ritardomassimo di 100 millisecondi, dopo tale ritardo vengono definite late reflections.

51

Page 66: Tesi Effetti Audio

52 Riverbero digitale

Possiamo definire le late reflections anche come riflessioni multiple in quantoavendo un ritardo superiore a 100 millisecondi, significa che hanno subito di-verse riflessioni su pareti diverse prima di giungere all’ascoltatore. In Figura 6.1possiamo vedere la risposta impulsiva generata da un grande auditorium e no-tare quindi la composizione del segnale ricevuto. Moorer in [2] proseguı glistudi e propose un nuovo algoritmo che imposta il problema come una com-binazione lineare di tre contributi. Il segnale in uscita e composto infatti dalsegnale originale, dall’uscita di un filtro FIR che genera 18 ritardi diversi e dauna componente che deriva da un banco di sei filtri a pettine passa-basso chegenerano le riflessioni multiple.

Lo schema implementativo risulta quindi quello di Figura 6.2.

Figura 6.2: Implementazione, Riverbero

Filtro FIR: Il filtro FIR genera una serie di delay molto ravvicinati; ilpiu ritardato infatti e definito solamente ad 80 millisecondi circa. Dagli studisvolti da Moorer e emerso che per ottenere un suono realistico e sufficienteriprodurre 18 delay con ampiezze e ritardi che soddisfano i valori mostrati inFigura 6.3 ed elencati nella Tabella 6.1.

Page 67: Tesi Effetti Audio

53

Figura 6.3: Filtro FIR, Riverbero

Ritardo in ms Ritardo in campioni Ampiezza43 95 .841215 475 .504225 497 .490268 592 .379270 596 .380298 658 .346459 1011 .289485 1070 .272572 1262 .192587 1295 .193595 1313 .217612 1350 .181707 1560 .180708 1562 .181726 1601 .176741 1634 .142753 1661 .167797 1758 .134

Tabella 6.1: Coefficienti del filtro FIR, Riverbero

Page 68: Tesi Effetti Audio

54 Riverbero digitale

Filtri a Pettine Passa-Basso: il banco di sei filtri a pettine passa-bassoe stato inserito in cascata al filtro FIR per generare infinite ripetizioni attenu-ate che generano quindi le late reflections. Moorer ha dimostrato che l’utilizzodi sei filtri IIR ottimizza il rapporto tra la qualita del risultato ed il costocomputazionale, si e dimostrato infatti che l’utilizzo di ulteriori stadi apportamigliorie trascurabili. I filtri IIR implementati sono inoltre dei passa basso,questa particolarita e stata ricercata da Moorer in quanto studiando fisica-mente le onde sonore ha dimostrato che le alte frequenze vengono attenuatedal mezzo trasmissivo e dalle pareti riflettenti molto di piu rispetto alle bassefrequenze, segnali a 4 kHz subiscono infatti una attenuazione di oltre 60 dBrispetto ad altri attorno ad 1 kHz. Moorer poi nel suo trattato sull’argomentoha sviluppato una struttura per la cella che contiene all’interno del loop il filtropassa basso; struttura rappresentata in Figura 6.4

Figura 6.4: Cella IIR, Riverbero

Matematicamente possiamo esprimere la cella come segue

y(n) = x(n − m) + g2y(n − m) + g1g2y(n − m − 1); (6.0.1)

Page 69: Tesi Effetti Audio

6.1 Parametri 55

Ritardo in ms Ritardo in campioni g1 g2

50 1103 .24 .6356 1235 .26 .6161 1345 .28 .6068 1500 .29 .5972 1588 .30 .5878 1720 .32 .56

Tabella 6.2: Coefficienti dei filtri IIR, Riverbero

I coefficienti dei sei filtri sono stati impostati seguendo le direttive suggeritedagli studi di Moorer e riportati in Tabella 6.2

I coefficienti g1 sono dei coefficienti consigliati da Moorer mentre pertrovare i coefficienti g2 e necessario prima imporre il tempo di riverbero, adesempio, 2 secondi. Dalla formula 6.0.2 ricaviamo il termine g ed ora pertrovare il coefficiente g2 cercato bastera risolvere la formula 6.0.3.

g = 1 − (0.366/T ); (6.0.2)

g2 = g(1 − g1); (6.0.3)

6.1 Parametri

Per l’effetto riverbero i parametri di progetto sono quasi tutti ottimizzati daglistudi di Moorer quindi e consigliabile non modificare i vari ritardi dei filtri ei coefficienti g1. L’unica variabile che risulta modificabile dall’utente risultaessere:

Variabile temporale T e il tempo di riverbero. In questo progetto si e decisodi imporlo pari a due secondi. Ricordiamo che in caso di modifiche sutale parametro e necessario in seguito ricalcolare la variabile g ed i seicoefficienti g2 del filtro IIR.

Page 70: Tesi Effetti Audio

56 Riverbero digitale

2 Effetto Riverbero Digitale

4 function out=riverbero(in)lunghezza=length(in);

6 Fs=22050;q=zeros(lunghezza+15000,1);

8 y=zeros(lunghezza+15000,1);y1=zeros(lunghezza+15000,1);

10 y2=zeros(lunghezza+15000,1);y3=zeros(lunghezza+15000,1);

12 y4=zeros(lunghezza+15000,1);y5=zeros(lunghezza+15000,1);

14 y6=zeros(lunghezza+15000,1);u=zeros(lunghezza+15000,1);

16 m=zeros(15000,1);out=zeros(lunghezza+15000,1);

18 k=vertcat(in,m);ampli=[.841,.504,.490,.379,.380,.346,.289,.272,

20 .192,.193,.217,.181,.180,.181,.176,.142,.167,.134];ritar=[95,475,497,592,596,658,1011,1070,1262,

22 1295,1313,1350,1560,1562,1601,1634,1661,1758];g1=[.24,.26,.28,.29,.30,.32];

24 g2=[.63,.61,.60,.59,.58,.56];ritar1=[1103,1235,1345,1500,1588,1720];

26 a1=1;a2=0.25;

28 a3=0.075;alfa=0.7;

30

%−−−−−−−−EARLY REFLECTIONS−−−−−−−−−−−32

for i=1:(lunghezza+15000);34 for j=1:18;

a=(i−ritar(j));36 if (a<=0); a=1;

end;38 q(i)=q(i)+ampli(j)∗k(a);

end;40 end;

Page 71: Tesi Effetti Audio

6.1 Parametri 57

2 %−−−−−−−−−LATE REFLECTIONS−−−−−−−−−−−

4

for p=1:(lunghezza+15000);6 l=1;

r=p−ritar1(l);8 if (r<=0);r=lunghezza+15000;

end;10 s=r−1;

if (s<=0); s=lunghezza+15000;12 end;

y1(p)=q(r)+g2(l)∗y1(r)+g1(l)∗g2(l)∗y1(s);14 end;

16 for p=1:(lunghezza+15000);l=2;

18 r=p−ritar1(l);if (r<=0);r=lunghezza+15000;

20 end;s=r−1;

22 if (s<=0); s=lunghezza+15000;end;

24 y2(p)=q(r)+g2(l)∗y2(r)+g1(l)∗g2(l)∗y2(s);end;

26 for p=1:(lunghezza+15000);l=3;

28 r=p−ritar1(l);if (r<=0);r=lunghezza+15000;

30 end;s=r−1;

32 if (s<=0); s=lunghezza+15000;end;

34 y3(p)=q(r)+g2(l)∗y3(r)+g1(l)∗g2(l)∗y3(s);end;

36 for p=1:(lunghezza+15000);l=4;

38 r=p−ritar1(l);if (r<=0);r=lunghezza+15000;

40 end;s=r−1;

42 if (s<=0); s=lunghezza+15000;end;

44 y4(p)=q(r)+g2(l)∗y4(r)+g1(l)∗g2(l)∗y4(s);end;

Page 72: Tesi Effetti Audio

58 Riverbero digitale

2 for p=1:(lunghezza+15000);l=5;

4 r=p−ritar1(l);if (r<=0);r=lunghezza+15000;

6 end;s=r−1;

8 if (s<=0); s=lunghezza+15000;end;

10 y5(p)=q(r)+g2(l)∗y5(r)+g1(l)∗g2(l)∗y5(s);end;

12 for p=1:(lunghezza+15000);l=6;

14 r=p−ritar1(l);if (r<=0);r=lunghezza+15000;

16 end;s=r−1;

18 if (s<=0); s=lunghezza+15000;end;

20 y6(p)=q(r)+g2(l)∗y6(r)+g1(l)∗g2(l)∗y6(s);end;

22

y=(y1+y2+y3+y4+y5+y6);24

for t=1:lunghezza+15000;26 w=(t−130); %circa 6 millisecondi

if w<=0; w=1;28 end;

u(t)=−alfa∗y(t)+alfa∗u(w)+y(w);30 end;

32

for s=1:lunghezza+15000;34 out(s)=a1∗k(s)+a2∗q(s)+a3∗u(s);

end;36 soundsc(out,Fs);

end

Page 73: Tesi Effetti Audio

Capitolo 7

Variazione di Ampiezza

7.1 Distorsione

La distorsione e un semplice effetto utilizzato per dare incisivita al suono distrumenti musicali quali, ad esempio, le chitarre. L’effetto consiste nel creareun segnale di uscita che non ha una corrispondenza lineare con quello in in-gresso. Per ottenere questo risultato si possono adottare due metodologiedifferenti: amplificare il segnale al tal punto da portare i picchi piu alti oltrela soglia di fondo scala oppure troncare le componenti con valore di ampiezzasuperiore ad un soglia fissata. L’effetto che si ottiene e lo stesso perche, ri-cordiamo che, sia nei sistemi digitali che in quelli analogici, la componente diampiezza risulta sempre limitata entro un certo intervallo dato dalla tensionemassima di uscita negli amplificatori analogici e dalla dimensione finita dellevariabili nei sistemi digitali. In questo progetto si e deciso di sviluppare lametodologia del troncamento dell’ampiezza; l’altra via avrebbe, infatti, com-portato un costo computazionale superiore in quanto il segnale avrebbe dovutoessere prima amplificato portando i picchi piu alti fuori scala e poi attenuatoper riportare l’ampiezza del segnale al valore originale per non modificare ilvolume del flusso audio.

Figura 7.1: Implementazione, Distorsione

59

Page 74: Tesi Effetti Audio

60 Variazione di Ampiezza

La struttura implementativa risulta percio quella mostrata in Figura 7.1dove si sono disegnate due bande orizzontali che definiscono il valore di soglia.I due picchi negativi che si notano in Figura 7.1 saranno quindi troncati dalprocesso.

Matematicamente si puo esprimere questo concetto come segue:

y(n) = x(n) se |x(n)| < soglia (7.1.1)

mentre

|y(n)| = soglia se |x(n)| ≥ soglia (7.1.2)

Risulta molto utile per capire il concetto espresso osservare la Figura 7.2dove viene mostrato il flusso audio originale nel tempo e quello elaborato dalDSP. In questo esempio si e fissata una soglia pari al 10 % del segnale originale.Si puo vedere infatti come, essendo il segnale di ingresso normalizzato ad 1,il segnale di uscita non presenti valori di ampiezza superiori a 0,1; quelli chesuperavano la soglia sono stati infatti troncati a tale valore.

Figura 7.2: Segnali nel tempo, Distorsione

Page 75: Tesi Effetti Audio

7.1 Distorsione 61

2 Effetto Distorsione

4 function out=distorsione(in)Fs=22050;

6 soglia percentuale=25; %definisce il valore della sogliamassimo=max(in);

8 soglia=(soglia percentuale/100)∗massimo;lung=length(in);

10 out=zeros(lung,1);for i=1:lung %applica l’algoritmo dell’effetto

12 if in(i)>soglia;out(i)=soglia;

14 elseif in(i)<−soglia;out(i)=−soglia;

16 else out(i)=in(i);end;

18 endfigure(1); %stampa i risultati

20 subplot(2,1,1), plot(in);title(’Segnale originale’);

22 axis([0 lung −1.15 1.15])subplot(2,1,2), plot(out);

24 title(’Segnale elaborato’);axis([0 lung −.2 .2])

26 soundsc (out,Fs);end

7.1.1 Parametri

Per l’effetto distorsione l’utente puo configurare un solo parametro:

Soglia e il valore che definisce lo sbarramento in ampiezza del segnale inuscita. Viene espresso in termini percentuali relativi al valore massimoche il segnale in ingresso puo assumere. In questo progetto si e deciso diimpostare un valore pari al 25%. In questo progetto si e invece decisodi fissare la soglia in valori percentuali relativi al valore massimo che ilsegnale assume; cio e possibile in quanto per le simulazioni Matlab si edeciso di lavorare offline; il programma per il DSP rispetta le condizionidi lavoro in tempo reale e per questo motivo la soglia e appunto fissataad un valore riferito al fondoscala massimo.

Page 76: Tesi Effetti Audio

62 Variazione di Ampiezza

7.2 Tremolo

L’effetto tremolo, come gli altri effetti di questa famiglia, consiste nel modu-lare l’ampiezza del segnale; la forma d’onda modulante e una sinusoide a bassafrequenza. Viene spesso erroneamente confuso con l’effetto vibrato. Con-cettualmente pero si tratta di due tipologie completamente diverse; il vibratoinfatti modifica la frequenza del segnale, variandola con un segnale sinusoidale,e non la sua ampiezza.

L’implementazione dell’effetto tremolo e quindi semplicemente quella mostratain Figura 7.3.

Figura 7.3: Implementazione, Tremolo

Matematicamente si puo esprimere come:

y(n) = x(n)[1 + αsin(2πnTsFd)] (7.2.1)

Nell’equazione precedente con α si intende il termine Amp rappresental’ampiezza della variazione mentre Fd definisce la frequenza del segnale mod-ulante.

Page 77: Tesi Effetti Audio

7.2 Tremolo 63

7.2.1 Parametri

Per l’effetto tremolo l’utente puo definire:

Amp e il valore, compreso tra 0 ed 1, che rappresenta la variazione d’ampiez-za del segnale in uscita. Se a = 0 il flusso audio di uscita e esattamentequello in ingresso; se a = 1, che rappresenta la massima variazione pos-sibile, il segnale presentera degli istanti in cui il valore di ampiezza siannulla ed altri in cui il valore e pari al doppio di quello in ingresso. Inquesto progetto si e fissato a pari all’80% del segnale.

Fd rappresenta la frequenza di oscillazione della sinusoide modulante. Ricor-diamo che questa deve essere un segnale lentamente variabile. Per questomotivo si e deciso di utilizzare un valore pari a 3Hz.

La Figura 7.4 mostra evolve il segnale Amp avendo definito i parametriAmp pari all’80% e Fd pari a 3 Hz.

Figura 7.4: Coefficiente, Tremolo

Page 78: Tesi Effetti Audio

64 Variazione di Ampiezza

2 Effetto Distorsione

4 function out=tremolo(in)Fs=22050;

6 Fd=3;Amp percentuale=80; %definisce il parametro Amp

8 Amp=Amp percentuale/100;lung=length(in);

10 out=zeros(lung,1);ampli=zeros(lung,1);

12 for i=1:(lung)ampli(i)=1+Amp∗sin(2∗pi∗Fd∗i/Fs); %genera la modulante

14 out(i)=in(i)∗ampli(i); %applica la modulazioneend;

16 figure(1); %stampa i risultatisubplot(2,1,1), plot(in);

18 axis([0 lung −1.25 1.25])subplot(2,1,2), plot(out);

20 axis([0 lung −1.25 1.25])figure(2)

22 plot(ampli);title(’Coefficiente di Ampiezza’);

24 axis([0 14000 0 2])soundsc (out,Fs);

26 end

Page 79: Tesi Effetti Audio

Capitolo 8

Processi sulla dinamica

8.1 Compressione

La compressione e una elaborazione che ha effetti sulla dinamica del segnale;quest’ultima la possiamo definire come la distanza in termini di ampiezza traparti dello stesso flusso audio. Il compressore puo quindi essere definito comeun amplificatore con guadagno variabile. In accordo con questa definizionepossiamo quindi classificarli come: compressori verso il basso (downward com-pressors) o compressori verso l’alto (upward compressors). I primi hanno lacaratteristica di mantenere unitario il guadagno per segnali bassi mentre im-pongono un’attenuazione per quelli piu alti; mentre i secondi applicano unaamplificazione dei segnali piu deboli mantenendo un guadagno unitario perquelli piu forti. Viene molto utilizzato nei sistemi di riproduzione portatili osistemi home theater perche permette di correggere in parte le problematichedovute ai rumori ambientali che, se intensi, coprirebbero le parti piu deboli delsegnale; la soluzione che prevede di amplificare con lo stesso guadagno l’interosegnale, per permettere di percepire i suoni piu deboli, viene scartata in quantoprodurrebbe dei picchi fastidiosi durante le parti in cui il segnale originale e piuforte; l’uso quindi di amplificatori variabili e l’ideale per affrontare e risolverequeste problematiche.

65

Page 80: Tesi Effetti Audio

66 Processi sulla dinamica

La struttura che implementa il compressore e mostrata in Figura 8.1

Figura 8.1: Implementazione, Compressore

Matematicamente la realizzazione di questo effetto si puo esprimere come:

y(n) = x(n) se |x(n)| < soglia (8.1.1)

mentre

|y(n)| = soglia +1

ratio∗ (x(n) − soglia) se |x(n)| ≥ soglia (8.1.2)

In Figura 8.2 si possono notare i diversi comportamenti delle due tipologiedi compressore: compressione verso l’alto e compressione verso il basso. Irisultati dell’utilizzo delle due tipologie sono molto simili; hanno entrambil’obbiettivo di amplificare i suoni piu deboli ed attenuare quelli piu forti.

Page 81: Tesi Effetti Audio

8.1 Compressione 67

Figura 8.2: Comportamento, Compressore

In Figura 8.3 si puo vedere il risultato dell’applicazione dei compressorimostrati in Figura 8.2 ad una sinusoide di ampiezza 100. Nel grafico di si-nistra risulta immediato verificare come la dinamica venga ridotta, i picchipiu alti vengono infatti attenuati; nella figura di destra puo risultare menoevidente questo risultato ma si nota come i valori piu deboli del segnale venganoamplificati maggiormente rispetto al resto della sinusoide, infatti la pendenzadei settori di segnale che hanno valori attorno allo zero e superiore.

Page 82: Tesi Effetti Audio

68 Processi sulla dinamica

Figura 8.3: Segnale di Uscita, Compressore

In Figura 8.3 la linea rossa rappresenta il segnale sinusoidale originale diingresso mentre quella blu rappresenta l’uscita elaborata dal DSP.

Page 83: Tesi Effetti Audio

8.1 Compressione 69

8.1.1 Parametri

Come mostra la Figura 8.1 i parametri che l’utente puo definire sono:

Soglia e il valore che definisce la soglia oltre la quale cambia il valore delguadagno.

Ratio definisce il rapporto tra l’ampiezza del segnale in ingresso e quella inuscita in zona di compressione, per i compressori verso il basso, mentreper la zona che comprende i piccoli valori di ampiezza, al di sotto dellasoglia, per i compressori verso l’alto.

Tempo di Attacco questo parametro corrisponde al ritardo temporale dopoil quale la compressione si attiva. I compressori piu raffinati prevedono lapossibilita di non attenuare immediatamente tutti i valori che superanola soglia ma attivano l’attenuazione solamente se l’ampiezza del segnalesupera la soglia per un tempo superiore al tempo di attacco.

Tempo di Rilascio e un parametro che, come il tempo di attacco, gestisce ilrilascio dell’attenuazione. E’ infatti preferibile che il guadagno dell’am-plificatore non ritorni istantaneamente ad un valore unitario nel momen-to in cui il segnale scende al di sotto della soglia, ma lo faccia con undeterminato ritardo dato appunto dal tempo di rilascio.

In questo progetto, per rendere l’algoritmo piu semplice, si e deciso ditrascurare i parametri tempo di attacco e tempo di rilascio.

L’inverso di un compressore viene definito espansore e applica l’algoritmoinverso; attenua infatti le componenti piu deboli del segnale e amplifica quellepiu forti. Applicando quindi in cascata un compressore ed un espansore siottiene il segnale di ingresso originale. Per questo progetto si e deciso dievitare l’implementazione di questo effetto data la sua semplicita; basta infattiinvertire le zone di applicazione del guadagno ratio.

Page 84: Tesi Effetti Audio

70 Processi sulla dinamica

2 Effetto Compressione

4 function out=compressione(in)Fs=22050;

6 lung=length(in);ratio=2; %definisco il valore del ratio

8 soglia percentuale=50; %definisco il valore della sogliaout=zeros(lung,1);

10 massimo=max(in);soglia=(soglia percentuale/100)∗massimo;

12 for i=1:lung %applico l’algoritmoif in(i)<0

14 if in(i)<−soglia;ampli=1/ratio;

16 out(i)=−soglia+ampli∗(in(i)+soglia);else

18 out(i)=ampli∗in(i);out(i)=in(i);

20 end;

22 endif in(i)>0

24 if in(i)<soglia;ampli=1;

26 out(i)=ampli∗in(i);else

28 ampli=1/ratio;out(i)=soglia+ampli∗(in(i)−soglia);

30 end;end

32 endfigure(1); %stampa i risultati

34 title(’Compressione’);subplot(2,1,1), plot(in);

36 title(’Segnale in Ingresso’)axis([0 lung −1 1]);

38 subplot(2,1,2), plot(out);title(’Segnale in Uscita’)

40 axis([0 lung −1 1]);soundsc (out,Fs);

42 end

Page 85: Tesi Effetti Audio

8.2 Soppressore di rumore 71

8.2 Soppressore di rumore

Il soppressore di rumore e un semplice algoritmo che si applica ad un segnaleper eliminare il rumore di fondo sempre presente in esso. Supponendo infattiche i disturbi abbiano una ampiezza molto inferiore rispetto al segnale deside-rato, per eliminarli, e sufficiente azzerare tutti i campioni che presentano unaampiezza inferiore ad una determinata soglia. Questo pero comporta una cer-ta distorsione in quanto a venire azzerati saranno anche i campioni di segnaledesiderato con ampiezza inferiore alla soglia; e questa pero una distorsionetrascurabile. Questo algoritmo trova la sua applicazione soprattutto in flus-si audio che contengono sezioni in cui il segnale dovrebbe essere nullo. Unesempio di tale applicazione e quello dei segnali audio che esprimono traccevocali; ci saranno alcuni istanti in cui l’oratore non parlera ed e proprio inquesti periodi che il soppressore di rumore agisce in maniera piu significativaeliminando ronzii oppure rumori di sottofondo.

La struttura che implementa il soppressore di rumore e mostrata in Figura 8.4

Figura 8.4: Implementazione, Soppressore

Matematicamente si puo esprimere come:

y(n) = 0 se |x(n)| < soglia (8.2.1)

mentre|y(n)| = x(n) se |x(n)| ≥ soglia (8.2.2)

Il comportamento del soppressore di rumore e mostrato in Figura 8.5 dove,a titolo di esempio, si e fissata una soglia pari a 10; come si vede quindicampioni con valore di ampiezza inferiore a 10 verranno azzerati.

In Figura 8.6 e mostrato un secondo esempio dove si vede come i campionicon ampiezza inferiore alla soglia vengono azzerati in uscita.

Page 86: Tesi Effetti Audio

72 Processi sulla dinamica

Figura 8.5: Comportamento, Soppressore

Figura 8.6: Segnale nel tempo, Soppressore

Page 87: Tesi Effetti Audio

8.2 Soppressore di rumore 73

8.2.1 Parametri

L’unico parametro definibile dall’utente e:

Soglia e il valore che definisce la soglia al di sotto della quale l’ampiezza vieneannullata.

Page 88: Tesi Effetti Audio

74 Processi sulla dinamica

2 Effetto soppressione

4 function out=soppressione(in)Fs=22050;

6 lung=length(in);soglia percentuale=1; %definisco il valore della soglia

8 out=zeros(lung,1);massimo=max(in);

10 soglia=(soglia percentuale/100)∗massimo;for i=1:lung %applico l’algoritmo

12 if in(i)<0if in(i)<−soglia;

14 out(i)=in(i);else

16 out(i)=0;end;

18 endif in(i)>0

20 if in(i)<soglia;out(i)=0;

22 elseout(i)=in(i);

24 end;

26 endend

28 figure(1); %stampa i risultatititle(’Soppressione’);

30 subplot(2,1,1), plot(in);title(’Segnale in Ingresso’)

32 axis([0 lung −1 1]);subplot(2,1,2), plot(out);

34 title(’Segnale in Uscita’)axis([0 lung −1 1]);

36 soundsc (out,Fs);end

Page 89: Tesi Effetti Audio

Conclusioni

L’obiettivo di questo progetto non e certo la creazione di un dispositivo peruso professionale quanto la realizzazione di un apparecchio in grado di imple-mentare alcuni dei piu conosciuti effetti audio digitali.Le potenzialita della scheda sono molto alte, la velocita di calcolo e la qualitadei convertitori analogico-digitali ne permetterebbero l’uso per utilizzi in set-tori di fascia medio-alta; cio che forse e mancato per raggiungere questa qualitasuperiore e stata la carenza di memoria RAM sul dispositivo che non ha per-messo l’uso di buffer di grandi dimensioni. La quantita di memoria ridottaha infatti costretto la scelta di una frequenza di campionamento inferiore alleeffettive potenzialita offerte dalla scheda.Si puo affermare quindi che i prossimi sviluppi e migliorie che si potranno ap-portare a questo progetto dovranno avere come base l’incremento di memoriaa disposizione delle variabili del software.

Questo studio non ha la pretesa di essere considerato una guida tecni-ca specializzata quanto invece puo essere inteso come un primo approccio,dal carattere prettamente didattico, al vasto campo degli effetti audio digitaliimplementati su DSP.

75

Page 90: Tesi Effetti Audio

76 Conclusioni

Page 91: Tesi Effetti Audio

Appendice A

Codice C per laprogrammazione del DSP

Il codice che viene riportato in seguito rappresenta il programma principale inlinguaggio C usato per programmare il DSP.Il programma e strutturato di modo che l’utente possa selezionare piu effet-ti contemporaneamente, uno per famiglia; sara quindi possibile, ad esempio,applicare al flusso audio in ingresso un effetto delay che si sovrappone adun tremolo seguito da una distorsione. E’ anche possibile selezionare sola-mente uno di questi oppure non selezionarne alcuno cosı che l’uscita risultiesattamente uguale all’ingresso. La struttura risulta quindi essere quella diFigura A.1:

Figura A.1: Struttura del Programma

Si e deciso di omettere in questo testo le altre parti necessarie al fun-zionamento della scheda, quali ad esempio: l’organizzazione della memoria, ladefinizione delle costanti globali o l’inizializzazione dei registri.

77

Page 92: Tesi Effetti Audio

78 Codice C per la programmazione del DSP

2 #include ”FlashingLeds−Settings.h”#include ”PeripheralHeaderIncludes.h”

4 #include ”DSP280x EPWM defines.h” //OK to use 280x file#include ”float.h”

6 #include ”math.h”#include ”stdlib.h”

8

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10 // FUNCTION PROTOTYPES

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%12

// −−−−−−−−−−−−−−−− FRAMEWORK −−−−−−−−−−−−−−−−−−−14 void DeviceInit(void);

void SCIA Init();16 void SerialHostComms();

void InitFlash();18

20 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%// VARIABLE DECLARATIONS − GENERAL

22 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

24 // −−−−−−−−−−−−−−−− FRAMEWORK −−−−−−−−−−−−−−−−−−−

26 int16 VTimer0[4]; // Virtual Timers slaved off CPU Timer 0int16 VTimer1[4]; // Virtual Timers slaved off CPU Timer 1

28 int16 VTimer2[4]; // Virtual Timers slaved off CPU Timer 2int16 SerialCommsTimer;

30 int16 CommsOKflg;int16 HRmode;

32 int16 BlinkStatePtr, LED TaskPtr;

34 // Used to indirectly access all EPWM modules, very useful!volatile struct EPWM REGS ∗ePWM[] =

36 { &EPwm1Regs, //intentional: (ePWM[0] not used)&EPwm1Regs,

38 &EPwm2Regs,&EPwm3Regs,

40 &EPwm4Regs,#if (!DSP2802x DEVICE H)

42 &EPwm5Regs,&EPwm6Regs,

44 #if (DSP2803x DEVICE H || DSP2804x DEVICE H)&EPwm7Regs,

46 #if (DSP2804x DEVICE H)&EPwm8Regs

48 #endif#endif

50 #endif};

Page 93: Tesi Effetti Audio

79

2 // Used for running BackGround in flash, and ISR in RAMextern Uint16 ∗RamfuncsLoadStart, ∗RamfuncsLoadEnd, ∗RamfuncsRunStart;

4

6 // −−−−−−−−−−−−−−−−−−− USER −−−−−−−−−−−−−−−−−−−−−−int Fs,i,j,lunghezza buffer,indice,indice 1,indice 2,indice 3;

8 int ritardo eco ms, ritardo eco;int ritardo multi eco ms, ritardo multi eco 1, ritardo multi eco 2;

10 int ritardo multi eco 3;int ritardo chorus ms, ritardo chorus, ritardo chorus max;

12 int percentuale var amp;int ritardo fla ms, ritardo fla max, ritardo fla;

14 int ritardo vib ms, ritardo vib max, ritardo vib;int ritardo pit ms, ritardo pit max, ritardo pit, temp;

16 int soglia percent, soglia;float variaz tre percent, variaz tre max;

18 float ampli[9];int ritar[9];

20 float ampiezza, a1, a2;int soglia1, ratio;

22 int soglia2;int beta;

24 int sel eff temp, sel eff amp, sel riv, sel eff din;

26 #pragma DATA SECTION(buffer , ”.ebss:buffer”)int buffer[28000]; //e’ lungo e000

28 #pragma DATA SECTION(h1buffer , ”.ebss:hbuffer”)int h1buffer[28000];

30 #pragma DATA SECTION(h2buffer , ”.ebss:hbuffer”)int h2buffer[28000];

32 //hbuffer ha dimensione 10000h

34

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%36 // VARIABLE DECLARATIONS − CCS WatchWindow / GUI support

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%38

// −−−−−−−−−−−−−−−− FRAMEWORK −−−−−−−−−−−−−−−−−−−40

//GUI support variables42 // sets a limit on the amount of external GUI controls − increase as necessary

int16 ∗varSetTxtList[16]; //16 textbox controlled variables44 int16 ∗varSetBtnList[16]; //16 button controlled variables

int16 ∗varSetSldrList[16]; //16 slider controlled variables46 int16 ∗varGetList[16]; //16 variables sendable to GUI

int16 ∗arrayGetList[16]; //16 arrays sendable to GUI48

// −−−−−−−−−−−−−−−−−−− USER −−−−−−−−−−−−−−−−−−−−−−

Page 94: Tesi Effetti Audio

80 Codice C per la programmazione del DSP

2 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%// MAIN CODE − starts here

4 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%void main(void)

6 {//=============================================

8 // INITIALISATION − General//=============================================

10

// −−−−−−−−−−−−−−−− FRAMEWORK −−−−−−−−−−−−−−−−−−−12

DeviceInit(); // Device Life support & GPIO14 SCIA Init(); // Initalize the Serial Comms A peripheral

16 // Only used if running from FLASH// Note that the variable FLASH is defined by the compiler with −d FLASH

18 // (see TwoChannelBuck.pjt file)#ifdef FLASH

20 // Copy time critical code and Flash setup code to RAM// The RamfuncsLoadStart, RamfuncsLoadEnd, and RamfuncsRunStart

22 // symbols are created by the linker. Refer to the linker files.MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);

24

// Call Flash Initialization to setup flash waitstates26 // This function must reside in RAM

InitFlash(); // Call the flash wrapper init function28 #endif //(FLASH)

30 // Timing sync for background loops// Timer period definitions found in PeripheralHeaderIncludes.h

32 CpuTimer0Regs.PRD.all = uSec45; // A tasks

34 CommsOKflg = 0;SerialCommsTimer = 0;

36 HRmode = 1; // Default to HR mode enabled

38 // −−−−−−−−−−−−−−−−−−− USER −−−−−−−−−−−−−−−−−−−−−−// put common initialization/variable definitions here

40

sel eff temp = 0;42 sel eff amp=0;

sel eff din=0;44 sel riv=1;

j=1;46 i=0;

Fs=22050;48

lunghezza buffer=28000;

Page 95: Tesi Effetti Audio

81

2 //parametri effetti

4 //effetto Ecoritardo eco ms=900; //espresso in ms

6 ritardo eco=(Fs/1000)∗ritardo eco ms;

8 //effetto Multi tap Ecoritardo multi eco ms=400; //espresso in ms

10 ritardo multi eco 1=(Fs/1000)∗ritardo multi eco ms;ritardo multi eco 2=(Fs/1000)∗2∗ritardo multi eco ms;

12 ritardo multi eco 3=(Fs/1000)∗3∗ritardo multi eco ms;

14 //effetto Chorusritardo chorus ms=25; //espresso in ms

16 ritardo chorus max=(Fs/1000)∗ ritardo chorus ms;percentuale var amp=30;

18

//effetto Flanger20 ritardo fla ms=25; //espresso in ms

ritardo fla max=(Fs/1000)∗ritardo fla ms;22

//effetto Vibrato24 ritardo vib ms=3; //espresso in ms

ritardo vib max=(Fs/1000)∗ritardo vib ms;26

//effetto Pitch Shifter28 ritardo pit ms=5; //espresso in ms

ritardo pit max=(Fs/1000)∗ritardo vib ms;30 temp=0;

32 //effeto Distorsionesoglia percent=2; //espresso in %

34 soglia=(32767/100∗soglia percent);

36 //effetto Tremolovariaz tre percent=80; //espresso in %

38 variaz tre max=variaz tre percent/100;

40 //effetto Riverberoampli[0]=.841; ampli[1]=.504; ampli[2]=.289; ampli[3]=.192;

42 ampli[4]=.176; ampli[5]=.167; ampli[6]=.134; ampli[7]=.29; ampli[8]=.24;

44 ritar[0]=95; ritar[1]=475; ritar[2]=1011; ritar[3]=1262; ritar[4]=1601;ritar[5]=1661; ritar[6]=1758; ritar[7]=3103; ritar[8]=3478;

46

beta=0;48 a1=1;

a2=0.25;

Page 96: Tesi Effetti Audio

82 Codice C per la programmazione del DSP

2 //effetto Compressionesoglia1=16384;

4 ratio=2;

6 //effetto Soppressione del rumoresoglia2=50;

8

//=============================================10 // INITIALISATION − BUILD OPTIONS − NOTE: select via ProjectSettings.h

//=============================================12

// −−−−−−−−−−−−−−−−−−− USER −−−−−−−−−−−−−−−−−−−−−−14 // Put build specific initialisation here

for (j=0; j<=lunghezza buffer; j++)16 {

buffer[j]=0;18 h1buffer[j]=0;

h2buffer[j]=0;20 }

22 //=============================================// BACKGROUND (BG) LOOP

24 //=============================================

26 // −−−−−−−−−−−−−−−− FRAMEWORK −−−−−−−−−−−−−−−−−−−

28 for (;;) //infinite loop{

30 if (CpuTimer0Regs.TCR.bit.TIF == 1){

32 CpuTimer0Regs.TCR.bit.TIF = 1; // clear flag

34 // l’interupt fa partire la conversione dell’ADC// il dato proveniente dall’ADC asar poi elaborato

36 // come segue:

38 if (i == 0){

40 temp=temp;}

42

// La parte di codice soprariportata risulta necessaria in fase di simulazione in44 // quanto per rendere piu’ semplice tale processo si e’ deciso di utilizzare

// campioni salvati in precedenza sul pc. L’espressione temp = temp serve infatti46 // a generare un punto in cui e’ possibile inserire un breakpoint di

// lettura dal file. Per rendere la simulazione piu’ veloce si e’ deciso di48 // leggere 28000 campioni alla volta e terminata l’elaborazione

// scrivere 28000 campione in uscita.

Page 97: Tesi Effetti Audio

83

2 //selezione dell’effetto desiderato

4 switch (sel eff temp){

6 case (0)://effetto:nessun effetto selezionato

8 buffer[i]=h2buffer[i];h1buffer[i]=buffer[i];

10 break;

12 case (1):// effetto: Eco

14 buffer[i]=h2buffer[i];indice=i−ritardo eco;

16 if (indice<0){

18 indice=indice+lunghezza buffer;}

20 h1buffer[i]=0.8∗buffer[i]+0.2∗buffer[indice];break;

22

case (2):24 // effetto: Multi−tap Eco

buffer[i]=h2buffer[i];26 indice 1=i−ritardo multi eco 1;

if (indice 1<0)28 {

indice 1=indice 1+lunghezza buffer;30 }

indice 2=i−ritardo multi eco 2;32 if (indice 2<0)

{34 indice 2=indice 2+lunghezza buffer;

}36 indice 3=i−ritardo multi eco 3;

if (indice 3<0)38 {

indice 3=indice 3+lunghezza buffer;40 }

h1buffer[i]=buffer[i]+0.2∗buffer[indice 1]+0.05∗buffer[indice 2]+42 +0.01∗buffer[indice 3];

break;

Page 98: Tesi Effetti Audio

84 Codice C per la programmazione del DSP

2 case (4):// effetto: Chorus

4 buffer[i]=h2buffer[i];ritardo chorus=(((ritardo chorus max)/2)∗

6 ∗(1+sin((2∗3.14∗0.1∗i)/Fs)));ampiezza=(1+(percentuale var amp∗0.01∗cos((2∗3.14∗0.3∗i)/Fs)));

8 indice=i−ritardo chorus;if (indice<0)

10 {indice=indice+lunghezza buffer;

12 }h1buffer[i]=0.5∗buffer[i]+0.5∗ampiezza∗buffer[indice];

14 break;

16 case (8):// effetto: Flanger

18 buffer[i]=h2buffer[i];ritardo fla=(((ritardo fla max)/2)∗(1−cos((2∗3.14∗0.3∗i)/Fs)));

20 indice=i−ritardo fla;if (indice<0)

22 {indice=indice+lunghezza buffer;

24 }h1buffer[i]=buffer[indice];

26 break;

28 case (16):// effetto:Pitch Shifter

30 buffer[i]=h2buffer[i];if (temp>ritardo pit max)

32 {temp=temp−ritardo pit max;

34 }indice=i−3∗temp;

36 temp=temp+1;if (indice<0)

38 {indice=indice+lunghezza buffer;

40 }indice 1=i−1;

42 if (indice 1<0){

44 indice 1=indice 1+lunghezza buffer;}

46 h1buffer[i]=0.5∗buffer[indice]+0.5∗buffer[indice 1];break;

48

default: break;50 }

Page 99: Tesi Effetti Audio

85

2 case (32):// effetto: Vibrato

4 buffer[i]=h2buffer[i];ritardo vib=(((ritardo vib max)/2)∗(sin((2∗3.14∗10∗i)/Fs)));

6 indice=i−ritardo vib;if (indice<0)

8 {indice=indice+lunghezza buffer;

10 }h1buffer[i]=buffer[indice];

12 break;

14 switch (sel eff amp){

16 case (0)://effetto:nessun effetto selezionato

18 break;

20 case (1):// effetto: Distorsione

22 if (h1buffer[i]>=soglia){

24 h1buffer[i]=soglia;}

26 else if (h1buffer[i]<=−soglia){

28 h1buffer[i]=−soglia;}

30 else{

32 h1buffer[i]=h1buffer[i];}

34 break;

36 case (2):// effetto: Tremolo

38 ampiezza=1+variaz tre max∗(sin((2∗3.14∗10∗i)/Fs));h1buffer[i]=h1buffer[i]∗ampiezza;

40 break;default: break;

42 }switch (sel eff din)

44 {case (0):

46 //effetto:nessun effetto selezionatobreak;

Page 100: Tesi Effetti Audio

86 Codice C per la programmazione del DSP

2 case (1):// effetto: compressione

4 if (h1buffer[i] < 0){

6 if (h1buffer[i] < −soglia1){

8 h1buffer[i]=−soglia1+(h1buffer[i]+soglia1)/ratio;}

10 }else

12 {if (h1buffer[i] > soglia1)

14 {h1buffer[i]=soglia1+(h1buffer[i]−soglia1)/ratio;

16 }}

18 break;

20 case (2):// effetto: soppressore di rumore

22 if (h1buffer[i] < 0){

24 if (h1buffer[i] > −soglia2){

26 h1buffer[i]=0;}

28 }else

30 {if (h1buffer[i] < soglia2)

32 {h1buffer[i]=0;

34 }}

36 break;default: break;

38 }switch (sel riv)

40 {case (0):

42 //effetto:nessun effetto selezionatobreak;

Page 101: Tesi Effetti Audio

87

2 case (1):// effetto: riverbero

4 for (temp = 0; temp < 9; temp++){

6 beta=i−ritar[temp];if (beta<=0)

8 {beta=1;

10 }buffer[i]=buffer[i]+ampli[temp]∗h1buffer[beta];

12 }break;

14

default: break;16 }

18 // A causa di problemi legati alla memoria e alla allocazione della stessa e’ stato// impossibile riuscire ad implementare l’effetto riverbero come mostrato in questa

20 // tesi ma si e’ scelto di realizzarlo comunque con un algoritmo meno sofisticato// omettendo la parte dei filtri IIR e il filtro passa tutto, realizzando solamente

22 // un banco di filtri FIR con tempi di ritardo che generano sia le early reflection// che le late reflection. E’ questa una semplificazione dell’algoritmo di Moorer

24 // necessaria per risolvere i suddetti problemi di allocazione che non trovavano// altrimenti soluzione. Le variabili buffer utilizzate non potevano infatti essere

26 // modificate in quanto gia’ in uso dagli effetti implementati in precedenza.

28 if (i == 27999){

30 if (sel riv==1){

32 temp=temp;i=−1;

34 }else

36 {temp=temp;

38 i=−1;}

40 }i=i+1;

42 }}}//END MAIN CODE

44

// Questa sezione del codice, come quella iniziale ha lo scopo di creare46 // una parte di codice dove sia corretto inserire i breakpoint in questo

// caso di scrittura. Per problemi legati alle variabili utilizzate per48 // l’effetto riverbero sono stati creati due punti diversi per l’applicazione

// del breakpoint in base all’utilizzo o meno di tale effetto.

Page 102: Tesi Effetti Audio

88 Codice C per la programmazione del DSP

Page 103: Tesi Effetti Audio

Bibliografia

[1] S. J. Orfanidis, Introduction to Signal Processing, Capitolo 8, Sez 8.2,pp. 355-383, Prentice Hall, Englewood Cliffs, NJ, (1996).

[2] J. A. Moorer, About this reverberation business,Computer Music journal,3, 13 (1979).

[3] J. Tomarakos, D. Ledger, Using The Low-Cost, High Performance ADSP-21065L Digital Signal Processor For Digital Audio Applications, (1998).

[4] D. Oboril, M. Balik, J. Schimmel, Z. Smekal, P. Krkavec, ModellingDigital Musical Effects For Signal Processors, Based On Real EffectsManifestation Analysis, (2000)

[5] Code Composer Studio getting started guide, Texas Instruments, (2001)

[6] TMS320C28343 Delfino Microcontrollers Data Manual, Texas Instru-ments, (2009)

[7] TMS320C28343 Experimenters Kit Overview, Texas Instruments, (2009)

[8] Delfino C28343 controlCARD Overview, Texas Instruments, (2009)

89