Teoria e tecnica della musica elettronica

Page 1

Teoria e Tecnica della Musica Elettronica (DRAFT: 30 Dicembre, 2006)

Miller Puckette

Traduzione: Cristiano Bocci Versione Traduzione: 20 Ottobre 2017


M. Puckette, The theory and technique of electronic music: Copyright 2007 by World Scientific Publishing Co. Pte. Ltd. Tutti i diritti riservati. Questa traduzione `e rilasciata sotto licenza Creative Commons 2.5 di tipo Attribuzione-Non commerciale.


Indice Prefazione alla traduzione

vii

Prefazione

ix

Introduzione

xi

1 Sinusoidi, ampiezza e frequenza 1.1 Misure di ampiezza . . . . . . . . . . . . . . . . . 1.2 Unit` a di ampiezza . . . . . . . . . . . . . . . . . 1.3 Controllare l’ampiezza . . . . . . . . . . . . . . . 1.4 Frequenza . . . . . . . . . . . . . . . . . . . . . . 1.5 Sintetizzare una sinusoide . . . . . . . . . . . . . 1.6 Segnali sovrapposti . . . . . . . . . . . . . . . . . 1.7 Segnali periodici . . . . . . . . . . . . . . . . . . 1.8 Informazioni sugli esempi software . . . . . . . . Introduzione rapida a Pd . . . . . . . . . . . . . Come trovare ed eseguire gli esempi . . . . . . . 1.9 Esempi . . . . . . . . . . . . . . . . . . . . . . . . Riscalatore costante di ampiezza . . . . . . . . . Controllo di ampiezza in decibel . . . . . . . . . Controllo di ampiezza, senza irregolarit`a, tramite di inviluppo . . . . . . . . . . . . . . . . . Triade maggiore . . . . . . . . . . . . . . . . . . Conversione tra frequenza e tono . . . . . . . . . Ancora sulla sintesi additiva . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . un . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . generatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Wavetables e campionatori 2.1 L’oscillatore wavetable . . . . . . . . . . . . . 2.2 Campionamento . . . . . . . . . . . . . . . . 2.3 Enveloping samplers . . . . . . . . . . . . . . 2.4 Stretching del timbro . . . . . . . . . . . . . . 2.5 Interpolazione . . . . . . . . . . . . . . . . . . 2.6 Esempi . . . . . . . . . . . . . . . . . . . . . . Oscillatore wavetable . . . . . . . . . . . . . . Ricerca su wavetable in generale . . . . . . . Utilizzo di una wavetable come campionatore Campionatori a loop . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

i

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

1 2 4 5 5 7 10 11 14 14 16 16 16 18 19 20 21 22 23 25 28 30 34 35 40 44 44 45 47 49


ii

Indice Campionatore a loop con sovrapposizione . . . . . . . . . . . . . Precessione automatica del punto di lettura . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Calcoli audio e di controllo 3.1 Il teorema di campionamento . . . . . . . . . 3.2 Controllo . . . . . . . . . . . . . . . . . . . . 3.3 Flussi di controllo . . . . . . . . . . . . . . . . 3.4 Conversione da segnali audio a flussi numerici 3.5 Flussi di controllo nei diagrammi a blocchi . . 3.6 Individuazione degli eventi . . . . . . . . . . . 3.7 Segnali audio come controllo . . . . . . . . . . 3.8 Operazioni sui flussi di controllo . . . . . . . 3.9 Operazioni sui flussi di controllo in Pd . . . . 3.10 Esempi . . . . . . . . . . . . . . . . . . . . . . Campionamento e foldover . . . . . . . . . . . Convertire controlli in segnali . . . . . . . . . Lettore di wavetable non-looping . . . . . . . Da segnali a controlli . . . . . . . . . . . . . . Sequencer in stile analogico . . . . . . . . . . Sequencer in stile MIDI . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . di controllo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Automazione e gestione della voce 4.1 Generatori di inviluppo . . . . . . . . . . . . . . . . 4.2 Forme di ampiezza lineari e curvilinee . . . . . . . . 4.3 Cambiamenti di controllo continui e discontinui . . . 4.3.1 Muting . . . . . . . . . . . . . . . . . . . . . 4.3.2 Switch-and-ramp . . . . . . . . . . . . . . . . 4.4 Polifonia . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 Allocazione vocale . . . . . . . . . . . . . . . . . . . 4.6 Tags vocali . . . . . . . . . . . . . . . . . . . . . . . 4.7 Incapsulamento in Pd . . . . . . . . . . . . . . . . . 4.8 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . Generatore di inviluppo ADSR . . . . . . . . . . . . Funzioni di trasferimento per il controllo di ampiezza Sintesi additiva: campana di Risset . . . . . . . . . . Sintesi additiva: controllo dell’inviluppo spettrale . . Sintesi polifonica: campionatore . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Modulazione 5.1 Tassonomia degli spettri . . . . . . 5.2 Moltiplicazione di segnali audio . . 5.3 Waveshaping . . . . . . . . . . . . 5.4 Modulazione di frequenza e di fase 5.5 Esempi . . . . . . . . . . . . . . . . Modulazione ad anello e spettri . . Octave divider e formant adder . . Waveshaping e differenza di toni . ii

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . .

51 53 54

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

55 55 57 59 63 64 65 67 69 70 74 74 74 76 78 79 79 82

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

85 85 88 90 90 92 94 95 96 97 99 99 100 102 105 106 111

. . . . . . . .

113 113 116 120 126 129 129 129 131

. . . . . . . .

. . . . . . . .

. . . . . . . .


Indice

iii

Waveshaping utilizzando i polinomi di Chebychev Waveshaping usando una funzione esponenziale . Waveshaping sinusoidale: parit`a e disparit`a . . . Modulazione di fase e FM . . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

134 134 135 137 139

6 Progettare spettri 6.1 Modello carrier/modulator . . . . . . . . . . . . . . . 6.2 Treni di impulsi . . . . . . . . . . . . . . . . . . . . . 6.2.1 Treni di impulsi tramite waveshaping . . . . . 6.2.2 Treni di impulsi tramite wavetable stretching 6.2.3 Spettri risultanti . . . . . . . . . . . . . . . . 6.3 Modulazione ad anello mobile . . . . . . . . . . . . . 6.4 Phase-aligned formant generator (PAF) . . . . . . . 6.5 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . Treno di impulsi wavetable . . . . . . . . . . . . . . Generatore semplice di formante . . . . . . . . . . . Segnale portante a due coseni . . . . . . . . . . . . . Il generatore PAF . . . . . . . . . . . . . . . . . . . Stretched wavetables . . . . . . . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

141 142 145 145 146 146 150 152 156 156 159 159 161 164 164

7 Spostamenti temporali e ritardi 7.1 Numeri complessi . . . . . . . . . . . . . . . . . . . . . . . 7.1.1 Sinusoidi complesse . . . . . . . . . . . . . . . . . . 7.2 Spostamenti temporali e cambiamenti di fase . . . . . . . 7.3 Reti di ritardo . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Reti di ritardo ricircolanti . . . . . . . . . . . . . . . . . . 7.5 Conservazione della potenza e reti di ritardo complesse . . 7.6 Riverberazione artificiale . . . . . . . . . . . . . . . . . . . 7.6.1 Controllo dei riverberatori . . . . . . . . . . . . . . 7.7 Spostamenti variabili e frazionari . . . . . . . . . . . . . . 7.8 Fedelt` a delle linee di ritardo interpolanti . . . . . . . . . . 7.9 Spostamento di tono (pitch shifting) . . . . . . . . . . . . 7.10 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linea di ritardo fissa, non-interpolata . . . . . . . . . . . Filtro a pettine ricircolante . . . . . . . . . . . . . . . . . Linea di ritardo variabile . . . . . . . . . . . . . . . . . . . Ordine di esecuzione e limiti inferiori sui tempi di ritardo Ordine di esecuzione in linee di ritardo non-ricircolanti . . Filtro a pettine non-ricircolante come octave doubler . . . Filtro a pettine complesso variabile: shakers . . . . . . . . Riverberatore . . . . . . . . . . . . . . . . . . . . . . . . . Pitch shifter . . . . . . . . . . . . . . . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

165 166 168 169 170 175 179 182 185 187 189 191 196 196 197 197 199 202 203 203 205 205 208

iii

. . . . .


iv

Indice

8 Filtri 8.1 Tassonomia dei filtri . . . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Filtri passa-basso e passa-alto . . . . . . . . . . . . . . . . 8.1.2 Filtri passa-banda ed elimina-banda . . . . . . . . . . . . 8.1.3 Filtri di equalizzazione . . . . . . . . . . . . . . . . . . . . 8.2 Filtri elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.1 Filtro elementare non-ricircolante . . . . . . . . . . . . . . 8.2.2 Filtro non-ricircolante, seconda forma . . . . . . . . . . . 8.2.3 Filtro elementare ricircolante . . . . . . . . . . . . . . . . 8.2.4 Filtri composti . . . . . . . . . . . . . . . . . . . . . . . . 8.2.5 Outputs reali da filtri complessi . . . . . . . . . . . . . . . 8.2.6 Due filtri ricircolanti al prezzo di uno . . . . . . . . . . . 8.3 Progettazione dei filtri . . . . . . . . . . . . . . . . . . . . . . . . 8.3.1 Filtro passa-basso ad un polo . . . . . . . . . . . . . . . . 8.3.2 Filtro passa-alto ad un polo ed uno zero . . . . . . . . . . 8.3.3 Filtro shelving . . . . . . . . . . . . . . . . . . . . . . . . 8.3.4 Filtro passa-banda . . . . . . . . . . . . . . . . . . . . . . 8.3.5 Filtri peaking ed elimina-banda . . . . . . . . . . . . . . . 8.3.6 Filtri di Butterworth . . . . . . . . . . . . . . . . . . . . . 8.3.7 Ridimensionando il cerchio unitario con funzioni razionali 8.3.8 Filtro passa-banda di Butterworth . . . . . . . . . . . . . 8.3.9 Coefficienti temporalmente variabili . . . . . . . . . . . . 8.3.10 Risposte agli impulsi dei filtri ricircolanti . . . . . . . . . 8.3.11 Filtri all-pass . . . . . . . . . . . . . . . . . . . . . . . . . 8.4 Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.1 Sintesi sottrattiva . . . . . . . . . . . . . . . . . . . . . . 8.4.2 Envelope following . . . . . . . . . . . . . . . . . . . . . . 8.4.3 Modulazione a banda laterale singola . . . . . . . . . . . . 8.5 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtri prefabbricati passa-basso, -alto, -banda . . . . . . . . . . . Filtro prefabbricato passa-banda variabile nel tempo . . . . . . . Envelope followers . . . . . . . . . . . . . . . . . . . . . . . . . . Modulazione a banda laterale singola . . . . . . . . . . . . . . . . Utilizzare filtri elementari direttamente: shelving e peaking . . . Realizzazione e utilizzo di filtri all-pass . . . . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

209 210 210 211 213 213 214 216 217 217 218 219 220 220 221 222 223 224 225 226 229 230 231 233 234 234 235 238 240 240 241 242 243 243 246 246

9 Analisi e risintesi di Fourier 9.1 Analisi di Fourier di segnali periodici . . . . . . . . . 9.1.1 Periodicit` a della trasformata di Fourier . . . 9.1.2 Trasformata di Fourier come sintesi additiva . 9.2 Propriet` a delle trasformate di Fourier . . . . . . . . 9.2.1 Trasformata di Fourier di DC . . . . . . . . . 9.2.2 Spostamenti e cambiamenti di fase . . . . . . 9.2.3 Trasformata di Fourier di una sinusoide . . . 9.3 Analisi di Fourier di segnali non periodici . . . . . . 9.4 Analisi di Fourier e ricostruzione di segnali audio . . 9.4.1 Narrow-band companding . . . . . . . . . . . 9.4.2 Timbre stamping (vocoder classico) . . . . . 9.5 Fase . . . . . . . . . . . . . . . . . . . . . . . . . . .

247 247 248 249 249 249 252 253 254 257 259 261 263

iv

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .


Indice

v

9.5.1 Rapporti di fase tra i canali . . . . . . . . . . . Phase bashing . . . . . . . . . . . . . . . . . . . . . . . Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . Analisi e risintesi di Fourier in Pd . . . . . . . . . . . Companding a banda stretta: soppressione del rumore Timbre stamp (“vocoder”) . . . . . . . . . . . . . . . . Phase vocoder time bender . . . . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

266 267 269 269 271 272 274 276

10 Forme d’onda classiche 10.1 Simmetrie e serie di Fourier . . . . . . . . . . . . . . . 10.1.1 Onde a dente di sega e simmetria . . . . . . . . 10.2 Dissezione di forme d’onda classiche . . . . . . . . . . 10.3 Serie di Fourier delle forme d’onda elementari . . . . . 10.3.1 Onda a dente di sega . . . . . . . . . . . . . . . 10.3.2 Onda parabolica . . . . . . . . . . . . . . . . . 10.3.3 Onde triangolari e quadre simmetriche . . . . . 10.3.4 Onda triangolare generale (non-simmetrica) . . 10.4 Prevedere e controllare il foldover . . . . . . . . . . . . 10.4.1 Sovra-campionamento (Over-sampling) . . . . . 10.4.2 Onde triangolari subdole . . . . . . . . . . . . . 10.4.3 Transition splicing . . . . . . . . . . . . . . . . 10.5 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . Combinando onde a dente di sega . . . . . . . . . . . . Strategie per limitare in banda le onde a dente di sega Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

277 278 280 281 283 284 285 285 286 287 288 289 289 292 292 295 296

9.6 9.7

Indice Analitico

297

Bibliografia

301

v


vi

Indice

vi


Prefazione alla traduzione Nel 2006 mi trovavo a Minneapolis per un semestre all’IMA (Institute for Mathematics and its Applications). Dividevo l’alloggio con altri matematici ed alcuni musicisti (uno splendido connubio) e questi ultimi mi introdussero al mondo di Pure Data, consigliandomi, tra l’altro, il libro The Theory and Technique of Electronic Music di Miller Puckette. Questo libro `e stato il mio primo serio passo nel mondo della computer music, a cui sono poi seguiti libri di altri autori come Road, Kreidler, Bianchi, Cipriani e Giri; tutti libri fondamentali da cui ho appreso concetti, tecniche e algoritmi. Tuttavia, secondo me, il libro di Puckette resta IL libro (come dice Max Mathews nella sua prefazione), quello non pu`o mancare nella libreria di ogni musicista elettronico (e superato, forse, solo dai libri di Bianchi-Cipriani-Giri). E sono convinto che non ci sia cosa migliore che studiarne la versione originale in modo, soprattutto, da fare propri tutti quei termini inglesi che poi si ritrovano frequentemente (per non dire sempre) nei vari softwares, nei vari plugins AU e VST o ancora nella letteratura, sia scritta che online. Tuttavia, confrontandomi spesso sia con studenti dei corsi di musica elettronica al conservatorio sia con musicisti, che si avvicinavano alla computer music, appariva chiaro come il libro di Puckette potesse risultare ostico, non tanto a chi non fosse di madrelingua inglese, ma soprattutto a chi non avesse, comunque, un’adeguata conoscenza dell’inglese scritto (anche se di certo potrebbe rappresentare una motivazione in pi` u per migliorarla). The Theory and Technique of Electronic Music `e un libro denso di informazioni e, ovviamente, la non perfetta conoscenza dell’inglese ne rende la comprensione ancora pi` u difficile. Questo `e il motivo principale per cui ho voluto fare questa traduzione: un aiuto extra per i musicisti italiani, studenti e non, che si avvicinano alla musica elettronica. Convinto per`o dell’importanza della conoscenza dei termini tecnici in inglese ho deciso o di lasciare la nomenclatura inglese accanto a quella italiana oppure di preferire quella inglese relegando quella italiana tra parentesi. Il mio consiglio spassionato resta quello di studiare la versione originale del libro di Puckette e usare questa traduzione come una scialuppa di salvataggio, quando la comprensione del testo scritto, in inglese, metta a rischio la comprensione della teoria o della tecnica della musica elettronica. Desidero ringraziare Giorgio Sancristoforo e Dario Ferrante per alcuni preziosi consigli durante la stesura di questa traduzione. Per segnalare errori o imprecisioni, cos`ı come per inviarmi commenti e osservazioni potete scrivermi a info@cristianobocci.com Buona lettura, ma soprattutto buono studio Cristiano Bocci vii


viii

Prefazione alla traduzione

viii


Prefazione

Teoria e Tecnica della Musica Elettronica `e una fonte d’informazione completa per la sintesi di timbri musicali ricchi e interessanti. La teoria `e presentata, in modo chiaro, in una forma completamente generale. Ma in aggiunta, esempi di come sintetizzare ciascun aspetto teorico vengono mostrati nel linguaggio Pd in modo che il lettore del libro possa utilizzare immediatamente la teoria per i suoi scopi musicali. Non conosco nessun altro libro che combina teoria e tecnica in maniera cos`ı utile. Al momento i pi` u popolari programmi di sintesi di musica e suono in uso oggi sono compilatori di diagrammi a blocchi con interfacce grafiche. Questi consentono al compositore di progettare strumenti visualizzando gli “oggetti” del suo strumento sul monitor del computer e tracciando i percorsi di collegamento tra gli oggetti. Il display grafico risultante `e molto congeniale ai musicisti. Un utente novizio pu` o progettare un semplice strumento istantaneamente. Ed egli pu` o imparare rapidamente a progettare strumenti complessi. Pu`o capire come funzionano strumenti complessi guardando le loro immagini grafiche. Il primo programma di compilazione grafica, Max, `e stato scritto da Miller Puckette nel 1988. Max gestiva solo segnali di controllo per la sintesi sonora perch´e i computer disponibili all’epoca non erano abbastanza veloci per gestire eventi sonori. Non appena sono stati disponibili computer pi` u veloci, in grado di calcolare campioni di onde sonore in tempo reale, Puckette e David Zicarelli hanno aggiunto MSP a Max (Max/MSP), rendendo cos`ı il computer, di solito un computer portatile, uno strumento musicale completo per le performances dal vivo. Max/MSP `e stato sviluppato da Puckette e Zicarelli presso l’IRCAM nel periodo 1993-1994. Entrambi si sono trasferiti in California. Zicarelli commercializza i prodotti Max, MSP e JITTER (un’estensione per la sintesi video). Puckette, ora professore all’UCSD, ha scritto Pd (Pure Data). Si tratta di un programma open source che `e molto simile a Max/MSP. Max e Pd permettono a quasi chiunque di sintetizzare, quasi immediatamente, timbriche poco interessanti. Fare timbri interessanti `e molto pi` u difficile e richiede molte conoscenze aggiuntive. Il libro Teoria e Tecnica della Musica Elettronica rappresenta quel corpo di conoscenza. La teoria `e importante per qualsiasi programma di sintesi. Teoria e Tecnica della Musica Elettronica fornisce numerosi esempi di come applicare la teoria utilizzando Pd. La trattazione combinata di teoria e di esempi in Pd rende questo libro unicamente utile. Esso contiene anche esercizi per ogni capitolo, che lo rendono un libro di testo ix


x

Prefazione

eccellente. Credo che il libro di Puckette diventer`a IL libro essenziale nella biblioteca di qualsiasi musicista elettronico. Max Mathews

x


Introduzione Questo `e un libro sull’utilizzo di tecniche elettroniche per registrare, sintetizzare, elaborare e analizzare i suoni, una pratica che `e entrata nella sua forma moderna negli anni 1948-1952, ma i cui mezzi tecnologici e gli usi artistici hanno subito diverse rivoluzioni da allora. Oggi la maggior parte della musica elettronica viene fatta usando i computers, e questo libro si concentrer`a esclusivamente su quello che un tempo si chiamava “computer music’, ma che oggi dovrebbe essere chiamata “musica elettronica usando un computer”. La maggior parte degli strumenti musicali per computer disponibili oggi hanno antecedenti nelle generazioni precedenti di apparecchiature. Il computer, per´ o, `e relativamente economico ed i risultati ottenuti sono facili da documentare e ricreare. Per questi aspetti, almeno, il computer `e lo strumento ideale per la musica elettronica: `e difficile immaginare verso quale tecnologia futura ci si possa spostare. Le tecniche e la pratiche della musica elettronica possono essere studiate (almeno in teoria) senza fare esplicito riferimento allo stato attuale della tecnologia. Tuttavia, `e importante fornire esempi di lavoro. Quindi ogni capitolo inizia con la teoria (evitando qualsiasi riferimento all’implementazione) e termina con una serie di esempi realizzati in un pacchetto software attualmente disponibile. Il lettore ideale di questo libro `e chiunque conosca e ami la musica elettronica di qualsiasi genere, abbia un sacco di dimestichezza con i computer in generale e voglia imparare a fare musica elettronica dalla base, partendo dall’umile oscillatore e continuando tramite campionamenti, FM, filtraggio, waveshaping, delays e cos`ı via. Questo richiede molto tempo. Questo libro non percorre la strada facile di raccomandare il software preconfezionato per provare queste tecniche; invece, l’enfasi viene posta sull’apprendere l’utilizzo di un ambiente musicale informatico generale per realizzarle. Tra i vari pacchetti disponibili, useremo Pd, ma questo non dovrebbe impedirvi di utilizzare le stesse tecniche in altri ambienti come Csound o Max/MSP. Per leggere questo libro bisogna capire la matematica dell’algebra e della trigonometria; partendo dal Capitolo 7, anche i numeri complessi fanno la loro comparsa, ma non l’analisi complessa (ad esempio, i numeri complessi vengono sommati, moltiplicati e coniugati, ma non ci sono esponenziali complessi.) Un saggio di F. Richard Moore, di matematica per la computer music, si pu`o trovare in [Str85, pp. 1-68]. Anche se il “livello” della matematica non `e elevato, la matematica stessa `e a volte molto impegnativa. Tutti i tipi di matematica utile sono a portata di mano di qualsiasi studente di algebra o geometria. Per la computer music, ad xi


xii

Introduzione

esempio, ci occuperemo delle funzioni di Bessel, dei polinomi di Chebychev, del teorema di limite centrale e, naturalmente, di analisi di Fourier. Non sono necessari molti fondamenti di musica, cos`ı come viene insegnata in Occidente; in particolare, la notazione musicale occidentale scritta non `e necessaria. Verranno usate alcune nozioni elementari della teoria della musica occidentale, come la scala temperata, il sistema dei nomi delle note, e termini come “nota” e “accordo”. Inoltre, dovreste avere familiarit`a con i termini dell’acustica musicale quali sinusoide, ampiezza, frequenza e serie di armonici. Ogni capitolo inizia con una discussione teorica di qualche insieme di tecniche o di problematiche teoriche, seguite da una serie di esempi realizzati in Pd per illustrarle. Gli esempi sono inclusi nella distribuzione Pd, in modo da poterli eseguire e/o modificarli per i propri progetti. Inoltre, tutte le figure sono state create utilizzando patches in Pd, che appaiono come supplemento elettronico. Queste non sono documentate con cura ma in linea di principio potrebbero essere utilizzate come un esempio di capacit`a di progettazione di Pd a chiunque ne sia interessato. Vorrei ringraziare alcune persone che hanno reso possibile scrivere questo libro. Barry Vercoe `e quasi interamente responsabile della mia educazione musicale. Mentre ho appreso la matematica da Wayne Holman, Samuel Greitzer, Murray Klamkin, Gian-Carlo Rota, Frank Morgan, Michael Artin, Andrew Gleason e molti altri. Phil White mi ha insegnato linglese e Rosie Paschall composizione visiva. Infine, i miei genitori (uno deceduto) sono stati notevolmente pazienti; adesso ho 47 anni. Grazie.

xii


Capitolo 1

Sinusoidi, ampiezza e frequenza La musica elettronica `e realizzata, di solito, usando un computer, sintetizzando o elaborando segnali audio digitali. Questi non sono altro che sequenze di numeri, . . . , x[n − 1], x[n], x[n + 1], . . . dove l’indice n, denominato sample number, pu`o variare su alcuni o tutti i numeri interi. Un singolo numero della sequenza `e chiamato sample o campione. Un esempio di un segnale audio digitale `e la Sinusoide: x[n] = a cos(ωn + φ) dove a `e l’ampiezza, ω `e la frequenza angolare e φ `e la fase iniziale. La fase varia in funzione del sample number n, ed `e pari a a ωn + φ. La fase iniziale `e la fase al campione zero (n = 0). La Figura 1.1 (parte a) mostra graficamente una sinusoide. L’asse orizzontale mostra i valori successivi di n mentre l’asse verticale mostra i corrispondenti valori di x[n]. Il grafico viene disegnato in modo da sottolineare la natura “campionata” del segnale. In alternativa, potremmo disegnarlo pi` u semplicemente come una curva continua (parte b). Il disegno superiore `e la rappresentazione pi` u fedele della sinusoide (come segnale audio digitale), mentre quella inferiore pu` o essere considerata come una sua idealizzazione. Le sinusoidi svolgono un ruolo chiave nell’elaborazione audio perch´e, traslandone una a sinistra o a destra di un numero qualsiasi di campioni, si ottiene un’altra sinusoide. Questo rende facile calcolare l’effetto di tutti i tipi di operazioni sulle sinusoidi. Le nostre orecchie utilizzano questa stessa particolare propriet` a per aiutarci a analizzare i suoni in arrivo, per cui sinusoidi, e combinazioni di sinusoidi, possono essere utilizzate per ottenere molti effetti musicali. I segnali audio digitali non hanno alcuna relazione intrinseca con il tempo, ma per ascoltarli dobbiamo scegliere una frequenza di campionamento (o sample rate), a cui normalmente viene associata la variabile R, che `e il numero di campioni in un secondo. Il tempo t `e correlato al sample number n tramite Rt = n, o t = n/R. Un segnale sinusoidale con frequenza angolare ω ha una frequenza, nel dominio dei reali, pari a f= 1

ωR 2π


2

Capitolo 1. Sinusoidi, ampiezza e frequenza x[n]

(a) 1

49 -1

n

0

x(n)

(b) 1

50 -1

Figure 1.1: 1.1: Un A digital showing its discrete-time nature (parttema), Figura segnaleaudio audiosignal, digitale, che mostra la sua natura discreta and idealized as a continuous function (part b). This signal is a (real-valued) porale (parte a), e idealizzato come una funzione continua (parte b). Questo sinusoid,`e fifty long, 1, angular frequency 0.24,ampiezza and initial segnale una points sinusoide (a with valoriamplitude reali), lungo cinquanta punti, con 1, phase zero. frequenza angolare 0.24 e fase iniziale pari a zero.

dove f `e misurata in Hertz (cio`e, cicli al secondo) perch´e un ciclo `e 2π radianti e un secondo `e R campioni. L’ampiezza di un segnale audio, nel mondo reale, potrebbe essere espressa come una variazione nel tempo di un voltaggio o della pressione dell’aria, ma i campioni di un segnale audio digitale sono numeri privi di unit`a di misura. Ovviamente supporremo che esista un’accuratezza numerica sufficiente affinch´e si possano ignorare gli errori di arrotondamento e che il formato numerico sia illimitato come range, in modo che i campioni possano prendere qualsiasi valore si voglia. Tuttavia, la maggior parte degli hardware audio digitali funziona solo su un range fisso di valori in ingresso e in uscita, spesso tra −1 e 1. I softwares pi` u moderni per l’elaborazione dell’audio digitale utilizzano solitamente una rappresentazione in virgola mobile (floating-point representation) per i segnali. Ci` o consente di utilizzare una qualsiasi unit`a sia pi` u conveniente per i nostri obiettivi, a patto che l’output finale dell’ audio sia nel range prestabilito dell’hardware [Mat69, pp. 4-10].

1.1

Misure di ampiezza

La propriet` a fondamentale di un segnale audio digitale `e la sua ampiezza. Sfortunatamente, l’ampiezza di un segnale non ha una definizione canonica. In modo rigoroso, tutti i campioni in un segnale audio digitale sono loro stessi ampiezze, e abbiamo anche parlato dell’ampiezza a della sinusoide interpretata nella sua ` quindi utile avere delle misure di ampiezza per i segnali audio digitali totalit` a. E


ampiezza 1. SINUSOIDS, AMPLITUDE AND FREQUENCY3 41.1. Misure di CHAPTER

(a)

peak RMS

(b)

peak RMS

Figure mean RMS squaree (RMS) peak amplitudes of signals compared. Figura 1.2: 1.2: Root Ampiezza di piccoand di segnali a confronto. Per una sinusoide √ For a sinusoid (part a), the peak amplitude is higher than RMS by a (parte a), l’ampiezza di picco `e maggiore della RMS di un fattore parifactor a 2.of √ 2.

` meglio parlare di ampiezza riferendosi ad una finestra, cio`e un in generale. E range fisso di campioni del segnale. Ad esempio, la the finestra unthe segnale when we consider complex-valued signals.) Neither peakdinor RMSaudio amx[n] di lunghezza N e che inizia al campione M ` e costituita dai campioni, plitude of any signal can be negative, and either one can be exactly zero only if the signal itself is zero for all n in the window. x[M ], x[M + 1], . . . , x[M + N − 1]. The RMS amplitude of a signal may √ equal the peak amplitude but never exceeds it; and it may be as little as 1/ N times the peak amplitude, but never duethat. misure pi` u frequenti di ampiezza sono l’ampiezza di picco, che `e semless Le than plicemente il pi` u grande campione (in assoluto) della periods finestra: Under reasonable conditions—if the valore window containsall’interno at least several and if the angular frequency is well under one radian per sample—the peak A {x[n]} = max |x[n]|, n = M, . . . , M + N − 1 amplitude√of thepeak sinusoid of Page 1 is approximately a and its RMS amplitude about a/ 2. RMS Figure 1.2mean showssquare): the peak and RMS amplitudes of two digital e l’ampiezza (root audio signals. p ARMS {x[n]} = P {x[n]} dove P {x[n]} `e la potenza media, definita come:

1.2

Units of Amplitude

1 P {x[n]} = |x[M ]|2 + · · · + |x[M + N − 1]|2 N Two amplitudes are often better compared using their ratio than their difference. Saying thatultima one signal’s amplitude greaterassoluto than another’s a factor dal of two (in questa formula, i segni diis valore non sonobynecessari momight informative saying it is greater 30 millivolts. This is mento be chemore stiamo lavorando than su segnali a valori reali, mabydiventeranno importanti true for any measure of amplitudesegnali (RMSaor peak,neiforcomplessi). instance). N´ To facilitate in seguito quando considereremo valori e l’ampiezza comparisons, we often express in segnale logarithmic units callednegative, decibels.e di picco n´e l’ampiezza RMS diamplitudes un qualsiasi possono essere Ifpossono a is theessere amplitude of a signal or RMS), weper canogni define the esattamente zero (either solo se peak il segnale stessothen `e zero n nella finestra. L’ampiezza RMS di un segnale pu`o essere uguale all’ampiezza di picco, ma non pu` o mai essere superiore; e pu`o essere al minimo √1N volte l’ampiezza di picco, ma mai di meno.


4 1.2. UNITS OF AMPLITUDE

Capitolo 1. Sinusoidi, ampiezza e frequenza 5

1

amplitude

0.1 0 -20

-10

0 decibels

Figure 1.3: The relationship between decibel and linear scales of amplitude. Figura 1.3:amplitude La relazione tra decibel scala di ampiezza lineare. Il valore di The linear 1 is assigned to 0e dB. ampiezza lineare pari a 1 `e assegnato al valore di 0 dB. decibel (dB) level d as: In condizioni ragionevoli –d = se 20 la ·finestra contiene almeno diversi periodi e log10 (a/a 0) se la frequenza angolare `e ben sotto al valore di un radiante per campione – where a0 is adireference amplitude. definition is setaup so sua that,ampiezza if we increase l’ampiezza picco della sinusoideThis di pagina 1 `e circa e la RMS a power by a factor of ten (so that the amplitude increases by a factor the signal √ `e circa . La Figura 1.2 mostra le ampiezze di picco e RMS di due segnali √ 2 10), the logarithm will increase by 1/2, and so the value in decibels goes of audio digitali. up (additively) by ten. An increase in amplitude by a factor of two corresponds to an increase of about 6.02 decibels; doubling power is an increase of 3.01 dB. The relationship between linear amplitude and amplitude in decibels is graphed 1.2 Unit` a di ampiezza in Figure 1.3. Still using a0 to denote the reference amplitude, a signal with linear ampliSpesso, due ampiezze sono meglio confrontate se si utilizza il loro rapporto tude smaller thandifferenza. a0 will haveDire a negative amplitude gives -20 anzich´ e la loro che l’ampiezza diinundecibels: segnale a`e0 /10 maggiore di dB, a /100 gives -40, and so on. A linear amplitude of zero is smaller than that`e 0 un altro per un fattore di due potrebbe essere pi` u informativo che dire che of any value in dB, so we give it avale dB level of −∞. misura di ampiezza (RMS o maggiore di 30 millivolts. Questo per qualsiasi In digital audio a convenient choice of reference, assuming the hardware has di picco, ad esempio). Per facilitare i confronti, spesso esprimiamo le ampiezze ainmaximum amplitude of one, is unit` a logaritmiche denominate decibel. Se a `e l’ampiezza (di picco o RMS) di un segnale, allora possiamo d in decibel (dB) come: a0definire = 10−5 il=livello 0.00001 d = possible 20 · log10is (a/a 0 ) dB, and 0 dB is likely to be so that the maximum amplitude 100 inaudibly quiet at any reasonable listening level. Conveniently enough, the dove a0 `erange un’ampiezza dihearing—the riferimento. Questa definizione `e posta inloud modo che, dynamic of human ratio between a damagingly sound se aumentiamo potenza delabout segnale √100per and an inaudiblylaquiet one—is dB.un fattore di dieci (in modo che l’ampiezza aumenti con un fattore di way 10), to il logaritmo aumenter` a di of 1/2, quindi Amplitude is related in an inexact the perceived loudness a sound. il valore in two decibel salir` a (additivamente) Unamplitude aumento di ampiezza di un In general, signals with the same peakdior10. RMS won’t necessarily fattore di due corrisponde ad un aumento di circa 6.02 decibel; raddoppiare have the same loudness at all. But amplifying a signal by 3 dB, say, will fairly la potenza corrisponde ad un aumento di 3.01 dB. La relazione tra ampiezza lineare e ampiezza in decibel `e rappresentata in Figura 1.3. Sempre usando a0 per indicare l’ampiezza di riferimento, un segnale con ampiezza lineare minore di a0 avr` a un’ampiezza negativa in decibel: a0 /10 d`a


1.4. Frequenza

5

−20 dB, a0 /100 d` a −40 e cos`ı via. Un’ampiezza lineare pari a zero `e minore di quella di qualsiasi valore in dB, per cui vi si associa un livello in dB pari a −∞. Nell’ambito dell’audio digitale, una scelta conveniente di riferimento, supponendo che l’hardware abbia un’ampiezza massima di uno, `e a0 = 10−5 = 0.00001 in modo che l’ampiezza massima possibile sia di 100 dB e che 0 dB sia un’ampiezza probabilmente silenziosa a qualsiasi livello di ascolto ragionevole. Abbastanza convenientemente, la gamma dinamica dell’udito umano – il rapporto tra un suono dannoso e un rumore inaudibilmente silenzioso – `e di circa 100 dB. L’ampiezza `e legata in modo inesatto alla percezione della rumorosit`a di un suono. In generale, due segnali con la stessa ampiezza di picco o RMS non hanno necessariamente la stessa intensit`a. Ma amplificando un segnale, diciamo di 3 dB, sar` a ragionevolmente affidabile farlo suonare ad uno “step” pi` u forte. Molto `e stato fatto sulla presunta natura logaritmica dell’udito umano (e di altri sensi) che pu` o spiegare in parte il motivo per cui i decibels sono una scala utile di ampiezza [RMW02, p. 99]. L’ampiezza `e anche correlata, in modo inesatto, alla dinamica musicale. La dinamica `e meglio pensata come una misura di sforzo che di forza o potenza. Il suo range si estende su nove valori: riposo, ppp, pp, p, mp, mf, f, ff, fff. Questi sono correlati in modo meno appropriato con l’ampiezza di un segnale rispetto a come lo `e l’intensit` a [RMW02, p. 110-111].

1.3

Controllare l’ampiezza

Molto probabilmente l’operazione pi` u frequentemente utilizzata sui suoni elettronici `e quella di cambiare le loro ampiezze. Ad esempio, una semplice strategia per sintetizzare i suoni `e combinare sinusoidi, che possono essere generate utilizzando la formula a pagina 1, campione per campione. Ma la sinusoide ha un’ampiezza nominale costante a, e vorremmo essere in grado di variarla nel tempo. In generale, per moltiplicare l’ampiezza di un segnale x[n] per un fattore y ≥ 0, `e sufficiente moltiplicare ciascun campione per y, ottenendo un nuovo segnale y · x[n]. Qualsiasi misura dell’ampiezza RMS o dell’ampiezza di picco di x[n] sar` a maggiore o minore a seconda del fattore y. Pi` u in generale, `e possibile modificare l’ampiezza tramite un valore y[n] che varia campione per campione. Se y[n] `e non-negativo e se varia sufficientemente lentamente, l’ampiezza del prodotto y[n] · x[n] (in una finestra fissata da M a M + N − 1) sar`a quella di x[n], moltiplicata per il valore di y[n] in quella finestra (che supponiamo non cambi molto sugli N campioni nella finestra). Nel caso pi` u generale in cui entrambi x[n] e y[n] possano assumere valori negativi e positivi e/o cambiare rapidamente, l’effetto di moltiplicarli non pu`o essere descritto semplicemente come il cambiamento di ampiezza di uno di essi; questo aspetto sar` a considerato pi` u avanti nel Capitolo 5.

1.4

Frequenza

Le frequenze, come le ampiezze, sono spesso misurate su una scala logaritmica, per sottolineare le proporzioni tra di loro, che di solito forniscono una migliore


66

CapitoloAMPLITUDE 1. Sinusoidi, ampiezza e frequenza CHAPTER 1. SINUSOIDS, AND FREQUENCY 440 330

220

110 0 45 frequency

57

69

pitch

Figure 1.4: relationship between pitch in and frequency in cycles per Figura 1.4: The La relazione tra nota MIDI“MIDI” e frequenza cicli per secondo (Hertz). second TheMIDI span nell’asse of 24 MIDI values on the horizontal axis represents Il range(Hertz). di 24 valori orizzontale rappresenta due ottave, rispetto two quali octaves, over whichaumenta the frequency increases by a factor pari of four. alle la frequenza di un fattore moltiplicativo a 4. reliably make it sound about onefrequenze “step” louder. has been made the descrizione delle relazioni tra le rispettoMuch a quanto fornito dalleof loro supposedlyIllogarithmic nature of human hearing other senses), which may differenze. rapporto delle frequenze tra due toni (and musicali determina l’intervallo partially explain why decibels are such a useful scale of amplitude [RMW02, p. musicale tra di essi. 99].La scala musicale occidentale suddivide l’ottava (l’intervallo musicale asAmplitude also related in an to musical dynamic. is sociato ad un is rapporto di 2:1) ininexact dodici way intervalli uguali, ciascunoDynamic dei quali 1/12 of loudness or power. It ranges over better thought of as a measure of effort than corrisponde quindi ad un rapporto di 2 . Per ragioni storiche questo sottonine values: rest, ppp,semitono. pp, p, mp,Una mf, f, ff, fff. These correlate in an even intervallo `e chiamato scala logaritmica conveniente per illooser tono way with the amplitude of a signal than does loudness [RMW02, pp. (pitch) consiste semplicemente nel contare il numero semitoni da una110-111]. nota di riferimento – utilizzando le frazioni possiamo specificare note che non appaiono nella scala occidentale. La scala logaritmica di tono pi` u comunemente utiliz1.3 `e laControlling Amplitude zata “MIDI” pitch, in cui il tono 69 viene assegnato ad una frequenza di 440 cicli al secondo – il La sopra il Do centrale. Per convertire una nota MIDI Perhaps the most frequently used operation on electronic sounds is to change in una frequenza in cicli al secondo f , applichiamo la formula di conversione their amplitudes. For example, a simple strategy for synthesizing sounds is by nota/frequenza: combining sinusoids, which can be generated by evaluating the formula on Page m =sinusoid 69 + 12has · loga2 constant (f /440), nominal amplitude a, and 1, sample by sample. But the

we would like to be able to vary that in time. In general, to multiply the of a signal x[n] by a factor y ≥ 0, f =amplitude 440 · 2(m−69)/12 . you can just multiply each sample by y, giving a new signal y · x[n]. Any Il Do centrale,ofcorrispondente alla nota MIDI m 60, will `e pari f = 261.626 measurement the RMS or peak amplitude of =x[n] beagreater or lesscicli by al thesecondo. factor y. More generally, you can change the amplitude by an amount y[n] Il MIDI `e unby vecchio protocollo che, purtroppo, `e insinuato which variesstesso sample sample. If y[n] hardware is nonnegative and if it si varies slowly in una grande quantit` aofdithe software. MIDIwindow consentefrom soloMtoni enough, the amplitude productNell’hardware, y[n] · x[n] (in ail fixed to interi e 127. Tuttavia, la scala soggiacente `e ben per M + Ncompresi − 1) willtra be 0that of x[n], multiplied by the value of y[n] in definita the window qualsiasi numero “MIDI”, anche negativo; ad esempio una “nota MIDI” di −4 `e una frequenza decente di vibrato. La scala del tono non pu`o tuttavia descrivere frequenze inferiori o uguali a zero cicli al secondo (per una chiara descrizione del MIDI, delle sue capacit` a e delle sue limitazioni, vedere [Bal03, ch.6-8]).


una sinusoide 7 81.5. Sintetizzare CHAPTER 1. SINUSOIDS, AMPLITUDE AND FREQUENCY

FREQUENCY

FREQUENCY

OUT

y[n]

OUT (a)

(b)

Figure 1.5: Diagramma Block diagrams for (a) sinusoidal oscillator; (b) controlling the Figura 1.5: a blocchi pera(a) un oscillatore sinusoidale; (b) controllo amplitude a multiplier and an amplitude signal y[n]. di ampiezzausing utilizzando un moltiplicatore e un segnale di ampiezza y[n].

1.5Un semitono Synthesizing a sinusoid pu` o essere espresso con un rapporto di circa 1.059 a 1, o circa un aumento del 6% della frequenza. I semitono sono ulteriormente divisi in cents, In most widely audio synthesis and processing (Csound,potrebbero Max/MSP, ogni cent `e unused centesimo di un semitono. Come packages regola generale, and Pd, for instance), the audio operations are specified as networks of unit essere necessari circa tre cents per fare un cambiamento rilevabile nel tono di generators[Mat69] which pass audio signals among themselves. The user of the una nota musicale. Sul Do centrale si tratta di una differenza di circa 1/2 ciclo al software specifies the network, sometimes called pitch, a patch, which essensecondo. package Un grafico della frequenza in funzione del MIDI su un intervallo tially to the synthesis to be used, and then worries about di duecorresponds ottave, `e mostrato in Figuraalgorithm 1.4. how to control the various unit generators in time. In this section, we’ll use abstract block diagrams to describe patches, but in the “examples” section (Page 17), choose a specific implementation environment and show some of the 1.5we’llSintetizzare una sinusoide software-dependent details. show how produceper a sinusoid with time-varying amplitude need NeiTo software pi` u to utilizzati la sintesi e l’elaborazione audio (perwe’ll esempio to introduce two unit generators. First we need a pure sinusoid which is made Csound, Max/MSP e Pd), le operazioni audio sono specificate come reti di with an oscillator. Figureche 1.5passano (part a)i segnali shows aaudio pictorial generatori unitari [Mat69] tra direpresentation loro. L’utenteofdela sinusoidal oscillator as an icon. The input is a frequency (in cycles second), pacchetto software specifica la rete, talvolta chiamata patch, che per corrisponde and the output is a sinusoid of peak amplitude one. sostanzialmente all’algoritmo di sintesi da utilizzare, e quindi si preoccupa di Figure 1.5 (parttemporalmente, b) shows how toi vari multiply the output of a sinusoidal oscillator come controllare, generatori. In questo paragrafo usiamo by an appropriate scale factorper y[n] to controlleits amplitude. Since the oscillator’s diagrammi a blocchi astratti descrivere patches, ma nella sezione “esempi” peak amplitude is 1, the un peak amplitude of the product isspecifico about y[n], assuming (pagina 16), sceglieremo ambiente di implementazione e mostreremo alcuni dei dettagli daldoesn’t software. y[n] changes slowlydipendenti enough and become negative in value. Figure 1.6 shows the sinusoid of Figure 1.1 is affected by nel amplitude Per mostrare comehow produrre una sinusoide con ampiezza variabile tempo, dovremobyintrodurre due controlling generatori signals unitari.y[n]. Innanzitutto abbiamo bisogno di change two different The controlling signal shown unapart sinusoide che viene ottenuta tramite un oscillatore. La amplitudeFigura 1.5 in (a) haspura a discontinuity, and so therefore does the resulting (parte a) mostra una rappresentazione un show oscillatore sinusoidale come controlled sinusoid shown in (b). Partsgrafica (c) anddi(d) a more gently-varying icona. L’input `e una cicli al secondo), e l’output `e una sinusoide possibility for y[n] andfrequenza the result.(inIntuition suggests that the result shown in (b) di ampiezza di picco pari a 1. La Figura 1.5 (parte b) mostra come moltiplicare l’uscita di un oscillatore sinusoidale, mediante un appropriato fattore di scala y[n], per controllarne l’ampiezza. Poich´e l’ampiezza di picco dell’oscillatore `e 1, l’ampiezza di picco


1.5. SYNTHESIZING A SINUSOID

8

9

Capitolo 1. Sinusoidi, ampiezza e frequenza

y[n]

1 (a)

50

0

n

-1 1

x[n]y[n]

(b) -1 1

y[n]

(c) -1 1

x[n]y[n]

(d)

-1

Figura 1.6: 1.6: Two Dueamplitude funzioni difunctions ampiezza(parts (partia, a,c) e il (parts risultato di moltiplicarle Figure c), and b, d), the result of per la sinusoide di Figura 1.1 (parti b,d). 1.1. multiplying thempura by the pure sinusoid of Figure del prodotto `e di circa y[n], assumendo che y[n] cambi lentamente e non diventi negativo in valore. La Figura 1.6 mostra come la sinusoide di Figura 1.1 `e influenzata dalla variazione di ampiezza da due diversi segnali di controllo y[n]. Il segnale di controllo mostrato nella parte (a) presenta una discontinuit`a, che si ripresenta, pertanto, nella sinusoide risultante, illustrata in (b). Le parti (c) e (d) mostrano una possibilit` a di variazione, senza discontinuit`a, per y[n] ed il relativo risultato. L’intuizione suggerisce che il risultato riportato in (b) non suona come una sinusoide variabile in ampiezza, ma come, invece, una sinusoide interrotta da un “pop” udibile, dopo di che continua a volume inferiore. In generale, per motivi che non possono essere spiegati in questo capitolo, i segnali di controllo di ampiezza y[n] che si muovono in maniera continua da un valore all’altro sono meno soggetti a dare origine a risultati parassitari (come ad esempio il “pop”) rispetto a quelli che cambiano bruscamente.


1.6. SUPERPOSING SIGNALS

1.5. Sintetizzare una sinusoide

11

9

FREQUENCY

OUT

Figure 1.7: Using an envelope generator to control amplitude.

Figura 1.7: Utilizzo di un generatore di inviluppo per controllare l’ampiezza.

ARMS {x[n]} + ARMS {y[n]} ≥ ARMS {x[n] + y[n]}

Per ora possiamo stabilire due regole generali senza per`o giustificarle. InIf we fix ananzitutto, window from M to Npure + Msono − 1i as usual,pi` we can write the parassitari mean le sinusoidi segnali u sensibili agliout effetti power of di theunsum of two signals: rapido cambiamento di ampiezza. Quindi, quando si desidera testare una transizione di ampiezza, se funziona per + le 2sinusoidi probabilmente funzioner`a P {x[n] + y[n]} = P {x[n]} + P {y[n]} · COV{x[n], y[n]} anche per altri segnali. In secondo luogo, a seconda del segnale di cui si sta where wecambiando have introduced the covariance two signals:avr`a bisogno di un tempo di l’ampiezza, il controllo of dell’ampiezza “rampa” tra 0 e 30 millisecondi – 0 per i segnali pi` u tolleranti (come il rumore x[M ]y[M ] + · · · + x[M + N − 1]y[M + N − 1] bianco) ey[n]} 30 per=i meno (come una sinusoide). Tutto questo dipende anche, in COV{x[n], N contesto acustico. modo complicato, dai livelli di ascolto e dal The covariance may be positive, zero, or negative. Over apossono sufficiently Opportune funzioni y[n] di controllo dell’ampiezza esserelarge ottenute window, the covariance of twodisinusoids different frequencies is negligible usando un generatore inviluppowith (envelope generator). La Figura 1.7 mostra rete mean in cui power. viene utilizzato un generatore di inviluppo per controllare compareduna to the Two signals which have no covariance are calledl’ampiezza di correlation un oscillatore. generatori di inviluppo to variano ampiamente uncorrelated (the is theI covariance normalized lie between -1 andnella costruzione dell’inviluppo stesso, ma qui concentreremo sulistipo u semplice, 1). In general, for two uncorrelated signals, thecipower of the sum thepi` sum of cio`e quello che genera segmenti di retta, come mostrato nella Figura 1.6 (parte the powers: c). Se viene specificato un segmento di retta che collega due valori di uscita a e P {x[n] +N y[n]} = P {x[n]} + P dal {y[n]}, whenever COV{x[n], y[n]} = 0 `e: b, su campioni a partire numero di campione M , allora l’output n−M Put in terms of amplitude, this becomes: y[n] = a + (b − a)

, M ≤ n ≤ M + N − 1. N 2 2 (ARMS {x[n] + y[n]}) = (ARMS {x[n]}) + (ARMS {y[n]}) . L’output pu` o avere un certo numero di segmenti come il precedente, coprendo, This is thealla familiar Pythagorean So numbers uncorrelated signals can be thought fine, l’intera gammarelation. dei sample n; i segmenti orizzontali, piatti, of as vectors at right to each other; positively correlated ones as having possono essereangles realizzati impostando a = b. Oltre a modificare ampiezze dei suoni, il controllo dell’ampiezza spesso an acute angle between them, leand negatively correlated as having an obtuse viene them. utilizzato, in particolar modo nelle applicazioni in tempo reale, sempliangle between cemente if pertwo attivare o disattivare i suoni: disattivare basta semplicemente For example, uncorrelated signals bothper have RMS amplitude a, the √ considerare una rampa verso lo zero. La maggior parte dei softwares di sintesi sum will have RMS amplitude 2a. On the other hand if the two signals happen forniscono anche modi per evitare che i moduli calcolino i campioni, ma qui to be equal—the most correlated possible—the sum will have amplitude 2a, invece noi utilizzeremo il controllo dell’ampiezza. which is the maximum allowed by the triangle inequality. Il generatore di inviluppo risale all’era analogica [Str95, p.64] [Cha80, p. 90]. Gli oscillatori con frequenza controllabile sono stati chiamati voltage2


10

Capitolo 1. Sinusoidi, ampiezza e frequenza

controlled oscillators o VCO, e l’operazione di moltiplicazione veniva fatta usando un voltage-controlled amplifier o VCA [Str95, pp.34-35] [Cha80, pp.84-89]. I generatori di inviluppo sono descritti pi` u in dettaglio nel paragrafo 4.1.

1.6

Segnali sovrapposti

Se un segnale x[n] ha un’ampiezza, di picco o RMS, pari ad A (in qualche finestra fissata), allora il segnale scalato k·x[n] (dove k ≥ 0) ha ampiezza kA. La potenza media del segnale scalato cambia per un fattore di k 2 . La situazione diventa pi` u complicata quando due diversi segnali vengono sommati insieme; conoscere solo le ampiezze dei due segnali non basta per conoscere l’ampiezza della somma. Sicuramente le due misure di ampiezza soddisfano la disuguaglianza triangolare: dati due segnali x[n] e y[n], Apeak {x[n]} + Apeak {y[n]} ≥ Apeak {x[n] + y[n]}, ARMS {x[n]} + ARMS {y[n]} ≥ ARMS {x[n] + y[n]}. Se, come al solito, si sceglie una finestra da M a M + N − 1, possiamo scrivere la potenza media della somma di due segnali: P {x[n] + y[n]} = P {x[n]]} + P {y[n]} + 2 · COV{x[n], y[n]} dove abbiamo introdotto la covarianza dei due segnali: COV{x[n], y[n]} =

x[M ]y[M ] + · · · + x[M + N − 1]y[M + N − 1] . N

La covarianza pu` o essere positiva, zero o negativa. Su una finestra sufficientemente grande, la covarianza di due sinusoidi, con frequenze diverse, `e trascurabile rispetto alla potenza media. Due segnali che non hanno covarianza sono chiamati non-correlati (la correlazione `e la covarianza normalizzata affinch´e sia un valore tra −1 e 1). In generale, per due segnali non-correlati, la potenza della somma `e la somma delle potenze: P {x[n] + y[n]} = P {x[n]]} + P {y[n]},

se COV{x[n], y[n]} = 0.

In termini di ampiezze, questo diventa: 2 2 2 ARMS {x[n] + y[n]} = ARMS {x[n]} + ARMS {y[n]} .

Questa `e la nota relazione pitagorica. Quindi i segnali non-correlati possono essere pensati come vettori posti ad angolo retto tra loro; i segnali positivamente correlati possono essere pensati come vettori che formano un angolo acuto, e quelli negativamente correlati come vettori che formano un angolo ottuso. Ad esempio, se due segnali non-correlati hanno entrambi ampiezza RMS pari √ ad a, la somma avr` a ampiezza RMS pari a 2a. D’altra parte, se i due segnali sono uguali – il caso di maggiore correlazione – la somma avr`a ampiezza pari a 2a, che `e il massimo consentito dalla disuguaglianza triangolare.


1.8. Informazioni sugli esempi software

1.7

11

Segnali periodici

Si dice che un segnale x[n] si ripete con periodo τ se x[n + τ ] = x[n] per ogni n. Un simile segnale si ripeterebbe anche nei periodi 2τ e cos`ı via; il pi` u piccolo τ , se esiste, per cui il segnale viene ripetuto `e detto il periodo del segnale. Nella trattazione sui periodi di segnali audio digitali, ci imbattiamo subito nella difficolt` a di descrivere i segnali il cui “periodo” non sia un intero, nel qual caso l’equazione di cui sopra non ha senso. Per ora ignoriamo questa difficolt` a supponendo che il segnale x[n] possa in qualche modo essere interpolato tra i campioni in modo che sia ben definito se n `e un intero o no. Una sinusoide ha un periodo (in campioni) di 2π/ω dove ω `e la frequenza angolare. Pi` u in generale, ogni somma di sinusoidi con frequenze kω, al variare dell’intero k, si ripeter` a dopo 2π/ω campioni. Tale somma `e chiamata serie di Fourier: x[n] = a0 + a1 cos(ωn + φ1 ) + a2 cos(2ωn + φ2 ) + · · · + ap cos(pωn + φp ). Inoltre, se facciamo alcune ipotesi tecniche (cio`e che i segnali contengano solo un numero finito di frequenze), possiamo rappresentare qualsiasi segnale periodico come tale somma. Questa `e la variante temporalmente discreta dell’analisi di Fourier di cui parleremo nel Capitolo 9. Le frequenze angolari delle sinusoidi, nella formula precedente, sono tutte multipli interi di ω. Esse prendono il nome di armonici di ω, che a sua volta viene chiamata fondamentale. In termini di toni, le armoniche ω, 2ω, . . . sono ad intervalli di 0, 1200, 1902, 2400, 2786, 3102, 3369, 3600, . . . cents al di sopra della fondamentale; questa sequenza di toni `e talvolta chiamata serie armonica. I primi sei di questi sono tutti molto vicini a multipli di 100; in altre parole, i prime sei armonici di una nota nella scala occidentale si avvicinano (ma non sempre esattamente eguali) ad altre note della stessa scala; il terzo e il sesto difettano solo di 2 centesimi e il quinto di 14. In altri termini, il rapporto di frequenze 3:2 (una quinta perfetta nella terminologia occidentale) `e quasi esattamente sette semitoni, 4: 3 (una quarta perfetta) `e circa cinque semitoni, e i rapporti 5:4 e 6:5 (terza maggiore e minore) sono abbastanza vicini agli intervalli di quattro e tre semitoni rispettivamente. Una serie di Fourier (con solo tre termini) `e mostrata in Figura 1.8. I primi tre grafici sono sinusoidi, le cui frequenze sono in rapporto 1:2:3. Il periodo comune `e contrassegnato sull’asse orizzontale. Ogni sinusoide ha una diversa ampiezza e una diversa fase iniziale. La somma delle tre sinusoidi, rappresentata in fondo alla figura, non `e una sinusoide, ma mantiene ancora la periodicit`a condivisa dalle tre componenti sinusoidali. Tralasciando le domande riguardanti la fase, possiamo usare un banco di oscillatori sinusoidali per sintetizzare toni periodici, o addirittura variarli con continuit` a attraverso una successione di toni periodici, specificando la frequenza fondamentale e le (eventualmente variabili) ampiezze delle parziali (armoniche). La Figura 1.9 mostra uno schema a blocchi per ottenere ci`o. Questo `e un esempio di sintesi additiva; il termine, pi` u in generale, pu`o essere applicato a reti in cui le frequenze degli oscillatori sono controllabili in maniera indipendentemente. Ai suoi albori, la computer music componeva utilizzando i suoni della sintesi additiva.


12 1.7. PERIODIC SIGNALS

Capitolo 1. Sinusoidi, ampiezza e frequenza 13

+

+

=

Figure Fourier showing sinusoids and their The three Figura 1.8: 1.8: AUna serie series, di Fourier che three mostra tre sinusoidi e la sum. loro somma. Le component sinusoids have frequencies in the in ratio 1:2:3. 1:2:3. tre componenti sinusoidali hanno frequenze rapporto


1.8. Informazioni sugli esempi software

14

13

CHAPTER 1. SINUSOIDS, AMPLITUDE AND FREQUENCY

FREQUENCY (more) 3 2

OUT

Figure many oscillators to synthesize a waveformuna withforma desired harFigura 1.9: 1.9: Using Possiamo usare molti oscillatori per sintetizzare d’onda monic amplitudes. con ampiezze desiderate per gli armonici.


14

Capitolo 1. Sinusoidi, ampiezza e frequenza

1.8

Informazioni sugli esempi software

Gli esempi di questo libro sono fatti utilizzando il software Pure Data (Pd), e per capirli `e necessario imparare almeno qualcosa su tale software. Pd `e un ambiente per realizzare rapidamente applicazioni per la computer music, destinate principalmente alle performance live musicali. Pd pu`o essere utilizzato anche per altri media, ma che qui non affronteremo. Oltre a Pd esistono diversi altri ambienti DSP audio di tipo patchable. Il pi` u diffuso `e certamente Csound [Bou00] di Barry Vercoe, che differisce da Pd essendo di tipo text-based (e non GUI-based). Questo `e un vantaggio in alcuni aspetti e uno svantaggio in altri. Csound `e pi` u adatto di Pd per l’elaborazione in batch e gestisce la polifonia molto meglio di Pd. D’altra parte, Pd ha una struttura di controllo in tempo reale che risulta meglio sviluppata rispetto a Csound. Genealogicamente, Csound appartiene ai cosiddetti Music N Languages [Mat69, pp.115-172]. Un’altra alternativa open-source, ampiamente utilizzata, `e SuperCollider di James McCartney, che `e anche maggiormente text-based di Pd, ma come Pd `e esplicitamente progettata per l’utilizzo in tempo reale. SuperCollider ha potenti costruzioni linguistiche che lo rendono uno strumento pi` u appropriato di Csound per compiti quali scrivere loop o mantenere strutture di dati complesse. Infine, Pd ha un fratello ampiamente usato, il programma commerciale Max/MSP della Cycling74 (gli altri softwares qui citati sono tutti open source). Sia i principianti che i gestori di sistemi in laboratori informatici multiutente e multifunzionali troveranno Max/MSP meglio supportato e documentato di Pd. ` possibile apprendere Pd e applicare tale conoscenza in Max/MSP e viceversa, E e addirittura importare patches da uno all’altro, ma i due softwares non sono compatibili al 100%.

Introduzione rapida a Pd I documenti in Pd sono chiamati patches. Essi corrispondono approssimativamente alle caselle negli schemi a blocchi astratti mostrati in precedenza in questo capitolo, ma in dettaglio sono piuttosto diversi, perch´e Pd `e un ambiente di implementazione, non un linguaggio di specificazione. Una patch in Pd, come quella mostrata in Figura 1.10, `e costituita da un insieme di caselle (boxes) collegate in una rete. Il bordo di una casella indica il modo in cui viene interpretato il testo e come funziona la casella. Nella parte (a) della figura vediamo tre tipi di caselle. Dall’alto verso il basso sono: • una message box (casella di messaggio). Le message boxes, con un bordo a forma di bandiera, interpretano il testo come un messaggio da inviare ogni volta che la casella `e attivata (da un messaggio in ingresso o con un dispositivo di puntamento). Il messaggio in questo caso `e costituito semplicemente dal numero “21”. • una object box (casella di oggetto). Le object boxes hanno un bordo rettangolare; interpretano il testo per creare oggetti quando si carica una patch. Le object boxes possono contenere centinaia di classi diverse di oggetti – compresi oscillatori, generatori di inviluppo e altri moduli di elaborazione del segnale che introdurremo in seguito – a seconda del testo contenuto al loro interno. In questo esempio, la casella contiene un sommatore. Nella


1.8. Informazioni sugli esempi software 15 16 CHAPTER 1. SINUSOIDS, AMPLITUDE AND FREQUENCY

21

message box

+ 13

object box

440

frequency

osc~ sinusoidal oscillator

number (GUI) box

34

0.1 *~

0

amplitude (on/off)

multiplier

dac~ output (a)

(b)

Figure 1.10: (a) three types of boxes in Pd (message, object, and GUI); (b) a Figurapatch 1.10: to (a)output tre tipi di caselle in Pd (messaggio, oggetto e GUI); (b) una simple a sinusoid. semplice patch che produce una sinusoide. message or with a pointing device). The message in this case consists simply of parte the number “21”. in Pd, la maggioranza delle caselle sono di timaggior delle patches po “oggetto”. La prima parola digitata in una object box specifica la sua • an object box. Objectcaso boxes have“+”. a rectangular border; interpret the classe, che in questo `e solo Le ulteriore parolethey aggiuntive (sepatext objects when nella you load a patch. Object boxes arguments, may hold rate to da create spazi) che appaiono casella si chiamano creation hundreds of different classes dell’oggetto of objects—including oscillators, e specificano lo stato iniziale quando viene creato. envelope generators, and other signal processing modules to be introduced later— depending on the text inside. In this example, the box holds an adder. • una number box (casella numerica). Le number boxes sono un tipo parIn most Pd patches, the majority of boxes are of type “object”. The first ticolare di casella GUI. Altri includono pulsanti e commutatori; questi word typed into an object box specifies its class, which in this case is just verranno mostrati in seguito negli esempi. La number box ha un bordo “+”. Any additional (blank-space-separated) words appearing in the box a forma di carta punzonata, con un taglio nell’angolo superiore destro. are called creation arguments, which specify the initial state of the object Mentre l’aspetto di un oggetto o di un messaggio `e fisso quando una patch when it is created. `e in esecuzione, il contenuto di una number box (il testo) cambia in modo ` inoltre possibile riflettere corrente nella casella. • adanumber box.il valore Number boxes contenuto are a particular type of E GUI box. Others utilizzare unabuttons casella and numerica controller clicupe later trascinando include push togglecome switches; these facendo will come in the su e gi` u oppure digitando i valori in essa. examples. The number box has a punched-card-shaped border, with a nick out of its top right corner. Whereas the appearance of an object or Nella Figura (parte a) laa casella messaggio, quando box’s viene contents cliccata, message box1.10 is fixed when patch isdirunning, a number invia (the il messaggio “21” a una casella di oggetto che aggiunge 13. I cavi che text) changes to reflect the current value held by the box. You can collegano le caselle trasportano i dati da una casella all’altra; le uscite delle also use a number box as a control by clicking and dragging up and down, caselle sul fondo e gli in cima. orsono by typing values in ingressi it. La Figura 1.10 (parte b) mostra una patch Pd che produce una sinusoide con In Figure 1.10 (part a)controllabili. the message Qui, box, iwhen clicked, sends the message frequenza e ampiezza cavi di collegamento sono di due“21” tipi; to an object 13 to it. lines sporadici connectinge the boxes i cavi sottili box sonowhich per iladds trasporto di The messaggi quelli pi` u carry spessidata (che from one box to the next; outputs of boxes are ondithe bottom andtrasportano inputs on collegano l’oscillatore, il moltiplicatore e l’oggetto uscita dac∼) top. i segnali audio digitali. Poich´e Pd `e un programma in tempo reale, i segnali Figure 1.10 (part shows a Pd patch whichi messaggi makes a sinusoid conaudio scorrono in un b) flusso continuo. Di contro, sporadiciwith appaiono trollable frequency andma amplitude. The connecting patch lines are of two types in momenti specifici, forse imprevedibili, nel tempo.

Se una connessione porta messaggi o segnali dipende dalla scatola da cui parte la connessione; cos`ı, per esempio, l’oggetto + produce un messaggio, ma l’oggetto ∗ ∼ emette un segnale. Gli ingressi di un determinato oggetto possono o meno accettare segnali (ma accettano sempre messaggi, anche solo per con-


16

Capitolo 1. Sinusoidi, ampiezza e frequenza

vertirli in segnali). Per convenzione, object boxes con segnale in input o output contengono nel nome una tilde (“∼”) come in “∗ ∼” e “osc∼”.

Come trovare ed eseguire gli esempi Per eseguire le patches, `e necessario scaricare, installare ed eseguire Pd. Le istruzioni per farlo appaiono nella documentazione HTML online di Pd, che `e disponibile all’indirizzo http://crca.ucsd.edu/∼msp/software.htm. Questo libro dovrebbe apparire all’indirizzo http:/crca/ucsd/edu/∼msp/techniques.htm possibilmente in pi` u revisioni. Scegliere la revisione che corrisponde al testo che si sta leggendo (o forse proprio l’ultima) e scaricare l’archivio contenente la revisione associata degli esempi (si pu`o anche scaricare un archivio della versione HTML di questo libro per un accesso pi` u facile sul proprio computer). Gli esempi devono essere contenuti in una singola directory, in quanto alcuni di essi dipendono da altri file della directory e potrebbero non caricarsi correttamente se le cose sono state spostate. Se si vuole copiare uno degli esempi in un’altra directory in modo da poterci costruire sopra (che `e il caso di fare), bisogna includere la directory degli esempi nel percorso di ricerca di Pd (vedere la documentazione di Pd) o capire quali altri files sono necessari e copiare anche loro. Un buon modo per scoprire questo sta nell’eseguire Pd sul file trasferito e vedere di cosa Pd si lamenta che non riesce a trovare. Dovrebbero esserci dozzine di file nella cartella “esempi”, inclusi gli esempi stessi e i file di supporto. I nomi dei files degli esempi iniziano tutti con una lettera (A per il capitolo 1, B per 2, ecc.) e un numero, come in “A01.sinewave.pd”. Le patches di esempio sono anche distribuite con Pd, ma attenzione che ci potrebbe essere una versione diversa degli esempi e che potrebbero non corrispondere al testo che si sta leggendo.

1.9

Esempi

Riscalatore costante di ampiezza L’esempio A01.sinewave.pd, mostrato in Figura 1.11, contiene essenzialmente la patch pi` u semplice possibile per produrre un suono, con solo tre caselle di oggetti (ci sono anche commenti e due caselle di messaggio per accendere e spegnere il motore “DSP” (audio) di Pd). I tre oggetti sono: osc∼ : oscillatore sinusoidale. L’ingresso sul lato sinistro e l’uscita sono segnali audio digitali. L’input `e una frequenza (eventualmente variabile nel tempo) in Hertz. L’output `e la sinusoide alla frequenza specificata. Se nulla `e collegato all’ingresso della frequenza, il creation argument (440 in questo esempio) viene ` possibile utilizzato come frequenza. L’output ha ampiezza di picco pari a 1. E impostare una fase iniziale inviando messaggi (non segnali audio) all’ingresso destro. All’ingresso sinistro (frequenza) possono anche essere inviati messaggi per impostare la frequenza, poich´e qualsiasi ingresso che riceve un segnale audio pu` o ricevere anche messaggi che vengono automaticamente convertiti nel segnale audio desiderato.


1.9. Esempi

17

1.9. EXAMPLES

19

MAKING A SINE WAVE Audio computation in Pd is done using "tilde objects" such as the three below. They use continuous audio streams to intercommunicate, and also communicate with other ("control") Pd objects using messages. osc~ 440

440 Hz. sine wave at full blast

*~ 0.05

reduce amplitude to 0.05

dac~

send to the audio output device

Audio computation can be turned on and off by sending messages to the global "pd" object as follows: ; pd dsp 1

; pd dsp 0

ON

OFF

<-- click these

You should see the Pd ("main") window change to reflect whether audio is on or off. You can also turn audio on and off using the "audio" menu, but the buttons are provided as a shortcut. When DSP is on, you should hear a tone whose pitch is A 440 and whose amplitude is 0.05. If instead you are greeted with silence, you might want to read the HTML documentation on setting up audio. In general when you start a work session with Pd, you will want to choose "test audio and MIDI" from the help window, which opens a more comprehensive test patch than this one.

Figura1.11: 1.11:The Il contenuto delthe primo esempio di patch Pd: A01.sinewave.pd. Figure contents of first Pd example patch:inA01.sinewave.pd.


18

Capitolo 1. Sinusoidi, ampiezza e frequenza

∗ ∼ : moltiplicatore. Esiste in due forme. Se viene specificato un creation argument (come in questo esempio, che `e 0.05), questa casella moltiplica un segnale audio digitale (nell’ingresso sinistro) per quel numero; questo pu`o essere aggiornato inviando messaggi all’ingresso destro. Se non viene fornito alcun argomento, questa casella moltiplica due segnali audio digitali in arrivo insieme. dac∼ : dispositivo di uscita audio. A seconda dell’hardware, questo potrebbe non essere effettivamente un convertitore digitale/analogico (DAC = Digital/Analog Converter) come suggerisce il nome; ma in genere permette di inviare qualsiasi segnale audio alle uscite audio del computer. Se non ci sono creation arguments, il comportamento predefinito `e quello di inviare ai canali uno e due dell’hardware audio; `e possibile specificare numeri di canali alternativi (uno o molti) utilizzando i creation arguments. Pd stesso pu`o essere configurato per utilizzare due o pi` u canali di uscita, oppure potrebbe non avere affatto aperto il dispositivo di uscita audio; consultare la documentazione di Pd per i dettagli. Le due message boxes mostrano una peculiarit`a nel modo in cui i messaggi vengono analizzati nelle caselle di messaggio. In precedenza, nella Figura 1.10 (parte a), il messaggio consisteva solo del numero 21. Una volta cliccatovi sopra, quella casella ha inviato il messaggio “21” alla sua uscita e quindi a tutti gli oggetti connessi ad esso. In questo esempio corrente, il testo delle caselle di messaggio inizia con un punto e virgola. Questo `e un terminatore tra i messaggi (quindi il primo messaggio `e vuoto), dopo di che la parola successiva viene considerata come il nome del destinatario del messaggio che segue. Cos`ı il messaggio, in questo esempio, `e “dsp 1” (o “dsp 0”) e il messaggio deve essere inviato, non ad alcun oggetto connesso – che comunque non ci sono – ma piuttosto all’oggetto denominato “pd”. Questo particolare oggetto viene fornito invisibilmente dal programma Pd e `e possibile inviargli diversi messaggi per controllare lo stato globale di Pd, in questo caso attivando il motore audio (“1”) e disattivandolo (“0”). Molti altri dettagli sugli aspetti di controllo di Pd, come sopra, sono spiegati in una diversa serie di patches di esempio (gli “esempi di controllo”) nella release di Pd, ma saranno solo accennati qui quando necessari per mostrare le tecniche di elaborazione del segnale che sono oggetto di questo libro.

Controllo di ampiezza in decibel L’esempio A02.amplitude.pd mostra come effettuare un controllo di ampiezza abbastanza grezzo; gli elementi attivi sono mostrati in Figura 1.12 (parte a). C’`e una nuova classe di oggetti: dbtorms : conversione da Decibel ad ampiezza lineare. Il termine “RMS” `e improprio; doveva essere chiamato “dbtoamp”, in quanto converte veramente da decibel a qualsiasi unit` a di ampiezza lineare, sia esso RMS, di picco o altro. Un input di 100 dB `e normalizzato ad un output di 1. Valori superiori a 100 sono accettati (120 dar` a 10), ma valori inferiori o uguali a zero forniranno sempre zero (un input pari a zero fornirebbe altrimenti un numero positivo piccolo). Questo `e un oggetto di controllo, cio`e i numeri in entrata e in uscita sono messaggi, non segnali. (Un oggetto corrispondente, dbtorms∼ , `e quello relativo al segnale. Tuttavia, come oggetto di segnale, questo `e costoso in termini di CPU e spesso troveremo modi alternativi per evitare di usarlo).


1.9. Esempi

osc~ 440

19

osc~ 440

osc~ 440

0

0.1 2000 <-- slow on

dbtorms

0.1 50 0.1

0

<-- fast on

<-- instant on

0 50 <-- fast off dac~

0

+~ osc~ 660

0 2000 <-- slow off

*~ 0

osc~ 550

<-- instant off

line~ <--- ramp generator

+~ output~

dB 0 mute

*~

<-- multiplier: this time taking a signal in dac~ on both sides. (a)

(b)

(c)

Figure 1.12: The active ingredients to three patches: (a) A02.amplitude.pd; (b)

Figura 1.12: (c) GliA05.output.subpatch.pd. ingredienti attivi di tre patches: (a) A02.amplitude.pd; (b) A03.line.pd; A03.line.pd; (c) A05.output.subpatch.pd. Le due number boxes sono collegate all’ingresso e all’uscita dell’oggetto dbtorms. L’ingresso funziona come un controllo; usare il mouse su di esso (fare clic e trascinare verso l’alto o verso il basso) per modificare l’ampiezza. La number box `e stata impostata per un range da 0 a 80; questa `e una protezione per i diffusori e le orecchie, ed `e saggio costruire tali limiti nelle proprie patches. ` inutile modiL’altra number box mostra l’output dell’oggetto dbtorms. E ficare questa casella numerica, poich´e la sua uscita non `e collegata da nessuna parte; `e qui solo per visualizzare il suo ingresso. Le number boxes possono essere utili come controllers, per visualizzare output numerici o per entrambe le funzioni, anche se, se si utilizzano per entrambe, ci pu`o essere qualche lavoro aggiuntivo da fare.

Controllo di ampiezza, senza irregolarit` a, tramite un generatore di inviluppo Come mostrato in Figura 1.6, un modo per apportare modifiche senza salti all’ampiezza di un segnale, cio`e senza clic, `e quello di moltiplicarla per l’uscita di un generatore di inviluppo come mostrato nel diagramma a blocchi in Figura 1.7. Questo pu` o essere implementato in Pd utilizzando l’oggetto line∼: line∼ : generatore di inviluppo. L’uscita `e un segnale che fa una rampa lineare da un valore all’altro in un determinato tempo, come determinato dai messaggi ricevuti. Gli ingressi ricevono messaggi per specificare i valori di destinazione (ingresso sinistro) e i ritardi di tempo (ingresso destro). A causa di una regola generale dei messaggi in Pd, `e sufficiente una coppia di numeri, inviata all’ingresso sinistro, per specificare insieme un valore di destinazione e un


20

Capitolo 1. Sinusoidi, ampiezza e frequenza

tempo della rampa. Il tempo `e in millisecondi (tenendo conto della frequenza di campionamento) e il valore di destinazione `e privo di unit`a, o in altre parole, la sua gamma di output deve essere conforme a qualsiasi ingresso con cui possa essere collegata. L’esempio A03.line.pd mostra l’uso di un oggetto line∼ per controllare l’ampiezza di una sinusoide. La parte attiva `e mostrata in Figura 1.12 (parte b). Le sei message boxes sono tutte connesse all’oggetto line∼ e vengono attivate facendo clic su di esse; quella in alto, per esempio, specifica che line∼ fa una rampa (a partire da qualunque sia il suo output prima della ricezione del messaggio) al valore 0.1 in due secondi. Dopo che i due secondi sono trascorsi, a meno che non siano arrivati altri messaggi nel frattempo, l’output rimane costante a 0.1. I messaggi possono arrivare prima che i due secondi siano passati, nel qual caso l’oggetto line∼ abbandona la sua vecchia traiettoria e ne prende una nuova. Due messaggi potrebbero arrivare a line∼ allo stesso tempo o cos`ı vicino nel tempo che nessun calcolo DSP avvenga tra i due; in questo caso, il messaggio precedente non ha alcun effetto, poich´e line∼ non avr`a ancora modificato l’output per seguire il primo messaggio ed il suo output corrente, invariato, viene quindi utilizzato come punto di partenza per il secondo segmento. Un’eccezione a questa regola `e che, se line∼ ottiene un valore temporale pari a zero, il valore di output viene immediatamente impostato sul nuovo valore e gli altri segmenti partiranno dal nuovo valore; quindi, inviando due coppie, il primo con un valore temporale di zero e il secondo con un valore temporale diverso da zero, si pu` o specificare in modo indipendente i valori iniziali e finali di un segmento nell’output di line∼. Il trattamento dell’ingresso destro di line∼ `e inusuale tra gli oggetti Pd in quanto dimentica i vecchi valori; un messaggio con un singolo numero come “0.1” `e sempre equivalente alla coppia “0.1 0”. Quasi qualsiasi altro oggetto conserver` a il valore precedente per l’ingresso destro, anzich´e ripristinarlo a zero. L’esempio A04.line2.pd mostra graficamente l’output dell’oggetto line∼. Utilizzando le varie caselle di messaggio, `e possibile ricreare gli effetti mostrati nella Figura 1.6.

Triade maggiore L’esempio A05.output.subpatch.pd, i cui ingredienti attivi sono mostrati in Figura 1.12 (parte c), presenta tre sinusoidi con frequenze nel rapporto 4:5:6, in modo che le prime due siano separate da una terza maggiore, le ultime due da una terza minore, e la prima e la terza da una quinta. La frequenza pi` u bassa `e 440, pari al La sopra al Do centrale, o MIDI 69. Gli altri sono rispettivamente pari a circa quattro e sette semitoni pi` u alti. Le tre sinusoidi hanno ampiezze uguali. Il controllo di ampiezza, in questo esempio, viene curato da un nuovo oggetto chiamato output∼. Questo non `e un oggetto incorporato di Pd, ma `e una patch di Pd contenuta nel file, “output.pd” (`e possibile vedere l’interno di output∼ aprendo il menu delle propriet` a della casella e selezionando “open”). Ci sono due controlli, uno per l’ampiezza in dB (100 equivale al “guadagno unitario”) e un pulsante “mute”. Il motore audio di Pd viene attivato automaticamente quando si imposta il livello di output – questo potrebbe non essere il comportamento migliore in generale, ma `e appropriato per queste patches di esempio.


1.9. EXAMPLES Esempi 1.9.

23

r frequency

r pitch

set $1

set $1

0

<−− set frequency s frequency

ftom <−− convert frequency to "MIDI" pitch s pitch

0

21

<−− set MIDI pitch s pitch

mtof <−− convert "MIDI" pitch to frequency s frequency

Figure 1.13: Conversion between pitch and frequency in A06.frequency.pd.

Figura 1.13: Conversione tra nota MIDI e frequenza in A06.frequency.pd.

be abbreviated as “r”, waits for non-local messages to be sent by a send obIl meccanismo per l’incorporazione unausing patch di Pd come di oggetti ject (described below) or by a messagedibox redirection (the casella “;” feature all’interno di un altroexample, sar`a discusso nel paragrafo discussed in the earlier A01.sinewave.pd). The4.7. argument (such as “frequency” and “pitch” in this example) is the name to which messages are sent. Multiple receive objects may share the esame name, in which case any message Conversione tra frequenza tono sent to that name will go to all of them.

L’esempio 1.13) l’oggetto di directs Pd permesconvertire send , s :A06.frequency.pd The send object, (Figura which may be mostra abbreviated as “s”, note MIDI in unit` a di frequenza (mtof, significa “MIDI a frequenza”) e il suo sages to receive objects. inverso ftom. Introduciamo anche altre due classi di oggetti, send e receive. Two new properties of number boxes are used here. Earlier we’ve used them asmtof controls or as: displays; the MIDI two number boxes each functioninasbase both. , ftom converte here, la nota nella relativa frequenza alle forIfmule a number box gets a number in its inlet, it not only displays the number di conversione (pagina 6). Gli ingressi e le uscite sono messaggi (esistono but also repeats the number to its output. However, a number box may also anche gli equivalenti con il “tilde”, sebbene, come dbtorms∼, sono costosi cobe sent a “set” message, such as “set 55” for example. This would set the me tempo macchina). L’output dell’oggetto ftom `e −1500 se l’input `e zero o value of the number box to 55 (and display it) but not cause the output that negativo; se si “55” d`a amessage. mtof −1500, un valore pi` ucoming basso, from fornisce in would resultaltrettanto, from the simple In thiso case, numbers output zero. the two receive objects are formatted (using message boxes) to read “set 55” instead of just andi so on. (The word “$1” is replaced by the receive , r “55”, : riceve messaggi nonspecial localmente. L’oggetto receive, che pu`o incoming number.) con This“r”, is done because otherwise we would have anda infinite essere abbreviato attende messaggi non-locali da inviare un oggetto loop: changeo pitch which wouldbox change frequency and so on send frequency (descrittowould di seguito) da una message utilizzando il reindirizzamento forever, or at least until something broke.

(il “;” discusso nell’esempio precedente, A01.sinewave.pd ). L’argomento (come “frequency” e “pitch” in questo esempio) `e il nome a cui vengono inviati i messaggi. Pi` u oggetti receive possono condividere lo stesso nome, nel qual More additive synthesis caso tutti i messaggi inviati a tale nome verranno inviati a tutti i receive con The major triad (Example A06.frequency.pd, Page 22) shows one way to comquel nome.

bine several sinusoids together by summing. There are many other possible ways collections of sinusoids, whichabbreviato we’ll show two. Example sendto, organize s : l’oggetto send, che pu`oofessere con “s”, indirizza i A07.fusion.pd shows four oscillators, whose frequencies are tuned messaggi agli(Figure oggetti1.14) receive. in theAdesso ratio 1:2:3:4, with relative amplitudes 1, 0.1, 0.2, and amplitudes sono state utilizzate due nuove propriet` a 0.5. delleThe number boxes. In are set by multiplying the outputs of the oscillators (the *~ objects below thecaselle precedenza le abbiamo usate come controllers o come display; qui, le due oscillators). funzionano in entrambi i modi. Se una number box riceve un numero nella

sua entrata, non solo visualizza il numero, ma rinvia anche il numero alla sua uscita. Tuttavia, una message box pu`o anche essere inviata ad un messaggio “set”, come, per esempio, “set 55”. Questo imposta il valore del number box a 55 (e lo visualizza) ma non provoca l’uscita che invece avremmo avuto con il semplice messaggio “55”. In questo caso, i numeri provenienti dai due oggetti receive vengono formattati (utilizzando le message boxes) per leggere “set 55” anzich´e “55” e cos`ı via (la parola speciale $1 `e sostituita dal numero in


2422

CHAPTER 1. SINUSOIDS, AND FREQUENCY Capitolo AMPLITUDE 1. Sinusoidi, ampiezza e frequenza

0

<-- choose a pitch

mtof * 2 osc~ osc~

* 3

* 4 frequencies of harmonics

osc~

osc~ four oscillators

*~ 0.1 *~ 0.2 *~ 0.5 adjust amplitudes +~ +~ +~

*~

add the three overtones together <-- overtones ON/OFF

(OUT) Figura 1.14: Sintesi additiva usando oscillatori armonicamente intonati.

Figure 1.14: Additive synthesis using harmonically tuned oscillators. entrata). Ci` o `e stato fatto perch´e altrimenti avremmo avuto un ciclo infinito: second,cambierebbe third, and la fourth are turned on and off using toggle laThe frequenza nota oscillator che cambierebbe la frequenza e cos` ı via aper switch. This is a graphical control, like the number introduced earlier. The sempre, o almeno fino a quando qualcosa non andassebox in crash.

toggle switch puts out 1 and 0 alternately when clicked on with the mouse. This value is multiplied by the sum of the second, third, and fourth oscillators, Ancoraturning sulla sintesi effectively them on additiva and off. Even when all four oscillators are combined (with the toggle switch in the “1” La triade maggiore (esempio A06.frequency.pd, pagina 20) mostra un modo per position), the resultpi` fuses into atramite single la tone, the pitch of altri the modi leftmost combinare insieme u sinusoidi loro heard somma.atCi sono molti oscillator. In effect this patch sums a four-term Fourier series to generate possibili per organizzare insiemi di sinusoidi, di cui ne mostreremo due. L’esem- a complex, periodic waveform. pio A07.fusion.pd (Figura 1.14) mostra quattro oscillatori, le cui frequenze sono Examplenel A08.beating.pd (Figure 1.15) ampiezze shows another which impostate rapporto 1:2:3:4, con relative 1, 0.1, possibility, 0.2 e 0.5. Leinamsixpiezze oscillators are tuned moltiplicando into three pairs of neighbors, for instance 330 and 330.2 sono impostate le uscite degli oscillatori (gli oggetti ∗∼ sotto gli oscillatori). Hertz. These pairs slip into and out of phase with each other, so that the Il secondo, terzo e quarto oscillatore sono accesi utilizzando un inter- is amplitude of the sum changes over time. Callede spenti beating, this phenomenon ruttore a pulsante (toggle). Questo ` e un controller grafico, come le number boxes frequently used for musical effects. introdotte in precedenza. Il toogle fornisce 1 e 0 alternativamente quando si fatheir Oscillators may be combined in other ways besides simply summing clic con il mouse. Questo valore viene moltiplicato per la somma del secondo, output, and a wide range of resulting sounds is available. Example A09.frequency.mod.pd terzo e quarto oscillatore, quindi frequency effettivamente accendendoli e spegnendoli. (not shown here) demonstrates modulation synthesis, in which one Anche quando tutti e quattro gli oscillatori vengono combinati (con il toggle in oscillator controls another’s frequency. This will be more fully described in posizione “1”), il risultato si fonde in un singolo tono, alla frequenza dell’oChapter 5. scillatore sinistro. In effetti questa patch somma una serie Fourier a quattro termini per generare una forma d’onda complessa e periodica. L’esempio A08.beating.pd (Figura 1.15) mostra un’altra possibilit`a, in cui Exercises sei oscillatori sono sintonizzati in tre coppie di frequenze vicine, ad esempio 330 e 330.2 Hertz. Queste coppie vanno alternativamente in fase e fuori fase, in 1. A sinusoid (Page 1) has initial phase φ = 0 and angular frequency ω = modo che l’ampiezza della somma cambi nel tempo. Questo fenomeno, chiamato π/10. What is its period in samples? What is the phase at sample number battimento (beating) `e spesso utilizzato per effetti musicali.


1.9. 1.9. Esempi EXAMPLES

osc~ 330

23 25

osc~ 440

osc~ 330.2 +~

osc~ 587

osc~ 440.33 +~

osc~ 587.25 +~

+~ +~ (OUT)

Figure 1.15: synthesis: oscillators arrangeda into three pairs. Figura 1.15: Additive Sintesi additiva: seisix oscillatori impostati coppie perbeating produrre tre battimenti. n = 10? Gli oscillatori possono essere combinati in altri modi oltre a sommare sem2. Two sinusoids have periods of 20 and 30 samples, respectively. What is plicemente i loro outputs e una vasta gamma di suoni risultanti `e possibile. the period of the sum of the two? L’esempio A09.frequency.mod.pd (non presentato qui) mostra la sintesi di modulazione in cui unamplitude oscillatoreofcontrolla la frequenza di un altro. 3. If 0 di dBfrequenza, corresponds to an 1, how many dB corresponds to Questoamplitudes sar` a approfondito Capitolo of 1.5, 2,nel 3, and 5? 5. 4. Two uncorrelated signals of RMS amplitude 3 and 4 are added; what’s

Esercizi the RMS amplitude of the sum?

5. Una How sinusoide many uncorrelated of equal amplitude, wouldangolare you haveω to 1. (pagina 1)signals, ha fasealliniziale φ= 0 e frequenza = add to Qual get a signal that is 9 dBingreater in amplitude? π/10. `e il suo periodo campioni? Qual `e la fase al campione n = 10? 6. What is the angular frequency of middle C at 44100 samples per second? 2. Due sinusoidi hanno periodi di 20 e 30 campioni, rispettivamente. Quale 7. `eTwo sinusoids play at middle C (MIDI 60) and the neighboring C sharp il periodo della somma dei due? (MIDI 61). What is the difference, in Hertz, between their frequencies? 3. Se 0 dB corrispondono ad un’ampiezza di 1, quanti dB corrispondono alle 8. ampiezze How manydicents interval between the seventh and the eighth har1.5, 2,is 3the e 5? monic of a periodic signal? 4. Due segnali non-correlati di ampiezza RMS 3 e 4 vengono sommati; qual 9. `eIf l’ampiezza an audio signal = 0, ..., N − 1 has peak amplitude 1, what is the RMS x[n], dellansomma? minimum possible RMS amplitude? What is the maximum possible? 5. Quanti segnali non-correlati, tutti di uguale ampiezza, bisogna aggiungere per ottenere un segnale che `e 9 dB maggiore in ampiezza?

6. Qual `e la frequenza angolare del Do centrale alla frequenza di campionamento di 44100 campioni al secondo? 7. Due sinusoidi producono un Do centrale (MIDI 60) ed il suo vicino Do Diesis (MIDI 61). Qual `e la differenza, in Hertz, tra le loro frequenze? 8. Quanto misura, in cents, l’intervallo tra il settimo e l’ottavo armonico di un segnale periodico? 9. Se un segnale audio x[n], n = 0, . . . , N − 1 ha ampiezza di picco 1, qual `e l’ampiezza RMS minima possibile? Qual `e la massima possibile?


24

Capitolo 1. Sinusoidi, ampiezza e frequenza


Capitolo 2

Wavetables e campionatori Nel Capitolo 1 abbiamo trattato i segnali audio come se scorressero sempre, in un flusso continuo, a qualche frequenza di campionamento. La frequenza di campionamento non `e realmente una qualit`a del segnale audio, ma piuttosto specifica quanto velocemente i singoli campioni scorrono in entrata o in uscita dal computer. Ma i segnali audio sono, in fin dei conti, delle sequenze di numeri, e in pratica non esiste alcun obbligo di “eseguirli” in sequenza. Inoltre i segnali audio digitali possono essere salvati in memoria e, pi` u tardi, possono essere letti in qualsiasi ordine – avanti, indietro, avanti e indietro o totalmente a caso. Si apre una gamma inesauribile di nuove possibilit`a. Per molti anni (circa dal 1950 al 1990), il nastro magnetico serviva come principale mezzo di memorizzazione per i suoni. I nastri venivano passati avanti e indietro attraverso le testine magnetiche per riprodurre i segnali in tempo reale. Dal 1995 o gi` u di l`ı, il modo predominante di memorizzare i suoni `e quello di considerarli come segnali audio digitali, che possono essere riprodotti con maggiore libert` a e facilit`a rispetto ai nastri magnetici. Molte tecniche di utilizzo risalenti all’era del nastro magnetico sono ancora attuali, tra i quali il taglio, la duplicazione, la modifica della velocit`a e l’inversione. Altre tecniche, come il waveshaping, sono proprie solo nell’era digitale. Supponiamo di avere un segnale audio digitale memorizzato, che `e solo una sequenza di campioni (cio`e numeri) x[n] per n = 0, . . . , N − 1, dove N `e la lunghezza della sequenza. Quindi, se abbiamo un segnale di input y[n] (che possiamo immaginare scorra in tempo reale), possiamo usare i suoi valori come indici per cercare i valori del segnale memorizzato x[n]. Questa operazione, chiamata wavetable lookup (ricerca su wavetable), ci d`a un nuovo segnale, z[n], calcolato come: z[n] = x[y[n]]. Schematicamente rappresentiamo questa operazione come mostrato in Figura 2.1. Ci sono due complicazioni. Innanzitutto, i valori di input, y[n], potrebbero trovarsi al di fuori dell’intervallo 0, . . . , N − 1, nel qual caso x[n] non ha alcun valore e l’espressione z[n] non `e definita. In questa situazione potremmo scegliere di ritagliare l’input (to clip), vale a dire sostituire 0 per qualsiasi valore negativo e N − 1 per valor uguali o maggiori a N . In alternativa, possiamo preferire riavvolgere (to wrap) l’input ai suoi estremi (punti di wraparounds). 25


28 26

CHAPTER 2. WAVETABLES ANDe SAMPLERS Capitolo 2. Wavetables campionatori

IN

OUT

Figure for per wavetable lookup.lookup. The input is in`esamples, ranging Figura 2.1: 2.1: Diagram Diagramma la wavetable L’input in campioni, che approximately from 0 to the wavetable’s size N , depending on the interpolation vanno approssimativamente da 0 alla lunghezza N della wavetable, a seconda scheme. dello schema di interpolazione. are clipped; when we need we’ll introduce another signal Quialways adotteremo la convenzione chewraparound, i campioni fuori campo sono sempre ritaprocessing operation to do it for us. gliati; quando avremo bisogno di riavvolgere, introdurremo un’altra operazione The second complication is lo that the input di elaborazione del segnale che far` a per noi. values need not be integers; in other words they might fall between the points of the wavetable. In general, La seconda complicazione `e che i valori di ingresso, y[n], potrebbero non esthis is addressed by choosing some scheme for interpolating between the points sere interi; in altre parole potrebbero stare tra i punti n della wavetable x[n]. In of the wavetable. For the moment, though, we’ll just round down to the nearest generale, questo viene affrontato scegliendo un certo schema di interpolazione tra integer below the input. This is called non-interpolating wavetable lookup, and i punti della wavetable. Per il momento, per`o, arrotondiamo al pi` u grande intero its full definition is: inferiore al valore di ingresso. Si parler`a quindi di wavetable non-interpolante e ⎧ la sua definizione completa : if 0 ≤ y[n] < N − 1 ⎨ `ex[⌊y[n]⌋] if y[n] < 0 z[n] =  x[0] ⎩x[by[n]c] se 0 ≤ y[n] < N + 1  x[N − 1] if y[n] ≥ N − 1 z[n] = x[0] se y[n] < 0  (where ⌊y[n]⌋ means, “the  greatest integer not exceeding x[N − 1] se y[n] ≥ N + 1 y[n]”). Pictorally, we use y[0] (a number) as a location on the horizontal axis of the wavetable shown in Figure 2.1, and the output, z[0], is whatever we get on the (dove by[n]c significa “l’intero pi` u grande non superiore a y[n]”). vertical axis; and the same for y[1] and z[1] and so on. The “natural” range Graficamente parlando, usiamo y[0] (un numero) come posizione sull’asse for the input y[n] is 0 ≤ y[n] < N . This is different from the usual range of an orizzontale della wavetable mostrata in Figura 2.1 e l’output, z[0], `e ci`o che audio signal suitable for output from the computer, which ranges from -1 to 1 otteniamo sull’asse verticale; e lo stesso per y[1] e z[1] e cos`ı via. Il range in our units. We’ll see later that the usable range of input values, from 0 to N “naturale” per l’input y[n] `e 0 ≤ y[n] < N . Questo range `e diverso dall’intervallo for non-interpolating lookup, shrinks slightly if interpolating lookup is used. abituale di un segnale audio adatto per l’uscita dal computer, che varia, nella Figure 2.2 (part a) shows a wavetable and the result of using two different nostre unit` a di misura, da −1 a 1. Vedremo pi` u tardi che il range utilizzabile input signals as lookup indices into it. The wavetable contains 40 points, which dei valori di input, da 0 a N per la ricerca non-interpolata, si riduce leggermente are numbered from 0 to 39. In part (b), a sawtooth wave is used as the input se si utilizza la ricerca interpolata. signal y[n]. A sawtooth wave is nothing but a ramp function repeated end to 2.2 (parte mostra unarange wavetable e il0risultato di utilizzare end.LaInFigura this example thea)sawtooth’s is from to 40 (this is shown due in diversi segnali di input come indici di ricerca in essa. La wavetable contiene 40 the vertical axis). The sawtooth wave thus scans the wavetable from left to punti, che sono numerati da 0 a 39. In (b), viene utilizzata un’onda a dente right—from the beginning point 0 to the endpoint 39—and does so every time direpeats. sega come segnale di points input y[n]. dente `e altro che it Over the fifty shownUn’onda in Figurea2.2 (partdib)sega the non sawtooth wave una funzione a rampa ripetuta dall’inizio alla fine. In questo esempio il range dell’onda a dente di sega `e da 0 a 40 (che `e mostrato nell’asse verticale). L’onda a dente di sega esegue quindi la scansione della wavetable da sinistra a destra – dal punto iniziale 0 al punto finale 39 – e lo fa ogni volta che si ripete. Sui cinquanta punti mostrati nella Figura 2.2 (parte b) l’onda a dente di sega fa


27

30

CHAPTER 2. WAVETABLES AND SAMPLERS

x[n]

1

0

n

40

(a)

−1

40

y[n]

0

(b) 50

1

z[n] (c)

−1 40

y2[n]

0

1

(d)

z2[n] (e)

−1

Figura 2.2: Wavetable lookup: (a) una wavetable; (b) e (d) segnali di input per la ricerca; (c) ed (e) i corrispondenti outputs. Figure 2.2: Wavetable lookup: (a) a wavetable; (b) and (d) signal inputs for lookup; (c) and (e) the corresponding outputs.


28

2.1. THE WAVETABLE OSCILLATOR

Capitolo 2. Wavetables e campionatori 31

frequency frequency

N

N 0 0

1

1 -1 -1 OUT (a)

OUT (b)

Figure diagrams: (a) for a(a) wavetable oscillator; (b) with Figura2.3: 2.3: Block Diagrammi a blocchi: per un lookup oscillatore di ricerca wavetable; amplitude control by an envelope generator.

(b) con controllo di ampiezza tramite un generatore di inviluppo.

by y[n] and z[n], we compute the signal

due cicli mezzo. Il suo periodo `e di venti campioni, cio`e, in altri termini, la frequenza (in cicli al secondo) `e R/20.+ x[n]z[n] (1 − x[n])y[n] La parte (c) della Figura 2.2 mostra il risultato dell’applicazione della waor, equivalently usually more efficient to calculate, vetable lookup,and sulla tabella x[n], tramite il segnale y[n]. Poich´e l’onda a dente di sega in ingresso legge semplicemente il contenuto della wavetable da sinistra x[n](z[n] − y[n]) a destra, ripetutamente, ay[n] una+ velocit` a di precessione costante, il risultato sar`a un nuovo segnale periodico la cui forma deriva da x[n] e la cui frequenza This computation is diagrammed in Figure d’onda 2.4. `e determinata dall’onda a dente di sega y[n]. When using this technique to cross-fade between wavetable oscillators, it Lebe parti (d) e to (e)keep mostrano un esempio in cui lapartials wavetable vieneacross letta in momight desirable the phases of corresponding the same do non uniforme; poich´ e il segnale di ingresso sale da 0 a N e successivamente the wavetables, so that their amplitudes combine additively when they are ritorna On a 0,the vediamo che laifwavetable apparir`a prima in avanti, poi congelata mixed. other hand, arbitrary wavetables are used (borrowed, for instance, from afinale, recorded sound) there be a phasing effect viene as the scansionata different al suo punto quindi torner` a will indietro. La tabella da waveforms mixed. sinistra a are destra e poi, pi` u rapidamente, da destra a sinistra. Come nell’esemscheme can be extended in acontrolla daisy chain to movea along a continuous pioThis precedente il segnale in input la velocit` di precessione mentre le path between a succession timbres. or inx[n]. combination with ampiezze dell’output z[n]ofsono quelleAlternatively, della wavetable daisy-chaining, cross-fading may be used to interpolate between two different timbres, for example as a function of musical dynamic. To do this you would prepare two or even several waveforms of a single synthetic voice played at 2.1 L’oscillatore wavetable different dynamics, and interpolate between successive ones as a function of the output dynamic you want.

La Figura 2.2 suggerisce un modo semplice per sintetizzare qualsiasi forma d’onda fissata a qualsiasi frequenza desiderata, utilizzando il diagramma a blocchi mostrato in Figura 2.3. Nel blocco superiore c’`e un oscillatore – non l’oscillatore sinusoidale che abbiamo visto in precedenza, ma quello che produce invece un’onda a dente di sega. I suoi valori di uscita, come indicato a sinistra del blocco, dovrebbero essere compresi tra 0 e la lunghezza N della wavetable. Questo valori vengono utilizzati come indice nel blocco di ricerca (introdotto in Figura 2.1), fornendo come risultato una forma d’onda periodica. La Figura 2.3 (par-


32 L’oscillatore wavetable CHAPTER 2. WAVETABLES AND SAMPLERS 2.1.

29

frequency N

0 1

-1

OUT

Figure 2.4: Block diagram for cross-fading between two wavetables.

Figura 2.4: wavetables.

2.2

Diagramma a blocchi per la dissolvenza incrociata tra due

Sampling

te b) aggiunge un generatore inviluppo e un moltiplicatore per controllare “Sampling” is nothing more thandirecording a live signal into a wavetable, and l’ampiezza di uscita nello stesso modo di quello mostrato per l’oscillatore then later playing it out again. (In commercial samplers the entire wavetable sinusoidale in Figura (paginabut 9). toSpesso utilizza we’ll una wavetable conword ampiezza is usually called a1.7 “sample” avoid siconfusion only use the “sample” to mean in an audio signal.) (RMS o dihere picco) pariaasingle 1, in number modo che l’ampiezza finale sia solo determinata At its simplest, a sampler isdisimply a wavetable oscillator, as was shown in dall’ampiezza del generatore inviluppo. Figure However, in the earlier we imagined the oscillator Gli 2.3. oscillatori wavetable sonodiscussion spesso utilizzati perplaying sintetizzare i suoni con back atstatici a frequency high enough be si perceived as inizialmente a pitch, at least Hertz ordi una spettri specificati. A tal to fine, calcolano N 30 campioni so. In theforma case ofd’onda sampling, the frequency is usuallyangolare lower than 30 )Hertz, and qualsiasi di periodo N (frequenza 2π/N semplicemente so the period, at least 1/30 second and perhaps much more, is long enough that sommando gli elementi della serie di Fourier (pagina 11). Il costo di calcolo per la you can hear the individual cycles as separate events. realizzazione della wavetable in un primo momento potrebbe essere significativo, Going back to Figure 2.2, suppose that instead of 40 points the wavetable ma pu` o essere fatto in at anticipo rispetto al processo di sintesi cheitinvece x[n]questo is a one-second recording, an original sample rate of 44100, so that potrebbe avvenire in tempo reale. has 44100 points; and let y[n] in part (b) of the figure have a period of 22050 Mentre la sintesi additiva di forme d’onda come mostrato samples. This corresponds to adiretta frequency of 2 Hertz. Butcomplesse, what we hear is not nel Capitolo 1, at `e in linea di infinitamente flessibile tecnica a pitched sound 2 cycles permassima second (that’s too slow to hear as come a pitch) but per produrre variabili nelrecording tempo, la sintesi `e moltoatmeno costosa rather, wetimbri hear the original x[n] playedwavetable back repeatedly double speed. We’ve reinvented the sampler. in termini di just calcolo, ma richiede un cambio di wavetables per poter cambiare In general, assume the sample pi` rate R of the recording is the same as the il timbro. Unaif we tecnica intermedia, u flessibile e pi` u costosa di una semplice output wavetable, sample rate,ma if the wavetable has eN meno samples, and ifdella we index it with a sintesi meno flessibile costosa sintesi additiva, `e sawtooth wave ofmiscele, period Mche , thevariano sample nel is sped up ortra slowed down bynumero a factordi of wavequella di creare tempo, un ridotto tables fisse. Se il numero di wavetables `e solo due, si tratta, in effetti, di una dissolvenza incrociata (cross-fade) tra le due forme d’onda, come illustrato nella Figura 2.4. Supponiamo di usare un segnale 0 ≤ x[n] ≤ 1 per controllare le relative intensit` a delle due forme d’onda, in modo che, se x[n] = 0, otteniamo la prima e se x[n] = 1 otteniamo la seconda. Denotando con y[n] and z[n] i due segnali da incrociare, calcoliamo il segnale (1 − x[n])y[n] + x[n]z[n]


30

Capitolo 2. Wavetables e campionatori

o, equivalente e di solito pi` u efficiente da calcolare, y[n] + x[n](z[n] − y[n]). Questo calcolo `e illustrato nella Figura 2.4. Quando si utilizza questa tecnica per mixare due oscillatori wavetable, potrebbe essere auspicabile mantenere uguali le fasi delle parziali corrispondenti tra le wavetables, in modo che le loro ampiezze si combinino additivamente quando si mescolano. D’altra parte, se vengono utilizzate wavetables arbitrarie (prese in prestito, ad esempio, da un suono registrato) ci sar`a un effetto di phasing in quanto le diverse forme d’onda sono mescolate. Questo schema pu` o essere esteso in una catena circolare dove ci si muove, lungo un percorso continuo, tra una successione di timbri. In alternativa o in combinazione con la catena, `e possibile utilizzare un cross-fading per interpolare tra due diversi timbri, ad esempio in funzione della dinamica musicale. Per fare questo si preparano due o addirittura diverse forme d’onda di una singola voce sintetica, eseguita a diverse dinamiche, e si interpola tra due successive in funzione della dinamica di uscita desiderata.

2.2

Campionamento

Il “Campionamento” (o sampling) altro non `e che la registrazione di un segnale dal vivo in una wavetable e poi riprodurlo di nuovo (nei campionatori commerciali l’intera wavetable `e solitamente chiamata “campione”, anzich´e sample, ma per evitare confusione qui usiamo la parola campione solo per significare un singolo numero in un segnale audio). In termini spiccioli, un campionatore `e semplicemente un oscillatore wavetable, come `e stato mostrato in Figura 2.3. Tuttavia, nella discussione precedente abbiamo immaginato che l’oscillatore avesse una frequenza abbastanza alta, almeno 30 Hertz, per essere percepito come un tono. Nel caso del campionamento, la frequenza `e di solito inferiore a 30 Hertz, quindi il periodo, almeno 1/30 di secondo e forse molto di pi` u, `e abbastanza lungo da poterci fare ascoltare i singoli cicli come eventi separati. Tornando alla Figura 2.2, supponiamo che invece di 40 punti la wavetable x[n] sia una registrazione di un secondo, ad una frequenza di campionamento originale di 44100, in modo da avere 44100 punti; e supponiamo che y[n], nella parte (b) della figura, abbia un periodo di 22050 campioni. Questo corrisponde ad una frequenza di 2 Hertz. Ma quello che sentiamo non `e un suono, con intonazione fissata, a 2 cicli al secondo (che `e troppo lento per percepirlo come un tono) ma piuttosto sentiamo la registrazione originale x[n] riprodotta ripetutamente a velocit` a doppia. Abbiamo appena reinventato il campionatore. In generale, se si assume che la frequenza di campionamento R della registrazione sia uguale alla velocit` a di campionamento di uscita, se la wavetable ha N campioni e se la indicizziamo tramite un’onda a dente di sega di periodo M campioni, il sample viene accelerato o rallentato da un fattore pari a N/M , uguale a N f /R se f `e la frequenza in Hertz dell’onda a dente di sega. Se indichiamo con t il fattore di trasposizione (in modo che, per esempio, t = 3/2 significa trasporre di una quinta perfetta ascendente) e se si indica con h la trasposizione in semitoni, otteniamo le formule di trasposizione (per looping wavetables): t = N/M = N f /R,


2.2. Campionamento

31

H = 12 log2

N M

= 12 log2

Nf R

.

Di solito la trasposizione desiderata in semitoni (h) `e nota e la formula deve essere risolta per f o N : 2h/12 R f= , N N=

2h/12 R . f

Finora abbiamo utilizzato un’onda a dente di sega come onda di input y[n], ma, come suggerito nelle parti (d) e (e) della Figura 2.2, potremmo utilizzare, come segnale di input, qualsiasi cosa ci piaccia. In generale, la trasposizione pu`o essere dipendente dal tempo e viene controllata dalla velocit`a di cambiamento del segnale di input. Il fattore di trasposizione t e la trasposizione in semitoni h sono quindi determinati dalle formule di trasposizione momentanea (per le wavetables): t[n] = |y[n] − y[n − 1]|, h[n] = 12 log2 |y[n] − y[n − 1]|, dove | | indica il valore assoluto. Per esempio, se y[n] = n, allora z[n] = x[n] in modo che sentiamo la wavetable al suo tono originale e questo `e ci`o che la formula ci dice, poich´e y[n] − y[n − 1] = 1. D’altra parte, se y[n] = 2n, allora la wavetable `e trasposta all’ottava superiore, fatto consistente con y[n] − y[n − 1] = 2n − 2(n − 1) = 2. Se i valori di y[n] stanno diminuendo all’aumentare di n, il sample viene eseguito all’indietro, ma la formula di trasposizione fornisce ancora un moltiplicatore positivo. Tutto questo concorda con la precedente formula di trasposizione per looping wavetables; se un’onda a dente di sega varia tra 0 e N , f volte al secondo, la differenza tra i campioni successivi `e proprio N f /R, eccetto al campione all’inizio di ogni nuovo ciclo. ` ben noto che la trasposizione di una registrazione modifica anche il timbro: E questo `e noto come effetto “chipmunk”. Non solo sono state trasposte eventuali periodicit` a (che potrebbe dare origine alla percezione di un tono), ma anche le frequenze degli ipertoni. Alcuni timbri, in particolare quelli di suoni vocali, presentano dei range caratteristici di frequenze in cui gli ipertoni sono pi` u forti rispetto ad altre vicine. Anche tali intervalli di frequenza vengono trasposti, e questo `e percepito come un cambiamento nel timbro. Nel linguaggio che verr`a reso pi` u preciso nel paragrafo 5.1, diciamo che l’inviluppo spettrale `e trasposto insieme al tono o ai toni. Sia in questo che nel paragrafo precedente abbiamo considerato la possibilit` a di riprodurre wavetables periodicamente. Nel paragrafo 2.1 la riproduzione viene ripetuta abbastanza rapidamente in modo che la ripetizione dia origine ad un tono, ad esempio tra 30 e 4000 volte al secondo, approssimativamente il range di un pianoforte. In questo paragrafo abbiamo considerato una wavetable


32

Capitolo 2. Wavetables e campionatori

della durata di un secondo, e, in questo caso, fattori “ragionevoli” di trasposizione (meno di quattro ottave ascendenti) darebbero origine ad una frequenza di ripetizione inferiore a 30, e di solito molto pi` u basso, e che pu`o scendere ancora di quanto vogliamo. Il numero 30 `e significativo per un altro motivo: `e approssimativamente il numero massimo di eventi separati che l’orecchio pu`o distinguere al secondo; per esempio, 30 fonemi vocali, o note melodiche, o attacchi di rulli di tamburo sono circa il massimo numero che possiamo sperare di inserire in un secondo prima che la nostra capacit` a di distinguerli venga meno. Esiste un continuum tra i campionatori e gli oscillatori wavetable, in quanto la patch della Figura 2.3 pu` o essere considerata come un campionatore (se la frequenza di ripetizione `e inferiore a circa 20 Hertz) o come un oscillatore wa` possibile muoversi in vetable (se la frequenza `e maggiore di circa 40 Hertz). E maniera continua tra i due regimi. Inoltre, non `e necessario eseguire un’intera wavetable in un ciclo; con un po’ pi` u di aritmetica possiamo scegliere dei sottosegmenti della wavetable, e questi possono cambiare continuamente in lunghezza e posizione durante la lettura della wavetable. La pratica di suonare molti piccoli segmenti di una wavetable in rapida successione `e spesso chiamata sintesi granulare. Per maggiori informazioni sulle sue possibilit` a si veda [Roa01]. La Figura 2.5 mostra come costruire un campionatore ciclico (looping sampler) molto semplice. Nella figura, se la frequenza `e f e la lunghezza del segmento di campioni `e s, il fattore di trasposizione di uscita `e dato da t = f s/R, dove R `e la frequenza di campionamento a cui `e stata registrata la wavetable (che non deve essere necessariamente pari alla frequenza di campionamento a cui il diagramma a blocchi sta lavorando). In pratica, questa equazione deve essere solitamente risolta per f o s per ottenere la trasposizione desiderata. Nella figura, un oscillatore a dente di sega controlla l’ubicazione per la ricerca sul wavetable, ma i valori inferiori e superiori dell’onda a dente di sega non sono staticamente specificati come nella Figura 2.3; piuttosto, l’oscillatore a dente di sega varia tra 0 a 1 e l’intervallo `e poi modificato per selezionare un desiderato segmento di campioni nella wavetable. Pu` o essere preferibile specificare la posizione l del segmento sia come bordo sinistro (il suo limite inferiore) sia come punto medio del segmento; in entrambi i casi specifichiamo la lunghezza s come parametro distinto. Nel primo caso, cominciamo moltiplicando l’output della dente di sega per s, in modo che quindi vari tra 0 a s; quindi aggiungiamo l in modo che ora vari tra l e l + s. Per specificare la posizione utilizzando il punto medio del segmento, prima sottraiamo 1/2 dall’oscillatore (in modo da variare tra −1/2 e 1/2), e poi come prima moltiplichiamo per s (in modo che ora vari tra −s/2 e s/2) e infine aggiungiamo l per ottenere un intervallo tra l − s/2 e l + s/2. Nel campionatore ciclico, dovremo preoccuparci di mantenere continuit`a tra l’inizio e la fine dei segmenti del wavetable; di questo ci occuperemo nel paragrafo successivo. Un ulteriore dettaglio `e che, se la lunghezza e la posizione del segmento cambiano nel tempo (essi stessi potrebbero essere, ad esempio, segnali audio digitali), influenzeranno il fattore di trasposizione e il tono o il timbro del segnale di uscita che potrebbero quindi salire e scendere di conseguenza. Il modo pi` u semplice per evitare questo problema `e quello di sincronizzare le variazioni dei valori di s e l con la regolare discontinuit`a dell’onda a dente di sega; poich´e tale


2.2. Campionamento

33

2.2. SAMPLING

35

frequency 1

0 1/2

optional - for centered segments

segment size segment location 1

-1 OUT

Figure simple looping sampler, asciclico, yet with no amplitude There Figura 2.5: 2.5: AUn semplice campionatore senza controllo dicontrol. ampiezza. Ci are inputs to control the frequency and the segment size and location. sono ingressi per controllare la frequenza, la lunghezza e la posizione delThe seg“-” operation is included wish se thesisegment to be specified as the mento. L’operazione “−”if`ewe inclusa desideralocation che la posizione del segmento segment’s midpoint; otherwise we specify the location of the left end of thela sia specificata tramite il suo punto medio; altrimenti `e sufficiente definire segment. posizione dell’estremit` a sinistra del segmento.


34

Capitolo 2. Wavetables e campionatori

segnale salta discontinuamente, la trasposizione non `e realmente definita e, se si sta usando un inviluppo per nascondere la discontinuit`a, anche gli effetti delle modifiche in s e l risulteranno nascosti.

2.3

Enveloping samplers

Nel paragrafo precedente abbiamo letto una wavetable sia sporadicamente che ciclicamente per ottenere un campionatore. Nella maggior parte delle applicazioni reali, dobbiamo affrontare la necessit`a di far partire e fermare i samples in modo che il segnale di uscita non salti in modo discontinuo all’inizio e alla fine dei samples. Questa discontinuit`a pu`o suonare come un click o un botto a seconda della wavetable. Il modo pi` u semplice per fare questa operazione, supponendo che continueremo sempre ad eseguire completamente la wavetable dall’inizio alla fine, consiste semplicemente nel prepararci in anticipo in modo che il volume cresca in maniera regolare all’inizio e decresca in maniera regolare alla fine. Ci`o pu`o essere fatto anche quando la wavetable viene campionata in tempo reale, moltiplicando il segnale di ingresso per un inviluppo a segmenti lineari e temporizzato per corrispondere alla lunghezza della registrazione. In molte situazioni, per` o, `e sconveniente o impossibile creare in anticipo l’inviluppo per la wavetable – ad esempio, potremmo voler riprodurre solo una parte di esso oppure potremmo voler cambiare dinamicamente l’intensit`a dell’inviluppo. Nel paragrafo 1.5 abbiamo gi`a visto come controllare l’ampiezza degli oscillatori sinusoidali utilizzando la moltiplicazione per una funzione a rampa (nota anche come generatore di inviluppo) e abbiamo riportato questa nozione negli oscillatori wavetable delle Figure 2.3 e 2.4. Questa procedura funziona bene anche per accendere e spegnere i campionatori in modo da evitare discontinuit` a, presentando tuttavia una notevole differenza: mentre nella sintesi wavetable siamo liberi di supporre che le forme d’onda si allineino in modo da poter scegliere qualsiasi tempo che vogliamo per l’inviluppo, nel caso del campionamento usando forme d’onda non preparate, siamo obbligati a far si che l’output del generatore di inviluppo sia a zero quando arriviamo alla fine del wavetable per la prima volta. Questa situazione `e rappresentata in Figura 2.6. In situazioni in cui sia necessario ripetere un wavetable arbitrario, il modo pi` u semplice per eseguire continuamente il ciclo `e quello di disporre che la modifica dell’ampiezza sia sincronizzata con il ciclo, utilizzando una wavetable separata (l’inviluppo). Questo pu` o essere implementato come mostrato in Figura 2.7. Un singolo oscillatore a dente di sega viene utilizzato per calcolare gli indici di ricerca per due wavetables, una che contiene il suono registrato e l’altra che contiene un inviluppo. L’aspetto principale di cui preoccuparsi `e quello di ottenere gli inputs delle due wavetables ciascuno nel proprio range appropriato. In molte situazioni `e desiderabile combinare due o pi` u copie del campionatore ciclico alla stessa frequenza e ad una relazione di fase specificata. Ci`o pu`o essere fatto in modo che quando uno `e alla fine del suo segmento, uno o pi` u si trovano al centro dello stesso segmento, in modo che l’aggregato produca continuamente suono. Per ottenere ci` o, abbiamo bisogno di un modo per generare due o pi` u onde a dente di sega con la desiderata relazione di fase e che possiamo usare al posto dell’oscillatore nella parte superiore della Figura 2.7. Possiamo iniziare con un’unica onda a dente di sega e poi produrne altre a rapporti fissati di


2.4. TIMBRE STRETCHING 2.4. Stretching del timbro

3735

(a)

new periods

(b)

Figure samplers: (a) in Figura 2.6: 2.6: Differing Differentienvelope requisitirequirements di inviluppofor peroscillators oscillatoriand e campionatori: (a) an oscillator, the envelope canpu` be chosenscelto to conform to any desired timescale; in un oscillatore, l’inviluppo o essere per conformarsi a qualsiasi scala (b) when the wavetable(b) is aquando recorded sound, it’s`eup you to get the envelope temporale desiderata; la wavetable untosuono registrato, sta a noi to before you hitsia thezero endprima of thedi wavetable for the firstdella time.wavetable per la farzero si che l’inviluppo raggiungere la fine prima volta. wavetable sampler at the same frequency and at a specified phase relationship. This maylabeprima. done soSe that when any particular one di is at theche end`e,ofad itsesempio, segment, a fase con vogliamo un’onda a dente sega one or more others is in the middle of the same segment, so that the aggregate cicli davanti alla prima, aggiungiamo semplicemente il parametro a e prendiamo is continuously making sound. To accomplish this, we need a way to generate quindi la parte frazionaria, che `e la nuova onda a dente di sega desiderata, come two or more sawtooth waves at the desired phase relationship that we can use mostrato in Figura 2.8. in place of the oscillator at the top of Figure 2.7. We can start with a single sawtooth wave and then produce others at fixed phase relationships with the first one. If we wish a sawtooth which is, say, a cycles ahead of the first one, we add the parameter then take the fractional part, which is the 2.4simplyStretching dela and timbro desired new sawtooth wave, as shown in Figure 2.8. L’oscillatore wavetable del paragrafo 2.1, che abbiamo esteso nel paragrafo 2.2 per includere le forme d’onda da wavetables arbitrarie come i suoni registrati, 2.4 Timbre stretching pu` o essere ulteriormente esteso in un modo complementare, a cui ci riferiremo come timbre stretching per le ragioni che andremo a spiegare in questo paragrafo. The wavetable oscillator Section 2.1, which we extended in Section 2.2 tousanenCi sono anche molti altriofmodi possibili per estendere la sintesi wavetable, compass grabbinglawaveforms fromdiarbitrary such as recorded sounds, do, ad esempio, modulazione frequenzawavetables e il waveshaping, ma ne parleremo may additionally be extended in a complementary way, that we’ll refer to as nei capitoli successivi. timbre stretching, reasons develop `einquella this section. There are l’idea also many L’idea centralefordel timbrewe’ll stretching di riconsiderare di un other possible ways to extend wavetable synthesis, using for instance oscillatore wavetable con un meccanismo per la riproduzione di unafrequency wavetable modulation waveshaping, we’ll leave to later chapters. memorizzatoand (o una sua parte)but dall’inizio alla them fine. Non c’`e motivo per cui la fine The central idea of timbre stretching is to reconsider the idea of the wavetable di un ciclo debba coincidere con l’inizio di un altro. Invece, potremmo richiedere

che le copie della forma d’onda vengano distanziate da segmenti di silenzio; o, andando nella direzione opposta, le copie della forma d’onda potrebbero essere distanziate pi` u strettamente in modo che si sovrappongano. L’unico parametro disponibile nel paragrafo 2.1 – la frequenza – `e stato usato finora per controllare due aspetti distinti dell’output: il periodo in cui iniziano le nuove copie della


36

Capitolo 2. Wavetables e campionatori

38

CHAPTER 2. WAVETABLES AND SAMPLERS

frequency 1

0

size N location 1

1 0

-1 0

N

OUT

Figure 2.7: A sampler as in Figure 2.5, but with an additional wavetable lookup Figura 2.7: Un campionatore come in Figura 2.5, ma con l’aggiunta di una for enveloping. wavetable per l’inviluppo.


2.4. TIMBRE STRETCHING

39

2.4. Stretching del timbro

37

frequency 1

1

0

1.3

a

0.3 WRAP

OUT

1 0.3

Figure 2.8: A technique for generating two or more sawtooth waves with fixed phase relationships between per them. relative phase is controlled by the paFigura 2.8: Una tecnica la The generazione di due o pi` u onde a dente di sega rameter a (which takes the value 0.3 in the graphed signals). The “wrap” con relazioni fisse tra le loro fasi. La fase relativa `e controllata dal parametro operation computes the fractional part of its input. a (che assume il valore 0.3 nei segnali rappresentati nei grafici). L’operazione “wrap” calcola la parte frazionaria del suo input.

40

CHAPTER 2. WAVETABLES AND SAMPLERS

(a)

20

40

10

50

30

(b) 15

25

(c) 20

40

60

0

Figure 2.9: A waveform is played at a period of 20 samples: (a) at 100 percent

Figura 2.9:(b)Una forma d’onda riprodotta con un periodo di 20 campioni: duty cycle; at 50 percent; (c) atviene 200 percent (a) con duty cycle del 100%; (b) al 50%; (c) al 200%. oscillator as a mechanism for playing a stored wavetable (or part of one) end to end. There is no reason the end of one cycle has to coincide with the beginning of another. Instead, we could ask for copies of the waveform to be spaced with alternating segments of silence; or, going in the opposite direction, the waveform copies could be spaced more closely together so that they overlap. The single parameter available in Section 2.1—the frequency—has been heretofore used to control two separate aspects of the output: the period at which we start new copies of the waveform, and also the length of each individual copy. The idea of timbre stretching is to control the two independently. Figure 2.9 shows the result of playing a wavetable in three ways. In each case the output waveform has period 20; in other words, the output frequency is R/20 if R is the output sample rate. In part (a) of the figure, each copy of the


38

Capitolo 2. Wavetables e campionatori

forma d’onda e anche la durata di ogni singola copia. L’idea del timbre stretching `e quella di controllare i due in modo indipendente. La Figura 2.9 mostra il risultato della riproduzione di un wavetable in tre modi. In ogni caso la forma d’onda di uscita ha un periodo pari a 20; in altre parole, la frequenza di uscita `e R/20 se R `e la frequenza di campionamento in uscita. Nella parte (a) della figura, ogni copia della forma d’onda viene riprodotta su 20 campioni, in modo che la forma d’onda si inserisca esattamente nel ciclo, senza spazi e senza sovrapposizioni. Nella parte (b), anche se il periodo `e ancora di 20, la forma d’onda `e compressa in met`a, centrata, del periodo (10 campioni); o in altre parole, il duty cycle – la quantit`a relativa di tempo in cui la forma d’onda riempie il ciclo – equivale al 50 per cento. Per il restante 50 per cento del tempo, l’output `e zero. Nella parte (c), la forma d’onda viene allungata a 40 campioni e, dal momento che viene ripetuta ogni 20 campioni, le forme d’onda si sovrappongono. Il duty cycle `e quindi del 200 per cento. Supponiamo ora che la forma d’onda, con duty cycle del 100% abbia serie di Fourier (paragrafo 1.7) pari a x100 [n] = a0 + a1 cos(ωn + φ1 ) + a2 cos(2ωn + φ2 ) + · · · dove ω `e la frequenza angolare (pari a π/10 nell’esempio in quanto il periodo `e di 20). Per semplificare questo esempio non ci preoccupiamo dove la serie finisca. A questo punto cerchiamo di mettere in relazione questa serie di Fourier con quelle delle altre due forme d’onda dell’esempio, per mostrare come, cambiando il duty cycle, cambia il timbro dell’onda risultante. Per il caso del duty cycle al 50 percento (chiamiamo il segnale x50 [n]), osserviamo che se duplichiamo la forma d’onda fuori fase di met` a periodo e sommiamo le due onde, otteniamo esattamente la forma d’onda originale a frequenza doppia: x100 [2n] = x50 [n] + x50 [n +

π ] ω

dove ω `e la frequenza angolare (e quindi π/ω `e la met`a del periodo) di entrambi i segnali. Se esprimiamo la serie di Fourier di x50 [n] come: x50 [n] = b0 + b1 cos(ωn + θ1 ) + b2 cos(2ωn + θ2 ) + · · · utilizzando le tre formule precedenti, si ha: a0 + a1 cos(2ωn + φ1 ) + a2 cos(4ωn + φ2 ) + · · · = b0 + b1 cos(ωn + θ1 ) + b2 cos(2ωn + θ2 ) + · · · +b0 + b1 cos(ωn + π + θ1 ) + b2 cos(2ωn + π + θ2 ) + · · · = 2b0 + 2b2 cos(2ωnθ2 ) + 2b4 cos(4ωn + π + θ4 ) + · · · e quindi a0 = 2b0 , a1 = 2b2 , a2 = 2b4 e cos`ı via: le parziali pari di x50 , in conclusione, vengono ottenute raddoppiando le parziali di x100 (ancora non sappiamo niente al riguardo delle parziali dispari


42 2.4. Stretching del timbro CHAPTER 2. WAVETABLES AND SAMPLERS 39

200%

amplitude

100%

50% 1

2

3

4

5

partial number

Figura 2.10: 2.10: The I coefficienti delle serie Fourier per le forme d’ondashown illustrate in FiFigure Fourier series magnitudes for the waveforms in Figure guraThe 2.9.horizontal Nell’asse orizzontale sono presenti i numeri armonici. solo 2.9. axis is the harmonic number. We only “hear”“sentiamo” the coefficients i coefficienti per numeri armonici le curve continue sono “interpolazioni for integer harmonic numbers; the interi; continuous curves are the “ideal” contours. ideali.

We see that squeezing the waveform by a factor of 2 has the effect of stretchdi x50 e queste potrebbero essere in linea con quelle pari oppure no, a seconda di ing the Fourier series out by two, and on the other hand stretching the waveform ` sufficiente fattori che non possiamo ancora controllare. E dire, per il momento, by a factor of two squeezes the Fourier series by two. By the same sort of arche se la forma d’onda si collega con continuit`a con l’asse orizzontale a entrambe gument, in general it turns out that stretching the waveform by a factor of le estremit` a, le parziali dispari agiscono globalmente come quelle pari. Per renany positive number f squeezes the overtones, in frequency, by the reciprocal dere questo fatto pi` u rigoroso abbiamo bisogno dell’analisi Fourier, sviluppata 1/f —at least approximately, and the approximation is at least fairly good if nel Capitolo 9). the waveform “behaves well” at its ends. (As we’ll see later, the waveform can Analogamente, x100 e x200 sono legati nello stesso modo: always be forced to behave at least reasonably well by enveloping it as in Figure π 2.7.) x200 [2n] = x100 [n] + x100 [n + ] ω Figure 2.10 shows the spectra of the three waveforms—or in other words the one waveform at three duty cycles—of Figure 2.9. The figure emphasizes the in modo che, se le ampiezze della serie di Fourier di x200 sono indicate con relationship between the three spectra by drawing curves through each, which, c0 , c1 , . . . , si ha: on inspection, turn out toc0be=the stretched differently; as the 2a0same , c1 =curve, 2a2 , c2only = 2a 4 duty cycle goes up, the curve is both compressed to the left (the frequencies all in modo che le parziali di x200 siano quelle pari di x100 . drop) and amplified (stretched upward). Vediamo che restringere la forma d’onda di un fattore di due ha l’effetto di The continuous curves have a very simple interpretation. Imagine squeezing allungare la serie di Fourier per due, mentre estendere la forma d’onda per un the waveform into some tiny duty cycle, say 1 percent. The contour will be fattore di due restringe la serie di Fourier di due. Con lo stesso principio, in gestretched by a factor of 100. Working backward, this would allow us to internerale si scopre che l’allungamento della forma d’onda per un qualsiasi numero polate between each pair of consecutive points of the 100 percent duty cycle positivo f diminuisce gli ipertoni, in frequenza, del reciproco 1/f – almeno apcontour (the original one) with 99 new ones. Already in the figure the 50 perprossimativamente, e l’approssimazione `e abbastanza buona se la forma d’onda cent duty cycle trace defines the curve with twice the resolution of the original “si comporta bene” alle sue estremit`a (come vedremo pi` u avanti, la forma d’onda pu` o sempre essere impostata in modo da comportarsi almeno ragionevolmente bene utilizzando un inviluppo come in Figura 2.7). La Figura 2.10 mostra lo spettro delle tre forme d’onda di Figura 2.9 – o in altre parole una forma d’onda a tre diversi duty cycle. Tracciando curve


40

Capitolo 2. Wavetables e campionatori

attraverso lo spettro di ciascuna onda, la figura sottolinea la relazione tra i tre spettri, che, all’ispezione, risultano essere la stessa curva, solo allungata in modo diverso; se il duty cycle sale, la curva `e compressa a sinistra (le frequenze calano) e amplificata (allungata verso l’alto). Le curve continue hanno un’interpretazione molto semplice. Immaginiamo di spremere la forma d’onda tramite un duty cycle molto piccolo, ad esempio 1 per cento. Il profilo sar` a allungato per un fattore di 100. Lavorando all’indietro, ci` o ci permetterebbe di interpolare ogni coppia di punti consecutivi della curva con duty cycle del 100% (quello originale) con 99 nuovi punti. Come si vede gi`a in figura, il tracciato della curva con duty cycle al 50% definisce la curva con due volte la risoluzione della curva originale Al limite, quando il duty cycle viene preso arbitrariamente piccolo, lo spettro si riempie sempre pi` u densamente; ed il limite `e lo spettro “reale” della forma d’onda. Questo “vero” spettro `e udibile solo con duty cycles adeguatamente bassi. All’esempio con duty cycle al 200% manca effettivamente il picco nello spettro ideale (continuo) perch´e il picco si trova al di sotto del primo armonico. In generale, i duty cycles pi` u alti mostrano la curva ideale alle risoluzioni pi` u basse. Il timbre stretching `e una tecnica estremamente potente per la generazione di suoni con spettri sistematicamente variabili. In combinazione con le possibilit`a di missaggio di forme d’onda (paragrafo 2.1) e di selezionare forme d’onda, variabili infinitamente, dai campioni registrati (paragrafo 2.2), `e possibile generare ogni tipo di suoni. Ad esempio, il diagramma a blocchi di Figura 2.7 ci offre un modo per ottenere ed allungare i timbri da una wavetable registrata. Quando il parametro della “frequenza” f `e abbastanza elevato da essere udibile come un tono, il parametro “lunghezza” s pu` o essere considerato un controllo sul timbro, tramite la formula t = f s/R del paragrafo 2.2, dove ora reinterpretiamo t come il fattore con cui il timbro deve essere allungato.

2.5

Interpolazione

Come detto in precedenza, i metodi di interpolazione vengono spesso utilizzati per aumentare la precisione della ricerca sulle tabelle. Qui forniremo un calcolo piuttosto semplificato degli effetti delle dimensioni della tabella e dei metodi di interpolazione sul risultato della ricerca tabella. Per parlare di errori nella ricerca su wavetable, dobbiamo vedere la wavetable come una versione campionata di una funzione sottostante. Quando cerchiamo un valore della funzione sottostante che si trova tra due punti della wavetable, l’errore `e la differenza tra il risultato della ricerca sulla wavetable e il valore “ideale” della funzione in quel punto. Lo studio pi` u importante dell’errore di ricerca su wavetable suppone che la funzione sottostante sia sinusoidale (pagina 1). Successivamente possiamo quindi capire cosa succede ad altre wavetables considerandole come somme di sinusoidi. La precisione di ricerca su una wavetable contenente una sinusoide dipende da due fattori: la qualit` a dello schema di interpolazione e il periodo della sinusoide. In generale, pi` u lungo `e il periodo della sinusoide, pi` u il risultato sar`a accurato. Nel caso di una wavetable sintetica, possiamo conoscere i suoi componenti sinusoidali dal fatto di averli specificati – nel qual caso la questione diventa


2.5. Interpolazione

41

quella di scegliere una dimensione appropria della wavetable, quando si calcola la wavetable, in modo da adattarsi all’algoritmo di interpolazione e soddisfare lo standard desiderato di precisione. Nel caso di suoni registrati, l’analisi di precisione potrebbe indurci a regolare la frequenza di campionamento della registrazione, sia inizialmente, sia per un successivo ri-esame. L’errore di interpolazione per una wavetable sinusoidale pu`o avere due componenti: in primo luogo, il segnale continuo (il risultato teorico della lettura continua della wavetable nel tempo, come se il sample rate di output fosse infinito) potrebbe non essere una sinusoide pura; e, in secondo luogo, l’ampiezza potrebbe essere sbagliata (`e anche possibile ottenere errori di fase, ma solo per mancanza di attenzione). In questo trattamento considereremo solo metodi di interpolazione polinomiali come arrotondamento, interpolazione lineare e interpolazione cubica. Questi metodi riguardano la valutazione di polinomi (di grado zero, uno e tre, rispettivamente) nei valori compresi tra due punti del wavetable. L’idea `e che, per qualsiasi indice x, possiamo scegliere un punto di riferimento vicino x0 e considerare il valore in output calcolato dal polinomio: yINT (x) = a0 + a1 (x − x0 ) + a2 (x − x0 )2 + · · · + an (x − x0 )n . Di solito si sceglie il polinomio che passa attraverso gli n + 1 punti pi` u vicini della wavetable. Per l’interpolazione ad un punto (un polinomio di grado zero) vuol dire prendere a0 uguale al pi` u vicino della wavetable. Per l’interpolazione lineare (a due punti), tracciamo un segmento di retta tra i due punti della wavetable che si trovano ai lati del punto desiderato x. Possiamo lasciare che x0 sia l’intero pi` u vicino a sinistra di x (che scriviamo come bxc) e quindi la formula per l’interpolazione lineare `e: yINT (x) = y[x0 ] + (y[x0 + 1] − y[x0 ]) · (x − x0 ) che `e un polinomio, come nella formula precedente, con a0 = y[x0 ], a1 = y[x0 + 1] − y[x0]. In generale, `e possibile valutare esattamente un polinomio di grado n−1 tramite una scelta di n punti qualsiasi purch´e i loro valori x siano tutti diversi. La figura 2.11 mostra l’effetto di utilizzare l’interpolazione lineare (a due punti) per riempire una sinusoide di periodo 6. Nella parte superiore vi sono tre curve: la sinusoide originale, il risultato interpolando linearmente 6 punti per periodo per rappresentare la sinusoide, e, infine, un’altra sinusoide, di ampiezza leggermente minore, che meglio corrisponde alla forma d’onda formata da sei segmenti. L’errore introdotto sostituendo la sinusoide originale con la versione interpolata linearmente presenta due aspetti: in primo luogo, un cambiamento (appena percettibile) di ampiezza e, in secondo luogo, una distorsione (molto percettibile) della forma d’onda. Il grafico inferiore in figura mostra la differenza tra la forma d’onda interpolata e la sinusoide pi` u adatta. Questo `e un segnale residuo di cui tutte le energie si trovano negli ipertoni della sinusoide originale. Quando aumenta il numero di punti, l’errore diminuisce in grandezza. Poich´e l’errore `e la differenza tra una


2.5. INTERPOLATION

42

45

Capitolo 2. Wavetables e campionatori

original

best fit interpolated

error

Figure 2.11: Linear interpolation of a sinusoid: (upper graph) the original sinuFigura 2.11: Interpolazione lineare di una sinusoide: (grafico superiore) la sinusoid, the interpolated sinusoid, and the best sinusoidal fit back to the interposoide originale, la sinusoide interpolata e la sinusoide che meglio combacia con lated version; (lower graph) the error, rescaled vertically. la versione interpolata; (grafico inferiore) l’errore, riscalato verticalmente.

sinusoide ed una sequenza segmenti utilizzati per approssimare, la grandezza dell’errore `e approssimativamente proporzionale al quadrato della differenza di fase tra ciascuna coppia di punti, ovvero inversamente proporzionale al quadrato del numero di punti nella wavetable. Detto diversamente, l’errore sulla wavetable diminuisce di 12 dB ogni volta che le dimensioni della tabella raddoppiano (questa regola `e utile solo per tabelle con 4 o pi` u punti). L’interpolazione a quattro punti (cubica) funziona in modo simile. La formula di interpolazione `e: yINT (x) = −f (f − 1)(f − 2)/6 · y[x0 − 1] + (f + 1)(f − 1)(f − 2)/2 · y[x0 ] −(f + 1)(f − 2)/2 · y[x0 + 1] + (f + 1)f (f − 1)/6 · y[x0 + 2] dove f = x−x0 `e la parte frazionaria dell’indice. Per le tabelle con 4 o pi` u punti,


2.5. Interpolazione

46

period 2 3 4 8 16 32 64 128

43

CHAPTER 2. WAVETABLES AND SAMPLERS

interpolation points 1 2 4 -1.2 -17.1 -20.2 -2.0 -11.9 -15.5 -4.2 -17.1 -24.8 -10.0 -29.6 -48.4 -15.9 -41.8 -72.5 -21.9 -53.8 -96.5 -27.9 -65.9 -120.6 -34.0 -77.9 -144.7

Table 2.1: RMS error for table lookup using 1, 2, and 4 point interpolation at

Tabella 2.1: Errore RMS per la ricerca di tabelle utilizzando interpolazioni a 1, various table sizes. 2 e 4 punti a varie dimensioni della tabella.

Four-point (cubic)diinterpolation works similarly. The interpolation raddoppiando il numero punti sulla tabella si tende a migliorare l’errore RMS formula is: di 24 dB. La Tabella 2.1 mostra l’errore RMS calcolato per sinusoidi con vari yINT(una (x) quantit` = periodi e per interpolazione a 1, 2 e 4 punti a leggermente diversa `e misurata in [Moo90, p. 164], dove vengono aggiunti anche gli errori di ampiezza −f (f − 1)(f − 2)/6 · y[x − 1] + (f + 1)(f − 1)(f − 2)/2 · y[x0 ] e fase, fornendo risultati leggermente 0pi` u pessimisti (si veda anche [Har87]). Il dominio consentito dal·numero −(fin+input 1)f (f − 2)/2 per · y[xla0 ricerca + 1] +su(ftabelle + 1)fdipende (f − 1)/6 y[x0 + di 2] punti di interpolazione. In generale, quando si utilizza l’interpolazione a k punti where f = xcon −N x0 punti, is thel’input fractional part of theintervallo index. di ForN tables in una tabella pu`o variare su un + 1 − kwith 4 or more points, doubling the number of points on the table tends to improve the punti. Se k = 1 (cio`e non c’`e alcuna interpolazione), il dominio `e compreso RMS error by 24 dB. Table 2.1 shows the calculated RMS error for sinusoids at tra 0 e N (compreso l’estremo a 0 ma escludendo quello a N ) assumendo che i various valori diperiods input siano troncati viene effettuato in Pd la ricerca non- quantity for 1, 2, and(come 4 point interpolation. (A per slightly different interpolata). dominio `e dap.164]. −1/2 a There, N − 1/2the se, invece, is measuredIlin [Moo90, errors arrotondiamo in amplitudel’input and phase are alalso numero intero pi` u vicinoslightly anzich´e more interpolare. In entrambi i casi il dominio si added in, yielding pessimistic results. See also [Har87].) estende su una lunghezza di N punti. The allowable input domain for table lookup depends on the number of Per l’interpolazione a due punti, l’input deve trovarsi tra il primo e l’ultimo points of interpolation. In general, when using k-point interpolation into a punto, ovvero tra 0 e N − 1. Quindi N punti sono sufficienti a definire la table with Ndominio points,dithe input may over an interval of N + 1 − k points. funzione su un lunghezza N − range 1. Per interpolazione a quattro punti, If k = 1 (i.e., no interpolation at all), the domain is from 0 to N (including the non possiamo ottenere valori per gli inputs tra 0 e 1 (non avendo i due punti endpoint at 0 but excluding the one at N ) assuming input values are truncated richiesti a sinistra di tali inputs) e nemmeno possiamo per lo spazio tra gli ultimi due (N − N − 1). Quindi intable questolookup caso il dominio 1aN− (as punti is done for2 enon-interpolated in Pd). varia The da domain is2from -1/2 eto haN la − lunghezza − 3. 1/2 if, N instead, we round the input to the nearest integer instead of Le forme d’onda periodiche wavetables interpolating. In either case, memorizzate the domain nelle stretches over a richiedono length of un N points. trattamento speciale alle estremit` a della tabella. Ad esempio, supponiamo For two-point interpolation, the input must lie between the first and last che vogliamo memorizzare una sinusoide pura di lunghezza N . Per la ricerca points, that is, between 0 and N − 1. So the N points suffice to define the non-interpolata, basta impostare, ad esempio, function over a domain of length N − 1. For four-point interpolation, we cannot get values for inputs 0 and x[n]between = cos(2πn/N ), 1n (not = 0, .having . . , N − the 1. required two points to the left of the input) and neither can we for the space between the last two points Per l’interpolazione a due punti, abbiamo bisogno di N + 1 punti: (N − 2 and N − 1). So in this case the domain reaches from 1 to N − 2 and has length N − 3. x[n] = cos(2πn/N ), n = 0, . . . , N. Periodic waveforms stored in wavetables require special treatment at the In altreofparole, dobbiamo il primo puntowe (n = 0) alla della tabella, ends the table. Forripetere example, suppose wish to fine store a pure sinusoid of in modo che l’ultimo segmento da N − 1 a N ritorni al valore iniziale. length N . For non-interpolating table lookup, it suffices to set, for example, x[n] = cos(2πn/N ), n = 0, . . . , N − 1


44 EXAMPLES 2.6.

Capitolo 2. Wavetables e campionatori 47 table10

0 mtof 0 tabosc4~ table10 | (OUT)

Figura2.12: 2.12:AUn oscillatore wavetable: B01.wavetables.pd. Figure wavetable oscillator: B01.wavetables.pd. For two-point interpolation, we needpunti, N + 1ilpoints: Per l’interpolazione a quattro ciclo deve essere regolato per iniziare al punto n = 1, poich´e non `e possibile ottenere correttamente valori interpolati cos(2πn/N n = 0, . . . ,wavetable N per inputs inferiori a x[n] uno.=Se quindi un), ciclo della `e organizzato tra 1 a N , dobbiamo fornire punti aggiuntivi per 0 (copiati da N ) e anche perthe N +1 In other words, we must repeat the first (n = 0) point at the end, so that e N + 2, copiati da 1 e 2, per creare una tabella di lunghezza N + 3. Per la last segment from N − 1 to N reaches back to the beginning value. stessa sinusoide come sopra, la tabella dovrebbe contenere: For four-point interpolation, the cycle must be adjusted to start at the point n = 1, since we can’t get properly interpolated values out for inputs less than x[n] =ofcos(2π(n − 1)/Nis),arranged n = 0, . .from .,N + one. If, then, one cycle the wavetable 1 2. to N , we must supply extra points for 0 (copied from N ), and also N + 1 and N + 2, copied from 1 and 2, to make a table of length N + 3. For the same sinusoid as above, 2.6 Esempi the table should contain: x[n] = cos(2π(n − 1)/N ), n = 0, . . . , N + 2 Oscillatore wavetable

L’esempio B01.wavetables.pd, mostrato in Figura 2.12, implementa un oscillatoQui vengono mostrate due nuovi oggetti primitivi di Pd. Il primo `e il wavetable stesso, che Wavetable oscillator appare a destra nella figura. Si pu` o utilizzare il mouse sulla wavetable per cambiare la sua forma e sentire, conseguentemente, il cambiamento di suono. Example B01.wavetables.pd, shown in Figure 2.12, implements a wavetable os- Non mostrata nella figura, ma utilizzata nella patch, ` e la funzione di Pd per calcolacillator, which plays back from a wavetable named “table10”. Two new Pd re automaticamente le wavetables con specifiche ampiezze le parziali, primitives are shown here. First is the wavetable itself, which per appears at rightche `e ` anche preferibile a disegnare manualmente le forme d’onda. E possibile inspesso the figure. You can “mouse” on the wavetable to change its shape and hear leggere scrivereastabelle da Not file (testo per but scambiare dati con the sounde change a result. shown oinsuono) the figure demonstrated in altri programmi. L’altra novit` `e una classe calculating di oggetti: wavetables with specified the patch is Pd’s facility for aautomatically partial amplitudes, which is often preferable to drawing waveforms by hand. tabosc4∼ : un oscillatore wavetable. Il “4” indica che questa classe utilizza You can also read and write tables to (text or sound) files for interchanging l’interpolazione a 4 puntiThe (cubica). Nell’esempio, il nome data with other programs. other novelty is an object class: della tabella, “table10”, `e specificato come creation argument per l’oggetto tabosc4∼ (`e anche tabosc4 ∼passare : a wavetable oscillator.daThe indicatesall’altra that thisinviando class uses 4possibile dinamicamente una“4” wavetable messaggi point (cubic) interpolation. In the example, the table’s name, “table10”, is appropriati all’oggetto). Le wavetables utilizzate da tabosc4∼ devono sempre avere un periodo pari ad una potenza di due; ma come mostrato sopra, la wavetable deve avere tre punti supplementari alle sue estremit`a. Le lunghezze consentite della tabella sono quindi della forma 2m + 3, come ad esempio 131, 259, 515, ecc. Gli oscillatori wavetable non sono limitati solo all’uso come oscillatori audio. La patch B02.wavetable.FM.pd (non mostrata qui) utilizza una coppia di

2.6 Examples re wavetable, che riproduce da una wavetable chiamata “table10”.


2.6. Esempi

45

oscillatori wavetable in serie. L’output del primo viene utilizzato come ingresso del secondo, e controlla quindi la sua frequenza che cambia periodicamente nel tempo.

Ricerca su wavetable in generale La classe tabosc4∼, seppur utile e efficiente, risulta un po’ troppo specifica e per molte delle applicazioni descritte in questo capitolo abbiamo bisogno di qualcosa di pi` u generale. L’esempio B03.tabread4.pd (Figura 2.13) mostra la tecnica di timbre stretching discussa nel paragrafo 2.4. Questo `e un semplice esempio di una situazione in cui il tabosc4∼ non sarebbe stato sufficiente. Nell’esempio vengono introdotte nuove classi: tabread4∼ : ricerca su wavetable. Come in tabosc4∼ la tabella viene letta utilizzando l’interpolazione a 4 punti. Ma mentre tabosc4∼ riceve una frequenza come input e legge automaticamente la forma d’onda ripetutamente, tabread4∼, oggetto pi` u semplice, aspetta l’indice di ricerca come input. Per utilizzarlo per fare qualcosa di ripetitivo, come in questo esempio, l’input stesso deve essere una forma d’onda ripetuta. Come tabosc4∼ (e tutte gli altri oggetti che leggono e scrivono su tabelle), `e possibile inviargli messaggi per selezionare la tabella da utilizzare. tabwrite4∼ : registrare un segnale audio in una wavetable. In questo esempio, tabwrite4∼ viene utilizzato per visualizzare l’output (anche se in seguito verr`a utilizzato per molte altre cose). Ogni volta che riceve un messaggio “bang” dall’oggetto a pulsante sopra, tabwrite4∼ inizia a scrivere i campioni successivi, che riceve in input, nella tabella richiamata dal creation arguments. L’esempio B03.tabread4.pd mostra come combinare un phasor∼ e un oggetto tabread4∼ per creare un oscillatore wavetable. L’output del phasor∼ varia, in valore, tra 0 e 1. In questo caso la wavetable da leggere, denominata “waveform12”, `e lunga 131 elementi. Il dominio per l’oggetto tabread4∼ varia quindi da 1 a 129. Per regolare l’intervallo del phasor∼ , lo moltiplichiamo per la lunghezza del dominio (128) in modo che vari tra 0 e 128 e quindi aggiungiamo 1, spostando in effetti l’intervallo a destra di un punto. Questo riscalamento `e compiuto dagli oggetti ∗ ∼ e + ∼ tra il phasor∼ e il tabread4∼ . Con solo questi quattro oggetti avremmo essenzialmente reinventato la classe tabosc4∼. In questo esempio, per`o, la moltiplicazione non `e per una costante 128, ma per una quantit`a variabile controllata dal parametro “squeeze”. La funzione dei quattro oggetti a destra della patch `e quella di fornire all’oggetto ∗ ∼ i valori per scalare il phasor∼ by. Per far questo abbiamo utilizzato una nuova classe di oggetti: pack : creare un elenco di due o pi` u elementi. I creation arguments stabiliscono il numero di argomenti in entrata, i loro tipi (di solito numeri) e i loro valori iniziali. Gli ingressi (ce ne saranno tanti quanti i creations arguments specificati) aggiornano i valori degli argomenti dei messaggi e, se l’ingresso pi` ua sinistra viene modificato (o semplicemente innescato con un messaggio “bang”), il messaggio viene mandato in output. In questa patch gli argomenti sono inizialmente 0 e 50, ma il number box aggiorna il valore del primo argomento, in modo che, come mostrato in figura, il messaggio pi` u recente che lascia l’oggetto pack `e “206 50”. L’effetto di ci`o


46

Capitolo 2. Wavetables e campionatori

2.6. EXAMPLES

49

frequency phase generation --> range adjustment -->

squeeze

162

206

phasor~

pack 0 50

*~

line~

+~ 1

+~ 128

tabread4~ waveform12 <--click to graph tabwrite~ wave-out12 waveform12

wave-out12

Figure duty cycle: B03.tabread4.pd. Figura 2.13: 2.13: A Unwavetable oscillatoreoscillator wavetablewith con variable duty cycle variabile: B03.tabread4.pd.


2.6. Esempi

47

sull’oggetto line∼ sotto `e quello di fare una rampa a 206 in 50 millisecondi; in generale l’output dell’oggetto line∼ `e un segnale audio che segue con regolarit` a i valori che cambiano sporadicamente nella number box contrassegnata con “squeeze”. Infine, 128 viene aggiunto al valore “squeeze”; se squeeze assume valori non negativi (come impone la number box in questa patch), il moltiplicatore di impostazione del range varia il phasor di 128 o pi` u. Se il valore `e maggiore di 128, l’effetto `e che il phasor riscalato trascorre una parte del suo ciclo bloccato alla fine della wavetable (che blocca il suo ingresso a 129). Il risultato `e che la forma d’onda viene scansionata su una parte del ciclo. Come mostrato, la forma d’onda viene compressa in 128/(128 + 206) del ciclo, quindi lo spettro `e allungato per un fattore di circa 1/2. Per semplicit` a, questa patch `e leggermente diversa da quella dell’esempio del paragrafo 2.4 in quanto le forme d’onda sono compresse verso l’inizio di ogni ciclo e non verso il centro. Questo ha l’effetto di cambiare leggermente la fase delle varie parziali della forma d’onda che si allunga e si scorcia; se il fattore di compressione cambia rapidamente, il corrispondente spostamento di fase suona come una leggera oscillazione del tono. Ci`o pu`o essere evitato usando un metodo leggermente pi` u complicato: sottrarre 1/2 dal phasor∼, moltiplicarlo per 128 o pi` u, quindi aggiungere 65 anzich´e uno.

Utilizzo di una wavetable come campionatore L’esempio B04.sampler.pd (Figura 2.14) mostra come utilizzare una wavetable come campionatore. In questo esempio l’indice nel sample (la wavetable) `e controllato muovendo il mouse in una number box. Una riscalatura conveniente per la number box `e in centesimi di secondo; per convertire in campioni (come l’input di tabread4∼ richiede) si moltiplica per 44100 campioni/sec per 0.01 sec in modo da ottenere 441 campioni per unit`a; questo prima di applicare pack e line∼ in modo molto simile a quello usato nell’esempio precedente. La trasposizione che si sente dipende da quanto velocemente si sposta su e gi` u il mouse. Questo esempio ha introdotto una nuova classe di oggetti: hip∼ : filtro high-pass (low-cut) semplice. Il creation argument fornisce la frequenza di taglio in cicli al secondo. Lo usiamo qui per eliminare l’uscita costante (zero-frequenza) quando l’input `e fisso in un singolo campione (quando non si cambia attivamente la posizione di lettura della wavetable con il mouse). I filtri saranno descritti nel Capitolo 8. Gli oggetti pack e line∼, in questo esempio, non sono inclusi solo per rendere il suono pi` u continuo, ma risultano essenziali per rendere il suono intelligibile. Se l’indice nella ricerca viene cambiato semplicemente ogni volta che il mouse si `e spostato di un pixel (ad esempio, da venti a cinquanta volte al secondo) la stragrande maggioranza dei campioni avrebbe lo stesso indice del campione precedente (gli altri 44000+campioni, senza contare quelli in cui il mouse si muove). Quindi la velocit`a di precessione sarebbe quasi sempre zero. Invece di cambiare le trasposizioni, si sarebbero sentiti dei grani da 20 a 50 cicli al secondo (provate a scoprire che cosa si sente suonare!).


48 2.6. EXAMPLES

0

Capitolo 2. Wavetables e campionatori

<-- read point, 0-100

* 441

convert to SAMPLES

pack 0 100 line~ tabread4~ sample-table hip~ 5 | (OUT)

high pass filter to cut DC

sample-table

--- 44103 samples ---

Figure 2.14:Un A sampler with mouse-controlled index: B04.sampler.pd. Figura 2.14: campionatore con controllo degli indici tramite mouse: B04.sampler.pd.

51


2.6. Esempi

49

Campionatori a loop Nella maggior parte delle situazioni, si ha necessit`a di un modo pi` u automatizzato di spostare il mouse per specificare le posizioni di lettura della wavetable; per esempio, vorreste voler riuscire a suonare un sample con una trasposizione stabile; potreste avere pi` u samples in esecuzione contemporaneamente (o altre cose che richiedono attenzione), oppure potreste voler passare rapidamente tra i samples o andare in posizioni prestabilite. Nei prossimi esempi, svilupperemo un lettore automatico di samples, che, anche se solo uno dei molti possibili approcci, `e un potente lettore che viene spesso utilizzato. Le patches B05.sampler.loop.pd e B06.sampler.loop.smooth.pd mostrano come fare ci` o: la prima nel modo pi` u semplice possibile ed la seconda (rappresentata in Figura 2.15, parte a) che incorpora una seconda curva per creare un inviluppo sul suono, descritto nel paragrafo 2.3. Introduciamo una nuova classe di oggetti: cos∼ : calcola il coseno di 2π volte il segnale in ingresso (in modo che da 0 a 1 fa un ciclo completo). A differenza degli oggetti di lettura delle tabelle in Pd, cos∼ lavora in modo periodico, in modo che non vi sia alcuna limitazione di intervallo sul suo input. In Figura 2.15 (parte a), un oggetto phasor∼ fornisce gli indici sia alla wavetable (a destra) che alle fasi tramite una funzione con forma a met`a coseno (a sinistra). Questi due vengono moltiplicati e il prodotto `e filtrato da un passaalto prima di uscire in output. La lettura della wavetable `e semplice; il phasor viene moltiplicato per un parametro “chunk size”, quindi sommato ad 1 e infine usato come indice per tabread4∼. Il parametro per la chunk size `e moltiplicato per 441 per convertirlo da centesimi di secondo a campioni. Questo corrisponde esattamente al diagramma a blocchi mostrato in Figura 2.5, con un segmento di posizione pari a 1 (che non pu`o essere 0 poich´e 1 `e l’indice minimo per cui tabread4∼ funziona). Il percorso del segnale a sinistra, nell’esempio, corrisponde alla tecnica di inviluppo per wavetable lookup mostrata in Figura 2.7. Qui l’onda a dente di sega `e impostata sull’intervallo (−1/4, 1/4) (sottraendo e moltiplicando per 0.5), quindi inviato a cos∼. Questo legge la funzione coseno nell’intervallo (−π/2, π/2), fornendo cos`ı solo la met`a positiva della forma d’onda. La parte (b) della Figura 2.15 introduce un terzo parametro, “read point”, che specifica dove, nel sample, il loop deve essere avviato (nella parte (a) siamo sempre partiti dall’inizio). La modifica necessaria `e abbastanza semplice: aggiungiamo il valore del “punto di lettura”, in campioni, all’indice della wavetable e procediamo come prima. Per evitare le discontinuit`a nell’indice, “ammorbidiamo” il valore del punto di lettura usando gli oggetti pack e line∼, come abbiamo fatto nel primo esempio di campionatore (Figura 2.14). Ci`o solleva un problema importante, anche se sottile. La formula di trasposizione momentanea (pagina 33) prevede che, fintanto che la chunk size e il punto di lettura non variano nel tempo, la trasposizione `e pari alla frequenza moltiplicata per la chunck size (come sempre, utilizzando appropriate unit`a di misura, Hertz per secondi, per esempio, in modo che il prodotto sia adimensionale). Tuttavia, variare, nel tempo, chunk size e punto di lettura influenzer`a la trasposizione momentanea, spesso in modi chiaramente percepibili, come si pu`o ascoltare nell’esempio B07.sampler.scratch.pd. L’esempio B08.sampler.nodoppler.pd (quello mostrato


50

Capitolo 2. Wavetables e campionatori

2.6. EXAMPLES

53

frequency (Hz.)

frequency

0

0

chunk size (hundredths of a second) 0

phasor~

* 441 -~ 0.5

*~

*~ 0.5

+~ 1

cos~

tabread4~ table18

phasor~ 0 -~ 0.5 chunk size 0

*~ 0.5 cos~

* 441 samphold~

*~

read point 0

+~ 1

*~

* 441

hip~ 5 | (OUT)

pack 0 100 line~ samphold~ +~

(a) tabread4~ table20 *~ hip~ 5 | (OUT)

Figure 2.15:

(b)

(a) a looping sampler with a synchronized envelope

Figura 2.15: (a) un campionatore a loopbutcon (B06.sampler.loop.smooth.pd); (b) the same, withuna inviluppo control for sincronizzaread loto (B06.sampler.loop.smooth.pd); (b) lo stesso, ma con un controllo per la cation (B08.sampler.nodoppler.pd). posizione di lettura (B08.sampler.nodoppler.pd).


2.6. Esempi

51

in figura) mostra un possibile modo per controllare questo effetto, introducendo una nuova classe di oggetti: samphold∼ : un’unit` a di sample-and-hold (questo nome risulter`a familiare a chi usa i sintetizzatori analogici, ma qui con un aspetto digitale; per maggiori dettagli, vedere il paragrafo 3.7). Questo oggetto memorizza un unico campione proveniente dall’ingresso sinistro e lo emette ripetutamente, fino a quando l’ingresso del lato destro (anche esso un segnale audio digitale, chiamato trigger) causa il cambiamento del campione memorizzato con un nuovo, sempre proveniente dall’ingresso sinistro. L’unit`a acquisisce un nuovo campione ogni volta che il valore numerico del trigger scende da un campione all’altro. Questo `e stato progettato per essere facilmente abbinabile con gli oggetti phasor∼, per facilitare l’attivazione (triggering) sui wraparounds di fase. L’esempio B08.sampler.nodoppler.pd utilizza due oggetti samphold∼ per aggiornare i valori della chunk size e del punto di lettura, esattamente quando il phasor riparte, in quello stesso momento l’inviluppo cosinosoidale `e a zero in modo che l’effetto delle modifiche istantanee non si senta. In questa situazione possiamo applicare la formula di trasposizione pi` u semplice per le Looping Wavetables per mettere in relazione, la frequenza, la chunk size e la trasposizione. Ci` o `e viene fatto nell’esempio B09.sampler.transpose.pd (non mostrato).

Campionatore a loop con sovrapposizione Come descritto nel paragrafo 2.3, a volte `e auspicabile utilizzare due o pi` u campionatori a loop sovrapposti per produrre un suono ragionevolmente continuo senza dover utilizzare inviluppi troppo rapidi alle estremit`a del loop. Ci`o `e particolarmente probabile in situazioni in cui il segmento in loop `e breve, un decimo di secondo o meno. L’esempio B10.sampler.overlap.pd, mostrato in Figura 2.16 (parte a), realizza due campionatori a loop un mezzo ciclo fuori fase tra loro. Le nuove classi di oggetti sono: loadbang : emette un messaggio “bang” quando la patch viene caricata. Questo `e usato in questa patch per assicurarsi che la divisione della trasposizione per la chunk size abbia un fattore di trasposizione valido nel caso in cui la chunck size venga inizialmente modificata con il mouse. expr : valuta le espressioni matematiche. Le variabili appaiono come $f1, $f2 e cos`ı via, e corrispondono alle entrate dell’oggetto. Le varie operazioni aritmetiche sono consentite, con parentesi per il raggruppamento, e vengono fornite molte librerie di funzioni, come l’esponenziazione, che si pu`o vedere in questo esempio con “pow” (la funzione di elevamento a potenza). wrap∼ : limita all’intervallo da 0 a 1. Cos`ı, ad esempio, 1.2 diventa 0.2; 0.5 rimane invariato; e −0.6 passa a 0.4. send∼ , s∼ , receive∼ , r∼ : versione segnale di send e receive. Un segnale audio inviato a un oggetto send∼ viene visualizzato alle uscite di tutti gli oggetti receive∼ con lo stesso nome. A differenza di send e receive, non si pu` o avere pi` u di un oggetto send∼ con lo stesso nome (si consiglia di vedere anche gli oggetti throw∼ e catch∼). Nell’esempio, una parte del macchinario per la lettura wavetable viene duplicato, utilizzando calcoli identici di “chunck-size-samples” (un flusso di messaggi)


52

Capitolo 2. Wavetables e campionatori

2.6. EXAMPLES

55

0

loadbang

r chunk-size r precession

<-- transposition, (tenths of a halftone)

0

<-- transposition

t b f

expr pow(2, $f1/120)

t b f

expr (pow(2, $f1/120)-$f3)/$f2

r chunk-size

+~ 0.5

t b f / phasor~ +~ 0.5 s~ phase

phasor~

wrap~

s~ phase

s~ phase2

0

wrap~

<-- precession (percent) * 0.01

s~ phase2

/ 0.9 s precession

(chunk size and read point controls not shown)

phasor~

* 0.001

*~ 0.9

s chunk-size

r chunk-size-samples

s~ read-pt

samphold~ r~ phase

+~ 1 +~

r~ read-pt r~ phase samphold~

tabread4~ table22

10 10

chunk size <-(msec)

r chunk-size

r~ phase *~

loadbang

samphold~

r~ phase

r~ phase

*~

r~ phase

-~ 0.5

+~

r~ read-pt

*~ 0.5

*~ 44100

-~ 0.5

cos~

+~ 1

*~ 0.5

tabread4~ table23

*~ <- (second reader not shown) hip~ 5 | (OUT) +~

(a)

r~ phase

cos~

*~ <- (second reader not shown) hip~ 5 | (OUT) (b) +~

Figure (a) two looping samplers (B10.sampler.overlap.pd); (b) Figura2.16: 2.16: (a) overlapped due looping samplers sovrapposti (B10.sampler.overlap.pd); the but with point controllato (B11.sampler.rockafella.pd). (b)same, lo stesso, maa phasor-controlled con il punto diread lettura da un phasor (esempio

B11.sampler.rockafella.pd).


2.6. Esempi

53

e di “read-pt” (un segnale audio smussato come prima). Tuttavia, il segnale audio “phase”, nella seconda copia, viene sostituito da “phase2”. La parte superiore della figura mostra il calcolo dei due segnali di fase: il primo riceve l’uscita di un oggetto phasor∼, e il secondo con l’aggiunta di 0.5 e limitandolo, con wrap∼, a valori tra 0 e 1, aggiungendo cos`ı 0.5 cicli (π radianti) alla fase. I due segnali di fase sono utilizzati ciascuno, con le stesse regolazioni del range come prima, per calcolare gli indici nella wavetable e nell’oggetto cos∼ e per controllare i due oggetti samphold∼. Infine, i risultati delle due copie vengono sommati per ottenere l’output.

Precessione automatica del punto di lettura L’esempio B11.sampler.rockafella.pd, illustrato nella parte (b) di Figura 2.16, adatta i concetti mostrati in precedenza in una situazione in cui il punto di lettura viene calcolato automaticamente. Qui modifichiamo il punto di lettura lungo il sample in un loop, permettendoci di accelerare o rallentare la riproduzione indipendentemente dalla trasposizione. Questo esempio affronta una debolezza del precedente, cio`e che se la velocit`a della precessione `e ovunque vicina ad uno (cio`e la velocit`a naturale di ascolto della wavetable registrata), e se non c’`e molta trasposizione, diventa preferibile utilizzare i grani pi` u grandi e abbassare di conseguenza la frequenza di ripetizione (mantenendo costante il prodotto per avere la trasposizione desiderata). Tuttavia, se `e consentito ottenere grani di grandi dimensioni, non `e pi` u conveniente quantizzare i cambi di controllo sui punti di wraparounds della fase, poich´e potrebbero essere troppo distanti per consentire un tempo di risposta ragionevole per controllare i cambiamenti. In questa patch rimuoviamo l’oggetto samphold∼ che aveva controllato il punto di lettura (ma lasciamo quello per la chunk size, che `e molto pi` u difficile da cambiare a met` a ciclo). Invece, utilizziamo la velocit`a (conosciuta) di precessione del punto di lettura per correggere la frequenza dell’onda a dente di sega, in modo da mantenere la trasposizione desiderata. Risulta che, quando il fattore di trasposizione e la precessione sono vicini tra loro (in modo che stiamo quasi facendo la stessa cosa di una semplice modifica della velocit`a), la frequenza scender` a ad un valore vicino a zero, per cui avremo aumentato, allo stesso tempo, la naturalezza del risultato. In questa patch ci spostiamo dalla gestione di punti di lettura, chunk size, ecc., a quella dei campioni e usiamo invece i secondi, convertendo in campioni (e spostando di uno solo) appena prima dell’oggetto tabread4∼ . La wavetable contiene un secondo di suono e supponiamo qui che la chunk size non superi gli 0.1 secondi, in modo da poter lasciare variare, in tutta sicurezza, il punto di lettura tra 0 e 0.9; la chunk size “reale” varia e pu`o diventare abbastanza grande, a causa del movimento del puntatore di lettura. Il controllo della precessione imposta la frequenza di un phasor di ampiezza 0.9 e quindi la precessione deve essere moltiplicata per 0.9 per impostare la frequenza del phasor (in modo che, per una precessione di uno per esempio, l’ampiezza e la frequenza del punto di lettura siano entrambi 0.9, in modo che rapporto tra ampiezza e frequenza sia uno). L’output di questa procedura viene chiamato “read-pt” come prima, ed `e utilizzato per entrambe le copie del lettore wavetable.


54

Capitolo 2. Wavetables e campionatori

La precessione p e la chunk size c sono noti e se indichiamo la frequenza del phasor∼ superiore (originale) con f , il fattore di trasposizione `e dato da: t = p + cf e risolvendo per f si ha t−p 2h/12 − p = c c dove h `e la trasposizione desiderata in semitoni. Questa `e la formula usata nell’oggetto expr. f=

Esercizi 1. Se un wavetable con 1000 campioni viene riprodotto alla trasposizione unitaria, ad una frequenza di campionamento di 44100 Hertz, quanto tempo dura il suono risultante? 2. Una wavetable di un secondo viene riprodotta in 0.5 secondi. Di quale intervallo `e trasposto il suono? 3. Sempre assumendo una wavetable di un secondo, se la riproduciamo periodicamente (in un loop), a quanti Hertz dovremmo eseguire in loop la wavetable per trasporre il suono originale verso l’alto di un semitono? 4. Vogliamo suonare una wavetable (registrata a R = 44100), in loop dieci volte al secondo, in modo che il suono originale memorizzato nella wavetable sia trasposto di una quinta perfetta ascendente (si veda pagina 11). Quanto grande deve essere il segmento della wavetable, in campioni, da riprodurre? 5. Supponiamo che si desideri utilizzare uno stretching su una wavetable che contiene una forma d’onda periodica di periodo 100. Desiderate ascoltare lo spettro non trasposto in un periodo di 200 campioni. Rispetto a quale fattore la forma deve essere allargata? 6. La prima met` a di una wavetable contiene un ciclo di sinusoide di ampiezza di picco uno. La seconda met`a contiene zeri. Qual `e la potenza della seconda parziale della wavetable? 7. Una sinusoide viene memorizzato in una wavetable con periodo 4 in modo che i primi quattro elementi siano 0, 1, 0 e −1, corrispondenti agli indici 0, 1, 2 e 3. Quale valore otteniamo per un input di 1.5: (a) e utilizzando un interpolazione a 2 punti ? (b) a 4 punti ? (c) quale `e il valore della sinusoide originale in questo punto? 8. Se i contenuti di una wavetable cadono tra −1 e 1, quali sono i possibili outputs della ricerca su wavetable utilizzando l’interpolazione a 4 punti?


Capitolo 3

Calcoli audio e di controllo 3.1

Il teorema di campionamento

Finora abbiamo discusso i segnali audio digitali come se fossero capaci di descrivere qualsiasi funzione variabile nel tempo, nel senso che conoscere i valori che la funzione assume sui valori interi dovrebbe in qualche modo determinare i valori che assume tra essi. Questo non `e del tutto vero. Per esempio, supponiamo che una funzione f (definita sui numeri reali) abbia sempre valore 1 su tutti gli interi: f (n) = 1, n = . . . , −1, 0, 1, . . . Potremmo allora immaginare che f (t) = 1 anche per t reale. Ma forse f potrebbe essere 1 sugli interi e 0 ovunque altrove – questa sarebbe comunque una funzione perfettamente accettabile, e la conoscenza del valore della funzione sugli interi non la distingue dalla funzione costante f (t) = 1. Ma l’intuizione ci dice che la funzione costante `e quella buona nell’ambito dei segnali audio digitali, mentre quella che nasconde un “segreto” tra i campioni non lo `e. Una funzione che `e “possibile campionare” dovrebbe essere quella per cui possiamo usare un certo schema di interpolazione ragionevole per dedurre i propri valori sui valori non interi a partire dai valori sugli interi. ` consuetudine, a questo punto, in qualsiasi discussione di computer music, E introdurre il famoso Teorema di Nyquist. Ci`o afferma (detto in maniera informale) che se una funzione `e una combinazione finita o addirittura infinita di sinusoidi, nessuna delle cui frequenze angolari supera π, allora, almeno teoricamente, pu` o essere completamente determinata dai valori che la funzione assume sugli interi. Un possibile modo di ricostruire la funzione sarebbe come il limite di interpolazioni polinomiali di ordini superiori. La frequenza angolare π, chiamata frequenza di Nyquist, corrisponde a R/2 cicli al secondo se R `e la frequenza di campionamento. Il periodo corrispondente `e due campioni. La frequenza di Nyquist `e la migliore che possiamo ottenere nel senso che qualsiasi sinusoide reale di frequenza superiore `e uguale, sugli interi, a una la cui frequenza `e inferiore a quella di Nyquist, ed `e proprio questa seconda frequenza quella che otterremo tramite il processo di interpolazione sopra proposto. Ad esempio, una sinusoide con frequenza angolare tra π e 2π, 55


56 60

3. Calcoli COMPUTATIONS audio e di controllo CHAPTER 3. AUDIOCapitolo AND CONTROL

0

7

Figure 3.1: Two real sinusoids, with angular frequencies π/2 and 3π/2, showing Figura 3.1: Due sinusoidi reali,Acon frequenze π/2 edistinguish 3π/2, che mostrano that they coincide at integers. digital audioangolari signal can’t between che coincidono sui numeri interi. Un segnale audio digitale non pu`o distinguere the two. tra le due. reconstructed by the ideal interpolation process. For instance, a sinusoid with ad esempio π + ω, pu` o essere scritta come angular frequency between π and 2π, say π + ω, can be written as cos((π + ω)n + φ) = cos((π + ω)n + φ − 2πn) = cos((π + ω)n + φ) = cos((π + ω)n + φ − 2πn)

= cos((w − π)n + φ) = cos((ω − π)n + φ)

= =cos((π cos((w−−ω)n π)n−−φ) φ)

for integers n. (If(se n weren’t integer the firstlastep would fail.) So a potrebbe sinusoid perallogni n intero n non an fosse un intero, prima uguaglianza with frequency between π and 2π is equal, on the integers at least, to one with essere falsa). Quindi una sinusoide con frequenza tra π e 2π `e uguale, almeno frequency between 0 and π; you simply can’t tell the two apart. And since sugli interi, ad una con frequenza tra 0 e π; in parole povere non `e possibile any conversion hardware should do the “right” hardware thing anddireconstruct lowerdistinguere le due sinusoidi. E poich´ e qualsiasi conversionethe dovrebbe frequency sinusoid, any higher-frequency one you try to synthesize will fare la cosa “giusta” e ricostruire la sinusoide a bassa frequenza, qualsiasicome altra out your speakers the wrong will hear altoparlanti the unique sinusoide ad alta at frequenza chefrequency—specifically, si tenta di sintetizzare you uscir` a dagli frequency betweenerrata 0 and– π the higher frequency lands on when reduced a una frequenza in that particolare, si sentir` a quell’unica frequenza tra 0 e in the above way. This phenomenon is called foldover, because the half-line π a cui la frequenza pi` u alta si riduce tramite le precedenti formule. Questo of frequencies fromil 0nome to ∞diisfoldover, folded back and in lengths of π, onto fenomeno prende perch´ e la forth, semiretta delle frequenze dathe 0a interval from 0 to π. The word aliasing means the same thing. Figure 3.1 ∞ viene ripiegata, avanti e indietro in segmenti di lunghezza π, sull’intervallo shows sinusoids angular frequencies π/2 and 3π/2, for instance, can’t per be da 0 athat π. La parola of aliasing indica lo stesso effetto. La Figura 3.1 mostra, distinguished as digital audio signals. esempio, che sinusoidi con frequenze angolari π/2 e 3π/2 non producono segnali We digitali conclude that when, for instance, we’re computing values of a Fourier audio distinguibili. series (Page 12), as a wavetable or as a real-time signal, we had better Concludiamo either che quando, ad esempio, stiamo calcolando i valori di una seleave out any sinusoid in the sum whose frequency exceeds π. But the picture in rie di Fourier (pagina 11), sia come wavetable che come segnale in tempo reale, general not this simple, since techniques than laadditive synthesis sarebbeismeglio tralasciare, nella most somma, qualsiasiother sinusoide cui frequenza sudon’t lead to neat, band-limited signals (ones whose components stop at some peri π. Ma tuttoci` o, in generale, non `e cos`ı semplice, poich´e la maggior parte limited frequency). Forlaexample, a sawtooth wave of frequency ω, of the form delle tecniche, tranne sintesi additiva, non producono segnali chiari e limitati put out by Pd’s phasor~ object but considered as a continuous function f (t), in banda (quelli le cui componenti si fermano ad una certa frequenza limitata). expands to: Ad esempio, un’onda a dente di sega di frequenza ω, della forma prodotta dal! " l’oggetto phasor∼ in come una funzione continua f (t), si sin(2ωt) sin(3ωt) 1 Pd,1 ma considerata − sin(ωt) + + + · · · f (t) = esprime come 2 π 2 3 1 sin(2ωt) sin(3ωt) 1 + + ··· (t) = − highsin(ωt) which enjoys farbitrarily frequencies; and moreover the+hundredth partial 2 π 2 3 is only 40 dB weaker than the first one. At any but very low values of ω, che contiene frequenze arbitrariamente elevate; e inoltre la centesima parziale `e solo 40 dB pi` u debole della prima. Ad eccezione dei valori molto bassi di ω, le parziali sopra π saranno presenti da un punto di vista sonoro e, a causa del foldover, verranno udite a frequenze non corrette (questo non significa che non


3.2. Controllo

57

si debbano usare le onde a dente di sega come generatori di fase – la wavetable lookup corregge magicamente il foldover dell’onda a dente di sega – ma bisogna pensarci due volte prima di utilizzare un’onda a dente di sega come fonte sonora digitale). Molte tecniche di sintesi, anche se non strettamente limitate in banda, forniscono parziali che possono diminuire in ampiezza pi` u rapidamente di 1/n, come nell’esempio dell’onda a dente di sega, e sono quindi pi` u accettabili per lavorare in digitale. In ogni caso, `e sempre una buona idea tenere a mente la possibilit`a di foldover, e addestrare le orecchie per riconoscerlo. La prima linea di difesa contro il foldover `e semplicemente quella di utilizzare frequenze di campionamento elevate; `e una buona pratica quella di utilizzare sistematicamente la frequenza di campionamento pi` u alta che sia facilmente gestibile dal computer. La frequenza pratica pi` u elevata varia a seconda se si sta lavorando in tempo reale o meno, dai tempi di CPU e dai limiti di memoria, e/o dall’hardware di input e output e talvolta anche dai limiti imposti dal software. Un trattamento, molto non tecnico, della teoria di campionamento `e fornito in [Bal03]. Maggiori dettagli possono essere trovati in [Mat69, pp. 1-30].

3.2

Controllo

Finora abbiamo affrontato segnali audio, che sono solo sequenze x[n] definite per n che assume valori interi, che corrispondono a punti regolarmente distanziati nel tempo. Questo `e spesso un contesto adeguato per descrivere le tecniche di sintesi, ma le applicazioni reali di musica elettronica comportano solitamente anche altri calcoli che devono essere effettuati a punti irregolari nel tempo. In questa sezione svilupperemo una struttura per descrivere ci`o che chiameremo calcoli di controllo. Richiederemo sempre che ogni calcolo corrisponda a un tempo logico specifico. Il tempo logico controlla quale campione di un output audio sar` a il primo a riflettere il risultato del calcolo. In un sistema non in tempo reale (come Csound nella sua forma classica), ci` o significa che il tempo logico procede da zero fino alla lunghezza del file audio di output. Ogni “scheda di partitura” ha un tempo logico associato (il tempo nella partitura) e agisce una volta che il calcolo audio ha raggiunto quel tempo. Cos`ı i calcoli audio e di controllo (elaborazione dei campioni e gestione delle schede di partitura) vengono gestiti a turno, tutti in ordine crescente di tempo logico. In un sistema in tempo reale, il tempo logico, che corrisponde ancora al tempo del successivo campione in output (audio) interessato, `e sempre leggermente in anticipo rispetto al tempo reale, misurato dal campione che sta effettivamente uscendo dal computer. I calcoli di controllo e audio sono ancora effettuati in alternanza, ordinati per tempo logico. Il motivo per cui nei calcoli in computer music si utilizza il tempo logico e non il tempo reale `e quello di mantenere i calcoli indipendenti dal tempo effettivo di esecuzione del computer, che pu`o variare per una serie di ragioni, anche per due calcoli apparentemente identici. Quando calcoliamo un nuovo valore di un segnale audio o elaboriamo qualche controllo in input, il tempo reale pu` o scorrere, ma noi richiediamo che il tempo logico rimanga lo stesso per tutto il calcolo, come se tale avvenga istantaneamente. Di conseguenza, i calcoli in musica elettronica, se eseguiti correttamente, sono deterministici: due


58 62

3. Calcoli COMPUTATIONS audio e di controllo CHAPTER 3. AUDIOCapitolo AND CONTROL

audio output (a)

0

1

2 . . .

0

0

(b)

control

3

1 1 2 2 logical time

1

audio

2

3

4

5

6

7 . . .

0

4

4

8

8

Figure 3.2: Timeline for digital audio and control computation: (a) with a block Figura 3.2:sample; Timeline audio digitale e di controllo: (a) con un size of one (b) per withilacalcolo block size of four samples. blocco di lunghezza pari un campione; (b) con un blocco di lunghezza pari a quattro campioni. or processing some control input, real time may pass but we require that the logical time stay the same through the whole calculation, as if it took place esecuzioni dello stesso calcoloofaudio tempo reale ognuna con gli stessi instantaneously. As a result this, in electronic musico meno, computations, if done corinputs, dovrebbero avere risultati identici. rectly, are deterministic: two runs of the same real-time or non-real-time audio La Figura each 3.2 (parte schematicamente il tempo logico e i computation, havinga) themostra same inputs, should havecome identical results. calcoli sui campioni siano allineati. I campioni audio vengono calcolati a inFigure 3.2 (part a) shows schematically how logical time and sample comtervalli regolari (contrassegnati come linee ondulate), ma prima del calcolo di putation are lined up. Audio samples are computed at regular periods (marked ciascun campione facciamo tutti i calcoli di controllo che potrebbero influenzarlo as wavy lines), but before the calculation of each sample we do all the control (contrassegnati come segmenti di linea retta). In primo luogo facciamo i calcocalculations that might affect it (marked as straight line segments). First we do li di controllo associati a tempi logici a partire da zero, senza includere quelli the control computations associated with logical times starting at zero, up to associati al tempo logico 1; quindi calcoleremo il primo campione audio (con but not including one; then we compute the first audio sample (of index zero), indice zero), al tempo logico 1. Facciamo quindi tutti i calcoli di controllo fino at logical time one. We then do all control calculations up to but not including a non includere quelli associati al tempo logico 2, quindi il campione dell’indice logical time 2, then the sample of index one, and so on. (Here we are adoptuno certain e cos`ı via (qui si stanno alcune ing conventions about adottando labeling that couldconvenzioni be chosen sull’etichettatura differently. For che potrebbero essere scelte in modo diverso. Ad esempio, non c’`e una ragione instance, there is no fundamental reason control should be pictured as coming fondamentale per cui i calcoli di controllo devono essere rappresentati come se “before” audio computation but it is easier to think that way.) arrivassero “prima” dei calcoli audio, ma `e tuttavia pi` u facile pensare in questo Part (b) of the figure shows the situation if we wish to compute the audio modo). output in blocks of more than one sample at a time. Using the variable B to La parte (b) della figura mostra la situazione quando si desidera calcolare denote the number of elements in a block (so B = 4 in the figure), the first audio l’output audio in blocchi di pi` u di un campione alla volta. Utilizzando la variacomputation will output samples 0, 1, ...B − 1 all at once in a block computed bile B per indicare il numero di elementi in un blocco (quindi B = 4 in figura), il at logical time B. We have to do the relevant control computations for all B primo calcolo audio emette i campioni 0, 1, ...B −1 tutti contemporaneamente in periods of time in advance. There is a delay of B samples between logical time un blocco calcolato al tempo logico B. Dobbiamo eseguire in anticipo i relativi and the appearance of audio output. calcoli di controllo per tutti i periodi di tempo B. C’`e un ritardo di B campioni Most computer music software computes audio in blocks. This is done to tra il tempo logico e la comparsa dell’output audio. increase the efficiency of individual audio operations (such as Csound’s unit La maggior parte dei softwares per la computer music calcola l’audio in blocchi. Ci` o `e fatto per aumentare l’efficienza delle singole operazioni audio (ad esempio i generatori unitari di Csound e gli oggetti con ∼ in Max/MSP e Pd). Ogni generatore unitario o oggetto con ∼ incorre in un costo di calcolo (overhead) ogni volta che viene richiamato, uguale a forse venti volte il costo


3.3. CONTROL STREAMS 3.3. Flussi di controllo

63 59

time

Figure 3.3: Graphical representation of a control stream as a sequence of points Figura in time.3.3: Rappresentazione grafica di un flusso di controllo come sequenza di punti nel tempo. generators and Max/MSP and Pd’s tilde objects). Each unit generator or tilde di calcolo medio di uneach campione. la dimensione del blocco `e uno, questo object incurs overhead time it isSecalled, equal to perhaps twenty times the significa un overhead 2,000%; se `e di Ifsessantaquattro (come in Pd, per cost of computing one del sample on average. the block size is one, this means default), l’overhead `e solo il 30%.(as in Pd by default), the overhead is an overhead of 2,000%; if itdiiscirca sixty-four only some 30%.

3.3 Flussi di controllo 3.3 Control streams

I calcoli di controllo possono derivare da fonti diverse, sia interne che esterne al calcolo complessivo. di calcoli di controllo generati Control computations may Esempi come from a variety of sources, both internamente internal and includonotoil the sequencing (in cui i calcoli Examples di controlloofdevono avvenire a tempi conpreexternal overall computation. internally engendered determinati) o il rilevamento di caratteristiche in uscita (admust esempio, trol computations include sequencing (in whichdell’output control computations take per l’osservazione dei passaggi zero indetection un segnale). Quelli generati place at pre-determined times)sullo or feature of the audio outputester(for namente watching possono provenire da dispositivi di inputExternally come i controllers MIDI, instance, for zero crossings in a signal). engendered onesil mouse e lafrom tastiera, pacchetti di as rete e cos` ı via. In ogni caso, i and calcoli di conmay come inputi devices such MIDI controllers, the mouse keyboard, trollo possono verificarsi a intervalli a differenza dei campioni audio network packets, and so on. In any irregolari, case, control computations may occur at che corrispondono al ticchettio di un orologio di campionamento. irregular intervals, unlike audio costante samples which correspond to a steadily ticking Avremmo sample clock. bisogno di un modo per descrivere il flusso di informazioni tra i calcoli controllo quelliofaudio, che baseremo sulla nozione di flusso di controllo We di will need ae way describing how information flows between control (control Questo altro chebase semplicemente unaofraccolta di stream. numeri and audiostream). computations, whichnon we `ewill on the notion a control – eventualmente vuota – che si presentano come risultato di calcoli di controllo, This is simply a collection of numbers—possibly empty—that appear as a reregolarmente irregolarmentewhether distanziati nel tempo logico. Il flusso di in controllo sult of controlocomputations, regularly or irregularly spaced logical pi` u semplice possibile non ha alcuna informazione diversa rispetto a quello di time. The simplest possible control stream has no information other than a time una sequenza temporale sequence: t[0], t[1], t[1], t[2], t[2], .. .. .. ......,,t[0], Anche se the i valori tempoare sono preferibilmente in their unit`a values di campioni, Although timedivalues best given in units assegnati of samples, aren’t iquantized; loro valorithey nonmay vengono quantizzati; essi possono essere numeri reali arbitrari. be arbitrary real numbers. We do require them to be sorted Richiediamo, per` oorder: , che siano ordinati in ordine non decrescente: in nondecreasing ≤ t[0] t[0] ≤ ≤ t[1] t[1] ≤ ≤ t[2] t[2] ≤ ≤ ·. ·. ·. ······ ≤ Ciascun della sequenza prende il nome di evento. Each itemelemento in the sequence is called an event. I flussi di controllo possono essere visualizzati come nella Figura Control streams may be shown graphically asgraficamente in Figure 3.3. A number line 3.3. Una retta numerata mostra sia il tempo che una sequenza di frecce nei shows time and a sequence of arrows points to the times associated with each tempi associati a ciascun evento. Il flusso di controllo visualizzato non ha dati event. The control stream shown has no data (it is a time sequence). If we want (`e una sequenza temporale). Se vogliamo mostrare i dati nel flusso di controllo, to show data in the control stream we will write it at the base of each arrow. li scriveremo alla base di ciascuna freccia. Un flusso numerico di controllo `e quello che contiene un numero per punto temporale, in modo da apparire come una sequenza di coppie ordinate: . . . , (t[0], x[0]), (t[1], x[1]), . . . .


60

Capitolo 3. Calcoli audio e di controllo

dove gli t[n] sono i punti temporali e gli x[n] sono i valori del segnale in quei tempi. Un flusso numerico di controllo `e approssimativamente analogo a un “controller MIDI”, i cui valori cambiano irregolarmente, ad esempio quando un controller fisico viene spostato da un esecutore. Altre sorgenti di flusso di controllo possono avere maggiori velocit` a di cambiamento e/o pi` u precisione. D’altra parte, una sequenza temporale potrebbe essere una sequenza di colpi di pedale, che (nonostante l’implementazione MIDI) non dovrebbero essere considerati come avere valori, ma solo tempi. I flussi numerici di controllo sono come i segnali audio in quanto entrambi sono solo valori numerici che cambiano nel tempo. Ma mentre il segnale audio avviene ad un tasso costante (e quindi i valori temporali non devono essere specificati per ogni campione), il flusso di controllo avviene in modo imprevedibile – forse uniforme, forse irregolare, forse mai. Vediamo ora cosa succede quando cerchiamo di convertire un flusso numerico di controllo in un segnale audio. Come prima, scegliamo una dimensione del blocco pari a B = 4. Consideriamo un’onda quadra con periodo 5.5 come un flusso di controllo: (2, 1), (4.75, 0), (7.5, 1), (10.25, 0), (13, 1), . . . e mostriamo tre modi per poterla convertire in un segnale audio. La Figura 3.4 (parte a) mostra la conversione pi` u semplice e veloce possibile. Ogni campione audio di uscita rispecchia semplicemente il valore pi` u recente del segnale di controllo. Quindi i campioni da 0 a 3 (calcolati al tempo logico di 4 a causa della dimensione del blocco) sono di valore 1 a causa del punto (2, 1). I quattro campioni successivi valgono ancora 1, perch´e dei due punti (4.75, 0) e (7.5, 1), il pi` u recente ha ancora valore 1. La conversione pi` u veloce possibile `e pi` u appropriata per i flussi di controllo che non cambiano frequentemente rispetto alla dimensione del blocco. I suoi vantaggi principali sono la semplicit` a di calcolo e la risposta pi` u veloce possibile ai cambiamenti. Come mostra la figura, quando gli aggiornamenti del flusso di controllo sono troppo veloci (nell’ordine della dimensione del blocco), il segnale audio potrebbe non essere una buona rappresentazione di quello sporadico (se, come in questo caso, il flusso di controllo avviene ad intervalli regolari, possiamo usare il teorema di campionamento per analizzare il risultato. Qui la frequenza di Nyquist associata alla frequenza del blocco R/B `e inferiore alla frequenza dell’onda quadra in input, quindi l’output subisce un aliasing ad una nuova frequenza inferiore alla frequenza di Nyquist). La parte (b) mostra il risultato della conversione al campione pi` u vicino. Ogni nuovo valore del flusso di controllo al tempo t influenza i campioni di uscita partendo dall’indice btc (il pi` u grande intero che non supera t). Ci`o equivale ad utilizzare la conversione pi` u veloce possibile con una dimensione di blocco pari a 1; in altre parole, la conversione al campione pi` u vicino nasconde l’effetto della maggiore dimensione del blocco. Ci`o `e migliore rispetto alla conversione pi` u veloce possibile nei casi in cui il flusso di controllo cambi rapidamente. La parte (c) mostra un tipo di conversione sporadic-to-audio, simile a quella al campione pi` u vicino, ma ora utilizzando anche l’interpolazione a due punti per aumentare ulteriormente l’accuratezza del tempo. Concettualmente possiamo descriverla come segue. Supponiamo che l’ultimo valore del flusso di controllo


3.3. Flussi di controllo

61

3.3. CONTROL STREAMS

65

a 0 1 2 3 4

8

12

12

16

16 . . .

0

4 (2, 1)

8 (7.5, 1)

(4.75, 0)

(13, 1)

(10.25, 0)

(18.5, 1) (15.75, 0)

b 0 1

2 3 4

8

12

16 . . .

0

4

8

12

16

0 1 2 3 4

8

12

c 16 . . . 0

4

8

12

16

Figure 3.4: Three ways to change a control stream into an audio signal: (a) as Figura 3.4: Tre(b) modi per to convertire un sample; flusso di(c)controllo in un segnale fast as possible; delayed the nearest with two-point interpo- audio: lation delay accuracy. (a) il for pi` uhigher velocemente possibile; (b) ritardato al campione pi` u vicino; (c) con

interpolazione a due punti per una maggiore precisione di ritardo.


62

Capitolo 3. Calcoli audio e di controllo

sia stato uguale a x e che il punto successivo sia (n + f, y), dove n `e un intero e f `e la parte frazionaria del valore temporale (quindi 0 ≤ f < 1). Il primo punto interessato, all’output audio, sar`a il campione all’indice n. Ma invece di impostare l’output su y come prima, lo impostiamo a f x + (1 − f )y, cio`e ad una media ponderata tra il precedente ed il nuovo valore, i cui pesi favoriscono maggiormente il nuovo valore se il tempo del valore sporadico `e precedentemente pi` u vicino a n. Nell’esempio mostrato, la transizione da 0 a 1 al tempo 2 d` a 0 · x + 1 · y = 1, mentre la transizione da 1 a 0 al tempo 4.75 d`a: 0.75 · x + 0.25 · y = 0.75. Questa tecnica fornisce una rappresentazione ancora pi` u vicina del segnale di controllo (almeno la parte di esso che si trova al di sotto della frequenza di Nyquist) a scapito di pi` u calcolo e un ritardo leggermente maggiore. I flussi numerici di controllo possono anche essere convertiti in segnali audio utilizzando funzioni di rampa per smussarne le discontinuit`a. Questo viene spesso applicato quando un flusso di controllo `e utilizzato per controllare un’ampiezza, come descritto nel paragrafo 1.5. In generale abbiamo bisogno di specificare tre valori per impostare una funzione di rampa in movimento: un tempo di inizio, un valore di destinazione (specificato dal flusso di controllo) e un tempo di destinazione spesso espresso come ritardo successivo al tempo di inizio. In tali situazioni `e quasi sempre abbastanza preciso regolare il tempo di inizio e di fine per abbinare il primo campione audio calcolato ad un tempo logico successivo, una scelta che corrisponde allo scenario descritto sopra, al riguardo della conversione pi` u veloce possibile. La Figura 3.5 (parte a) mostra l’effetto della rampa da 0 al tempo 3, ad un valore di 1 al tempo 9, tornando immediatamente indietro verso 0 al tempo 15, con dimensione del blocco B = 4. I tempi 3, 9, e 15 sono troncati rispettivamente a 0, 8 e 12. In molte situazioni reali la dimensione del blocco potrebbe essere dell’ordine di un millisecondo e la regolazione degli estremi della rampa agli estremi del blocco funziona bene per controllare le ampiezze; raggiungere un obiettivo una frazione di millisecondo in anticipo o in ritardo raramente produce una differenza sonora. Tuttavia, altri usi delle rampe risentono maggiormente della quantizzazione del tempo agli estremi. Ad esempio, se vogliamo fare qualcosa ripetutamente ogni pochi millisecondi, la variazione delle lunghezze del segmento provocher` a una aperiodicit` a udibile. Per situazioni come queste, possiamo migliorare l’algoritmo di generazione di rampa per avviarsi e arrestarsi a campioni arbitrari, come illustrato, ad esempio, nella Figura 3.5 (parte b). Qui gli estremi dei segmenti si allineano esattamente con i campioni richiesti 3, 9 e 15. Possiamo andare ulteriormente avanti e ottenere una regolazione per i campioni frazionati, facendo in modo che i segmenti tocchino i valori 0 e 1 a punti esattamente specificabili sulla retta numerata.


3.4. Conversione da segnali audio a flussi numerici di controllo 63 3.4. CONVERTING FROM AUDIO SIGNALS TO NUMERIC CONTROL STREAMS67

a 8

4

0

12

b 9

3

15 . . .

3

9

15

Figure segmentdel smoothing numericnumerico control streams: aligned (a) to Figura 3.5: 3.5: Line Smussatura flussi di ofcontrollo tramite (a) segmenti: block boundaries; (b) aligned to nearest sample. allineato agli estremi del blocco; (b) allineato al campione pi` u vicino. For suppose we want to repeat aripetere recorded of a wavetable Ad example, esempio, supponiamo che vogliamo unsound suonoout registrato su una 100 times per second, every 441 samples at the usual sample rate. Rounding wavetable 100 volte al secondo, ogni 441 campioni alla frequenza di campionaerrors to blocking boundaries could detune the mento due usuale. Gli erroriatdi64-sample arrotondamento dovuti alla creazione di playback blocchi diby 64 as much as a whole tone in pitch; and even rounding to one-sample boundaries campioni potrebbero modificare l’intonazione di riproduzione anche di un intero could variations up to about three cents. This introdurre situation tono; eintroduce anche arrotondando a estremi di 0.2%, un soloorcampione potrebbe would call for sub-sample accuracy in sporadic-to-audio conversion. variazioni fino a circa lo 0.2%, o tre cents. Questa situazione richiederebbe un

accuratezza sul sub-campione nella conversione sporadic-to-audio.

3.4 3.4

Converting from audio signals to numeric Conversione da segnali audio a flussi numecontrol streams rici di controllo

We sometimes need to convert in the other direction, from an audio signal to volte abbiamo bisogno di convertire direzione: daaun segnale audio aA sporadic one. To go in this direction,nell’altra we somehow provide series of logical a uno (a sporadico. Per andare direzione, dobbiamo, in qualche modo, times time sequence), as wellinasquesta an audio signal. For output we want a control fornire una serie dithe tempi (una with sequenza e un audio. stream combining timelogici sequence valuestemporale) taken from thesegnale audio signal. We do output this when we want incorporate the signal’s value as of a control Come vogliamo untoflusso di controllo che combina la part sequenza tempocomputation. rale con i valori presi dal segnale audio. Questo viene fatto quando vogliamo incorporare il valore del segnale come parte di un calcolo controllo. For example, we might be controlling the amplitude of adisignal using a line~ Ad as esempio, possiamo controllare l’ampiezza di unwe segnale utilizzando un object in Example A03.line.pd (Page 21). Suppose wish to turn off the oggettoatline∼ nell’esempio A03.line.pd (pagina 19).ofSupponiamo di voler sound a fixedcome rate of speed instead of in a fixed amount time. For instance, spegnere suono ad unathe fissata frequenza di velocit` a anzich´ e rispetto adituna we might ilwant to re-use network for another sound and wish to mute as quantit` aasfissa di tempo. Ad esempio, potremmo riutilizzare la rete quickly possible without audible artifacts; wevoler probably can ramp it per off un in altrotime suono e desideriamo disattivarlo il pi` u velocemente possibile artefatti less if the current amplitude is low than if it is high. To dosenza this we must udibili; aprobabilmente spegnerlo conituna rampa in amount meno tempo se confect message to thepossiamo line~ object to send to zero in an of time l’ampiezza attuale `e bassa cheoutput se `e alta. questo dobbiamo we’ll calculate on the basis ofpiuttosto its current value.A This willscopo require, first of confezionare un messaggio per object’s l’oggettooutput line∼(an per mandarlo zero in una all, that we “sample” the line~ audio signal) ainto a control quantit` a di tempo che calcoleremo sulla base del suo valore corrente di output. stream. Ci` oThe richieder` , innanzitutto, di “campionare” dell’oggetto line∼ (un sameaissues of time delay and accuracyl’output appear as for sporadic to audio segnale audio) e renderlo un flusso controllo. conversion. Again there will be a di tradeoff between immediacy and accuracy. Le stesse problematiche di ritardo temporale e di precisione appaiono come per la conversione sporadic-to-audio. Ancora una volta ci sar`a un compromesso tra immediatezza e precisione. Supponiamo che, come prima, stiamo calcolando l’audio in blocchi di 4 campioni e supponiamo che al tempo logico 6 vogliamo


68 64

CHAPTER 3. AUDIO AND CONTROL COMPUTATIONS Capitolo 3. Calcoli audio e di controllo

trigger signal

(a)

snapshot

(b)

Figure 3.6: Conversion between control and audio: (a) control to signal; (b) Figura 3.6: Conversione tra controllo e audio: (a) da controllo a segnale; (b) da signal to control by snapshots. segnale da controllo tramite snapshots (“istantanee”). Suppose as before that we are calculating audio in blocks of 4 samples, and prendere il valore di un segnale audio e usarlo per modificare il valore di un suppose that at logical time 6 we want to look at the value of an audio signal, altro. Come mostrato nella Figura 3.2 (parte b), il valore pi` u recentemente and use it to change the value of another one. As shown in Figure 3.2 (part calcolato del segnale sar` a per l’indice 3 e il primo indice in cui il nostro calcolo b), the most recently calculated value of the signal will be for index 3 and the pu` o influenzare un segnale `e 4. Possiamo quindi eseguire l’operazione che ci earliest index at which our calculation can affect a signal is 4. We can therefore interessa con un ritardo di solo un campione. Tuttavia, non possiamo scegliere carry out the whole affair with a delay of only one sample. However, we can’t esattamente quale campione: l’aggiornamento pu`o verificarsi solo agli estremi choose exactly which sample—the update can occur only at a block boundary. di un blocco. As before, we can trade immediacy for increased time accuracy. If it matters Come prima, possiamo diminuire l’immediatezza per aumentare la precisioexactly at which sample we carry out the audio-to-control-to-audio computation, ne temporale. Se siamo interessati a esattamente su quale campione eseguiamo we read the sample of index 2 and update the one at index 6. Then if we want il calcolo audio-to control-to audio, leggiamo il campione dell’indice 2 e aggiorto do the same thing again at logical time 7, we read from index 3 and update niamo quello all’indice 6. Quindi, se vogliamo ripetere la stessa cosa a tempo at index 7, and so on. In general, if the block size is B, and for any index n, logico 7, leggiamo dall’indice 3 e aggiorniamo all’indice 7 e cos`ı via. In generale, we can always read the sample at index n − B and affect the one at index n. se la dimensione del blocco `e B, per qualsiasi indice n, possiamo sempre leggere There is thus a round-trip delay of B samples in going from audio to control to il campione all’indice n − B e modificare quello nell’indice n. C’`e quindi un audio computation, which is the price incurred for being able to name the index ritardo di B campioni passando dall’audio al controllo e nuovamente al calcolo n exactly. audio, che `e il prezzo da pagare per essere in grado di scegliere esattamente If we wish to go further, to being able to specify a fraction of a sample, l’indice n. then (as before) we can use interpolation—at a slight further increase in delay. Se vogliamo andare oltre, per essere in grado di specificare una frazione di un In general, as in the case of sporadic-to-audio conversion, in most cases the campione, allora (come prima) possiamo usare l’interpolazione – con un leggero simplest solution is the best, but occasionally we have to do extra work. aumento di ritardo. In generale, come nel caso della conversione sporadic-toaudio, nella maggior parte dei casi la soluzione pi` u semplice `e la migliore, ma occasionalmente dovremo fare un lavoro extra.

3.5

Control streams in block diagrams

Figure 3.6 shows how control streams are expressed in block diagrams, using 3.5 Flussianddisignal-to-control controllo conversion nei diagrammi a blocchi control-to-signal as examples. Control streams are represented using dots (as opposed to audio signals which appear as solid La Figura 3.6 mostra come i flussi di controllo siano espressi in diagrammi arrows). a blocchi, utilizzando, come from esempi, la conversione da controllo a segnale The signal block converts a numeric control stream to an audio signal.e da segnale a controllo. I flussi di controllo sono rappresentati con puntini (in The exact type of conversion isn’t specified at this level of detail; in the Pd contrasto con i segnali audio che appaiono come frecce continue). Il blocco signal converte un flusso numerico di controllo in un segnale audio. Il tipo esatto di conversione non `e ancora stato specificato a questo livello della trattazione; negli esempi in Pd la scelta dell’operatore di conversione determiner` a proprio questo.


3.6. Individuazione degli eventi

65

Il blocco snapshot (istantanea) converte i segnali audio in flussi numerici di controllo. Oltre al segnale audio, `e necessario un ingresso di controllo separato per specificare la sequenza temporale in cui viene campionato il segnale audio.

3.6

Individuazione degli eventi

Oltre a scattare snapshots, una seconda modalit`a di trasmissione di informazioni dai segnali audio ai calcoli di controllo `e la event detection (individuazione degli eventi). In questa modalit`a le informazioni sul tempo vengono fornite dal segnale audio. Ne `e un esempio la threshold detection (individuazione della soglia), in cui l’input `e un segnale audio e l’output `e una sequenza temporale. Esaminiamo in dettaglio la threshold detection. Una ragione tipica per utilizzare la threshold detection `e quella di individuare quando un qualche tipo di attivit`a inizia e si arresta, come un esecutore che suona uno strumento. Supponiamo di avere gi`a una misura continua dell’attivit`a sotto forma di segnale audio (questo pu`o essere fatto, ad esempio, utilizzando un envelope follower). Quello che vogliamo `e un coppia di sequenze temporali, una che segna i tempi in cui l’attivit`a inizia e l’altra che segna quando si arresta. La Figura 3.7 (parte a) mostra una semplice realizzazione di questo principio. Supponiamo che l’input del segnale sia rappresentato in un grafico continuo. Una linea orizzontale mostra il valore costante della soglia. La sequenza temporale contrassegnata da “onsets” contiene un evento per ogni volta che il segnale attraversa la soglia da sotto a sopra; quella contrassegnata da “turnoff” segna invece i passaggi nell’altra direzione. In molte situazioni otterremo onsets e turnoffs indesiderati causati da piccole increspature nel segnale vicino alla soglia. Ci`o pu`o essere evitato sopprimendo i rimbalzi (debouncing), che pu`o essere fatto in almeno due semplici modi. Innanzitutto, come mostrato nella parte (b) della figura, possiamo impostare due soglie: una pi` u alta per la scelta degli onsets e una inferiore per i turnoffs. In questo schema la regola `e che segniamo solo il primo onset dopo ogni turnoff e, viceversa, segniamo solo un turnoff dopo ogni onset. Cos`ı, la terza volta che il segnale attraversa la soglia pi` u alta in figura, non viene segnato nessun onset perch´e non c’`e stato nessun turnoff dopo il precedente onset (all’inizio, agiamo come se l’output pi` u recente fosse un turnoff, in modo che il primo inizio venga segnato). Un secondo approccio per filtrare pi` u onsets e turnoffs, mostrato nella parte (c) della figura, `e associare un periodo morto a ciascun onset. Questo altro non `e che un intervallo costante di tempo dopo ogni onset, durante il quale rifiutiamo di segnalare ulteriori onsets o turnoffs. Una volta terminato il periodo, se nel frattempo il segnale `e sceso sotto la soglia, segnaleremo a ritroso un turnoff. I periodi morti possono anche essere associati ai turnoffs e i due periodi possono avere valori temporali diversi. Le due strategie di filtraggio possono essere utilizzate separatamente o simultaneamente. Di solito `e necessario adeguare manualmente i valori di soglia e/o i tempi morti ad ogni situazione specifica in cui viene utilizzata il thresholding. Il thresholding `e spesso utilizzato come primo passo nella progettazione di strategie di livello superiore per organizzare le risposte del computer a richiami (cues) udibili dagli esecutori. Un semplice esempio potrebbe essere quello di mettere in atto una sequenza di processi pre-pianificati, in modo che ciascuno


66 70

Capitolo 3. Calcoli audio e di controllo CHAPTER 3. AUDIO AND CONTROL COMPUTATIONS

onsets

threshold

(a) turnoffs time

(b)

high threshold low threshold

(c)

dead periods

Figure 3.7: Threshold detection: (a) with no debouncing; (b) debounced using Figura 3.7: Rilevamento di soglia: (a) senza soppressione two threshold levels; (c) debounced using dead periods. dei rimbalzi; (b) sopprimendo i rimbalzi utilizzando due livelli di soglia; (c) sopprimendo i rimbalzi usando periodi morti.


3.7. Segnali audio come controllo

67

di essi sia avviato dall’onset di un suono dopo un determinato periodo di silenzio relativo, come se volessimo vedere un musicista che suona una sequenza di frasi separate da pause. Rivelatori pi` u sofisticati (costruiti sul concetto del rilevamento della soglia) potrebbero rivelare un suono continuo o un silenzio entro un range atteso di durate, o sequenze di rapida alternanza tra riproduzione e non riproduzione, oppure periodi di tempo in cui la percentuale di tempo di riproduzione rispetto ai silenzi `e sopra o sotto una determinata soglia, o molte altre possibilit`a. Queste potrebbero avviare reazioni o figure predeterminate in un’improvvisazione.

3.7

Segnali audio come controllo

Dalla tradizione della sintesi analogica abbiamo ereditato un approccio elegante e old-fashioned al problema del controllo che pu`o essere utilizzato come alternativa ai flussi di controllo che abbiamo gi`a affrontato finora in questo capitolo. Questo approccio ci dice che possiamo usare, eventualmente insieme ai flussi di controllo, i segnali audio stessi per controllare la produzione di altri segnali audio. Due tecniche specifiche di sintesi analogica si prestano bene a questo trattamento: sequencing analogico e sample-and-hold. Il sequencer analogico [Str95, pp. 70-79] [Cha80, pp. 93,304-308] `e stato spesso utilizzato per avviare una sequenza di suoni ripetuti regolarmente o semi-regolarmente. Il sequencer stesso emette in genere una sequenza ripetuta di voltaggi, insieme ad un segnale di trigger che pulsa ad ogni transizione tra i voltaggi. Si utilizzavano questi voltaggi per produrre note o variare parametri timbrici e il trigger per controllare uno o pi` u generatori di inviluppo. Nella pratica audio digitale, ottenere sequenze cicliche di valori predeterminati `e semplicemente l’invio di un oggetto phasor∼ in una ricerca di tabella non-interpolata. Se vogliamo, per esempio, quattro valori nella sequenza, basta riscalare l’output del phasor∼ in modo che assuma i valori da 0 a 3.999., in modo che il primo quarto del ciclo legga il punto 0 della tabella e cos`ı via. Per ottenere il ripetuto innesco del trigger, il primo passo `e quello di sintetizzare un’altra onda a dente di sega che procede in sincronia con l’output del phasor∼, ma quattro volte pi` u veloce. Questo pu`o essere fatto usando una variante della tecnica della Figura 2.8, in cui abbiamo usato un sommatore e un operatore wrap per ottenere uno spostamento di fase desiderato. La Figura 3.8 mostra l’effetto di moltiplicare un’onda a dente di sega per un numero intero, quindi frazionata, tramite wrap, per ottenere un’onda a dente di sega ad un multiplo della frequenza originale. A questo punto `e facile ottenere una forma di inviluppo ripetuta, per esempio tramite wavetable lookup (utilizzando questa volta una ricerca di tabella interpolante, a differenza della sequenza di voltaggi). Anche tutte le tecniche di generazione e alterazione delle forme d’onda utilizzate per la creazione di suoni possono essere utilizzate qui. L’altra tecnica di controllo standard, presa dal controllo analogico del sintetizzatore, `e quella del sample-and-hold (campionamento e mantenimento [Str95, pp. 80-83] [Cha80, p. 92]). Questa tecnica parte da un segnale in ingresso, ne prende alcuni valori istantanei e “blocca” questi valori per usarli in output. I valori particolari da scegliere sono selezionati da un ingresso secondario che agisce da “trigger”. Nei punti, nel tempo, specificati dal trigger viene prelevato un


68

Capitolo 3. Calcoli audio e di controllo

72

CHAPTER 3. AUDIO AND CONTROL COMPUTATIONS

1

frequency

4

1

0

*

4

WRAP

OUT

1

Figure 3.8: Multiplying and wrapping a sawtooth wave to generate a higher Figura 3.8: Moltiplicazione e wrap di un’onda a dente di sega per generarne una frequency.

a frequenza pi` u alta.


3.8. Operazioni sui flussi di controllo

69

IN

trigger S/H

OUT

Figure 3.9: Sample and hold (“S/H”), using falling edges of the trigger signal. Figura 3.9: Sample-and-hold (“S/H”), usando i punti di caduta del segnale di trigger.

nuovo singolo valore dal segnale all’ingresso primario e viene emesso continuamente quel valore fino al punto successivo quando viene sostituito da un nuovo valore, sempre ottenuto dal segnale all’ingresso primario. Nell’audio digitale `e spesso utile campionare un nuovo valore sui punti di caduta del segnale di trigger, ovvero quando il valore corrente del segnale di trigger `e minore del suo valore precedente, come mostrato in Figura 3.9. Ci`o `e particolarmente conveniente per l’uso con un’onda a dente di sega, quando vogliamo campionare i segnali in sincronia con un processo controllato da un oscillatore. L’oggetto di sample-and-hold di Pd `e stato precedentemente introdotto nel contesto del campionamento (esempio B08.sampler.nodoppler.pd, pagina 50).

3.8

Operazioni sui flussi di controllo

Finora abbiamo parlato di come convertire tra flussi di controllo e flussi audio. Oltre a questa possibilit` a, ci sono quattro tipi di operazioni che possono essere eseguite sui flussi di controllo per ottenere altri flussi di controllo. Queste operazioni sui flusso di controllo non hanno operazioni corrispondenti sui segnali audio. La loro esistenza spiega in gran parte perch´e `e utile introdurre una intera struttura di controllo in parallelo a quella dei segnali audio.


70

Capitolo 3. Calcoli audio e di controllo

Il primo tipo di operazione `e costituito da operazioni di ritardo (delay) che compensano i valori di tempo associati a un flusso di controllo. Nei sistemi in tempo reale i ritardi non possono avere valori negativi. Un flusso di controllo pu` o essere ritardato di una quantit` a costante, oppure in alternativa, `e possibile ritardare ogni evento separatamente tramite quantit`a diverse. Due tipi diversi di delay sono utilizzati nella pratica: semplice e composto. Esempi di ciascun tipo sono mostrati in Figura 3.10. Un delay semplice, che agisce su un flusso di controllo, pianifica ogni evento, non appena viene raggiunto da esso, per un tempo in futuro. Tuttavia, se un altro evento arriva all’ingresso prima che venga emesso il primo evento, il primo evento viene dimenticato a favore del secondo. In un delay composto, ogni evento all’ingresso produce un output, anche se altri eventi arrivano prima che venga prodotto il suo output. Una seconda operazione su flussi di controllo `e il merging (unione): si prendono due flussi di controllo e se ne combinano tutti gli eventi in un nuovo flusso di controllo. La Figura 3.11 (parte a) mostra come questa e le successive operazioni sono rappresentate nei diagrammi a blocchi. La parte (b) della figura mostra l’effetto del merging di due flussi. I flussi possono contenere pi` u eventi contemporaneamente. Se i due flussi da unire contengono eventi nello stesso momento, il flusso risultante li contiene entrambi, in un ordine ben definito. Un terzo tipo di operazione sui flussi di controllo `e il pruning (potatura). Fare il pruning di un flusso di controllo significa guardare ai dati associati e prendere solo alcuni elementi. La parte (c) mostra un esempio in cui gli eventi (ciascuno dei quali ha un numero associato) vengono passati solo se il numero `e positivo. Infine, esiste il concetto di risincronizzazione (resynchronizing) di un flusso di controllo ad un altro, come mostrato nella parte (d). Qui un flusso di controllo (la sorgente) contribuisce con dei valori che vengono messi sulla sequenza temporale del secondo (il sync). Il valore assegnato all’output `e sempre quello pi` u recente dal flusso sorgente. Si noti che qualsiasi evento proveniente dalla sorgente pu` o apparire pi` u di una volta (come suggerito nella figura), oppure, eventualmente, potrebbe non apparire affatto. Ancora una volta, dobbiamo considerare cosa succede quando i due flussi contengono contemporaneamente un evento. Dobbiamo supporre che il sync avvenga prima della sorgente (in modo che l’output ha il valore dell’evento sorgente precedente)? O l’evento sorgente dovrebbe essere considerato prima in modo che il suo valore passa all’output allo stesso tempo? Come questo possa essere disambiguo `e una domanda di progettazione, a cui diversi ambienti software forniscono approcci diversi (in Pd `e controllata esplicitamente dall’utente).

3.9

Operazioni sui flussi di controllo in Pd

Finora abbiamo utilizzato Pd principalmente per elaborare i segnali audio, anche se, gi` a nella Figura 1.10 abbiamo dovuto distinguere tra la nozione, in Pd, di segnali audio e di controllo: i collegamenti che portano i flussi di controllo sono sottili e quelli portano l’audio sono spessi. I flussi di controllo in Pd appaiono come sequenze di messaggi. I messaggi possono contenere dati (spesso, uno o pi` u numeri) oppure no. Un flusso numerico di controllo (paragrafo 3.3)


3.9. Operazioni sui flussi di controllo in Pd

71

3.8. OPERATIONS ON CONTROL STREAMS

in

75

delay time delay

(a)

out

time (input)

(b)

(c)

Figure 3.10: Delay as an operation on a control stream: (a) block diagram; (b) Figura Operazione delay su un flusso di controllo: (a) diagramma a eect of 3.10: a simple delay on adicontrol stream; (c) eect of a compound delay. blocchi; (b) effetto di un delay semplice su un flusso di controllo; (c) effetto di un delay composto.


72

Capitolo 3. Calcoli audio e di controllo

76

CHAPTER 3. AUDIO AND CONTROL COMPUTATIONS

sync merge

data

prune

resync (a)

(b)

1

-2

3

1

-4

(c)

3

1

3 (d) 1

1

3

Figure 3.11: Operations on control streams (besides delay): (a) block diagrams; Figura 3.11: Operazioni sui flussi di controllo (oltre al ritardo): (a) diagrammi (b) merging; (c) pruning; (d) resynchronizing. a blocchi; (b) merging; (c) pruning; (d) risincronizzazione.


3.9. CONTROLsui OPERATIONS IN PD 3.9. Operazioni flussi di controllo in Pd

0

0

delay

(a)

0

moses

select

0

0 (b)

0

0

77 73

0

0 (c)

float

(d)

0

Figure four control operations in di Pd:controllo (a) delay; (b) (a) merging; (c) Figura 3.12: 3.12: The Le quattro operazioni sui flussi in Pd: delay; (b) pruning; (d) resynchronizing. merging; (c) pruning; (d) risincronizzazione. Or should the source event be considered as being first so that its value goes viene visualizzato come una connessione (sottile) che trasporta i numeri come to the output at the same time? How this should be disambiguated is a design messaggi. question, to which various software environments take various approaches. (In che explicitly non contengono dati compongono sequenze temporali. Per Pd itI messaggi is controlled by the user.) visualizzare i messaggi senza dati, in Pd, viene usato il simbolo (arbitrario) “bang”. tipi di operazioni sui flussi in di controllo 3.9I quattro Control operations Pd descritti nel paragrafo precedente possono essere espressi in Pd come mostrato in Figura 3.12. I delays So far we eseguiti have used Pd mostly for processing audio signals, although as early as vengono usando due oggetti di ritardo espliciti: Figure 1.10 we have had to make the distinction between Pd’s notion of audio delay : delaystreams: semplice. `e possibile specificare il tempo di ritardo tradel , and signals of control thin connections carry control streams and thick mite creation argument o attraverso l’ingresso destro. Un “bang” nell’ingresso ones carry audio. Control streams in Pd appear as sequences of messages. The sinistro “aziona” il delay, che(most poi emette “bang” dopo ilnumbers), ritardo specificato messages may contain data often,il one or more or not. in A millisecondi. Il delay ` e semplice nel senso che l’invio di un bang in un delay gi`a numeric control stream (Section 3.3) appears as a (thin) connection that carries avviato resetta a un nuovo tempo di uscita, annullando il precedente. numbers as messages. Messages not containing data make up time sequences. So that you can see pipe : delay composto. I messaggi che arrivano nell’ingresso sinistro appaiono messages with no data, in Pd they are given the (arbitrary) symbol “bang”. in uscita dopo il ritardo specificato, impostato dal primo creation argument. The four types of control operations described in the previous section can Se ci sono pi` u creation arguments, essi specificano una o pi` u entrate per i dati be expressed in Pd as shown in Figure 3.12. Delays are accomplished using two numerici o simbolici che i messaggi contengono. Un qualsiasi numero di messagexplicit delay objects: gi pu` o essere memorizzato contemporaneamente in pipe e i messaggi possono del , riordinati delay : insimple You can specify thedidelay time in aassegnati. creation essere uscitadelay. in funzione dei vari tempi ritardo a loro L’unione di flussi di controllo Pd non viene da the oggetti argument or via the right inlet. A in “bang” in the lefteseguita inlet sets delay,espliciti which ma da un meccanismo di connessione di Pd stesso. Questo ` e mostrato nella then outputs “bang” after the specified delay in milliseconds. The delay is parte (b) della figura con number boxes come esempio. In generale, ogni volta simple in the sense that sending a bang to an already set delay resets it to a che output viene fatto u di una the connessione adscheduled un ingresso new time,pi` canceling previously one.di controllo, i flussi di controllo vengono uniti. pipe : compound delay. Messages coming in the left inlet appear on the Pd offre diversi oggetti per il pruning su flussi di controllo, due dei quali sono mostrati nella parte (c) della figura: moses : selezione su intervallo numerico. I messaggi numerici che arrivano nell’ingresso sinistro appaiono sull’uscita sinistra se sono pi` u piccoli di un valore


74

Capitolo 3. Calcoli audio e di controllo

di soglia (impostato da un creation argument o dall’ingresso destro) e sull’uscita destra altrimenti. select , sel : selezione su numeri specifici. I messaggi numerici che arrivano nell’ingresso sinistro producono un “bang” sull’uscita solo se corrispondono esattamente ad un “valore di test”. Tale valore di test viene impostato sia con un creation argument, sia dall’entrata destra. Infine, Pd si occupa di risincronizzare i flussi di controllo implicitamente nel suo meccanismo di connessione, come illustrato dalla parte (d) della figura. La maggior parte degli oggetti con pi` u di una entrata sincronizza tutti gli altri ingressi a quello pi` u a sinistra. Quindi l’oggetto float, mostrato nella figura, risincronizza il suo ingresso a destra (che accetta numeri) con quello sinistro. L’invio di un “bang” all’ingresso sinistro produce, in uscita, il numero pi` u recente ricevuto precedentemente da float (nell’ingresso destro).

3.10

Esempi

Campionamento e foldover L’esempio C01.nyquist.pd (Figura 3.13, parte a) mostra un oscillatore che riproduce una wavetable passando attraverso le frequenze da 500 a 1423. Il wavetable `e costituito solo dalla 46-esima parziale, che quindi varia da 23000 a 65458 Hertz. A una frequenza di campionamento pari a 44100 queste due frequenze suonano teoricamente come 21100 e 21358 Hertz, ma il passaggio da l’una all’altra `e discendente per poi divenire ascendente. Altre due forme d’onda sono invece fornite per mostrare gli interessanti effetti di battimento tra le parziali che, sebbene dovrebbero essere distanti, si trovano vicine a causa del foldover. Per esempio, a 1423 Hertz, il seconda armonico `e 2846 Hertz, mentre il 33-esimo armonico suona a 1423 · 33 − 44100 = 2859 Hertz – una discreta dissonanza. Altri esempi meno estremi possono comunque produrre un foldover udibile in forme meno drastiche. Di solito si tratta di una forma ancora scoraggiante e vale la pena imparare a sentirla. L’esempio C02.sawtooth-foldover.pd (non illustrato qui) mostra ci` o per un’onda a dente a sega (l’oggetto phasor∼). Per le wavetables che contengono registrazioni audio, l’errore di interpolazione pu`o creare un foldover supplementare. I suoi effetti possono variare notevolmente; il suono `e a volte descritto come “croccante” o “splattering”, a seconda del tipo di registrazione, di trasposizione e di algoritmo di interpolazione.

Convertire controlli in segnali L’esempio C03.zipper.noise.pd (Figura 3.13, parte b) mostra l’effetto di convertire un flusso di controllo, che si aggiorna lentamente, in un segnale audio. Questo introduce un nuovo oggetto: line : un generatore di rampa con uscita un controllo. Come line∼, line accetta coppie di numeri (obiettivo, tempo) e crea una rampa all’obiettivo nel tempo specificato; tuttavia, a differenza di line∼, l’output `e un flusso numerico di controllo, che viene visualizzato, per impostazione predefinita, a intervalli di tempo di 20 msec.


3.9. Esempi

75

3.10. EXAMPLES

79

500, 1423 4000 line~ tabosc4~ table24 (OUT)

table24

(a)

pd metro

1 300

0 300 pd metro

line

line~

osc~ 880

1 2

0 2

line~

vline~

*~

*~

output~

output~

output~

output~

dB 0

dB 0

dB 0

mute

mute

mute

dB 0

mute

(b)

(c)

Figure 3.13: (a) sending an oscillator over the Nyquist frequency; (b) zipper Figurafrom 3.13: invio della frequenza unline~ oscillatore oltre laobjects frequenza noise the(a) line (control) object; (c)dithe and vline~ com-di Nyquist; (b) zipper noise dell’oggetto line∼ (c) confronto tra gli oggetti line∼ pared. e vline∼.


76

Capitolo 3. Calcoli audio e di controllo

Nell’esempio `e possibile confrontare il suono dell’ampiezza, che sale e scende, controllata dall’uscita di line con quella controllata dal segnale audio generato da line∼. L’output di line viene convertito in un segnale audio all’ingresso dell’oggetto ∗ ∼. Qui la conversione `e implicita collegando un flusso numerico di controllo ad un ingresso di segnale. In Pd, le conversioni implicite di flussi numerici di controllo a flussi audio vengono eseguite in modalit`a pi` u veloce possibile come mostrato nella Figura 3.4 (parte a). L’uscita di line diventa un segnale a gradini con 50 passi al secondo. Il risultato `e comunemente chiamato “zipper noise”. Mentre le limitazioni dell’oggetto line per la generazione di segnali audio sono chiaramente udibili anche su tali periodi di lunghezza 300 msec, la versione di segnale, line∼, non produce problemi udibili fino a quando i periodi in questione non diventano molto pi` u brevi. L’esempio C04.control.to.signal.pd (Figura 3.13, parte c) mostra l’effetto dell’uso di line∼ per generare un’onda triangolare a 250 Hertz. Qui entrano in gioco gli effetti mostrati nella Figura 3.5. Poich´e line∼ allinea sempre i segmenti di retta agli estremi dei segmenti del blocco, le durate esatte dei segmenti variano, e in questo esempio la variazione (in ordine di un millisecondo) `e una frazione significativa della loro lunghezza. Per queste situazioni `e previsto un oggetto pi` u preciso (e pi` u costoso in termini di tempo di calcolo): vline∼ : generatore esatto di segmenti di retta. Questo terzo oggetto della famiglia “line” emette un segnale audio (come line∼), ma allinea gli estremi del segnale ai punti temporali desiderati, accurati ad una frazione di un campione (l’esattezza `e limitata solo dal formato numerico a virgola mobile utilizzato da Pd). Inoltre, possono essere specificati molti segmenti con un singolo blocco audio; vline∼ pu` o generare forme d’onda con periodi fino a due campioni (oltre i quali si otterr` a solo foldover). L’oggetto vline∼ pu` o essere utilizzato anche per la conversione dei flussi numerici di controllo in flussi audio nelle modalit`a di “campione pi` u vicino” e “interpolazione a due punti”, come mostrato nella Figura 3.4 (parti b e c). Per ottenere la conversione al campione pi` u vicino, basta dare a vline∼ un tempo di rampa pari a zero. Per l’interpolazione lineare, basta invece dare un tempo di rampa di un campione (0.0227 msec se la frequenza di campionamento `e di 44100 Hertz).

Lettore di wavetable non-looping Un’area di applicazione che richiede un’attenzione particolare al confine tra flussi di controllo e segnali audio `e quella del campionamento. Fino ad ora i nostri campionatori hanno evitato la questione utilizzando loop infiniti. Ci`o consente una ricca variet` a di suoni accessibili effettuando cambiamenti continui in parametri quali la lunghezza del loop e la forma dell’inviluppo. Tuttavia, molti utilizzi del campionamento richiedono che le caratteristiche interne di una wavetable emergano a momenti prevedibili e sincronizzabili nel tempo. Ad esempio, i suoni registrati di percussione vengono solitamente riprodotti dal punto d’inizio, spesso non sono in loop, e di solito vengono riprodotti in un determinato rapporto di tempo con il resto della musica.


3.9. Esempi

77

3.10. EXAMPLES

bang

81

<-- play the sample

; cutoff 0 5

cut the sound off

Wait for the delay 5 cutoff to finish ; phase 1, 4.41e+08 1e+07; cutoff 1

set the upper line~ to start at the first sample and play forever (or until next trigger)

start new playback <-- record

r phase vline~ tabread4~ tab28

0, 1 5

adc~ 1

del 3990

hip~ 5

0 10

r cutoff *~

*~ vline~ | (OUT)

line~

tabwrite~ tab28

Figure 3.14: Non-looping sampler.

Figura 3.14: Campionatore non-looping.

Non-looping wavetable player One application area requiring careful attention to the control stream/audio signal boundary is sampling. Until now our samplers have skirted the issue by looping perpetually. This allows for a rich variety of sound that can be accessed by making continuous changes in parameters such as loop size and envelope shape. However, many uses of sampling require the internal features of a wavetable to emerge at predictable, synchronizable moments in time. For example, recorded percussion sounds are usually played from the beginning, are not often looped, and are usually played in a determined time relationship with the rest of the music. In this situation, control streams are better adapted than audio signals as triggers. Example C05.sampler.oneshot.pd (Figure 3.14) shows one possible way to accomplish this. The four tilde objects at bottom left form the signal processing network for playback. One vline~ object generates a phase signal (actually just a table lookup index) to the tabread4~ object; this replaces the phasor~ of Example B03.tabread4.pd (Page 49) and its derivatives. The amplitude of the output of tabread4~ is controlled by a second vline~


78

Capitolo 3. Calcoli audio e di controllo

In questa situazione, i flussi di controllo sono pi` u adatti come trigger rispetto ai segnali audio. L’esempio C05.sampler.oneshot.pd (Figura 3.14) mostra un possibile modo per realizzare ci` o. I quattro oggetti con la tilde in basso a sinistra costituiscono la rete di elaborazione del segnale per la riproduzione. Un oggetto vline∼ genera un segnale di fase (in realt`a si tratta solo un indice di ricerca sulla tabella) diretto all’oggetto tabread4∼; questo sostituisce il phasor∼ dell’esempio B03.tabread4.pd (pagina 46) ed i suoi derivati. L’ampiezza dell’output di tabread4∼ `e controllata da un secondo vline∼, per evitare le discontinuit` a nell’output nel caso in cui un nuovo evento venga avviato mentre il precedente evento `e ancora in riproduzione. L’oggetto vline∼ “cutoff” crea una rampa che manda l’output verso zero (indipendentemente dal fatto che sia in riproduzione) in modo che, una volta che l’output sia zero, l’indice della wavetable pu` o essere cambiato in modo discontinuo. Per avviare una nuova “nota”, in primo luogo, l’oggetto vline∼ “cutoff” va a zero; quindi, dopo un ritardo di 5 msec (nel tempo in cui vline∼ ha raggiunto lo zero) la fase viene resettata. Questo viene fatto con due messaggi: innanzitutto, la fase `e impostata su 1 (senza valore temporale in modo da saltare a 1 senza nessuna rampa). Il valore “1” specifica il primo punto leggibile della wavetable, poich´e stiamo utilizzando l’interpolazione a 4 punti. In secondo luogo, nella stessa message box, la fase `e portata a 441,000,000 in un periodo di tempo di 10,000,000 msec (in Pd, i numeri molto grandi sono mostrati usando la notazione esponenziale; questi due appaiono come 4.41e+08 e 1e+07.) Il quoziente `e 44.1 (in unit` a per millisecondo) che fornisce una trasposizione di uno. L’oggetto vline∼ superiore (che genera la fase) riceve questi messaggi tramite l’oggetto “r phase” sopra di esso. L’esempio presuppone che la wavetable scenda senza discontinuit`a a zero nelle due estremit` a e la parte inferiore destra della patch mostra come registrare un tale tipo di wavetable (in questo caso quattro secondi). Qui `e sufficiente (e computazionalmente pi` u economico) un oggetto line∼. Anche se la wavetable deve essere almeno di 4 secondi affinch´e tutto funzioni, `e possibile registrare wavetables pi` u brevi semplicemente attivando prima l’oggetto line∼. L’unica cautela `e che, se si sta leggendo e scrivendo contemporaneamente dalla stessa wavetable, si dovrebbe evitare situazioni in cui le operazioni di lettura e scrittura si riferiscano contemporaneamente alla stessa parte della wavetable. Gli oggetti vline∼ intorno al tabread4∼ sono stati scelti al posto di line∼ perch´e l’arrotondamento dei punti di arresto di quest’ultimo al confine del blocco pi` u vicino (tipicamente 1,45 msec) pu`o rendere aperiodicit`a udibili nel suono se la wavetable viene ripetuto pi` u di 10 o 20 volte al secondo, e impedirebbe di ottenere un suono piacevole e periodico a livelli pi` u elevati di ripetizione. Ritorneremo sul campionamento basato su vline∼ nel prossimo capitolo, per aggiungere trasposizione, inviluppi e polifonia.

Da segnali a controlli L’esempio C06.signal.to.control.pd (non illustrato) mostra la conversione da segnali audio a flussi numerici di controllo tramite un nuovo oggetto tilde qui introdotto.


3.9. Esempi

79

snapshot∼ : converte il segnale audio in messaggi di controllo. Ci`o fornisce sempre il pi` u recente campione audio calcolato (conversione pi` u veloce possibile), in modo che il tempo esatto di campionamento varia di un blocco audio. ` spesso auspicabile percepire l’ampiezza del segnale audio piuttosto che E “sbirciare” in un singolo campione; l’esempio C07.envelope.follower.pd (anch’esso non illustrato) introduce un altro oggetto che fa questo: env∼ : segue inviluppo RMS. Fornisce in uscita messaggi di controllo che forniscono l’ampiezza RMS a breve termine (in decibel) del segnale audio in entrata. Un creation argument consente di selezionare il numero di campioni utilizzati nel calcolo dell’ampiezza RMS; numeri pi` u piccoli danno un output pi` u veloce (e forse meno stabile).

Sequencer in stile analogico L’esempio C08.analog.sequencer.pd (Figura 3.15) realizza il sequencer analogico e la generazione di inviluppi descritti nel paragrafo 3.7. La tabella “sequence”, con nove elementi, contiene una sequenza di frequenze. L’oggetto phasor∼, in cima, legge ciclicamente, a 0.6 Hertz, la tabella con la sequenza. La ricerca noninterpolante su tabella (tabread∼ invece di tabread4∼) viene utilizzata per leggere le frequenze in passi discreti (le situazioni, in cui preferiamo la ricerca non-interpolante su tabelle, sono rare). L’oggetto wrap∼ converte l’onda a dente di sega di ampiezza 9 ad una ad ampiezza unitaria come descritto in precedenza in Figura 3.8, che viene quindi utilizzata per ottenere una funzione di inviluppo a partire da una seconda wavetable. Questa viene utilizzata per controllare la dimensione dei grani in un campionatore a loop (dal paragrafo 2.6). Qui la wavetable `e costituito da sei periodi di sinusoide. I grani vengono smussati moltiplicandoli per una funzione coseno trasposta (cos∼ e + 1). L’esempio C09.sample.hold.pd (non illustrato qui) mostra un’unit`a sampleand-hold, un altro dispositivo utile per eseguire attivit`a di controllo nel dominio del segnale audio.

Sequencer in stile MIDI L’esempio C10.monophonic.synth.pd (Figura 3.16) implementa un sintetizzatore monofonico ma in questo caso basato sulla controllabilit`a via MIDI. Qui i compiti di generazione di inviluppo e di sequenze di note vengono gestiti utilizzando flussi di controllo anzich´e segnali audio. Per questo esempio sono necessari nuovi oggetti di controllo: notein : input di nota MIDI. Tre uscite forniscono la nota, la velocity e il canale degli eventi MIDI di note-on e note-off in entrata (dove gli eventi di note-off appaiono come eventi di note-on a velocity zero). Gli outputs appaiono nell’ordine standard da destra a sinistra di Pd. stripnote : filtra i messaggi di note-off. Questo oggetto lascia passare coppie di valori (nota, velocity) solo quando la velocity `e diversa da zero. A differenza di notein, stripnote non utilizza direttamente l’input e l’output MIDI dell’hardware.


84

CHAPTER 3. AUDIO AND CONTROL COMPUTATIONS

80

Capitolo 3. Calcoli audio e di controllo

phasor~ 0.6 *~ 9 main loop: sawtooth of amplitude 9 tabread~ sequence

read frequency sequence

phasor~

wrap~ 9x original frequency sawtooth

-~ 0.5

*~ 100 +~ 1

adjust for reading envelope sample

tabread4~ envelope *~

multiply by audio-frequency sawtooth

*~ 128 adjust amplitude cos~ +~ 1

+~ 129

and center for wavetable

tabread4~ sample

*~ multiply by raised-cosine smoothing function | envelope (OUT)

sequence

sample

Figura 3.15: Un sequencer in stile sintetizzatore analogico. Figure 3.15: An analog-synthesizer-style sequencer.


3.9. Esempi

81

3.10. EXAMPLES

85

notein pit

vel

note-on filter stripnote

t b f float

velocity stored here

sel 0

test for note on or off

off

phasor~ -~ 0.5

/ 127 $1 100

select test against latest note-on pitch 0 1000

line~

envelope generator now controls amplitude as well as grain size +~ 0.5

cos~ +~ 1

*~

*~

*~ 2

*~ | (OUT)

on float recall pitch

pitch mtof

f - store pitch below b - bang to recall velocity

cos~ This replaces the tabread4~ in the previous patch.

Figure 3.16: A MIDI-style monophonic synthesizer. Figura 3.16: Un sintetizzatore monofonico in stile MIDI.


82

Capitolo 3. Calcoli audio e di controllo

trigger , t : copia un messaggio alle uscite in ordine da destra a sinistra, con conversione sul tipo. I creation arguments (“b” e “f” in questo esempio) specificano due uscite, una che fornisce messaggi “bang”, l’altra valori “float” (cio`e numeri). Viene creata un’uscita per ogni creation argument. Le uscite vengono visualizzate nell’ordine standard da destra a sinistra. Gli oggetti di controllo della patch inviano le frequenze all’oggetto phasor∼ ogni volta che viene ricevuto un messaggio MIDI di note-on. Controllare l’ampiezza (tramite l’oggetto line∼) `e pi` u difficile. Quando viene ricevuto un messaggio di note-on, l’oggetto sel 0 emette la velocity dall’uscita destra (perch´e l’input non corrisponde a 0); questa viene divisa per la velocity massima MIDI 127 e inserita in un messaggio per line∼, con un tempo di 100 msec. Tuttavia, quando viene ricevuto un note-off, `e sufficiente interrompere il suono se il valore di nota del note-off corrisponde effettivamente al valore di nota che sta suonando lo strumento. Ad esempio, supponiamo che i messaggi ricevuti siano “60 127”, “72 127”, “60 0” e “72 0”. Quando il note-on con nota 72 arriva, la nota eseguita dovrebbe cambiare a 72 e quindi il messaggio “60 0” dovrebbe essere ignorato, con la nota che suona fino al messaggio “72 0”. Per raggiungere questo obiettivo, innanzitutto memorizziamo la velocity nell’oggetto float superiore. In secondo luogo, quando la nota arriva, viene anche memorizzata (l’oggetto float inferiore) e poi la velocity viene testata rispetto al valore zero (l’uscita “bang” di t b f richiama la velocity che viene poi inviata a sel 0). Se questa `e zero, il secondo passo `e quello di richiamare la nota e testarla (l’oggetto select) rispetto al valore di nota del note-in pi` u recentemente ricevuto. Solo se questi sono uguali (in modo che “bang” compaia all’uscita sinistra di select), il messaggio “0 1000” va all’oggetto line∼.

Esercizi 1. Quante parziali di un tono La a 440 possono essere rappresentate digitalmente ad una frequenza di campionamento di 44100 Hertz? 2. Quale frequenza si sente se si sintetizza una sinusoide a 88000 Hertz ad una frequenza di campionamento di 44100? 3. Supponiamo di sintetizzare un suono a 44100 Hertz e che stiamo calcolando blocchi audio di 64 campioni. Un evento di controllo `e previsto che avvenga trascorso il tempo di esattamente un secondo, utilizzando lo schema di aggiornamento pi` u veloce possibile. A quale campione avviene l’aggiornamento? 4. Campionando a 44100 Hz, desideriamo approssimativamente riprodurre un Do centrale ripetendo una forma d’onda fissa ogni N campioni. Quale valore di N dovremmo scegliere e di quanti cents (pagina 7) ci discostiamo dal “vero” Do centrale? 5. Due onde a dente di sega, di ampiezza unitaria, hanno frequenze rispettivamente di 200 e 300 Hertz. Qual `e il periodo della loro somma? Cosa succede se poi si fa il wrap della somma per restringerla al range tra 0 e 1? Questo risultato cambia a seconda della fase relativa delle due onde?


3.9. Esempi

83

6. Due onde a dente di sega, di uguale frequenza e ampiezza e mezzo ciclo fuori fase, vengono sommate. Qual `e la forma d’onda risultante dalla somma e quali sono la sua ampiezza e la sua frequenza? 7. Qual `e il livello relativo, in decibel, del terzo armonico (tre volte la fondamentale) dell’onda a dente di sega rispetto a quella della fondamentale? 8. Supponiamo di sintetizzare un’onda a dente di sega a 44000 Hertz ad una frequenza di campionamento di 44100 Hertz. Qual `e la forma d’onda risultante? 9. Utilizzando le tecniche del paragrafo 3.7, disegnare un diagramma a blocchi per la generazione di due sinusoidi, con fase bloccata, a 500 e 700 Hertz. 10. Disegnare un diagramma a blocchi che illustri come utilizzare il thresholding per rilevare quando un segnale audio ne supera un altro in valore (questo potrebbe essere utile quando si vuole rilevare e filtrare il feedback dagli altoparlanti ai microfoni).


84

Capitolo 3. Calcoli audio e di controllo


Capitolo 4

Automazione e gestione della voce Spesso `e auspicabile controllare gli oggetti musicali o gli eventi come “aggregati” piuttosto che singolarmente. Gli aggregati possono assumere la forma di una serie di eventi distanziati nel tempo, in cui i dettagli degli eventi seguono dall’architettura superiore (ad esempio, note in una melodia). Oppure gli oggetti singoli potrebbero essere eseguiti contemporaneamente, come con le voci di un accordo o le parziali in un tono complesso. Spesso alcune o tutte le propriet`a degli elementi singoli sono meglio dedotte da quelle del tutto. Una ricca collezione di strumenti e di idee `e sorta nel repertorio della musica elettronica per distinguere i comportamenti individuali da quelli aggregati. In questo capitolo ci occupiamo di due classi generali di tali strumenti: generatori di inviluppo e banchi di voci. Il generatore di inviluppo automatizza il comportamento nel tempo e il banco di voci su aggregati di processi simultanei (come i generatori di segnali).

4.1

Generatori di inviluppo

Un generatore di inviluppo (a volte, pi` u giustamente, chiamato generatore di transiente) fa si che un segnale audio cresca e decresca con regolarit`a, come per controllare l’intensit` a di una nota musicale. I generatori di inviluppo sono stati trattati in precedenza nel paragrafo 1.5. Il controllo dell’ampiezza tramite la moltiplicazione (Figura 1.4) `e il modo pi` u diretto e comune di utilizzarne uno, ma ci sono molti altri usi possibili. I generatori di inviluppo sono apparsi in molte forme nel corso degli anni, ma il preferito, pi` u semplice e perenne, `e il generatore di inviluppo ADSR. “ADSR” `e un acronimo di “Attack, Decay, Sustain, Release” (Attacco, Decadimento, Sostegno, Rilascio), i quattro segmenti di output del generatore ADSR. Il generatore ADSR viene attivato e disattivato da un flusso di controllo chiamato “trigger”. Avviare il generatore ADSR vuol dire far avviare i suoi segmenti di attacco, decadimento e sostegno. Il trigger di disattivazione fa invece avviare il segmento di rilascio. La Figura 4.1 mostra la rappresentazione di un diagramma a blocchi di un generatore di inviluppo ADSR. 85


90 86

CHAPTER 4. AUTOMATION AND VOICEe gestione MANAGEMENT Capitolo 4. Automazione della voce

trigger

Figure 4.1: envelope as a block showing trigger input (a Figura 4.1: ADSR Diagramma a blocchi di undiagram, inviluppo ADSR the , che mostra l’input control stream) and the audio output. trigger (un flusso di controllo) e l’output audio.

parameter sets the output value at the end of the attack segment (normally the Ci sono cinque parametri che controllano il generatore ADSR. primo luohighest value output by the ADSR generator). Second and third,Inthe attack go, un parametro di livello imposta il valore di uscita alla fine del segmento and decay parameters give the time duration of the attack and decay segments. di attacco (normalmente l’output pi` ulevel altoofprodotto dalsegment, generatore Fourth, a sustain parameter gives the the sustain as aADSR). fractionIl secondo e il terzo, i parametri di attacco e decadimento, danno la durata dei of the level parameter. Finally, the release parameter gives the duration of the segmenti di attacco e decadimento. Il quartowith parametro `e quello sustain release segment. These five values, together the timing of thedi“on” and e fornisce il livello deldetermines segmento the di sustain, come una frazione del para“off” triggers, fully output ofespresso the ADSR generator. For example, metro di livello. Infine, il parametro di rilascio fornisce la durata deland segmento the duration of the sustain portion is equal to the time between “on” “off” di rilascio. Questi cinque valori, alla decay temporizzazione triggers, minus the durations of theinsieme attack and segments. dei triggers di “on” e “off”, determinano completamente l’output del generatore ADSR. Ad Figurela4.2 graphs some possibledioutputs of an ADSRalenvelope generator.tra In i esempio, durata della porzione sostegno `e uguale tempo compreso part (a) “on” we assume that the “on” and “off” triggers are widely enough separated triggers e “off”, meno le durate dei segmenti di attacco e di decadimento. that the sustain segment is reached before the “off” trigger is received. Parts riporta possibili di unangeneratore di inviluppo (b) La andFigura (c) of 4.2 Figure 4.2 alcuni show the resultoutputs of following “on” trigger quickly ADSR. Nellaone: parte supponiamo che i triggers “on” “off” siano during abbastanza by an “off” (b)(a) during the decay segment, and (c) eeven earlier, the separati in modo chegenerator il segmento di sostegno raggiunto prima che il trigger attack. The ADSR reacts to thesevenga situations by canceling whatever remains the attack decay continuing straight to the release “off” sia of ricevuto. Le and parti (b) esegments (c) dellaand figura 4.2 mostrano il risultato di un segment.rapido Also, di anun ADSR may be before release innesco “off” generator dopo un “on”: (b)retriggered durante il “on” segmento di the decadimensegment is finished or durante even during the attack, decay, or ADSR sustainreagisce segments. Part to e (c) ancor prima, l’attacco. Il generatore a queste (d) of the annullando figure shows a reattack during sustain part (e), situazioni qualsiasi residuo dei the segmenti di segment, attacco e and di decadimenduring the decay segment. to e proseguendo direttamente nel segmento di rilascio. Inoltre, un generatore ADSR pu` o essere retriggerizzato con un “on” prima che il segmento di rilascio The classicoapplication an ADSR envelopediisattacco, using a decadimento voltage-control keysia terminato addiritturaofdurante i segmenti o sosteboard or sequencer to make musical notes on a synthesizer. Depressing and re-di gno. La parte (d) della figura mostra una ri-attivazione durante il segmento leasing a key (for example) would generate “on” and “off” triggers. The ADSR sostegno e la parte (e) durante il segmento di decadimento. generator could then control the amplitude of synthesis so that “notes” would start and stop withclassica the keys. Ininviluppo addition to amplitude, generator L’applicazione di un ADSR `e quellathe di ADSR utilizzare una tacan (and often is) used to control timbre, which can then be made stiera o un sequencer, voltage-control, per effettuare note musicali to su evolve un sinnaturally overLathe course ofe each note. di un tasto (ad esempio) genererebbero tetizzatore. pressione il rilascio

triggers “on” e “off”. Il generatore ADSR potrebbe allora controllare l’ampiezza della sintesi in modo che le “note” partirebbero e si fermerebbero in funzione dei tasti. Oltre all’ampiezza, il generatore ADSR pu`o essere (e spesso `e) utilizzato per controllare il timbro, che pu`o quindi evolvere naturalmente nel corso di ogni nota.


4.2. Forme di ampiezza lineari e curvilinee

87

4.1. ENVELOPE GENERATORS

91

attack decay sustain release

(a)

on

off

time

(b) on

off

(c) on off

(d)

on

on

(e) on

on

Figure 4.2: ADSR envelope output: (a) with “on” and “off” triggers separated; Figura dell’inviluppo ADSR: (a) con triggers “on” e “off” separati; (b), (c) 4.2: withOutput early “off” trigger; (d), (e) re-attacked. (b), (c) con il trigger “off” attivato prima che siano passati i tempi di attacco e/o decadimento; (d), (e) con successiva riattivazione.


88

4.2

Capitolo 4. Automazione e gestione della voce

Forme di ampiezza lineari e curvilinee

Supponiamo che si desideri aumentare l’ampiezza di un segnale in un periodo di dieci secondi, vale a dire che si desidera moltiplicarlo mediante un segnale di controllo di ampiezza y[n] che sale in valore da 0 a 1 su 10R campioni, dove R `e la frequenza di campionamento. La scelta pi` u ovvia sarebbe una rampa lineare: y[n] = n/(10R). Ma questo non risulterebbe essere il metodo migliore per ottenere un aumento continuo del volume percepito. Nel primo secondo y[n] aumenta da −∞ dB a −20 dB, nei successivi quattro di altri 14 dB, e nei restanti cinque, solo per i rimanenti 6 dB. Durante la maggior parte dei dieci secondi, l’aumento dell’ampiezza sar`a appena percepibile. Un’altra possibilit` a sarebbe quella di considerare una rampa y[n] che cresce in modo esponenziale, in modo che aumentasse a una velocit`a costante in dB. Per far ci` o dobbiamo fissare l’ampiezza iniziale in modo che sia inaudibile, diciamo 0 dB (se fissiamo a 100 dB l’equivalente dell’unit`a di ampiezza). Ora abbiamo il problema opposto: per i primi cinque secondi il controllo di ampiezza sale da 0 dB (non udibile) a 50 dB (pianissimo); questa parte della dissolvenza in entrata (fade-in) dovrebbe corrispondere solo al primo secondo o gi` u di l`ı. Una progressione pi` u naturale dovrebbe forse considerare il fade-in come una successione temporizzata di dinamica, 0-ppp-pp-p-mp-mf-f-ff-fff, con ogni passo che impiega circa un secondo. Una fade-in dovrebbe idealmente rispettare una certa scala tra logaritmica e lineare. Una scelta piuttosto arbitraria, ma utile nella pratica, `e la curva quartica: n 4 , y[n] = N dove N `e il numero di campioni su cui fare il fade-in (nell’esempio precedente, `e 10R). Quindi, dopo il primo secondo dei dieci, saremmo saliti a −80 dB, dopo cinque secondi a −24 dB, e dopo nove a circa −4 dB. La Figura 4.3 mostra tre funzioni di trasferimento di ampiezza: f1 (x) = x (lineare), f2 (x) = 102(x−1) f3 (x) = x4

(da dB a lineare), (quartica).

La seconda funzione che converte da dB a lineare, `e disposta in modo che l’intervallo di ingresso, da 0 a 1, corrisponda a 40 dB (questa gamma di ingresso di 40 dB corrisponde ad una gamma dinamica ragionevole, consentendo 5 dB per ciascuno degli otto passi in dinamica). La curva quartica imita la curva esponenziale (dB) abbastanza bene per le ampiezze superiori, ma scende troppo rapidamente per piccole ampiezze, raggiungendo il vero zero (mentre la curva esponenziale scende solo a 1/100). Possiamo pensare a queste tre curve come esempi di funzioni di trasferimento, da un controllo astratto (nel range da 0 a 1) ad un’ampiezza lineare. Dopo aver scelto un’appropriata funzione di trasferimento f , possiamo calcolare un corrispondente segnale di controllo dell’ampiezza; se vogliamo una rampa su N campioni, dal silenzio all’unit` a di ampiezza, il segnale di controllo sarebbe: y[n] = f (n/N ).


4.2. LINEAR AND CURVED AMPLITUDE SHAPES

93

4.2. Forme di ampiezza lineari e curvilinee

89

1

linear

amplitude decibels

quartic

0 0

units

1

Figure 4.3: Three amplitude transfer functions. The horizontal axis is in linear, Figura 4.3:or Tre funzioni didepending trasferimento di ampiezza. L’asse orizzontale `e in logarithmic, fourth-root units on the curve.

unit` a lineari, logaritmiche o radici quarte dell’unit`a, a seconda della curva.

94

CHAPTER 4. AUTOMATION AND VOICE MANAGEMENT

FREQUENCY 1

-1 f()

OUT

Figure 4.4: Using a transfer function to alter the shape of amplitude curves.

Figura 4.4: Utilizzo di una funzione di trasferimento per modificare la forma delle curve di ampiezza.

A block diagram for this is shown in Figure 4.4. Here we are introducing a new type of block to represent the application of a transfer function. For now we won’t worry about its implementation; depending on the function desired, this might be best done arithmetically or using table lookup.

4.3

Continuous and discontinuous control changes

Synthesis algorithms vary widely in their ability to deal with discontinuously changing controls. Until now in this chapter we have assumed that controls must


90

Capitolo 4. Automazione e gestione della voce

Un diagramma a blocchi per fare questa operazione `e mostrato in Figura 4.4. Qui introduciamo un nuovo tipo di blocco per rappresentare l’applicazione di una funzione di trasferimento. Per ora non ci preoccupiamo della sua implementazione; a seconda della funzione desiderata, questo pu`o essere eseguito in modo aritmetico o utilizzando la wavetable lookup.

4.3

Cambiamenti di controllo continui e discontinui

Gli algoritmi di sintesi variano notevolmente nella loro capacit`a di trattare i controlli che cambiano in modo discontinuo. Fino ad ora in questo capitolo abbiamo assunto che i controlli debbano cambiare con continuit`a e che il generatore di inviluppo ADSR risulti idealmente adatto per tali controlli. Pu`o anche accadere che l’ampiezza massima di una nota sia inferiore al valore corrente dell’ampiezza del suo predecessore (utilizzando lo stesso generatore) e che l’inviluppo ADSR semplicemente si abbassi (anzich´e alzare) al nuovo valore per un attacco. Ci` o non `e necessariamente auspicabile, tuttavia, in situazioni in cui un generatore di inviluppo `e responsabile di un aspetto del timbro: forse, per esempio, non vogliamo che la nitidezza di una nota diventi pi` u mite durante l’attacco, ma piuttosto che salti a un valore molto pi` u basso in modo che sia sempre in grado di salire durante l’attacco. Questa situazione pu` o anche sorgere con gli inviluppi di intonazione (pitch envelopes): pu` o essere auspicabile scorrere l’intonazione da una nota alla successiva oppure pu` o essere auspicabile che la traiettoria dell’intonazione di ogni nota riprenda nuovamente da un punto indipendente dal suono precedente. Due situazioni si presentano quando vogliamo apportare modifiche discontinue ai parametri di sintesi: o li facciamo semplicemente senza interruzione (ad esempio, facendo un cambiamento discontinuo nell’intonazione); o, altrimenti, non possiamo, come un cambiamento dell’indice in una wavetable (che fa una modifica discontinua nell’output). Ci sono anche parametri che non possono eventualmente essere cambiati continuamente; ad esempio, una selezione tra una collezione di wavetables. In generale, modificare in modo discontinuo la fase di un oscillatore o l’ampiezza di un segnale provocher`a un artefatto udibile, ma gli incrementi di fase (come intonazioni) possono saltare senza risultati negativi. In quei casi in cui una modifica di un parametro non pu`o essere fatta continuamente per un motivo o per un altro, esistono almeno due strategie per rendere la modifica pi` u pulita: muting e switch-and-ramp.

4.3.1

Muting

La tecnica del muting consiste nell’applicare un inviluppo all’ampiezza in uscita, che viene rapidamente spostata a zero prima che il parametro cambi e successivamente ripristinata. Pu` o o non pu` o essere il caso in cui le modifiche discontinue si traducano in un segnale che saga senza salti dopo lo zero. Nella Figura 4.5 (parte a) prendiamo l’esempio di un inviluppo di ampiezza (il segnale di uscita di un generatore ADSR) e supponiamo che la modifica discontinua sia quella di avviare una nuova nota ad ampiezza zero.


4.3. Cambiamenti di controllo continui e discontinui

91

4.3. CONTINUOUS AND DISCONTINUOUS CONTROL CHANGES

95

(a)

time

(b)

Figure 4.5: Muting technique for hiding discontinuous changes: (a) the enveFigura 4.5: Tecnica del muting per nascondere cambiamenti discontinui: (a) lope (upper graph) is set discontinuously to zero and the muting signal (lower l’inviluppo (grafico superiore) viene impostato in maniera discontinua a zero e graph) ramps down in advance to prepare for the change, and then is restored il segnale di muting (grafico inferiore) si abbassa in anticipo per prepararsi alla (discontinuously) to its previous value; (b) the envelope changes discontinuously modifica e quindi viene ripristinato (discontinuamente) al valore precedente; (b) between two nonzero values; the muting signal must both ramp down beforel’inviluppo cambia in modo discontinuo tra due valori non nulli; il segnale di hand and ramp back up afterward. muting deve sia abbassarsi prima e tornare su dopo. for example, a selection among a collection of wavetables. In general, discontinuously changing the phase of an oscillator or the amplitude of a signal will cause an audible artifact, but phase increments (such as pitches) may jump without bad results. In those cases where a parameter change can’t be made continuously for one reason or another, there are at least two strategies for making the change cleanly: muting and switch-and-ramp.

4.3.1

Muting

The muting technique is to apply an envelope to the output amplitude, which is quickly ramped to zero before the parameter change and then restored afterward. It may or may not be the case that the discontinuous changes will result in a signal that rises smoothly from zero afterward. In Figure 4.5 (part a), we take the example of an amplitude envelope (the output signal of an ADSR generator), and assume that the discontinuous change is to start a new note at amplitude zero. To change the ADSR generator’s output discontinuously we reset it. This is


4.3. CONTINUOUS AND DISCONTINUOUS CONTROL CHANGES

92

97

Capitolo 4. Automazione e gestione della voce

time

Figure Thetecnica switch-and-ramp technique for canceling out discontinuous Figura 4.6: 4.6: La switch-and-ramp per annullare le modifiche discontinue. changes. A discontinuity graph) measurede annullata and canceled with Una discontinuit` a (grafico (upper superiore) vieneis misurata con out un segnaalesignal the opposite discontinuity (lower graph), which decade then decays aventehaving la discontinuit` a opposta (grafico inferiore), che quindi senza smoothly. intoppi.

Per cambiare discontinuamente l’uscita del generatore ADSR, la resettiamo. Questo `e un’operazione diversa rispetto al triggering; il risultato `e quello di farlo saltare a un nuovo valore, dopo di che possiamo semplicemente lasciarlo trigger o innescarlo nuovamente. La Figura 4.5 (parte a) mostra l’effetto di reset e ri-partenza di un generatore ADSR. Sotto l’uscita del generatore ADSR vediamo il segnale di muting appropriato, che passa a zero per preparare la discontinuit`a. La quantit`a di tempo che ci possiamo permettere per il muting dovrebbe essere piccola (in modo da disnapshot sturbare il meno possibile il suono precedente), ma non cos`ı piccola da causare artefatti udibili in reset/ output. Un esempio di come lavora questo tipo di muting `e gi` a stato mostratotrigger a pagina 77;level l`ı abbiamo utilizzato 5 msec per la rampa in discesa. Il segnale di muting viene moltiplicato per l’uscita del processo a cui togliere il click. ... La Figura 4.5 (parte b) mostra la situazione in cui supponiamo che la variazione discontinua sia tra due valori eventualmente diversi da zero. Qui il segnale di muting non deve solo abbassarsi come prima (in anticipo rispetto alla discontinuit` a), ma dopo deve anche risalire. Il tempo di rampa in discesa non deve essere uguale al tempo di rampa in salita; entrambi devono essere scelti, come sempre, ascoltando il suono di uscita. In generale, il muting presenta la difficolt`a di avviare tale operazione prima di modificare il controllo desiderato. Nei contesti in tempo reale, questo richiede spesso di ritardare intenzionalmente il cambiamento di controllo. Questo `e un OUT altro motivo per mantenere il tempo di muting pi` u basso possibile (inoltre, `e una brutta idea cercare di ridurre al minimo il ritardo omettendo condizionatamente il periodo di rampa in discesa quando non `e necessario: un ritardo costante `e molto migliore di uno che diagram varia, anche se `eswitch-and-ramp pi` u piccolo in media). Figure 4.7: Block for the technique.

4.3.2

Switch-and-ramp

Anche la tecnica switch-and-ramp cerca di eliminare le discontinuit`a derivanti da cambiamenti di controllo discontinui, ma lo fa in modo diverso: sintetizzando una discontinuit` a opposta che aggiungiamo per annullare l’originale. La Figura 4.6 mostra un esempio in cui un suono percussivo sintetico (una sinusoide inviluppata) inizia una nota a met` a di una precedente. L’attacco del suono non


time

Figure 4.6: The switch-and-ramp technique for canceling out discontinuous changes. A discontinuity (upper graph) is measured and canceled out with a signal having the opposite discontinuity (lower graph), which then decays smoothly.

4.4. Polifonia

93

trigger

snapshot reset/ trigger

level

...

OUT

Figura 4.7: Diagramma a blocchi per la tecnica switch-and-ramp. Figure 4.7: Block diagram for the switch-and-ramp technique.

deriva dall’inviluppo di ampiezza, ma dalla fase iniziale della sinusoide, come `e spesso appropriato per i suoni percussivi. Il grafico inferiore della figura mostra un segnale audio compensativo con una discontinuit`a opposta, che pu`o essere aggiunto alla parte superiore per rimuovere la discontinuit`a. I vantaggi di questa tecnica rispetto al muting sono, da un lato, che non c’`e bisogno di alcun ritardo tra la decisione di fare un attacco e il suono dell’attacco; e, inoltre, che ogni artefatto derivante da questa tecnica `e pi` u probabile che sia mascherato dall’insorgenza del nuovo suono. La Figura 4.7 mostra come la tecnica switch-and-ramp possa essere realizzata con un diagramma a blocchi. La scatola contrassegnata con le virgolette (“...”) pu` o contenere qualsiasi algoritmo di sintesi che vogliamo interrompere discontinuamente in modo che riparta da zero (come ad esempio la parte (a) della figura precedente). Nello stesso momento in cui inneschiamo le modifiche di controllo necessarie (esemplificate dal generatore ADSR superiore), resettiamo e facciamo ripartire un altro generatore ADSR (al centro a destra) per annullare la discontinuit` a. La discontinuit`a `e minore dell’ultimo valore di uscita di sintesi appena prima di essere resettata a zero. Per fare questo, misuriamo il livello a cui il generatore ADSR deve ora saltare. Questo `e il proprio livello attuale (che potrebbe non essere zero) meno la discontinuit` a (o equivalente, pi` u l’ultimo valore di uscita della sintesi). I due vengono sommati (dall’oggetto +∼ in basso), quindi viene eseguita un’istantanea. Il generatore di inviluppo di annullamento (a destra) viene ripristinato in modo discontinuo a questo nuovo valore e quindi innescato per fare una rampa a zero. L’output dell’oggetto +∼ in basso (la somma dell’uscita del sintetizzatore e del segnale di annullamento della discontinuit`a) `e il segnale de-cliccato.


4.6. VOICE TAGS 94

99 Capitolo 4. Automazione e gestione della voce

control

voice 1 voice 2 voice 3

+ OUT

Figure 4.8: A voice bank for polyphonic synthesis. Figura 4.8: Banco di voci per la sintesi polifonica. other hand, musical writing for ensembles frequently specifies explicitly which

instrument plays which note, so that the notes will connect to each other end4.4 Polifonia

to-end in a desirable way. One simple voice allocation algorithm works as shown in Figure 4.10. Here Nella musica, il termine polifonia viene solitamente usato per indicare “pi` u di we suppose that the voice bank has only two voices, and we try to allocate voices una voce distinta che cantano o che suonano note diverse l’una dall’altra”. for the tasks a, b, c, and d. Things go smoothly until task d comes along, but Quando ci si riferisce a strumenti musicali elettronici usiamo questo termine then we see no free voices (they are taken up by b and c). We could now elect per “mantenere in parallelo diverse copie dello stesso processo”. Solitamente either to drop task d, or else to steal the voice of either task b or c. In practice chiamiamo ogni copia una “voce” in linea con l’analogia, sebbene le voci non the best choice is usually to steal one. In this particular example, we chose to devono necessariamente suonare suoni distinguibili separati. steal the voice of the oldest task, b. In questi termini, un pianoforte con 88of“voci”. If we happen to know the length`eofuno thestrumento tasks b andpolifonico, c at the outset task d, Ogni voce del pianoforte ` e normalmente in grado di suonare esattamente una we may be able to make a better choice of which voice to steal. In this example nota. Non esiste mai il dubbio di quale voce usare per suonare una nota di una it might have been better to steal from c, so that d and b would be playing determinata altezza e nemmeno se si possano suonare contemporaneamente u together at the end and not d alone. In some situations this information willpi` be note alla stessa intonazione. available when the choice must be made, and in some (live keyboard input, for example) it will not.musicali elettronici polifonici usano un approccio pi` Molti strumenti u flessibile per la gestione delle voci. La maggior parte dei softwares di sintesi (come Csound) utilizzano uno schema di allocazione vocale dinamica, per cui, in effetti, creata una nuova voce per ogni nota nello spartito. In sistemi come 4.6 viene Voice tags Max o Pd, orientati verso un uso interattivo in tempo reale, un banco di voci viene allocato anticipo il lavoro da eseguire note as o qualunque altra Suppose now in that we’re eusing a voice bank to(suonare play notes, in the example cosa) distribuito le voci banco. above,viene but suppose thetra notes a, b,del c, and d all have the same pitch, and furthermore that all their other identical. How canciascuna we design a control Questo `e illustrato nel parameters diagramma are della Figura 4.8, dove delle diverstream so that, when any one note is turned off, we know which one it is? se voci produce un segnale di uscita, che sono poi sommati per ottenere l’output totale del banco di voci. Spesso le singole voci richiedono pi` u uscite separate; per esempio, possono richiedere diversi canali in modo che possano essere spazializzate singolarmente; o possono avere uscite individuali di invio effetti, in modo che ognuna possa avere il proprio livello di invio.


100

CHAPTER 4. AUTOMATION AND VOICE MANAGEMENT

4.5. Allocazione vocale

95

"notes" voice allocation

voice 1 voice 2 voice 3

+ OUT

Figure 4.9: Polyphonic voice allocation. Figura 4.9: Assegnazione di voci polifoniche.

4.5

Allocazione vocale

a automatizzare la selezione delle voci da associare ai singoli Spesso `e desiderabile compiti (tasks) (ad esempio le note da suonare). Ad esempio, un musicista che b suona una tastiera non pu`o praticamente scegliere quale voce deve associare con c ogni nota suonata. Per automatizzare la selezione vocale abbiamo bisogno di un algoritmo di allocazione vocale, dad utilizzare come mostrato in Figura 4.9. Munito di un appropriato algoritmo di allocazione delle voci, la sorgente di voice non 1... .. del dettaglio .......... controllo deve preoccuparsi di quale voce si occupa di quale compito; i generatori algoritmici di note e i sequencers si basano spesso su questo ... voice 2....... fatto. D’altra parte, la scrittura musicale per gli ensembles spesso specifica esattamente quale strumento suona quale nota, in modo che le note si connettano time a vicenda in modo desiderabile. Un semplice algoritmo di allocazione vocale funziona come mostrato nella Figura 4.10. chevoice il banco di voci abbia solo due voci e cerchiamo Figure 4.10:Supponiamo A polyphonic allocation algorithm, showing voice stealing. di assegnare le voci per i compiti a, b, c e d. Le cose vanno bene fino a che si arriva al compito d, ma allora ci accorgiamo che non abbiano voci libere (sono prese da b e c). Ora potremmo scegliere di abbandonare l’attivit`a d, oppure togliere la voce di entrambi i compiti b o c. In pratica la scelta migliore `e di toglierne uno. In questo esempio particolare, abbiamo scelto di togliere la voce del compito pi` u vecchio, b. Se ci capita di conoscere la durata dei compiti b e c e l’avvio del compito d, potremmo essere in grado di fare una scelta migliore di quale voce togliere. In questo esempio potrebbe essere stato meglio togliere c, in modo che d e b stiano


+ OUT

Figure 4.9: Polyphonic voice allocation. 96

Capitolo 4. Automazione e gestione della voce

a b c d voice 1...

..

.......... ...

voice 2....... time

Figure 4.10: 4.10: Un A polyphonic voice allocation algorithm, showing voice stealing. Figura algoritmo polifonico di allocazione vocale, che mostra la voce da togliere. suonando insieme alla fine, rispetto ad avere solo d. In alcune situazioni queste informazioni saranno disponibili quando la scelta deve essere fatta, mentre in altre (l’input da tastiera in situazioni live, per esempio) non lo sar`a.

4.6

Tags vocali

Supponiamo ora che stiamo usando un banco di voci per riprodurre le note, come nell’esempio precedente, ma supponiamo che le note a, b, c e d abbiano tutte la stessa intonazione e, inoltre, che tutti gli altri loro parametri siano identici. Come possiamo progettare un flusso di controllo in modo che, quando una nota viene spenta, sappiamo quale `e? Questa domanda non sorge se la sorgente di controllo `e una tastiera Clavier perch´e `e impossibile riprodurre pi` u di una nota simultanea su un singolo tasto. Ma potrebbe facilmente emergere in modo algoritmico, o semplicemente come risultato di unire insieme due flussi da tastiera. Inoltre, spegnere l’evento nota `e solo il pi` u semplice esempio di un problema pi` u generale, che riguarda come, una volta stabilito un compito in un banco, possiamo tornare alla stessa voce per guidare la sua evoluzione tramite una funzione di input in tempo reale o qualsiasi altro fattore imprevedibile. Per affrontare situazioni come questa possiamo aggiungere uno o pi` u tags al messaggio che inizia una nota (o, in generale, un’attivit`a). Un tag `e una qualsiasi raccolta di dati con i quali possiamo identificare pi` u tardi l’attivit`a, che possiamo allora utilizzare per cercare la voce a cui viene assegnata. Riprendendo l’esempio di Figura 4.10, ecco un modo per scrivere quei quattro compiti come un flusso di controllo: start-time 1 2 4 5

end-time 3 8 6 8

pitch 60 62 64 65

... ... ... ... ...


4.7. Incapsulamento in Pd

97

In questa rappresentazione non abbiamo bisogno di tags perch´e ogni messaggio (ogni riga di testo) contiene tutte le informazioni necessarie per specificare l’intera attivit` a (qui abbiamo assunto che i compiti a, . . . , d siano infatti note musicali con pitch 60, 62, 64 e 65). In effetti stiamo rappresentando ciascuna attivit` a come un singolo evento in un flusso di controllo (paragrafo 3.3). D’altra parte, se supponiamo ora di non conoscere in anticipo la durata di ogni nota, una rappresentazione migliore sarebbe questa: time 1 2 3 4 5 6 8 8

tag a b a c d c b d

action start start end start start end end end

parameters 60 . . . 62 . . . 64 . . . 65 . . .

Qui ogni nota `e stata suddivisa in due eventi distinti per avviarla e terminarla. Le etichette a, . . . , d vengono utilizzate come tags; sappiamo quale inizio va con quale fine poich´e i loro tags sono gli stessi. Si noti che il tag non `e necessariamente correlato alla voce che verr`a utilizzata per riprodurre ciascuna nota. Lo standard MIDI non fornisce i tags; in un uso normale, il pitch di una nota serve anche come tag (in modo che i tag vengono costantemente riutilizzati). Se due note con lo stesso pitch devono essere indirizzate separatamente (per utilizzare il loro pitch per indicazioni differenti, per esempio), il canale MIDI pu` o essere utilizzato (oltre alla nota) come tag. Nel software musicale in tempo reale `e spesso necessario passare avanti e indietro tra la rappresentazione evento-per-attivit`a e quella contrassegnata dai tags vista prima, poich´e la prima rappresentazione `e pi` u adatta per l’archiviazione e l’editing grafico, mentre la seconda `e pi` u adatta per operazioni in tempo reale.

4.7

Incapsulamento in Pd

Gli esempi di questo capitolo utilizzeranno il meccanismo di incapsulamento di Pd, che consente la costruzione di patches che possono essere riutilizzate un qualsiasi numero di volte. Una o pi` u caselle di oggetti, in una patch Pd, possono essere sottopatches, che sono patches distinte e incapsulate all’interno delle caselle. Queste sottopatches possono essere di due tipi: one-off subpatches e abstractions. In entrambi i casi la sottopatch appare come una casella di oggetto in un’altra patch, chiamata genitore (parent). Se si digita “pd” o “pd my-name” in una object box, questo crea una sottopatch one-off. I contenuti della sottopatch vengono salvati come parte della parent patch, in un unico file. Se si utilizzano pi` u copie di una sottopatch, `e possibile modificarle individualmente. D’altra parte, `e possibile richiamare un’abstraction digitando nella casella il nome di una patch Pd (senza l’estensione “.pd”) salvata in un file. In questa situazione Pd legger`a quel file nella


4.8. EXAMPLES 98

103 Capitolo 4. Automazione e gestione della voce

(b)

(a)

inlet

8 plusminus 5

+ $1

13

outlet outlet

3

− $1

Figura 4.11: 4.11: Pd’s Meccanismo di mechanism: abstraction in (a) invocare l’abstracFigure abstraction (a) Pd: invoking the abstraction, plusminus with 5 con as a creation the contents file, “plusmition plusminus 5 come argument; creation (b) argument; (b) of il the contenuto del file nus.pd”. “plusminus.pd”. inlets and outlets of themodo, plusminus object. al Thefiletwo arguments (to the sottopatch. In questo le modifiche si “$1” propagano ovunque si sia +caricato and - objects) are replaced by 5 (the creation argument of the plusminus come abstraction. object). Una sottopatch (sia one-off che abstraction) pu`o avere entrate e uscite che We have already seenrelativa one abstraction in the examples: the output~ object appaiono nella casella nella patch genitore. Questo viene specificato introduced in Figure 1.10 (Page 16). That example also shows that an abstracutilizzando i seguenti oggetti: tion may display controls as part of its box on the parent patch; see the Pd documentation for a: description of this crea le entrate perfeature. la object box contenente la sottopatch. inlet , inlet∼ La versione inlet∼ crea un ingresso per i segnali audio, mentre inlet ne crea uno per i flussi di controllo. In entrambi i casi, qualunque cosa entri dagli 4.8 Examples inputs della object box nella patch genitore esce dall’oggetto inlet o inlet∼ nella sottopatch.

ADSR envelope generator

outlet , outlet∼ : oggetti corrispondenti per l’output dalla sottopatch. Example D01.envelope.gen.pd (Figure 4.12) shows how the line~ objectdamay Pd fornisce un meccanismo di passaggio di argomenti in modo poter be used to generate an ADSR envelope to control a synthesis patch (only the parametrizzare diverse chiamate di un’abstraction. Se in una casella di oggetto ADSR is shown in the figure). Theprimo “attack” button, when pressed, digitateenvelope “$1”, viene interpretato come “il creation argument nella mia has two effects. The first (leftmost in the figure) is to set the line~ casella sulla patch genitore” e allo stesso modo per $2 e cos`ı via. Il object testo inonuna its attack segment, with a target of 10 (the peak amplitude) over 200 msec (the casella di oggetto viene interpretato nel momento della creazione della casella, attack time). Second, the attack button sets a delay 200 object, so that after a differenza del testo in una casella di messaggio. Nelle caselle di messaggio, lo the attack segment is done, the decay segment can start. The decay segment stesso $1 significa “il primo argomento del messaggio appena ricevuto” e viene falls to a target of 1 (the sustain level) after another 2500 msec (the decay time). interpretato ogni volta che un nuovo messaggio arriva. The “release” button sends the same line~ object back to zero over 500 more Un esempio abstraction, che utilizza uscite parametrizzazione, milliseconds (thedirelease time). Also, in case entrate, the delay 200 eobject happens to ` e mostrato in Figura 4.11. Nella parte (a), una patch invoca in una be set at the moment the “release” button is pressed, a “stop” plusminus message is sent casella di oggetto, con un creation argument pari a 5. Il numero 8 viene inviato to it. This prevents the ADSR generator from launching its decay segment after all’oggettoitsplusminus e in uscita otteniamo la somma e la differenza di 8 e 5. launching release segment. L’oggetto plusminus non(Figure `e definito dawe Pd,encapsulate ma `e piuttosto definitogenerator dalla patch In Example D02.adsr.pd 4.13) the ADSR che risiede nel file denominato “plusminus.pd”. Questa patch `e mostrata nella parte (b) della figura. L’unico inlet e i due outlet corrispondono all’entrata e alle uscite dell’oggetto plusminus. I due argomenti $1 (agli oggetti + e -) vengono sostituiti da 5 (il creation argument dell’oggetto plusminus). Abbiamo gi` a visto un’abstraction negli esempi: l’oggetto output∼ introdotto in Figura 1.10 (pagina 15). Questo esempio mostra anche che un’abstraction pu` o mostrare i controlli come parte della sua casella sulla patch genitore;


104

4.8. Esempi CHAPTER 4. AUTOMATION AND VOICE MANAGEMENT attack

99

release

stop 10 200

del 200 1 2500

(IN) | *~ | (OUT)

0 500

line~

Figure a line~ tolline∼ generate angenerare ADSR envelope. Figura4.12: 4.12:Using Utilizzo di unobject oggetto per un inviluppo ADSR.

si consiglia di vedere la trigger documentazione di Pd per una descrizione di questa funzionalit` a. adsr 1 100 200 50 300

4.8

Esempi

osc~ 440

*~ | Generatore di inviluppo ADSR (OUT) L’esempio D01.envelope.gen.pd (Figura 4.12) mostra come l’oggetto line∼ possa essere utilizzato per generare un inviluppo ADSR per controllare una patch di sintesi (in figura `e mostrato l’inviluppo ADSR). Il pulsante “attack”, Figure 4.13: Invoking solo the adsr abstraction. quando premuto, ha due effetti. Il primo (nella parte pi` u sinistra della figura) `e quello di impostare l’oggetto line∼ sul suo segmento di attacco, con un obietin a Pdtivo abstraction (named adsr) so that canmsec easily replicated. The design di 10 (l’ampiezza di picco) in it200 (ilbetempo di attacco). In secondo of the adsr it possible control five in ADSR luogo,abstraction il pulsantemakes “attack” impostatoun delaythe200, modoparameters che, dopo che il either by supplying creationsia arguments or byil connecting streams pu` tooitsiniziare. segmento di attacco stato fatto, segmento dicontrol decadimento inlets. Il segmento di decadimento scende ad un obiettivo di 1 (il livello di sostegno) In this the msec five creation arguments (1, 100, 200, 50, and 300) specify dopoexample altri 2500 (il tempo di decadimento). the peak level, attack“release” time, decay time, sustain level (as a percentage of millisecondi peak Il pulsante manda lo stesso oggetto line∼ a zero in 500 level), (il andtempo releasedi time. There are sixnel control inlets: the first to trigger rilascio). Inoltre, caso in cui l’oggetto delay 200the sia stato ADSR attivato, generator, the others toviene update the values of the “release”, five parameters. neland momento in cui premuto il pulsante viene inviato The output of the abstraction is oanimpedisce audio signal. un messaggio “stop”. Ci` al generatore ADSR di lanciare il suo This abstraction is realized as shown in Figure 4.14. (You di canrilascio. open this segmento di decadimento dopo il lancio del suo segmento subpatch by clicking onD02.adsr.pd the adsr object in the patch.) The onlyil signal objects Nell’esempio (Figura 4.13) incapsuliamo generatore ADSR in are line~ outlet~. diThe to the three message unaand abstraction Pdthree (conpack nomeobjects adsr)correspond in modo che possa essere facilmente objectsreplicata. from the earlier Figure dell’abstraction 4.12. From left adsr to right, they take care of the La struttura consente di controllare i cinque attack,parametri decay, andADSR release segments. fornendo creation arguments o collegando flussi di controllo ai Thesuoi attack segment goes to a target specified as “$1” (the first creation ingressi.

In questo esempio i cinque creation arguments (1, 100, 200, 50 e 300) specificano il livello di picco, il tempo di attacco, il tempo di decadimento, il livello di sostegno (come percentuale del livello di picco) e il tempo di rilascio. Ci sono sei ingressi di controllo: il primo serve per attivare il generatore ADSR e gli altri


(IN) | *~ | (OUT)

line~

Capitolo 4. Automazione Figure 4.12:100Using a line~ object to generate an ADSR envelope. e gestione della voce

trigger adsr 1 100 200 50 300 osc~ 440 *~ | (OUT)

Figure 4.13: Invoking the adsr abstraction. Figura 4.13: Invocazione dell’abstraction adsr. in a Pd abstraction (named adsr) so that it can easily be replicated. The design per aggiornare i valori dei cinque parametri. L’uscita dell’abstraction fornisce of the adsr abstraction makes it possible to control the five ADSR parameters un segnale audio. either by supplying creation arguments or by connecting control streams to its Questa abstraction `e realizzata come mostrato nella Figura 4.14 (`e possibile inlets. aprire questa sottopatch facendo clic sull’oggetto adsr nella patch). Gli unici In this example the five arguments 100, 200, 50, andoggetti 300) specify oggetti di creation segnale sono line∼(1, e outlet∼. I tre pack corrispondono the peak level, attack time, decay time, sustain level (as a percentage peak ai tre oggetti di messaggio della precedente Figura 4.12.ofDa sinistra a destra, level), and release time. There are six control inlets: the first to trigger gestiscono i segmenti di attacco, di decadimento e di rilascio. the ADSR generator, and the othersdito update values of specificato the five parameters. Il segmento attacco vathe ad un target da $1 (il primo creation The output of theargument abstraction is an audio signal. dell’abstraction) in $2 millisecondi; questi valori possono essere soThis abstraction is realized as shown 4.14. (You can open this Il segmento di vrascritti inviando numeri in alleFigure entrate “peak level” e “attack”. subpatch by clicking on `the adsrma object in the patch.) only `esignal objects rilascio e simile, pi` u semplice, poich´eThe il target sempre zero. La parte comare line~ and outlet~. three pack objects correspond to essere the three messagedopo un ritardo plicata `eThe il segmento di decadimento, che deve disinserito al tempo attacco del $2). livello di of sostegno `e calcolato objects from the pari earlier Figure di 4.12. From(l’oggetto left to right, theyIltake care the livello di picco e la percentuale di sostegno (moltiplicando i due e attack, decay, andtramite releaseilsegments. dividendo perto 100). The attack segment goes a target specified as “$1” (the first creation L’entrata del trigger, se invia un numero diverso da zero, innesca un inizio (i segmenti di attacco e decadimento) e se invia zero, innesca il segmento di rilascio. Inoltre, il generatore ADSR pu`o essere resettato a zero inviando un trigger negativo (che genera comunque un innesco).

Funzioni di trasferimento per il controllo di ampiezza Il paragrafo 4.2 ha descritto l’utilizzo di un inviluppo ADSR per controllare l’ampiezza, per la quale i segmenti esponenziali o curvilinei quartici forniscono spesso risultati sonori pi` u naturali di quelli lineari. Le patches D03.envelope.dB.pd e D04.envelope.quartic.pd (quest’ultimo in Figura 4.15) mostrano l’utilizzo di segmenti di decibel e quartici. In aggiunta, oltre all’ampiezza, nell’esempio D04.envelope.quartic.pd viene anche controllata la frequenza di un suono, utilizzando, per un confronto, forme lineari e quartiche. Poich´e la conversione da decibel in unit`a di ampiezza lineare `e un’operazione costosa (almeno rispetto ad un oscillatore o ad un generatore di rampe), l’esempio D03.envelope.dB.pd utilizza la ricerca su tabella per implementare la funzione di trasferimento necessaria. Questo ha il vantaggio dell’efficienza, ma lo svantaggio che dobbiamo decidere in anticipo la gamma di valori ammissibili (qui da 0 a 120 dB).


4.8. EXAMPLES

105

4.8. Esempi

101

attack trigger

moses

inlet t b b

release sel 0 if zero cancel decay

test for negative trigger if so, zero the output

t b ... do this anyway

stop

peak level attack decay sustain inlet inlet

ATTACK: optionally jump to zero

0

f $1 pack 0 $2

DECAY del $2 f $4

... then

inlet inlet

release * $1

* 0.01 pack 0 $3

recall peak level

inlet pack 0 $5 RELEASE: ramp

and pack with

line~

attack time

back to zero

outlet~

106

Figure 4.14: the adsr abstraction. CHAPTER 4. Inside AUTOMATION AND VOICE MANAGEMENT Figura 4.14: L’interno dell’abstraction adsr.

QUARTIC

LINEAR r freq line~

r amp

osc~

line~

*~ | (OUT)

r freq

r amp

unpack

unpack

sqrt

sqrt

sqrt

sqrt

line~

line~

*~

*~

*~

*~

osc~ sample messages ; freq 1760 5000

*~ | (OUT)

; freq 55 5000

Figure 4.15: Linear and quartic transfer functions for changing amplitude and Figura 4.15: Funzioni di trasferimento lineari e quartiche per cambiare ampiezza pitch. e intonazione. argument of the abstraction) over “$2” milliseconds; these values may be overwritten by sending numbers to the “peak level” and “attack” inlets. The release segment is similar, but simpler, since the target is always zero. The hard part is the decay segment, which again must be set off after a delay equal to the attack time (the del $2 object). The sustain level is calculated from the peak level and the sustain percentage (multiplying the two and dividing by 100). The trigger inlet, if sent a number other than zero, triggers an onset (the attack and decay segments), and if sent zero, triggers the release segment. Furthermore, the ADSR generator may be reset to zero by sending a negative trigger


102

Capitolo 4. Automazione e gestione della voce

Per un segmento quartico, come nell’Esempio D04.envelope.quartic.pd, non `e richiesta nessuna ricerca su tabella; abbiamo semplicemente elevato al quadrato il segnale di uscita dell’oggetto line∼ due volte in successione. Per compensare l’aumento dell’output alla quarta potenza, i valori inviati all’oggetto line∼ devono essere la radice quarta di quelli voluti. Quindi, i messaggi che variano la frequenza o l’ampiezza vengono prima divisi per separare l’intervallo di destinazione e l’intervallo di tempo, viene presa la radice quarta dei valori di destinazione (tramite due radici quadrate in successione), e i due vengono quindi inviati all’oggetto line∼. Qui abbiamo fatto uso di un nuovo oggetto di Pd: unpack : spacchetta un elenco di numeri (e/o simboli) e li distribuisce a uscite separate. Come al solito, le uscite appaiono nell’ordine da destra a sinistra. Il numero di uscite e dei loro tipi `e determinato dai creation arguments (si veda anche pack, pagina 45). Gli esempi D05.envelope.pitch.pd e D06.envelope.portamento.pd usano un generatore di inviluppo ADSR per creare una inviluppo di note e un semplice oggetto line∼, anche lui che controlla l’intonazione, per dare portamento. In entrambi i casi i segmenti esponenziali sono preferibili e vengono calcolati utilizzando la ricerca su tabella.

Sintesi additiva: campana di Risset Il meccanismo delle abstractions di Pd, che abbiamo usato sopra per creare un generatore ADSR riutilizzabile, `e utile anche per creare banchi di voci. Qui usiamo le abstractions per organizzare banchi di oscillatori per la sintesi additiva. Ci sono molti modi possibili per organizzare banchi di oscillatori oltre a quelli indicati qui. L’organizzazione pi` u semplice e pi` u diretta delle sinusoidi `e quella di formare parziali da aggiungere ad una nota. Il risultato `e monofonico, nel senso che la patch suoner` a solo una nota alla volta, che tuttavia sar`a costituita da pi` u sinusoidi le cui frequenze e ampiezze individuali potrebbero dipendere sia da quelle della nota che stiamo suonando, sia anche dal loro posizionamento individuale in una serie di ipertoni armonici (o inarmonici), L’esempio D07.additive.pd (Figura 4.16) utilizza un banco di 11 copie di un’abstraction denominata partial (Figura 4.17) simulando un noto strumento a campana di Jean-Claude Risset. Come descritto in [DJ85, p. 94], il suono a campana ha 11 parziali, ognuna con la propria ampiezza relativa, frequenza e durata. Per ogni nota, l’abstraction partial calcola un semplice inviluppo (quartico) di ampiezza costituito solo da un segmento di attacco e da uno di decadimento; non ci sono segmenti di sostegno e di rilascio. Questo inviluppo viene moltiplicato per una sinusoide e il prodotto viene sommato in un bus di somma. Sono state introdotte due nuove classi di oggetti per implementare il bus di somma: catch∼ : definisce ed eroga un bus di somma. Il creation argument (“sum” in questo esempio) d` a al bus di somma un nome in modo che l’oggetto throw∼ sotto vi si possa riferire. Si possono avere molti buses di somma (cio`e oggetti catch∼), ma devono avere tutti nomi diversi. throw∼ : invia ad un bus di somma. Il creation argument seleziona quale bus utilizzare.


4.8. Esempi 108

103 CHAPTER 4. AUTOMATION AND VOICE MANAGEMENT

partial 1 1 0.56 0 pitch

partial 0.67 0.9 0.56 1

0

partial 1 0.65 0.92 0

mtof

partial 1.8 0.55 0.92 1.7

s frequency

partial 2.67 0.325 1.19 0 duration, tenths of a second

partial 1.67 0.35 1.7 0

0

partial 1.46 0.25 2 0

* 100

partial 1.33 0.2 2.74 0

s duration

partial 1.33 0.15 3 0 partial 1 0.1 3.76 0 partial 1.33 0.075 4.07 0

<-- click to play s trigger

catch~ sum | (OUT)

Figure 4.16: A Pd realization of Jean-Claude Risset’s bell instrument. The bell Figura di uno strumento campana di the Jean-Claude sound is4.16: madeRealizzazione by summingin11Pd sinusoids, each madeaby a copy of partial Risset. Il suono della campana viene realizzato sommando 11 sinusoidi, ciascuna abstraction. ottenuta da una copia dell’abstraction partial.


104

Capitolo 4. Automazione e gestione della voce

trigger r trigger

$1 $2 arguments: $3 $4

relative frequency float $3 r frequency times global frequency + $4 plus detune

t b b

ATTACK

del 5 DECAY relative float $2 duration

float $1

r duration

*

osc~ *~

*

actual duration

* 0.1 sqrt sqrt

0 $1

$1 5

line~

attack time 5 msec

*~ throw~ sum

amplitude; relative duration; relative frequency; detune

*~

quartic amplitude curve

add to global summing bus

Figure 4.17: The partial abstraction used by Risset’s bell instrument from Figura 4.17: L’abstraction partial utilizzata dallo strumento a campana di Figure 4.16. Risset di Figura 4.16.

L’interfaccia di controllo `e spartana: le number boxes controllano la frequenza “fondamentale” della campana e la sua durata. L’invio di un messaggio “bang” all’oggetto s trigger suona una nota (la nota poi decade nel periodo di tempo controllato dal parametro della durata; non esiste alcun trigger separato per arrestare la nota). Non esiste alcun controllo di ampiezza tranne l’oggetto di output∼. I quattro argomenti ad ogni invocazione dell’abstraction partial specificano: 1. ampiezza. L’ampiezza della parziale al suo picco, alla fine dell’attacco e all’inizio del decadimento della nota. 2. durata relativa. Questa viene moltiplicata per la durata complessiva della nota (controllata nella patch principale) per determinare la durata della porzione di decadimento della sinusoide. Le parziali individuali possono quindi avere diversi tempi di decadimento, in modo che alcune parziali decadano pi` u velocemente di altre, sotto il controllo generale della patch principale. 3. frequenza relativa. Come per la durata relativa, questa controlla la frequenza di ciascuna parziale come un multiplo della frequenza complessiva controllata nella patch principale. 4. detune. Una frequenza in Hertz da aggiungere al prodotto della frequenza globale e la relativa frequenza.


4.8. Esempi 4.8. EXAMPLES

105 111

50

loadbang

s pitch

metro 30 needed by the abstraction

send bangs to "poll-table"

s poll-table

0 s whammybar

spectrum-partial 1 spectrum-partial 2 spectrum-partial 3

spectrum-tab

Figure 4.18: Additive synthesis for a specified spectral envelope, drawn in a Figura 4.18: Sintesi additiva per un inviluppo spettrale specificato, disegnato table. in una tabella. repeating. The spectral envelope is arranged to have a peak at the middle of All’interno dell’abstraction partial, l’ampiezza viene semplicemente prelevata the pitch range and drop off to inaudibility at the edges of the range so that we direttamente dall’argomento $1 (moltiplicando per 0.1 per regolare le ampiezze hear only the continuous sweeping and not the jumping. The result is a famous individuali troppo elevate); la durata viene calcolata dall’oggetto r duration, auditory conundrum, an indefinitely ascending or descending tone. moltiplicandolo con l’argomento $2. La frequenza viene calcolata come f p + The technique of synthesizing to a specified spectral envelope can be generald dove f `e la frequenza globale (dall’oggetto r frequency), p `e la frequenza ized in many ways: the envelope may be made to vary in time either as a result relativa della parziale e d `e la frequenza di detune. of a live analysis of another signal, or by calculating from a set of compositional rules, or by cross-fading between a collection of pre-designed spectral envelopes, or by frequency-warping the envelopes, to name a few possibilities. Sintesi additiva: controllo dell’inviluppo spettrale

L’esempio successivo, D08.table.spectrum.pd (Figura 4.18), mostra un’applica-

Polyphonic synthesis: sampler zione molto diversa della sintesi additiva rispetto alla precedente. Qui le sinusoidimove sononow gestite dall’abstraction spectrum-partial mostrataasindescribed Figura 4.19. We to an example using dynamic voice allocation in Ogni parziale calcola la propria frequenza come nella patch precedente. Ogni Section 4.5. In the additive synthesis examples shown previously, each voice is parziale anche la propria ampiezza periodicamente vieneaattivaused for acalcola fixed purpose. In the present example, we allocate(quando voices from bank ta needed dall’oggetto r notes poll-table), utilizzando as to play in a control stream. un oggetto tabread4. Il contenuto della tabella (che ha un range nominale di 50shows dB) viene convertitosampler, in unit`a Example D11.sampler.poly.pd (Figure 4.20) the polyphonic lineari e utilizzato come controllo di ampiezza nel modo usuale. which uses the abstraction sampvoice (whose interior is shown in Figure 4.21). esempiofor simile, D09.shepard.tone.pd (non in figura), crea unsampler tono di TheUn techniques altering the pitch and other parameters in a one-shot Shepard utilizzando la stessa tecnica. Qui le frequenze delle sinusoidi spaziano su una gamma fissa, saltando dalla fine indietro all’inizio ripetutamente. L’inviluppo spettrale `e disposto in modo di avere un picco al centro del range del pitch e scendere a ampiezza inaudibile agli estremi del range, in modo da


106

Capitolo 4. Automazione e gestione della voce

$1: partial number

r pitch mtof pitch to frequency

* $1 then get the frequency of this specific partial ftom ... and then convert back to pitch. r poll−table calling patch bangs this every 30 msec. f −

... at which time we get the pitch back... r whammybar and transpose by shifting table index.

tabread4 spectrum−tab

get the strength from the table

moses 1 0

The vertical scale is dB from 1 to 50, but we want true zero when dbtorms the table value is 0 or less. + 50

pack 0 30 osc~

line~

*~ throw~ sum−bus

Figura4.19: 4.19:The L’abstraction spectrum-partial in Figura Figure spectrum-partial abstraction utilizzata used in Figure 4.18. 4.18. sentire solo uno scorrere continuo e non salti. Il risultato `e un famoso repertorio uditivo, un tono indefinito ascendente o discendente. La tecnica per sintetizzare uno specifico inviluppo spettrale pu`o essere generalizzata in molti modi: l’inviluppo pu`o essere fatto variare nel tempo sia come risultato di un’analisi live di un altro segnale, sia calcolandolo da un insieme di regole di composizione o attraverso il cross-fading tra una collezione di inviluppi spettrali pre-disegnati o attuando un warping sulle frequenze degli inviluppi, per citare alcune possibilit` a.

Sintesi polifonica: campionatore Ci spostiamo ora ad un esempio che usa l’allocazione dinamica delle voci come descritto nel paragrafo 4.5. Negli esempi di sintesi additiva, mostrati in precedenza, ogni voce viene utilizzata per uno scopo prefissato. Nell’esempio corrente, assegniamo le voci da un banco in modo da riprodurre le note in un flusso di controllo. L’esempio D11.sampler.poly.pd (Figura 4.20) mostra il campionatore polifonico, che utilizza l’abstraction sampvoice (il cui interno `e mostrato in Figura 4.21). Le tecniche per modificare il tono e altri parametri in un campionatore one-shot sono mostrati nell’esempio D10.sampler.notes.pd (non mostrato) che a sua volta deriva dal campionatore one-shot originale del capitolo precedente (C05.sampler.oneshot.pd, mostrato in Figura 3.14). Gli oggetti sampvoice in Figura 4.20 sono disposti in un diverso tipo di bus di somma rispetto a quelli precedenti; qui, ognuno aggiunge la propria uscita


4.8. Esempi

114

107

CHAPTER 4. AUTOMATION AND VOICE MANAGEMENT

r note unpack 0 0 0 0 0 0 0 t b f + 1 counter to f generate tags mod 1e+06 supply later makenote 64 note-off allocate voice poly 8 1 get rid of stripnote note-off route to a voice depending on voice number from poly

pack 0 0 0 0 0 0 0 0 route 1 2 3 4 5 6 7 8

sampvoice one "sampvoice" abstraction for each voice, each

sampvoice sampvoice sampvoice

adding its

sampvoice

own output to a sum (left

sampvoice

inlets and outlets)

sampvoice sampvoice | (OUT)

Figure sampler demonstrating voice allocationdella and use Figura 4.20: 4.20: A Unpolyphonic campionatore polifonico che mostra l’allocazione voceofe tags. l’uso dei tags.


108

Capitolo 4. Automazione e gestione della voce

al segnale di ingresso, e manda la somma sulla sua outlet. Nella parte inferiore degli otto oggetti l’outlet ha quindi la somma di tutti e otto. Questo ha il vantaggio di essere pi` u esplicito dei busses throw∼/catch∼ ed `e preferibile quando l’apparenza visiva non `e un problema. Il lavoro principale della patch, tuttavia, `e quello di distribuire i messaggi “note” agli oggetti sampvoice. A tal fine occorre introdurre alcuni nuovi oggetti Pd: mod : modulo intero. Ad esempio, 17 mod 10 d`a 7 e −2 mod 10 d`a 8. Esiste anche un oggetto di divisione intera denominato div ; dividendo 17 per 10 tramite div d` a 1, e −2 diviso 10 d` a −1. poly : allineatore polifonico di voci. I creation arguments indicano il numero di voci nel banco e un indicatore (1 se `e necessaria togliere una voce, 0 altrimenti). L’entrata a sinistra serve per il tag numerico e quella a destra `e un flag che indica se avviare o interrompere una voce con il tag dato (numeri diversi da zero significano “inizio” e zero significa “stop”). Le uscite sono, a sinistra, il numero di voce, al centro nuovamente il tag e a destra la flag start/stop. Nelle applicazioni MIDI, il tag pu` o essere la nota e il flag start/stop pu`o essere la velocity della nota. makenote : fornisce i messaggi ritardati di note-off che corrispondono a relativi messaggi di note-on. Le entrate sono un tag e un flag start/stop (“pitch” e “velocity” nell’utilizzo MIDI) e la durata desiderata in millisecondi. La coppia di tag/flag viene ripetuta alle due uscite quanto viene ricevuta; quindi, dopo il ritardo, il tag viene ripetuto con il flag zero per arrestare la nota dopo la durata desiderata. I messaggi “note” contengono campi per la nota, l’ampiezza, la durata, il sample number, la posizione di partenza del campione, il tempo di salita e il tempo di decadimento. Ad esempio, il messaggio, 60 90 1000 2 500 10 20 (se ricevuto dall’oggetto r note) significa riprodurre una nota con pitch 60 (unit` a MIDI), ampiezza 90 dB, durata di un secondo, dalla wavetable denominato “sample2”, a partire dal punto a 500 msec nella wavetable, con tempi di attacco e decadimento di 10 e 20 msec. Dopo aver spacchettato il messaggio nelle sue sette componenti, la patch crea un tag per la nota. Per fare questo, innanzitutto l’oggetto t b f emette un bang dopo che l’ultimo dei sette parametri appare separatamente. La combinazione degli oggetti +, f, e mod funge da contatore che riparte dopo un milione di passi, generando essenzialmente un numero univoco corrispondente alla nota. Il passo successivo consiste nell’utilizzare l’oggetto poly per determinare con quale voce suonare la nota. L’oggetto poly prevede messaggi separati per avviare e arrestare i compiti (ad esempio note). Quindi il tag e la durata vengono prima inseriti nell’oggetto makenote, le cui uscite includono un flag (“velocity”) a destra e il tag nuovamente a sinistra. Per ciascun tag ricevuto da makenote vengono emesse due coppie di numeri, una per avviare la nota e un’altra, dopo un ritardo pari alla durata della nota, per fermarla. Dopo aver trattato con poly questo ingresso separato, ora dobbiamo ricavare i messaggi corrispondenti alla chiusura delle note, poich´e in realt`a abbiamo


4.8. Esempi

109

solo bisogno di messaggi “note” combinati con parametri di durata. L’oggetto stripnote fa questo lavoro. Infine, il numero di voce che abbiamo calcolato viene posto prima dei sette parametri con cui abbiamo iniziato (l’oggetto pack), in modo che l’output dell’oggetto pack appaia cos`ı: 4 60 90 1000 2 500 10 20 dove il “4” `e il numero di voce emesso dall’oggetto poly. Il numero di voce viene utilizzato per indirizzare il messaggio alla voce desiderata utilizzando l’oggetto route. L’appropriato oggetto sampvoice ottiene quindi la lista originale che inizia con “60”. All’interno dell’oggetto sampvoice (Figura 4.21), il messaggio viene utilizzato per controllare tabread4∼ e gli oggetti circostanti line∼ e vline∼. Il controllo avviene con un ritardo di 5 msec come nell’esempio precedente di campionatore. Qui, tuttavia, dobbiamo memorizzare i sette parametri della nota (precedentemente non c’erano parametri). Questo viene fatto usando i sei oggetti f, pi` u l’ingresso destro dell’oggetto delay pi` u a destra. Questi valori vengono utilizzati dopo il ritardo di 5 msec. Ci`o avviene in combinazione con il meccanismo di muting descritto a pagina 90, utilizzando un altro oggetto vline∼. Quando i 5 msec sono trascorsi, l’oggetto vline∼, responsabile della generazione dell’indice della wavetable, ottiene i suoi ordini di marcia (e contemporaneamente il numero della wavetable `e impostato per l’oggetto tabread4∼ e il generatore di inviluppo di ampiezza inizia il suo attacco). L’indice della wavetable deve essere impostato in modo discontinuo rispetto all’indice di avviamento, quindi scende all’indice finale con un tempo appropriato per ottenere la trasposizione necessaria. L’indice di partenza, in campioni, `e proprio 44,1 volte la posizione di partenza in millisecondi, pi` u uno per consentire l’interpolazione a quattro punti nella tabella. Questo diventa il terzo numero in una lista generata dall’oggetto pack al centro della patch della voce. Decidiamo arbitrariamente che la rampa durer`a diecimila secondi (questo `e il “1e+07” che compare nella casella di messaggio inviata al generatore di indici della wavetable), sperando che questo sia lungo almeno quanto ogni nota che verr` a suonata. L’indice di fine `e l’indice di partenza pi` u il numero di campioni nella rampa. A un fattore di trasposizione di uno, dobbiamo spostarci per 441,000,000 campioni durante quei 10,000,000 millisecondi, o proporzionalmente pi` u o meno a seconda del fattore di trasposizione. Questo fattore di trasposizione `e calcolato dall’oggetto mtof, diviso per 261.62 (la frequenza corrispondente alla nota MIDI 60) in modo che un “pitch” specificato di 60 determini un fattore di trasposizione di uno. Questi e altri parametri vengono combinati in un messaggio tramite l’oggetto pack in modo che le caselle di messaggi seguenti possano generare i messaggi di controllo necessari. L’unica novit`a `e l’oggetto makefilename che converte numeri come “2” in simboli come “sample2” in modo che sia possibile impostare la wavetable nell’oggetto tabread4∼. Nella parte inferiore della patch vocale vediamo come viene implementato un bus sommatore all’interno di una sottopatch; un oggetto inlet∼ cattura la somma di tutte le voci precedenti, l’output della voce corrente viene aggiunto e il risultato viene inviato alla voce successiva tramite l’oggetto outlet∼.


110

Capitolo 4. Automazione e gestione della voce

4.8. EXAMPLES

115

inlet store parameters first in floats below until muted unpack 0 0 0 0 0 0 0

bang delay for delay 5 mute to take effect t b b b f

f

f

f

f

mtof

* 44.1

/ 261.62

+ 1

* 4.41e+08 + ending read point mute and unmute 0 5 1 5

delay

delay for note end

f

starting read point

pack 0 0 0 0 0 $3, $4 1e+07

attack decay 0, $1 $2 0 $1

$5

wavetable index vline~ makefilename sample%d set $1 select wavetable

vline~ unpack mute dbtorms sqrt

tabread4~ sample1

sqrt

*~

line~

amplitude envelope

*~ *~ add to summing bus

inlet~

*~

+~ outlet~

Figura4.21: 4.21: The L’abstraction nel polyphonic campionatore polifonico Figure sampvoicesampvoice abstractionutilizzata used in the sampler of di Figura4.20. 4.20. Figure


4.8. Esempi

111

Esercizi 1. Quale input a una funzione di trasferimento di quarta potenza fornisce un’uscita di −12 dB, se un input di 1 fornisce 0 dB? 2. Un generatore di inviluppo sale da zero ad un valore di picco durante il suo segmento di attacco. Quanti decibel inferiori al picco ha raggiunto l’output a met` a dell’attacco, assumendo l’output lineare? E con la quarta potenza? 3. Quale funzione di trasferimento di tipo esponenziale (cio`e quale scelta di n per la funzione f (x) = xn ) dobbiamo usare se si desidera che il valore a met` a percorso sia −12 decibel? 4. Supponiamo che si desideri fare una dissolvenza incrociata tra due segnali, cio`e far salire a 1 un segnale e contemporaneamente farne scendere a 0 un altro. Se hanno potenza uguale e non sono correlati, una dissolvenza incrociata lineare comporter`a una perdita di 3 decibel a met`a percorso del cross-fading. Quale legge esponenziale conviene utilizzare per mantenere la potenza costante durante la dissolvenza incrociata? 5. Un accordo a tre note, di durata 1.5 secondi, viene riprodotto una volta ogni secondo. Quante voci sono necessarie per sintetizzarlo senza tagliare le note? 6. Supponiamo che una patch di sintesi dia output tra −1 e 1. Mentre una nota viene riprodotta, viene avviata una nuova nota usando la tecnica voice-stealing “rampdown”. Qual `e l’output massimo?


112

Capitolo 4. Automazione e gestione della voce


Capitolo 5

Modulazione Dopo aver fatto una deviazione di due capitoli per parlare di aspetti di controllo e organizzazione nella musica elettronica, torniamo a descrivere le tecniche di sintesi audio e di elaborazione. Finora abbiamo visto metodi additivi e basati su wavetables. In questo capitolo introdurremo tre cosiddette tecniche di modulazione: modulazione di ampiezza, modulazione di frequenza e waveshaping. Il termine “modulazione” si riferisce liberamente a qualsiasi tecnica che modifica sistematicamente la forma di una forma d’onda piegando il suo grafico verticalmente o orizzontalmente. La modulazione `e ampiamente usata per costruire suoni sintetici con varie famiglie di spettri, per cui dobbiamo introdurre alcune terminologie prima di entrare nello specifico delle tecniche.

5.1

Tassonomia degli spettri

La Figura 5.1 introduce un modo di visualizzare lo spettro di un segnale audio. Lo spettro descrive, approssimativamente, come la potenza del segnale `e distribuita rispetto alle frequenze (possono essere date molte definizioni pi` u precise di quelle che noi svilupperemo qui, ma che richiederebbero un background pi` u matematico). La parte (a) della figura mostra lo spettro di un segnale armonico, che `e un segnale periodico la cui frequenza fondamentale `e nell’intervallo delle note percepibili, approssimativamente tra 50 e 4000 Hertz. La serie di Fourier (pagina 11) fornisce una descrizione di un segnale periodico come somma di sinusoidi. Le frequenze delle sinusoide sono in rapporto 0:1:2:· · · (il termine costante della serie Fourier pu` o essere considerato sinusoidale, a0 = a0 cos(0 · ωn), la cui frequenza `e zero). In un segnale armonico, la potenza mostrata nello spettro `e concentrata su un sottoinsieme discreto dell’asse delle frequenze (un insieme discreto `e costituito da punti isolati, in numero finito in qualsiasi intervallo limitato). Questo insieme prende il nome di spettro discreto. Inoltre, le frequenze in cui si trova la potenza del segnale sono nel rapporto 0:1:2:· · · , originate da un segnale periodico (non `e necessario che tutte le frequenze degli armonici siano presenti, alcuni armonici possono avere ampiezza zero). Per un segnale armonico, il grafico dello spettro 113


114

Capitolo 5. Modulazione

120

CHAPTER 5. MODULATION

(a) harmonic amplitude

spectral envelope

frequency (b) inharmonic

(c.) continuous

Figure taxonomy of timbres. TheL’inviluppo spectral envelope describes Figura 5.1: 5.1: A Una tassonomia di timbri. spettrale descrivethe la shape forma of thespettro. spectrum. The sound may discretamente be discretely or continuously distributed dello Il suono pu` o essere o continuamente distribuito in in frequency; it may be harmonic or inharmonic. frequenza; ifsediscretely, discretamente, pu` o essere armonico o inarmonico.


5.1. Tassonomia degli spettri

115

mostra le ampiezze delle parziali del segnale. Conoscere le ampiezze e le fasi di tutti le parziali determina completamente il segnale originale. La parte (b) della figura mostra uno spettro che `e anche discreto, in modo che il segnale possa essere nuovamente considerato come una somma di una serie di parziali. In questo caso, tuttavia, non esiste alcuna frequenza fondamentale, cio`e nessun sottomultiplo comune udibile di tutte le parziali. In questo caso si ha un segnale inarmonico (i termini armonico e inarmonico possono essere usati per descrivere sia i segnali che i loro spettri). Quando si lavora con spettri discreti, riportiamo l’ampiezza di una parziale in un modo leggermente non intuitivo. Ogni componente sinusoidale a cos(ωn + φ) conta solo come ampiezza a/2 finch´e la frequenza angolare ω `e diversa da zero. Ma per una componente di frequenza zero, per cui ω = φ = 0, l’ampiezza `e data da a – senza dover dividere per due (le componenti con frequenza zero sono spesso chiamate componenti DC; “DC” `e storicamente un acronimo di “corrente diretta”). Queste convenzioni per le ampiezze degli spettri semplificheranno l’aspetto matematico pi` u avanti in questo capitolo; una ragione pi` u profonda diventer` a evidente nel Capitolo 7. La parte (c) della figura mostra una terza possibilit`a: lo spettro potrebbe non essere concentrato in un insieme discreto di frequenze, ma potrebbe essere distribuito tra tutte le frequenze possibili. Questo pu`o essere chiamato uno spettro continuo o rumoroso. Gli spettri non rientrano necessariamente nelle categorie discrete o continue; i suoni reali, in particolare, sono di solito collocabili tra le due definizioni. Ciascuna delle tre parti della figura mostra una curva continua chiamata inviluppo spettrale. In generale, i suoni non hanno un inviluppo spettrale unico e ben definito; ci possono essere molti modi per disegnare una curva continua attraverso uno spettro. D’altra parte, un inviluppo spettrale pu`o essere specificato intenzionalmente; in quel caso, `e solitamente chiaro come fare uno spettro conforme ad esso. Per uno spettro discreto, ad esempio, potremmo semplicemente leggere, dall’inviluppo spettrale, l’ampiezza desiderata di ogni parziale e quindi ricrearlo. A volte il suono di una nota pu`o essere determinato dal suo spettro. Per gli spettri discreti, il tono `e codificato principalmente nelle frequenze delle parziali. I segnali armonici hanno un tono determinato dalla loro frequenza fondamentale; per quelli inarmonici, il tono pu`o essere chiaro, ambiguo o assente in totale, secondo regole complesse e incomplete. Uno spettro rumoroso pu`o anche possedere un tono percepibile se l’inviluppo spettrale contiene uno o pi` u picchi vicini. In generale, la rumorosit`a e il timbro di un suono dipendono maggiormente dal suo inviluppo spettrale rispetto alle frequenze nello spettro, anche se la distinzione tra spettri continui e discreti pu`o essere percepita come differenza di timbro. I timbri, cos`ı come il tono, possono evolvere durante la vita di un suono. Abbiamo parlato qui di spettri come entit`a statiche, non considerando se cambiano nel tempo oppure no. Se il tono e il timbro di un segnale cambiano nel tempo, possiamo pensare allo spettro come una descrizione temporale del comportamento momentaneo del segnale. Questo modo di visualizzare i suoni `e notevolmente semplificato. Il vero comportamento del tono e del timbro acustico ha molti aspetti che non possono


116

Capitolo 5. Modulazione

essere spiegati in termini di questo modello. Per esempio, la qualit`a timbrica chiamata “rugosit` a” `e talvolta pensata come un riflesso di cambiamenti rapidi dell’inviluppo spettrale nel tempo. La descrizione semplificata qui sviluppata `e comunque utile nelle discussioni su come costruire spettri discreti o continui per un’ampia variet` a di scopi musicali, come inizieremo a mostrare nel resto di questo capitolo.

5.2

Moltiplicazione di segnali audio

Fin dal Capitolo 1 abbiamo sistematicamente sommato i segnali audio e moltiplicati con segnali lentamente variabili (utilizzati, ad esempio, come inviluppi di ampiezza). Per una comprensione completa dell’algebra dei segnali audio dobbiamo anche considerare la situazione in cui si moltiplicano due segnali audio, senza l’assunzione che nessuno dei due cambi lentamente. La chiave per capire cosa succede `e la formula del prodotto dei coseni: cos(a) cos(b) =

1 cos(a + b) + cos(a − b) . 2

Per capire perch´e questa formula sia vera, possiamo usare la formula per il coseno di una somma di due angoli cos(a + b) = cos(a) cos(b) − sin(a) sin(b) per valutare il lato destro della formula del prodotto dei coseni; quindi, applicato anche a cos(a − b), e facendo le dovute semplificazioni, si ottiene il lato sinistro. Possiamo usare questa formula per vedere cosa succede quando moltiplichiamo due sinusoidi (pagina 1): cos(αn + φ) cos(βn + ξ) = =

1 2

cos((α + β)n + (φ + ξ)) + cos((α − β)n + (φ − ξ)) .

In parole povere, moltiplicando due sinusoidi si ottiene un risultato con due parziali, una `e la somma delle due frequenze originali e una `e la loro differenza (se accade che la differenza α−β sia negativa, `e sufficiente permutare le due sinusoidi originali e la differenza sar` a poi positiva). Queste due nuove componenti sono chiamate sidebands (estremi di banda). Ci` o ci d` a una tecnica per spostare le frequenze delle componenti di un suono, che prende il nome di modulazione ad anello, e che viene mostrata nella sua forma pi` u semplice nella Figura 5.2. Un oscillatore fornisce un segnale portante (carrier signal), che viene semplicemente moltiplicato per un input. In questo contesto l’input viene chiamato segnale modulante (modulating signal). Il termine “modulazione ad anello” viene spesso usato in modo pi` u generale per indicare la moltiplicazione di due segnali insieme, ma qui prendiamo in considerazione l’utilizzo di un segnale portante sinusoidale (la tecnica della modulazione ad anello risale all’era analogica [Str95], i moltiplicatori digitali ora sostituiscono entrambi i VCA (paragrafo 1.5) e il modulatore ad anello). La Figura 5.3 mostra una serie di risultati che possono essere ottenuti moltiplicando una sinusoide (modulante), di frequenza angolare α e ampiezza di


5.2. 5.2. MULTIPLYING Moltiplicazione diAUDIO segnali SIGNALS audio

IN

123 117

1

-1 OUT

Figura5.2: 5.2: Block Diagramma a blocchi modulazione ad anello un asegnale di Figure diagram for ring per modulating an input signalcon with sinusoid. ingresso di tipo sinusoidale.

(carrier) sinusoid of angular frequency β and peak amplitude 1: picco 2a, per una sinusoide (portante) di frequenza angolare β e ampiezza di picco 1: [2a cos(αn)] · [cos(βn)] [2a cos(αn)] · [cos(βn)] (For phase di terms partparte of thedella figure shows both (persimplicity semplicit` athe i termini fase are sonoomitted.) omessi). Each Ciascuna figura mostra the and the che result in the same The modulating sia modulation il segnale disignal modulazione il risultato nellospectrum. stesso spettro. Il segnale signal appears as a single frequency, at amplitude a. The product general modulante appare come una singolaα,frequenza, α, all’ampiezza a. Ilinprodotto has two component frequencies, at an amplitude ofad a/2. in generale ha due frequenze pereach le componenti, ognuna un’ampiezza di a/2. Parts (a) (a) ande (b) of thefigura figuremostrano show “general” cases where are Le parti (b) della i casi “generali” in cuiα αand e ββsono nonzero and differenttra from Thedelle component frequencies of sono the output non nulle e diverse loro.each Le other. frequenze componenti in uscita α+β are − β. In (b), 0, we get una a negative frequency e αα−+β.β and Nellaαparte (b),part dato chesince α −α β− <β0,<otteniamo componente con component. Since cosine ise an even function, we havepari, abbiamo che frequenza negativa. Poich´ il coseno `e una funzione α)n), cos((α − β)n) = cos((β − α)n) quindi la componente negativa `e esattamente equivalente quella con frequency frequenza so the negative component is exactly equivalent to one at athe positive positiva β − α, con la stessa ampiezza. β − α, at the same amplitude. Nel caso speciale α =α β, banda laterale (differenza) ha zero una In the special casedove where = la β, seconda the second (difference) sideband has frequenza pari a zero. In questo caso la fase sar` a significativa quindi riscriviamo frequency. In this case phase will be significant so we rewrite the product with il prodotto con replacing fasi esplicite, explicit phases, β bysostituendo α, to get: β con α, per ottenere: 2a cos(αn + φ) cos(αn + ξ) = 2a cos(αn + φ) cos(αn + ξ) = = a cos(2αn + (φ + ξ)) + acos(φ − ξ). = a cos (2αn + (φ + ξ)) + a cos (φ − ξ). Il secondo termine ha frequenza pari a zero; la sua ampiezza dipende dalla fase The second term has zero frequency; its amplitude depends on the relative phase relativa delle due sinusoidi e varia da +a a −a, poich´e la differenza di fase φ − ξ of the two sinusoids and ranges from +a to −a as the phase difference φ − ξ varia da 0 a π radianti. Questa situazione `e mostrata nella parte (c) della Figura varies from 0 to π radians. This situation is shown in part (c) of Figure 5.3. 5.3. Finally, part (d)(d) shows a carrier signal modulante whose frequency is zero. Its`e value is Infine, la parte mostra un segnale la cui frequenza zero. Il the constant a (not 2a; zero frequency is a special case). Here we get only one suo valore `e la costante a (non 2a, la frequenza zero `e un caso speciale). Qui sideband, of amplitude a/2 as usual. abbiamo solo una banda laterale, di ampiezza a/2 come al solito. We can useusare the distributive rule for multiplication to find out happens Possiamo la legge distributiva per la moltiplicazione perwhat scoprire cosa when we quando multiplymoltiplichiamo signals together which consistciascuno of more dei than one`epartial each. succede segnali insieme, quali costituiti da pi` u di una parziale. Ad esempio, nella situazione precedente possiamo sostituire il segnale di frequenza α con una somma di diverse sinusoidi, ad esempio: a1 cos(α1 n) + · · · + ak cos(αk n).


118 124

Capitolo 5. Modulazione CHAPTER 5. MODULATION

amplitude a

(a)

a/2

a/2 OUT

IN

OUT frequency +

a

(b)

a/2

a/2

a

(c)

a/2 z

=

a (d)

a/2

=0

Figura 5.3: 5.3: Sidebands Bande laterali derivanti dalla moltiplicazione di due sinusoidi α di Figure arising from multiplying two sinusoids of frequency frequenze β: (a) conβ α>> 0; β> (b) con β> modo chelower la banda laterale and β: (a)α ewith α > (b)0; with β > α αsointhat the sideband is inferiore sia riflessa l’asse = 0; α(c) α =which β, perthe cuiamplitude l’ampiezzaofdella reflected about the frispetto = 0 axis; (c)fwith = con β, for the banda laterale sideband a frequenza zero dipende dalle fasi delletwo duesinusoids; sinusoidi;(d) (d)with con zero-frequency depends on the phases of the α = 0.


5.2. Moltiplicazione di segnali audio

119

5.2. MULTIPLYING AUDIO SIGNALS

125

amplitude

(a)

frequency

(b)

(c)

Figure of ring a complex by a complesso pure sinusoid: Figura 5.4: 5.4: Result Risultato dellamodulation modulazioneofad anello di signal un segnale per (a) the original signal’s spectrum and spectral envelope; (b) modulated by a una sinusoide pura: (a) lo spettro del segnale originale e l’inviluppo spettrarelatively low modulating frequency modulante (1/3 of therelativamente fundamental);bassa (c) modulated le; (b) modulato da una frequenza (1/3 della by a higher frequency, 10/3 of the fundamental. fondamentale); (c) modulato da una frequenza pi` u alta, 10/3 del fondamentale. For example, in the situation above we can replace the signal of frequency α with a sum of several sinusoids, such as: a1 cos(α1 n) + · · · + ak cos(αk n) Multiplying by the signal of frequency β gives partials at frequencies equal to: α1 + β, α1 − β, . . . , αk + β, αk − β As before if any frequency is negative we take its absolute value. Figure 5.4 shows the result of multiplying a complex periodic signal (with several components tuned in the ratio 0:1:2:· · ·) by a sinusoid. Both the spectral envelope and the component frequencies of the result are changed according to relatively simple rules. The resulting spectrum is essentially the original spectrum combined with its reflection about the vertical axis. This combined spectrum is then shifted


120

Capitolo 5. Modulazione

Moltiplicandolo per il segnale di frequenza β otteniamo parziali alle frequenze: α1 + β, α1 − β, . . . , αk + β, αk − β. Come prima se qualche frequenza `e negativa, prendiamo il suo valore assoluto. La Figura 5.4 mostra il risultato della moltiplicazione di un segnale periodico complesso (con diversi componenti in rapporto 0:1:2:· · · ) per una sinusoide. Sia l’inviluppo spettrale che le frequenze delle componenti del risultato sono modificate in base a regole relativamente semplici. Lo spettro risultante `e essenzialmente lo spettro originale combinato con la sua riflessione rispetto all’asse verticale. Questo spettro combinato viene quindi spostato a destra per la frequenza portante. Infine, se qualsiasi componente dello spettro spostato rimane ancora a sinistra dell’asse verticale, questa viene riflessa rispetto ad esso per ottenere frequenze positive. Nella parte (b) della figura, la frequenza portante (la frequenza della sinusoide) `e inferiore alla frequenza fondamentale del segnale complesso. In questo caso lo spostamento `e pari a una distanza relativamente piccola, in modo che il ripiegamento dello spettro, alla fine, colloca i due alveoli quasi uno sopra all’altro. Il risultato `e un inviluppo spettrale approssimativamente uguale all’originale (anche se alto met` a) e uno spettro due volte pi` u denso. Un caso particolare, non mostrato, `e quello di utilizzare una frequenza portante pari alla met` a della fondamentale. In questo caso, le coppie di parziali cadranno una sull’altra e avranno i rapporti 1/2:3/2:5/2:· · · dando un segnale con parziali dispari e un’ottava sotto l’originale. Questo `e un octave divider molto semplice ed efficace per un segnale armonico, supponendo di sapere o di poter trovare la sua frequenza fondamentale. Se si desiderano anche le parziali pari oltre che quelle dispari (per il segnale abbassato di un’ottava), basta semplicemente mescolare il segnale originale con quello modulato. La parte (c) della figura mostra l’effetto di utilizzare una frequenza portante molto pi` u alta della frequenza fondamentale del segnale complesso. Qui l’effetto di ripiegamento `e chiaramente molto pi` u visibile (solo una parziale, quella pi` ua sinistra, deve essere riflessa per rendere la sua frequenza positiva). L’inviluppo spettrale `e ora spostato molto rispetto all’originale; questo spostamento `e spesso un effetto molto pi` u udibile rispetto che alla sola ricollocazione delle parziali. Come ulteriore caso particolare, la frequenza portante pu`o essere un multiplo della fondamentale del segnale complesso periodico; allora le parziali si posizionano tutte su altre parziali della stessa fondamentale, e l’unico effetto `e lo spostamento dell’inviluppo spettrale.

5.3

Waveshaping

Un altro approccio per modulare un segnale, chiamato waveshaping, consiste semplicemente di passarlo attraverso una funzione non-lineare opportunamente scelta. Un diagramma a blocchi per realizzare il waveshaping `e mostrato in Figura 5.5. La funzione f () (chiamata funzione di trasferimento) distorce la forma d’onda in ingresso in una forma diversa. La nuova forma dipende dalla forma dell’onda in entrata, dalla funzione di trasferimento e, soprattutto, dall’ampiezza del segnale in entrata. Poich´e l’ampiezza della forma d’onda in ingresso influenza la forma della forma d’onda di uscita (e quindi il timbro), questo ci


5.3. WAVESHAPING 5.3. Waveshaping

127 121

IN

f()

OUT

Figure 5.5: Block diagram for waveshaping an input signal using a nonlinear Figura 5.5: Diagramma a blocchi per il waveshaping di un segnale in ingresso function f (). An amplitude adjustment step precedes the function lookup, to usando una funzione non-lineare f (). Un controllo di regolazione dell’ampiezza take advantage of the different effect of the wavetable lookup at different amprecede la funzione di ricerca, per approfittare del diverso effetto della ricerca plitudes. su wavetable a diverse ampiezze. to a clipping function. This example shows clearly how the input amplitude— offreindex—can un modo semplice peroutput creare waveform. una famigliaThe di timbri in continuo the affect the clipping function mutamenpasses its to, semplicemente variando il livello di input della trasformazione. questoinput to the output unchanged as long as it stays in the interval Per between motivo, ` e consuetudine includere un controllo di ampiezza principale come 0.3 and +0.3. So when the input does not exceed 0.3 in absolute value,parte the dell’operazione di waveshaping, mostrato nel diagramma blocchi. output is the same as the input. come But when the input grows pasta the limits, the L’ampiezza della forma in entrataof`e the chiamata di waveshaping. output stays within; and asd’onda the amplitude signal indice increases the effect of In molte situazioni un indice piccolo porta a distorsioni relativamente this clipping action is progressively more severe. In the figure, the piccole input is(ina modo che l’output somigli molto all’input) e un indice pi` u grande d` a un decaying sinusoid. The output evolves from a nearly square waveform timbro at the pi` u distorto u ricco. beginning to ea pi` pure sinusoid at the end. This effect will be well known to anyone un esempio familiare di waveshaping, cuilouder f () `e una whoLa hasFigura played5.6 anmostra instrument through an overdriven amplifier. inThe the funzione di taglio (clipping function). Questo esempio mostra chiaramente input, the more distorted will be the output. For this reason, waveshapingcois me l’ampiezza – l’indice – possa influenzare la forma d’onda di uscita. also sometimesdell’input called distortion. La Figure funzione taglio apassa ingresso finch´e rimane nel5.7dishows muchil suo simpler and all’uscita easier to invariato analyse situation, in which l’intervallo tra −0.3 e +0.3. Perci´ o , quando l’input non supera 0.3 in valore the transfer function simply squares the input: assoluto, l’output `e uguale all’input. Ma quando l’input supera questi limiti, f (x) = x2 dell’ampiezza del segnale, l’effetto l’output vi rester` a all’interno; all’aumentare di questa azione di taglio sar`a progressivamente pi` u drastica. Nella figura, l’inFor a sinusoidal input, put `e una sinusoide che decade. L’output si evolve da una forma d’onda quasi x[n] = a cos(ωn + φ) quadra all’inizio fino a una sinusoide pura alla fine. Questo effetto sar`a ben we geta chiunque abbia suonato uno strumento attraverso un amplificatore con noto a2 overdrive. Quanto pi` u fforte l’ingresso, pi` u l’uscita sar`a distorta. Per questa (x[n])`e = (1 + cos(2ωn + 2φ)) 2 chiamato anche distorsione. ragione, il waveshaping viene a volte If the equals una one,situazione this just amounts ring modulating sinusoid Laamplitude Figura 5.7amostra molto pi` utosemplice e facile dathe analizzare, by a sinusoid of the same frequency, whose result we described in dell’input: the previin cui la funzione di trasferimento calcola semplicemente il quadrato ous section: the output is a DC (zero-frequency) sinusoid plus a sinusoid at f (x) = x2 . Per un input sinusoidale x[n] = a cos(ωn + φ)


122

Capitolo 5. Modulazione

128

CHAPTER 5. MODULATION

1

(a)

-1

0.3 (b) -0.3

(c) 0.3 -0.3

Figure aswaveshaping an example con of waveshaping: (a) the input, a decaying Figura 5.6: 5.6: Clipping Esempio di taglio: (a) l’input, una sinusoide che desinusoid; (b) the waveshaping function, which clips its input to the interval cade; (b) la funzione di waveshaping, che taglia l’input al di fuori dell’intervallo between and (c) +0.3; (c) the result. tra −0.3-0.3 e +0.3; il risultato.


5.3. Waveshaping

123

5.3. WAVESHAPING

129

1

(a)

-1 1

-1

(b)

1

1

(c)

2 Figure using a quadratic transferdifunction f (x) = xquadratica : (a) the Figura5.7: 5.7:Waveshaping Waveshaping usando una funzione trasferimento input; (b) the transfer function; (c) the result, sounding at twice the original f (x) = x2 : (a) l’input; (b) la funzione di trasferimento; (c) il risultato, che frequency. suona al doppio della frequenza originale.

twice the original frequency. However, in this waveshaping example, unlike ring modulation, the amplitude of the output grows as the square of the input. Keeping the same transfer function, we now consider the effect of sending in a combination of two sinusoids with amplitudes a and b, and angular frequencies α and β. For simplicity, we’ll omit the initial phase terms. We set: x[n] = a cos(αn) + b cos(βn) and plugging this into f () gives f (x[n]) = +

a2 (1 + cos(2αn)) + 2

b2 (1 + cos(2βn)) 2

+ab [cos((α + β)n) + cos((α − β)n)] The first two terms are just what we would get by sending the two sinusoids through separately. The third term is twice the product of the two input terms,


124

Capitolo 5. Modulazione

si ottiene

a2 (1 + cos(2ωn + 2φ)). 2 Se l’ampiezza a `e uguale a 1, ci` o equivale semplicemente ad una modulazione ad anello della sinusoide tramite una sinusoide alla stessa frequenza, il cui risultato abbiamo descritto nel paragrafo precedente: l’output `e una sinusoide DC (a frequenza nulla) pi` u una sinusoide al doppio della frequenza originale. Tuttavia, in questo esempio di waveshaping, diversamente dalla modulazione ad anello, l’ampiezza dell’output cresce come il quadrato dell’input. Utilizzando la stessa funzione di trasferimento, consideriamo ora l’effetto di inviare una combinazione di due sinusoidi con ampiezze a e b e frequenze angolari α e β. Per semplicit` a, ometteremo i termini di fase iniziale. Sia quindi f (x[n]) =

x[n] = a cos(αn) + b cos(βn) e applicandovi f () si ottiene f (x[n]) =

a2 2 (1

+ cos(2αn))+

2

+ b2 (1 + cos(2βn))+ +ab[cos((α + β)n) + cos((α − β)n)]. I primi due termini sono proprio quello che avremmo ottenuto inviando separatamente le due sinusoidi. Il terzo termine `e due volte il prodotto dei due termini in input, che proviene dal termine misto nell’espansione f (x + y) = x2 + 2xy + y 2 . Questo effetto, chiamato intermodulazione, diventa sempre pi` u dominante all’aumentare del numero di termini in input; se ci sono k sinusoidi in ingresso ci sono solo k termini “puri” nel prodotto, ma ci sono anche (k 2 − k)/2 termini di intermodulazione. In contrasto con la modulazione ad anello, che `e una funzione lineare del suo segnale di ingresso, il waveshaping `e non-lineare. Mentre siamo stati in grado di analizzare i processi lineari considerando la loro azione separatamente su tutte le componenti dell’input, nel caso non-lineare dobbiamo anche considerare le interazioni tra le componenti. I risultati sono molto pi` u complessi, a volte molto pi` u ricchi da un punto di vista sonoro, ma, d’altra parte, pi` u difficili da capire o prevedere. In generale, possiamo dimostrare che un input periodico, non importa quanto complesso sia, avr` a lo stesso periodo dopo il waveshaping: se il periodo `e τ in modo che x[n + τ ] = x[n] e impostiamo temporaneamente l’indice a = 1, f (x[n + τ ]) = f (x[n]) (in alcuni casi speciali l’output pu` o avere periodo pari ad un sottomultiplo di τ , in modo da ottenere, come risultato, un armonico dell’input, questo accade, ad esempio, in Figura 5.4).


5.3. Waveshaping

125

Le combinazioni di toni periodici a intervalli di consonanza possono dare origine a distorsioni sub-armoniche. Per esempio, se due segnali periodici x e y sono distanti una quarta musicale (periodi nel rapporto 4:3), allora la somma dei due si ripete ad una frequenza pi` u bassa data dalla sub-armonica comune. Nelle equazioni avremo: x[t + τ /3] = x[t] y[t + τ /4] = y[t] il che implica x[t + τ ] + y[t + τ ] = x[t] + y[t] e quindi la somma distorta f (x + y) si ripeter`a dopo un periodo di τ : f (x + y)[n + τ ] = f (x + y)[n]. Questo `e stato sperimentato da ogni chitarrista elettrico che ha impostato l’amplificatore su overdrive e ha suonato insieme le corde Si e Mi Cantino: il prodotto della distorsione suona qualche volta sulla nota della corda di Mi basso, due ottave al di sotto di quella alta. Per ottenere un’analisi un po’ pi` u esplicita dell’effetto di waveshaping su un segnale in entrata, `e talvolta utile scrivere la funzione f come una serie di potenze finite o infinite: f (x) = f0 + f1 x + f2 x2 + f3 x3 + · · · Se il segnale di ingresso x[n] `e una sinusoide di ampiezza unitaria, cos(ωn), possiamo considerare l’azione dei suddetti termini separatamente: f (a · x[n]) = f0 + af1 cos(ωn) + a2 f2 cos2 (ωn) + a3 f3 cos3 (ωn) + · · · Poich´e i termini della serie sono successivamente moltiplicati per potenze superiori dell’indice a, un valore piccolo di a enfatizzer`a i primi termini pi` u pesantemente e un valore pi` u alto sottolineer`a quelli superiori. Gli spettri dei singoli termini possono essere trovati applicando ripetutamente la formula del prodotto del coseno: 1 = cos(0) x[n] = cos(ωn) x2 [n] = x3 [n] = x4 [n] = x5 [n] =

1 16

1 8

1 4

4 16

+

cos(−ωn) +

cos(−2ωn) +

cos(−3ωn) +

1 2

3 8

2 4

1 2

cos(2ωn)

cos(ωn) +

cos(0) +

cos(−ωn) +

6 16

3 8

1 4

cos(3ωn)

cos(2ωn) +

cos(ωn) +

4 16

1 8

cos(4ωn)

cos(3ωn) +

1 16

cos(5ωn)

e cos`ı via. I numeratori delle frazioni sono individuati dal triangolo di Pascal. Il Teorema del Limite Centrale, in Teoria delle Probabilit`a, implica che la k−esima riga pu` o essere approssimata da una curva gaussiana la cui deviazione standard (una misura di larghezza) `e proporzionale alla radice quadrata di k.


126

Capitolo 5. Modulazione

I termini a frequenza negativa (che sono stati qui illustrati separatamente per chiarezza) vanno combinati con quelli positivi; l’inviluppo spettrale viene piegato su se stesso in modo analogo all’esempio di modulazione ad anello di Figura 5.4. Finch´e i coefficienti fk sono tutti numeri positivi o zero, tutte le ampiezze delle sinusoidi sono presenti nelle espansioni sopra indicate. In questo caso tutte le fasi restano coerenti quando a varia e quindi si ottiene un allargamento dello spettro (e forse un’ampiezza drasticamente crescente) al crescere di a. D’altra parte, se alcuni degli fk sono positivi e altri negativi, le diverse espansioni interferiranno in modo distruttivo; questo dar`a origine ad un’evoluzione spettrale pi` u complessa. Si noti inoltre che le espansioni successive contengono solo parziali pari o dispari. Se accade che la funzione di trasferimento (in forma di serie) contenga solo le potenze pari f (x) = f0 + f2 x2 + f4 x4 + · · · allora il risultato, avendo solo parziali pari, suoner`a un’ottava superiore rispetto alla sinusoide in entrata. Se nell’espansione di f (x) ci sono solo potenze dispari, l’output conterr` a solo parziali dispari. Anche se f non pu`o essere espressa esattamente come una serie di potenze (ad esempio, la funzione di clipping della Figura 5.3), `e ancora vero che se f `e una funzione pari, cio`e se f (−x) = f (x) si otterranno solo armonici pari e se f `e una funzione dispari, f (−x) = −f (x) si otterranno solo armonici dispari. Molti trucchi matematici sono stati proposti per usare il waveshaping per generare spettri specifici. Osserviamo che `e possibile generare sinusoidi pure a qualsiasi armonico della fondamentale usando un polinomio di Chebychev come funzione di trasferimento [Leb79] [DJ85] e da l`ı si pu`o continuare e costruire qualsiasi spettro statico desiderato (l’esempio E05.chebychev.pd dimostra questo). Generare famiglie di spettri tramite il waveshaping di una sinusoide di ampiezza variabile risulta essere pi` u complesso, anche se sono stati trovati diversi interessanti casi particolari, alcuni dei quali sono sviluppati in dettaglio nel Capitolo 6.

5.4

Modulazione di frequenza e di fase

Se una sinusoide ha una frequenza che varia lentamente nel tempo, noi la percepiamo con un tono variabile. Ma se il tono cambia cos`ı rapidamente che le nostre orecchie non riescono a tenere traccia del cambiamento – ad esempio, se la variazione stessa si verifica al pari o al di sopra della frequenza fondamentale della sinusoide – sentiamo un cambiamento timbrico. I timbri cos`ı generati sono ricchi e ampiamente variabili. La scoperta di John Chowning di questa possibilit` a [Cho73] ha rivoluzionato il campo della computer music. Qui sviluppiamo la modulazione di frequenza, di solito chiamata FM, come un caso speciale di waveshaping [Leb79] [DJ85, pp.155-158]; l’analisi data in [Puc01] `e leggermente diversa.


5.4. Modulazione di AND frequenza e di MODULATION fase 5.4. FREQUENCY PHASE

127 133

(a)

(b)

modulation frequency

modulation frequency

1

1

-1

-1 index of modulation

index of modulation

carrier frequency

1

N

carrier frequency 1

0 -1 OUT OUT

Figure 5.8: Block diagram for frequency modulation (FM) synthesis: (a) the Figura 5.8: Diagramma a blocchi per la sintesi di modulazione di frequenza classic form; (b) realized as phase modulation. (FM): (a) forma classica; (b) realizzata come modulazione di fase. relative to the carrier frequency ωc . If a = 0, there is no frequency variation and La thetecnica expression reduces the pi` unmodified, sinusoid; as a 5.8 increases FM, nella sua to forma u semplice, carrier `e mostrata in Figura (parte the waveform becomes more complex. a). Una sinusoide modulata in frequenza `e quella la cui frequenza varia sinuTo analyseadthe resulting spectrum weωcan rewrite ad theuna signal as, soidalmente una frequenza angolare frequenza centrale m rispetto ωc , in modo che le frequenze istantanee varino tra (1 − r)ωc e (1 + r)ωc , dove x[n] la = frequenza cos(ωc n) ∗dicos(a cos(ωmen)) il parametro ωm controlla variazione r controlla la profondit`a della variazione. I parametri ωc , ωm e r sono chiamati rispettivamente frequenza portante, frequenza modulante e indice di modulazione. − sin(ω cos(ωm n)) c n) ∗ sin(a ` consuetudine utilizzare una formulazione pi` E u semplice e sostanzialmente We can consider the result as a sum of two waveshaping generators, each operequivalente in cui `e la fase della sinusoide portante, anzich´e la frequenza, ad ating on a sinusoid of frequency ωm and with a waveshaping index a, and each essere modulata in modo sinusoidale (questo d`a un risultato equivalente poich´e ring modulated with a sinusoid of frequency ωc . The waveshaping function f is la frequenza istantanea `e il tasso di variazione della fase e poich´e la velocit`a given by f (x) = cos(x) for the first term and by f (x) = sin(x) for the second. di cambiamento di una sinusoide `e ancora un’altra sinusoide). La formulazione Returning to Figure 5.4, we can predict what the spectrum will look like. della modulazione di fase `e mostrata nella parte (b) della figura. Possiamo analizzare il risultato della modulazione di fase come segue, supponendo che l’oscillatore modulante e la wavetable siano entrambi sinusoidali e che le frequenze portante e di modulazione non varino nel tempo. Il segnale


128

Capitolo 5. Modulazione

risultante pu` o quindi essere scritto come x[n] = cos(a cos(ωm n) + ωc n). Il parametro a, che sostituisce il parametro precedente r, `e analogamente chiamato indice di modulazione; questo controlla anche l’entit`a della variazione di frequenza rispetto alla frequenza portante ωc . Se a = 0, non c’`e alcuna variazione di frequenza e l’espressione si riduce alla sinusoide portante non modificata; all’aumentare di a la forma d’onda diventa pi` u complessa. Per analizzare lo spettro risultante possiamo riscrivere il segnale come, x[n] = cos(ωc n) · cos(a cos(ωm n)) − sin(ωc n) · sin(a cos(ωm n)). Possiamo considerare il risultato come una somma di due generatori di waveshaping, ciascuno operante su una sinusoide di frequenza ωm e con un indice di waveshaping a, e ciascuno modulato ad anello con una sinusoide di frequenza ωc . La funzione di waveshaping f `e data da f (x) = cos(x) per il primo termine e da f (x) = sin(x) per il secondo. Tornando alla Figura 5.4, possiamo prevedere quale sar`a lo spettro. I due spettri armonici, degli outputs del waveshaping cos(a cos(ωm n)) e sin(a cos(ωm n)) hanno, rispettivamente, armonici sintonizzati a 0, 2ωm , 4ωm , . . . e ωm , 3ωm , 5ωm , . . . e ognuno `e moltiplicato per una sinusoide alla frequenza portante. Quindi, ci sar` a uno spettro centrato sulla frequenza portante ωc , con bande laterali ai multipli sia pari che dispari della frequenza di modulazione ωm , prodotti rispettivamente dai waveshaping, sopra, con seno e il coseno. L’indice di modulazione a, quando cambia, controlla la forza relativa delle varie parziali. Le parziali stesse sono situate alle frequenze ωc + mωm dove m = . . . , −2, −1, 0, 1, 2, . . . Come per tutte le situazioni in cui si moltiplicano due segnali periodici, se c’`e un sopramultiplo comune dei due periodi, il prodotto risultante si ripeter`a a quel periodo pi` u lungo. Quindi se i due periodi sono kτ e mτ , dove k e m sono relativamente primi, entrambi si ripetono dopo un intervallo di tempo di kmτ . In altri termini, se i due hanno frequenze che sono entrambe multiple di una frequenza comune, cosicch´e ωm = kω e ωc = mω, ancora con k e m relativamente primi, il risultato si ripete alla frequenza del sottomultiplo comune


5.5. Esempi

129

ω. D’altra parte, se non `e possibile trovare un comune sottomultiplo ω, o se gli unici sottomultipli sono inferiori a qualsiasi tono discernibile, allora il risultato sar` a inarmonico. Molto di pi` u sulla tecnica FM si pu`o trovare nei libri di testo [Moo90, p. 316], [DJ85, pp.115-139], [Bou00] e nella letteratura di ricerca. Alcune delle possibilit` a sono indicate nei seguenti esempi.

5.5

Esempi

Modulazione ad anello e spettri L’esempio E01.spectrum.pd serve per introdurre uno strumento di misura dello spettro che useremo; qui saltiamo al secondo esempio, E02.ring.modulation.pd (Figura 5.9), che mostra l’effetto di modulare ad anello uno spettro armonico (che `e stato trattato teoricamente nel paragrafo 5.2 e mostrato in Figura 5.4). In questo esempio consideriamo un segnale i cui armonici (da 0 a 5) hanno tutti ampiezza unitaria. Gli armonici possono essere attivati e disattivati separatamente con dei toggles. Quando sono accesi, l’inviluppo spettrale ha un picco al DC (perch´e il segnale costante `e due volte pi` u forte delle altre sinusoidi), ha poi una regione piatta dal primo al quinto armonico e infine scende a zero. Nella porzione della patch che riguarda la generazione del segnale (parte (a) della figura), le sei parziali sono sommate e tale somma viene moltiplicata per il singolo oscillatore portante (i sei segnali vengono sommati implicitamente collegandoli tutti alla stessa entrata dell’oggetto ∗ ∼). Il valore della “fondamentale” in alto viene calcolato per allinearsi bene all’analisi spettrale, il cui risultato `e indicato nella parte (b) della figura. L’analisi spettrale (che utilizza tecniche che non descriveremo fino al Capitolo 9) mostra l’ubicazione delle sinusoidi (assumendo uno spettro discreto) sull’asse orizzontale e le loro grandezze su quello verticale. Quindi la presenza di un picco in DC, di magnitudine uno, nello spettro del segnale di ingresso ci dice, secondo la Figura 5.3, che dovrebbe esserci un picco nello spettro di uscita, alla frequenza portante, di altezza 1/2. Analogamente, le altre due sinusoidi nel segnale di ingresso, che hanno l’altezza 1/2 nello spettro, danno origine, ciascuna, a due picchi in uscita, di altezza 1/4. Uno di questi quattro `e stato riflesso sul bordo sinistro della figura (prendendo il valore assoluto della sua frequenza negativa).

Octave divider e formant adder Come indicato nel paragrafo 5.2, quando consideriamo il risultato di modulare un segnale armonico complesso (cio`e periodico) tramite una sinusoide, un caso speciale interessante `e quello di impostare l’oscillatore portante a met`a della frequenza fondamentale abbassando cos`ı il suono risultante di un’ottava con solo una deformazione relativamente piccola dell’inviluppo spettrale. Un altro caso `e quello di modulare con una sinusoide ad un multiplo della frequenza fondamentale, che sposta, in effetti, l’inviluppo spettrale senza cambiare la frequenza fondamentale del risultato. Questo `e mostrato nell’Esempio E03.octave.divider.pd


130

Capitolo 5. Modulazione

136

CHAPTER 5. MODULATION

r fundamental * 0

* 1

* 2

* 3

* 4

* 5

osc~

osc~

osc~

osc~

osc~

osc~

*~

*~

*~

*~

*~

*~

partials <-- On/Off

0

carrier osc~ frequency

*~ | (OUT)

(a)

SPECTRUM

.

1

0.5

0 0

1

2 3 4 5 -- partial number --

6

7

(b)

Figura5.9: 5.9:Ring Modulazione ad anello di un tono tramite unarealization; sinusoide: Figure modulation of a complex tonecomplesso by a sinusoid: (a) its (a) la sua realizzazione; (b) uno spettro misurato. (b) a measured spectrum.


5.5. Esempi

131

(Figura 5.10). Il segnale che processiamo qui `e una registrazione di una voce che parla. Le sottopatches pd looper e pd delay nascondono i dettagli. Il primo `e un campionatore a loop del tipo descritto nel Capitolo 2. Il secondo `e un ritardo di 1024 campioni, che utilizza oggetti che introdurremo pi` u avanti nel Capitolo 7. Presentiamo qui una classe di oggetti: fiddle∼ : tracker di pitch. L’ingresso accetta un segnale da analizzare e messaggi per modificare le impostazioni. A seconda dei suoi creation arguments, fiddle∼ pu` o avere un numero variabile di uscite che offrono varie informazioni sul segnale di ingresso. Come mostrato qui, con un solo creation argument per specificare la dimensione della finestra, la terza uscita tenta di analizzare il tono del segnale di ingresso e l’ampiezza di quella porzione dell’input che si ripete (almeno approssimativamente) al tono riportato. Questi vengono emessi come un elenco di due numeri. Il tono, che `e in note MIDI, viene riportato con il valore zero se non vi `e identificazione. In questa patch la terza uscita viene spacchettata nelle sue componenti di tono e ampiezza e il componente tono viene filtrata dall’oggetto moses in modo che siano utilizzate solo le stime riuscite di tono (non nulle). Queste vengono convertite in frequenze dall’oggetto mtof. Infine, le stime di frequenza vengono ridotte di 1/2 o moltiplicate per 15, a seconda del moltiplicatore selezionato, per fornire la frequenza di modulazione. Nel primo caso otteniamo un octave divider, e nel secondo, un’aggiunta di ulteriori armonici superiori che deformano le vocali.

Waveshaping e differenza di toni L’esempio E04.difference.tone.pd (Figura 5.11) introduce un waveshaping, dimostrando la non-linearit`a del processo. Due sinusoidi (300 e 225 Hertz, o un rapporto di 4 a 3) vengono sommate e poi ritagliate, utilizzando una nuova classe di oggetti: clip∼ : ritaglio di segnale. Quando il segnale si trova tra i limiti specificati dai creation arguments all’oggetto clip∼, viene passato in modo invariato; ma quando scende al di sotto del limite inferiore o si alza al di sopra del limite superiore, viene sostituito dal relativo limite. L’effetto del clipping di un segnale sinusoidale `e stato mostrato graficamente in Figura 5.6. Finch´e l’ampiezza della somma delle sinusoidi `e inferiore al 50 percento, la somma non pu` o superare uno in valore assoluto e l’oggetto clip∼ passa la coppia invariata di sinusoidi all’uscita. Tuttavia, non appena l’ampiezza supera il 50%, la non-linearit` a dell’oggetto clip∼ produce dei prodotti di distorsione (alle frequenze 300m + 225n per numeri interi m e n), ciascuno dei quali sono multipli di 75, che `e quindi la fondamentale del tono risultante. Visto in un altro modo, il pi` u breve periodo comune delle due sinusoidi `e di 1/75 secondi (cio`e quattro periodi del tono a 300 Hertz e tre periodi del tono a 225 Hz), quindi il risultato si ripete 75 volte al secondo. La frequenza del tono a 225 Hertz nella patch pu`o essere variata. Se viene spostata leggermente da 225, si ottiene un battimento. Altri valori forniscono ulteriori sub-armonici comuni e altri ancora danno origine a toni ricchi e inarmonici.


132

Capitolo 5. Modulazione

136

CHAPTER 5. MODULATION

r fundamental * 0

* 1

* 2

* 3

* 4

* 5

osc~

osc~

osc~

osc~

osc~

osc~

*~

*~

*~

*~

*~

*~

partials <-- On/Off

0

carrier osc~ frequency

*~ | (OUT)

(a)

SPECTRUM

.

1

0.5

0 0

1

2 3 4 5 -- partial number --

6

7

(b)

Figura5.9: 5.10: tono tone di un di un’ottava tramite Figure RingAbbassamento modulation of adel complex by suono a sinusoid: (a) its realization; individuazione suo tono e modulando a met`a della fondamentale. (b) a measured del spectrum.


5.5. Esempi

133

138

CHAPTER 5. MODULATION osc~ 300 loadbang 225 225

<-- frequency of second tone

osc~ +~ *~

loadbang 50 50

clip~ -1 1 | (OUT)

amplitude of sum <-- before clipping

/ 100

Figure 5.11: Nonlinear distortion of a sum of two sinusoids to create a difference Figura tone. 5.11: Distorsione non-lineare di una somma di due sinusoidi per creare una differenza di tono. of frequency by the mtof object. Finally, the frequency estimates are either reduced by 1/2 or else multiplied by 15, depending on the selected multiplier, 5.5. EXAMPLES 139 to provide the modulation frequency. In the first case we get an octave divider, and in the second, additional high harmonics that deform the vowels. osc~ 220

Waveshaping and difference tones

E05-tab 0 <- index Example E04.difference.tone.pd (Figure 5.11) introduces waveshaping, demon100 strating/the nonlinearity of the process. Two sinusoids (300 and 225 Hertz, or a ratio of 4 to 03) 50 are summed and then clipped, using a new object class: pack

clip~ : signal clipper. When the signal lies between the limits specified by line~ the arguments to the clip~ object, it is passed through unchanged; but when *~below the lower limit or rises above the upper limit, it is replaced by the it falls limit. The effect of clipping a sinusoidal signal was shown graphically in Figure *~ 128 5.6. +~long 129as the amplitude of the sum of sinusoids is less than 50 percent, the As sum can’t exceed one in absolute value and the clip~ object passes the pair of tabread4~ E05-tab sinusoids through unchanged to the output. As soon as the amplitude exceeds hip~ 5however, the nonlinearity of the clip~ object brings forth distor50 percent, tion|products (at frequencies 300m + 225n for integers m and n), all of which (OUT) to be multiples of 75, which is thus the fundamental of the resulting happening tone. Seen another way, the shortest common period of the two sinusoids is 1/75 second (whichChebychev is four periods of the 300 Hertz, tone and three functions. periods of Figure 5.12: Using polynomials as waveshaping transfer Figura deithe polinomi di Chebychev come the 2255.12: HertzUtilizzo tone), so result repeats 75 times perfunzioni second. di trasferimento waveshaping. The frequency of the 225 Hertz tone in the patch may be varied. If it is moved slightly away from 225, a beating sound results. Other values find other common subharmonics, and still others give rise to rich, inharmonic tones.

Waveshaping using Chebychev polynomials Example E05.chebychev.pd (Figure 5.12) demonstrates how you can use waveshaping to generate pure harmonics. We’ll limit ourselves to a specific example here in which we would like to generate the pure fifth harmonic, cos(5ωn) by waveshaping a sinusoid


134

Capitolo 5. Modulazione

Waveshaping utilizzando i polinomi di Chebychev L’esempio E05.chebychev.pd (Figura 5.12) illustra come sia possibile utilizzare il waveshaping per generare armonici puri. Ci limiteremo ad un esempio specifico in cui vorremmo generare l’armonico quinto puro, cos(5ωn) tramite il waveshaping di una sinusoide x[n] = cos(ωn). Dobbiamo trovare una appropriata funzione di trasferimento f (x). Innanzitutto ricordiamo la formula per la funzione waveshaping f (x) = x5 (pagina 125), che fornisce il primo, il terzo e il quinto armonico: 16x5 = cos(5ωn) + 5 cos(3ωn) + 10 cos(ωn). Successivamente aggiungiamo un opportuno multiplo di x3 per annullare il terzo armonico: 16x5 − 20x3 = cos(5ωn) − 5 cos(ωn) e quindi un multiplo di x per annullare il primo armonico: 16x5 − 20x3 + 5x = cos(5ωn). Quindi come funzione di waveshaping sceglieremo f (x) = 16x5 − 20x3 + 5x. Questa procedura ci permette di isolare qualsiasi armonico desiderato; le funzioni risultanti f sono conosciute come polinomi di Chebychev [Leb79]. Per incorporarlo in uno strumento waveshaping, abbiamo semplicemente creato una patch che funziona come nella Figura 5.5, calcolando l’espressione x[n] = f (a[n] cos(ωn)) dove a[n] `e un indice opportuno che pu`o variare in funzione del sample number n. Quando accade che a valga uno, l’output `e il quinto armonico puro. Altri valori di a danno spettri variabili che, in generale, hanno il primo e il terzo armonico oltre che il quinto. Combinando opportunamente i polinomi di Chebychev, possiamo ottenere qualsiasi sovrapposizione desiderata di componenti nella forma d’onda di uscita (sempre, fino a quando l’indice del waveshaping `e uno). Ma il vero aspetto interessante del waveshaping – cio`e che cambiando semplicemente l’indice possiamo produrre spettri che si evolvono in modi interessanti ma controllabili – non `e affrontato, almeno direttamente, dalla teoria di Chebychev.

Waveshaping usando una funzione esponenziale Ritorniamo nuovamente allo spettro calcolato a pagina 125, corrispondente alle funzioni di waveshaping della forma f (x) = xk . Osserviamo con piacere che non solo sono tutti in fase (in modo che possano essere sovrapposti con risultati


5.5. Esempi

135

facilmente prevedibili) ma anche che gli spettri si estendono all’aumentare di k. Inoltre, in una serie della forma f (x) = f0 + f1 x + f2 x2 + · · · , un indice di modulazione pi` u alto dar`a, nell’espansione, un peso relativo maggiore ai termini di potenze pi` u elevati; come abbiamo visto visto in precedenza, se l’indice di modulazione `e a, i vari termini xk sono moltiplicati per f0 , af1 , a2 f2 e cos`ı via. Ora supponiamo di voler organizzare la suddetta espansione in termini diversi per controllare il risultato in modo prevedibile in funzione dell’indice a. Per scegliere l’esempio pi` u semplice possibile, supponiamo che vogliamo che f0 sia il termine pi` u grande per 0 < a < 1, per poi essere quindi superato dal termine pi` u rapidamente crescente af1 for 1 < a < 2, che `e superato da a2 f2 per 2 < a < 3 e cos`ı via, in modo che il termine n−esimo subentri all’indice n. Per far ci` o basta richiedere che f1 = f0 , 2f2 = f1 , 3f3 = f2 , . . . e scegliendo f0 = 1 si ha f1 = 1, f2 = 1/2, f3 = 1/6, e, in generale fk =

1 . 1 · 2 · 3···k

Questi sono i coefficienti della serie di potenze per la funzione f (x) = ex , dove e ≈ 2.7 `e la costante di Eulero. Prima di utilizzare ex come funzione di trasferimento `e consigliabile pianificare come gestire l’ampiezza del segnale, dal momento che ex cresce rapidamente al crescere di x. Se intendiamo utilizzare ex su una sinusoide di ampiezza a, l’output massimo sar` a ea , che si verifica ogni volta che la fase `e zero. Una scelta semplice e naturale `e semplicemente quella di dividere per ea in modo da ridurre il picco a uno, cio`e: f (a cos(ωn)) =

ea cos(ωn) = ea cos(ωn)−1 . ea

Questo `e realizzato nell’Esempio E06.exponential.pd. Gli spettri risultanti per a = 0, 4 e 16 sono mostrati in Figura 5.13. Al crescere dell’indice di waveshaping, decresce l’energia presente nella fondamentale; l’energia viene sempre di pi` u diffusa sulle parziali.

Waveshaping sinusoidale: parit` a e disparit` a Un’altra interessante classe di funzioni di trasferimento waveshaping sono le sinusoidi: f (x) = cos(x + φ) che includono le funzioni coseno e seno (ottenute scegliendo rispettivamente φ = 0 e φ = −π/2). Queste funzioni, essendo una pari e l’altra dispari, danno origine a spettri con armonici pari e dispari, che risultano essere: cos(a cos(ωn)) = J0 (a) − 2J2 (a) cos(2ωn) + 2J4 (a) cos(4ωn) − 2J6 (a) cos(6ωn) ± · · · sin(a cos(ωn)) = 2J1 cos(ωn) − 2J3 (a) cos(3ωn) + 2J5 (a) cos(5ωn) ∓ · · ·


136

Capitolo 5. Modulazione

142

CHAPTER 5. MODULATION

1

0

a=0

0.25

0

a=4

0.25

0

a=16

0

1

2 3 4 5 −− partial number −−

6

7

Figura Spettri di di waveshaping usando una funzione di trasferiFigure 5.13: 5.13: Spectra of output waveshaping output using an exponential transfer funcmento esponenziale. Sono mostrati modulazione 0, 4 e 16;vertical notare tion. Indices of modulation of 0, 4, indici and 16diare shown; notepari theadifferent le diverse scale verticali. scales.


5.5. EXAMPLES

143

5.5. Esempi

137

(index) | *~ +~ 0.1 cos~ | (OUT)

(frequency) | osc~ symmetry 0.1

mixed even

0 0.25

odd

Figura 5.14: Utilizzo di un offset additivo su una funzione di trasferimento Figure Using an additive offsettra to pari a cosine transfer function to alter the coseno 5.14: per modificare la simmetria e dispari. Senza compensazione la symmetry between even and odd. With no offset the symmetry is even. odd simmetria `e pari. Per la simmetria dispari, viene aggiunto un quartoFor di ciclo symmetry, a quarter is added to the Smaller give a mixture alla fase. Gli offsets cycle pi` u piccoli danno unaphase. miscela di parioffsets e dispari. of even and odd. Le funzioni Jk (a) sono le funzioni di Bessel del primo tipo, che gli ingegneri utilizzano talvolta per risolvere i problemi relativi alle vibrazioni o al flusso di calore sui dischi. Per altri valori di φ possiamo espandere l’espressione di f : f (x) = cos(x) cos(φ) − sin(x) sin(φ) modulation quindi il risultato `e un mix tra gli armonici pari e dispari, con φ che controlla modulation frequency descritta in frequency le relative ampiezze. Ci`o `e mostrato nella patch E07.evenodd.pd, | | Figura 5.14. osc~ osc~ carrier modulation Modulazione di modulation fase e FM frequency index index | carrier L’esempio E08.phase.mod.pd, illustrato in Figura 5.15, mostra | come utilizza| phasor~ frequency *~ re Pd per| realizzare*~effettivamente la modulazione di frequenza (parte a) e la modulazione di fase (parte b). Queste corrispondono ai diagrammi a blocchi +~ +~ della Figura 5.8. Per realizzare la modulazione di fase, l’oscillatore portante `e cos~ suddiviso osc~ nelle sue componenti di ricerca di fase e di coseno. Il segnale `e della | | forma (OUT) (OUT) x[n] = cos(ωc n + a cos(ωm n)) (b) dove ωc `e la frequenza e a `e l’indice (a) portante, ωm `e la frequenza di modulazione, di modulazione – tutto in unit`a angolari. Possiamo prevedere lo spettro espandendo il coseno esterno: Figure 5.15: Pd patches for: (a) frequency modulation; (b) phase modulation. x[n] = cos(ωc n) cos(a cos(ωm n)) − sin(ωc n) sin(a cos(ωm n)).

Incorporando le espansioni di pagina 135 e semplificando i termini si ha x[n] = J0 (a) cos(ωc n)+ +J1 (a) cos((ωc + ωm )n + π2 ) + J1 (a) cos((ωc − ωm )n + π2 )+ +J2 (a) cos((ωc + 2ωm )n + π) + J2 (a) cos((ωc − 2ωm )n + π)+ +J3 (a) cos((ωc + 3ωm )n +

3π 2 )

+ J3 (a) cos((ωc − 3ωm )n +

3π 2 )

+ ···


Figure 5.14: Using an additive offset to a cosine transfer function to alter the symmetry between even and odd. With no offset the symmetry is even. For odd symmetry, a quarter cycle is added to the phase. Smaller offsets give a mixture of even and odd.

138

Capitolo 5. Modulazione

modulation frequency | osc~

modulation frequency | osc~ carrier frequency | +~

modulation index | *~

carrier frequency | phasor~

modulation index | *~

+~ cos~ | (OUT)

osc~ | (OUT)

(b)

(a)

Figure patches for:per: (a) (a) frequency modulation; (b) phase modulation. Figura5.15: 5.15: Pd Patches in Pd modulazione di frequenza; (b) modulazione di fase. Cos`ı le componenti sono centrate intorno alla frequenza portante ωc con bande laterali che si estendono in entrambe le direzioni, ognuna distanziata ωm dalla successiva. Le ampiezze sono in funzione dell’indice di modulazione e non dipendono dalle frequenze. La Figura 5.16 mostra alcuni spettri di modulazione di fase a due operatori, misurati usando l’esempio E09.FM.spectrum.pd. La modulazione di fase pu` o quindi essere vista semplicemente come una forma di waveshaping modulata ad anello. Quindi possiamo usare le strategie descritte nel paragrafo 5.2 per generare combinazioni particolari di frequenze. Ad esempio, se la frequenza portante `e la met`a della frequenza di modulazione, si ottiene un suono con armonici dispari esattamente come nell’esempio di octave divider (Figura 5.10). La modulazione di frequenza non deve essere limitata a oscillatori portanti o modulanti puramente sinusoidali. Un strada ben percorsa `e quella di effettuare la modulazione di fase nello spettro della modulazione di fase stessa. Esistono quindi due indici di modulazione (li chiamano a e b) e due frequenze di modulazione (ωm e ωp ) e la forma d’onda `e: x[n] = cos(ωc n + a cos(ωm n) + b cos(ωp n)). Per analizzare il risultato, basta riscrivere la serie FM originale, descritta sopra, sostituendo ovunque ωc n con ωc n + b cos(ωp n). La terza banda laterale positiva diventa per esempio: J3 (a) cos((ωc + 3ωm )n +

3π + b cos(ωp n)). 2

Questo `e solo un altro spettro FM, con le proprie bande laterali di frequenza ωc + 3ωm + kωp , k = 0, ±1, ±2, . . . aventi ampiezza J3 (a)Jk (b) e fase (3 + k)π/2 [Leb77].


5.5. EXAMPLES

145

5.5. Esempi

139

0.5

a=0.15

0

2

4

6

8

10

12

14

0 0.25

a=0.38

0

2

4

6

8

10

12

14

0

0.25

a=0.84

0

2

4 6 8 10 12 −− partial number −−

14

0

Figure modulation different indices. The Figura5.16: 5.16: Spectra Spettri from dalla phase modulazione di faseata three tre diversi indici. Gli indici indices are come given multipli as multiples 2π radians. sono dati di 2πofradianti. L’esempio E10.complex.FM.pd (non mostrato qui) illustra questo procedimento mediante il grafico di uno spettro di uno strumento con due modulatori FM. Sin dai primi periodi [Sch77] i ricercatori hanno cercato combinazioni di fasi, frequenze e indici di modulazione per strumenti di modulazione di fase semplici e compatti, che riescano a imitare suoni strumentali familiari. Con l’introduzione dei sintetizzatori FM commerciali questo `e diventata un importante ambito industriale.

Esercizi 1. Un suono ha fondamentale 440. Come potrebbe essere modulato ad anello per dare un tono a 110 Hertz con solo le parziali dispari? Come si potrebbero aggiungere le pari se richieste? 2. Una sinusoide con frequenza 400 e ampiezza di picco unitaria `e elevata al quadrato. Quali sono le ampiezze e le frequenze delle componenti del nuovo segnale?


140

Capitolo 5. Modulazione

3. Quali frequenze portanti e di modulazione vanno considerate per uno strumento FM a due operatori per ottenere frequenze di 618, 1000 e 2618 Hertz? (Questa `e una caratteristica di Stria di Chowning [DJ85]). 4. Due sinusoidi con frequenza 300 e 400 Hertz e ampiezza di picco uno (e quindi l’ampiezza RMS `e circa 0.707) vengono moltiplicate. Qual `e l’ampiezza RMS del prodotto? 5. Supponiamo di voler rendere una FM ancora pi` u complicata modulando l’oscillatore modulante, come in: cos(ωc n + a cos(ωm n + b cos(ωp n))) Come, qualitativamente parlando, lo spettro differir`a da quello del semplice esempio a due modulatori (paragrafo 5.5)? 6. Una sinusoide a frequenza ω `e modulata ad anello da un’altra sinusoide esattamente alla stessa frequenza. A quali differenze di fase scomparir`a la componente DC del risultato?


Capitolo 6

Progettare spettri Come suggerito all’inizio del capitolo precedente, un modo potente per sintetizzare i suoni musicali `e quello di specificare – e quindi realizzare – specifiche traiettorie di tono (o, pi` u in generale, di frequenze di parziali), insieme a traiettorie di inviluppo spettrale [Puc01]. L’inviluppo spettrale viene utilizzato per determinare l’ampiezza delle singoli parziali, in funzione delle loro frequenze, e viene pensato come un controllo del timbro del suono (eventualmente variabile nel tempo). Un semplice esempio di ci`o potrebbe essere quello di imitare una corda pizzicata costruendo un suono con parziali armonicamente distanziate in cui l’inviluppo spettrale parte molto ricco ma poi decade in maniera esponenziale con le frequenze pi` u alte che decadono pi` u velocemente di quelle basse, in modo che il timbro maturi nel tempo. Sono stati proposti modelli di evoluzione spettrale per vari strumenti acustici [GM77], [RM69]. Un esempio pi` u complicato `e la voce parlata o cantata, in cui le vocali appaiono come inviluppi spettrali, i dittonghi e molte consonanti appaiono come variazioni temporali negli inviluppi spettrali e altre consonanti appaiono come rumore spettralmente formato. Gli inviluppi spettrali possono essere ottenute dall’analisi dei suoni registrati (sviluppata nel Capitolo 9) o da criteri puramente sintetici. Per specificare, da zero, un inviluppo spettrale, per ogni frequenza possibile, sarebbe noioso e nella maggior parte dei casi si vorrebbero descrivere in termini di caratteristiche salienti. Il modo pi` u noto per farlo `e quello di specificare la dimensione e la forma dei picchi dell’inviluppo spettrale, che sono chiamati formanti. La Figura 6.1 mostra un inviluppo spettrale con due formanti. Anche se le forme dei due picchi nell’inviluppo spettrale sono differenti, possono essere descritti grossolanamente dando le coordinate di ciascun apice (che danno la frequenza centrale e l’ampiezza della formante) e la larghezza di banda di ciascuna formante. Una misura tipica della larghezza di banda potrebbe essere la larghezza del picco a un livello di 3 decibel al di sotto del suo apice. Si noti che se il picco `e sull’asse f = 0 (o vicino ad esso), facciamo finta che scenda a sinistra allo stesso tasso con cui (nella realt` a) scende a destra. Supponiamo che vogliamo generare un suono armonico con un determinato insieme di formanti. Indipendentemente dalla frequenza fondamentale desiderata, vogliamo che lo spettro abbia picchi con frequenze centrali, ampiezze e larghezze di banda prescritte. Tornando agli spettri di modulazione di fase mostrati nella Figura 5.16, vediamo che, almeno a piccoli indici di modulazione, 141


148 142

CHAPTER 6. DESIGNER SPECTRA Capitolo 6. Progettare spettri (f , a ) 1 1

b

1 (f , a ) 2 2

amplitude

b

2

frequency

Figure spectral envelope showing frequencies, amplitudes, and bandFigura6.1: 6.1:AUna inviluppo spettrale chethe mostra le frequenze, le ampiezze e le widths of two formants. larghezze di banda di due formanti. bandwidths. Returning the phase modulation spectra shown in Figure 5.16, il risultato ha un piccotospettrale singolo e ben definito. Possiamo immaginawe see that, at indicestutti of modulation at least, result fondamentale has a single, re l’aggiunta di small pi` u picchi, che condividono una the frequenza well-defined Wesintonizzate can imagine adding armonici several ofper these, all shar(modulante)spectral ma con peak. portanti a diversi selezionare le ing a fundamental (modulating) frequency but di with carriers tuned different varie frequenze centrali desiderate, e con indici modulazione sceltitoper dare le larghezze di `e stato studiatoand perwith la prima volta harmonics to banda select desiderate. the various Questo desired fatto center frequencies, indices of da Chowning [Cho89] che the ha organizzato formanti This generate dallaexplored modulaziomodulation chosen to give desired bandwidths. was first by ne di fase [Cho89] per sintetizzare voci che cantano.generated In questobycapitolo stabiliremo un Chowning who arranged formants phase modulation to quadro generale la costruzione di spettri formanti desiderate, synthesize singingper voices. In this chapter we’ll armonici establish con a general framework for eventualmente variabili nelwith tempo. building harmonic spectra desired, possibly time-varying, formants.

6.1 Carrier/modulator Modello carrier/modulator 6.1 model In precedenza visto come usare la to modulazione anello per Earlier we saw abbiamo how to use ring modulation modify thead spectrum of modifia pericare lo spettro di un segnale periodico, collocando picchi spettrali in posizioni odic signal, placing spectral peaks in specified locations (see Figure 5.4, Page specifiche (vedere Per fare ci`o bisogna grado 125). To do so we Figura need to5.4, be Pagina able to119). generate periodic signals essere whose in spectra di generare i cui spettri abbiano al frequency. DC e scendano have maximasegnali at DC periodici and fall off monotonically with massimi increasing If we monotonicamente al crescere della frequenza. Se possiamo fare un segnale con can make a signal with a formant at frequency zero—and no other formants una formante alla frequenza zero – e nessun altra formante oltre a questa besides that one—we can use ring modulation to displace the formant to any– possiamo usare la modulazione ad anello per spostare the la formante su qualsiasi desired harmonic. If we use waveshaping to generate initial formant, the armonico desiderato. Se usiamo il waveshaping per generare la formante iniziale, ring modulation product will be of the form il prodotto della modulazione ad anello sar`a della forma x[n] = cos(ωc n)f (a cos(ωm n)) x[n] = cos(ωc n)f (a cos(ωm n))

where (thefrequenza carrier frequency) to the formant center frequency and ffor(a · dove ωωcc (la portante) is `e set impostata sulla frequenza centrale della cos(ω n)) is a signal with fundamental frequency determined by ω , produced m e f (a cos(ωm n)) ` mante e un segnale con frequenza fondamentale mdeterminata da ωm , prodotto usando una funzione di waveshaping f e un indice a. Questo secondo termine `e il segnale che vogliamo dare a una formante sul DC con una larghezza di banda controllabile. Un diagramma a blocchi per sintetizzare questo segnale `e mostrato in Figura 6.2.


6.1. Modello carrier/modulator

143

6.1. CARRIER/MODULATOR MODEL

149

modulation frequency 1

-1 index of modulation 1 carrier frequency -1

1

OUT

-1

Figura 6.2: 6.2: Waveshaping modulato ad anello per for la generazione di formanti. Figure Ring modulated waveshaping formant generation

using a waveshaping function f and index a. This second term is the signal we wish to give a formant at DC with a controllable bandwidth. A block diagram for synthesizing this signal is shown in Figure 6.2. Much earlier in Section 2.4 we introduced the technique of timbre stretching, as part of the discussion of wavetable synthesis. This technique, which is capable of generating complex, variable timbres, can be fit into the same framework. The enveloped wavetable output for one cycle is: x(φ) = T (cφ) ∗ W (aφ), where φ, the phase, satisfies −π ≤ φ ≤ π. Here T is a function stored in a wavetable, W is a windowing function, and c and a are the wavetable stretching and a modulation index for the windowing function. Figure 6.3 shows how to realize this in block diagram form. Comparing this to Figure 2.7, we see that the only significant new feature is the addition of the index a.


144

Capitolo 6. Progettare spettri frequency 1

-1

stretch

index 1

1

0 -1 -M

M

-N

N

OUT

Figure 6.3: Wavetable synthesis generalized as a variable spectrum generator. Figura 6.3: Sintesi wavetable generalizzata a generatore di spettro variabile. Molto prima, nel paragrafo 2.4, abbiamo introdotto la tecnica del timbre stretching, come parte della discussione sulla sintesi wavetable. Questa tecnica, capace di generare timbri variabili complessi, pu`o essere inserita nello stesso schema. L’output della wavetable inviluppata, per un ciclo, `e: x(φ) = T (cφ) · W (aφ), dove φ, la fase, soddisfa −π ≤ φ ≤ π. Qui T `e una funzione memorizzata in una wavetable, W `e una funzione di windowing e c e a sono lo stretching della wavetable e l’indice di modulazione per la funzione di windowing. La Figura 6.3 mostra come realizzarla in forma di diagramma a blocchi. Facendo riferimento alla Figura 2.7, vediamo che l’unica novit`a significativa `e l’aggiunta dell’indice a. In questa configurazione, come nella precedente, il primo termine specifica il posizionamento di energia nello spettro – in questo caso, con il parametro c che agisce per allungare lo spettro della wavetable. Questo `e il ruolo che `e stato precedentemente effettuato dalla scelta della frequenza portante ωc nella modulazione ad anello. Entrambi (waveshaping modulato ad anello e sintesi di stretched wavetable) possono essere considerati casi particolari di un approccio pi` u generale che `e quello di calcolare funzioni della forma x[n] = c(ωn)ma (ωn)


6.2. Treni di impulsi

145

dove c `e una funzione periodica che descrive il segnale portante, e ma `e una funzione modulante periodica che dipende da un indice a. Le funzioni di modulazione a cui siamo interessati avranno solitamente la forma di treni di impulsi e l’indice a controller` a la larghezza dell’impulso; valori pi` u alti di a daranno impulsi pi` u stretti. Nel caso delle wavetables, la funzione di modulazione deve raggiungere lo zero nei punti di wraparound della fase per sopprimere eventuali discontinuit` a nella funzione portante quando la fase si avvolge. Il segnale portante dar` a luogo ad un singolo picco spettrale (una formante) nel caso di waveshaping modulato ad anello; per le wavetables, pu`o avere uno spettro pi` u complicato. Nel prossimo paragrafo svilupperemo ulteriormente le due forme di segnale modulante che abbiamo introdotto qui e nel successivo verr`a esaminato pi` u attentamente il segnale portante.

6.2

Treni di impulsi

I treni di impulsi possono essere generati utilizzando il waveshaping o la stretched wavetable. La formulazione tramite waveshaping `e pi` u facile da analizzare e controllare, e la studiamo per prima.

6.2.1

Treni di impulsi tramite waveshaping

Quando si utilizza il waveshaping, la forma della formante `e determinata da un termine di modulazione ma [n] = f (a cos(ωn)). Per valori piccoli dell’indice a, il termine di modulazione varia solo leggermente dal valore costante f (0), pertanto la maggior parte dell’energia `e concentrata sul DC. All’aumentare di a, l’energia si diffonde tra gli armonici progressivamente pi` u alti rispetto alla fondamentale ω. A seconda della funzione f , questa diffusione pu` o essere ordinata o disordinata. Una diffusione ordinata pu`o essere auspicabile oppure no, a seconda che il nostro obiettivo sia uno spettro prevedibile o una vasta gamma di spettri diversi (e forse difficile da prevedere). La funzione di waveshaping f (x) = ex , analizzata a pagina 134, fornisce risultati che si comportano bene, semplici e prevedibili. Dopo aver adeguatamente normalizzato, abbiamo ottenuto gli spettri mostrati in Figura 5.13. Una leggera riscrittura del modulatore di waveshaping per questa scelta di f (e tenendo conto della ri-normalizzazione) d`a: ma [n] = ea·(cos(ωn)−1)) = e−[b sin

ω 2 2]

dove b2 = 2a in modo che b sia proporzionale alla larghezza di banda. Questo pu` o essere riscritto come ω ma [n] = g(b sin n) 2 con 2 g(x) = e−x . Ad eccezione di un fattore di normalizzazione mancante, si tratta di una distribuzione gaussiana, a volte chiamata “curva a campana”. Le ampiezze degli armonici sono date dalle funzioni di Bessel di tipo “I”.


146

Capitolo 6. Progettare spettri

Un’altra scelta ottimale `e la distribuzione di Cauchy (ancora non normalizzata): 1 h(x) = 1 + x2 che d` a origine ad uno spettro di armonici che decadono esponenzialmente: ω 1 2 h(b sin( n)) = G · + H cos(ωn) + H cos(2ωn) + · · · 2 2 dove G e H sono in funzione dell’indice b (formule esplicite sono fornite in [Puc95a]). Sia in questo caso che nel caso gaussiano sopra, la larghezza di banda (contata in picchi, cio`e in unit` a di ω) `e approssimativamente proporzionale all’indice b e l’ampiezza del termine DC (l’apice dello spettro) `e approssimativamente proporzionale a 1/(1 + b). Per entrambe le funzioni di waveshaping (g o h), se b `e maggiore di circa 2, la waveshape (forma dell’onda) di ma (ωn) `e circa una scansione (avanti o indietro) della funzione di trasferimento, in modo che la forma d’onda risultante appaia come impulsi la cui larghezza diminuisce all’aumentare della larghezza di banda specificata.

6.2.2

Treni di impulsi tramite wavetable stretching

Nella formulazione wavetable, un treno di impulsi pu`o essere fatto tramite una stretched wavetable: Ma (φ) = W (aφ), dove −π ≤ φ ≤ π `e la fase, vale a dire il valore ωnche subisce il wrapping per trovarsi tra −π e π. La funzione W deve essere zero nei punti −π e π e al di fuori di questo intervallo, e salire fino ad un massimo in 0. Una possibile scelta per la funzione W `e 1 W (φ) = (cos(φ) + 1) 2 che viene illustrata nella parte (a) di Figura 6.4. Questa `e noto come la funzione finestra di Hann; verr` a ripresa nel Capitolo 9. Realizzando questa come una forma d’onda ripetuta, otteniamo una successione di copie (opportunamente campionate) della funzione W , il cui duty cycle `e 1/a (parti (b) e (c) della figura). Se non si desidera che le copie si sovrappongano l’indice a deve essere almeno 1. Se si desidera consentire la sovrapposizione, la strategia pi` u semplice `e duplicare il diagramma a blocchi (Figura 6.3) fuori fase, come descritto nel paragrafo 2.4 e realizzato nel paragrafo 2.6.

6.2.3

Spettri risultanti

Prima di considerare segnali portanti pi` u complessi da utilizzare con i modulatori che abbiamo visto finora, `e istruttivo vedere che cosa ci d`a, in termini di forme d’onda e spettri, la moltiplicazione per una sinusoide pura. La Figura 6.5 mostra il risultato di moltiplicare due treni di impulsi diversi per una sinusoide alla sesto parziale: cos(6ωn)Ma (ωn) dove l’indice della modulazione a `e due in entrambi i casi. Nella parte (a) Ma `e la funzione, allungata, della finestra di Hann; la parte (b) mostra il waveshaping


6.2. PULSE TRAINS

153

6.2. Treni di impulsi

147

(a)

(b)

(c)

Figure width modulation using the von Hann window function: (a) Figura6.4: 6.4: Pulse Modulazione di larghezza dell’impulso usando la funzione finestra the function = (1 + W cos(φ))/2; the function waveform, repeated di Hann: (a)Wla(φ)funzione (φ) = (1(b) + cos(φ))/2; (b)aslaafunzione come forma atd’onda, a dutyripetuta cycle ofcon 100% (modulation index(indice a = 1);di(c) the waveform 50% duty cycle del 100% modulazione a = at 1);a(c) la forma d’onda = 2). duty cycle (a =con 2). duty cycle del 50% (a 154 CHAPTER 6. DESIGNER SPECTRA

(a)

(b)

Figure 6.5: Audio signals resulting from multiplying a cosine (partial number Figura 6.5: Segnali audio risultanti dalla moltiplicazione di un coseno (numero di 6) by pulse trains: (a) windowing function from the wavetable formulation; (b) parziale 6) per un treno di impulsi: (a) funzione di windowing dalla formulazione waveshaping output using the Cauchy lookup function. wavetable; (b) output del waveshaping utilizzando la funzione di Cauchy.

6.2.3

Resulting spectra

Before considering more complicated carrier signals to go with the modulators we’ve seen so far, it is instructive to see what multiplication by a pure sinusoid gives us as waveforms and spectra. Figure 6.5 shows the result of multiplying two different pulse trains by a sinusoid at the sixth partial: cos(6ωn)Ma (ωn)


148

Capitolo 6. Progettare spettri

attraverso la distribuzione non-normalizzata di Cauchy. Viene mostrato un periodo di ciascuna forma d’onda. In entrambe le situazioni vediamo, in effetti, il sesto armonico (il segnale portante) inviluppato in un pacchetto d’onda centrato al centro del ciclo, dove la fase della sinusoide `e zero. Cambiando la frequenza della sinusoide cambia la frequenza centrale della formante; cambiando la larghezza del pacchetto (la proporzione della forma d’onda durante la quale la sinusoide `e forte) cambia la larghezza di banda. Si noti che la funzione allungata della finestra di Hann `e zero all’inizio e alla fine del periodo, a differenza del pacchetto di waveshaping. La Figura 6.6 mostra come la forma della formante dipenda dal metodo di produzione. La stretched wavetable (parte (a) della figura) si comporta bene nell’intorno del picco, ma qualcosa di sbagliato inizia alla distanza della quarta parziale dal picco, al di l` a della quale si vedono i cosiddetti sidelobes: picchi extra spuri ad ampiezza pi` u bassa rispetto al picco centrale. Come prevede l’analisi nel paragrafo 2.4, l’intera formante, i sidelobes e tutto, si estende o si contrae in modo inverso a come il treno di impulsi viene contratto o allungato nel tempo. I primi sidelobes pi` u forti su entrambi i lati sono circa 32 dB pi` u bassi, in ampiezza, rispetto al picco principale. Ulteriori sidelobes decadono lentamente quando espressi in decibel; le ampiezze diminuiscono come il quadrato della distanza dal picco centrale in modo che il sesto sidelobe a destra, tre volte pi` u lontano che il primo dalla frequenza centrale, `e di circa venti decibel pi` u in basso. L’effetto di questi sidelobes `e spesso udibile come un leggero rumore nel suono. La forma di questa formante pu` o essere fatta arbitrariamente “grassa” (cio`e con larghezza di banda molto larga), ma c’`e un limite per quanto sia invece possibile farla sottile, in quanto il duty cycle della forma d’onda non pu`o superare il 100%. A questo duty cycle massimo la forza della formante scende a zero alla distanza di due armonici dal picco centrale. Se `e necessaria una larghezza di banda inferiore, le forme d’onda possono essere sovrapposte come descritto nel paragrafo 2.6. Le parti (b) e (c) della figura mostrano formanti generate utilizzando un waveshaping modulato ad anello, con funzioni di trasferimento gaussiana e di Cauchy. L’indice di modulazione `e due in entrambi i casi (lo stesso per la finestra di Hann della parte (a)) e la larghezza di banda `e paragonabile a quella dell’esempio di Hann. In questi esempi non ci sono sidelobes e, inoltre, l’indice di modulazione pu` o essere lasciato scendere fino a zero, fornendo una sinusoide pura; non esiste alcun limite inferiore sulla larghezza di banda. D’altra parte, poich´e la forma d’onda non raggiunge lo zero alle estremit`a di un ciclo, questo tipo di treno di impulsi non pu` o essere usato per creare una finestra su una wavetable arbitraria, come potrebbe invece fare il treno di impulsi Hann. L’esempio di Cauchy `e particolarmente utile per la progettazione di spettri, in quanto la forma della formante `e un triangolo isoscele perfetto, quando viene rappresentato in decibel. D’altra parte, l’esempio gaussiano raccoglie pi` u energia verso la formante e scende pi` u velocemente alle code, e cos`ı ha un suono pi` u pulito e offre una migliore protezione contro il foldover.


6.3. Modulazione ad anello mobile

149

6.2. PULSE TRAINS

100

155

Hann

80 60 40 20

100

Gaussian

80 60 40 20

100

Cauchy

80 60 40

amplitude (dB)

20

0 2 4 6

...

partial number

Figura 6.6: Spettri di tre treni di impulsi modulati ad anello: (a) la funzione Figure 6.6:di Spectra of three ring-modulated pulse trains: (a) theindice von Hann di finestra Hann, con duty cycle del 50% (corrispondente ad un di 2); window function, 50% duty cycle (corresponding to an index of 2); (b) a wave(b) un treno di impulsi waveshaping che utilizza una funzione di trasferimento shaping pulse train using a Gaussian transfer function; (c) the same, with a gaussiana; (c) lo stesso, ma con una funzione di trasferimento di Cauchy. Le Cauchy transfer function. Amplitudes are in decibels. ampiezze sono in decibel.


150 6.3. MOVABLE RING MODULATION

Capitolo 6. Progettare spettri 157

Figure 6.7: for a wavetable-based signal tunedsutowavetable, 1.5 times Figura 6.7: Waveform Forma d’onda per un segnale carrier portante basato the fundamental. are shown.Sono mostrati due periodi. sintonizzato a 1.5 Two volte periods la fondamentale. the left hand side would hold aad sinusoid (placedmobile symmetrically so that the phase 6.3 Modulazione anello is zero at the center of the wavetable). The right-hand-side wavetable would hold a Hannadesso or other window function. we desire the fundamental Ritorniamo al appropriate segnale portante, cercando deiIfmodi per renderlo pi` u confrequency to be ω, the formant center frequency to be ω , and the bandwidth to c trollabile. Ci piacerebbe soprattutto poter scorrere continuamente l’energia be ω , we set the “stretch” parameter to the center frequency quotient defined b spettrale su e gi` u in frequenza. Usare semplicemente una rampa sulla frequenza as ωc /ω, and the index of modulation to the scopo, bandwidth quotient, ωb /ω. non sadell’oscillatore portante non va bene a questo in quanto gli spettri The output signal is simply a sample of a cosine wave at the desired center ranno armonici, tranne quando la portante `e un multiplo intero della frequenza frequency, repeated at the (unrelated in general) desired period, and windowed fondamentale. to take out the discontinuities at period boundaries. Nell’approccio con la stretched wavetable, possiamo riuscirci semplicemenAlthough we aren’t able to derive this result yet (we will need Fourier analte campionando una sinusoide e trasportandola al “tono” desiderato. Il tono ysis), it will turn out that, in the main lobe of the formant, the phases are all trasposto non viene ascoltato come una periodicit`a poich´e la wavetable stessa zero at the center of the waveform (i.e., the components are all cosines if we conviene letta periodicamente alla frequenza fondamentale. Invece, la sinusoide `e sider the phase to be zero at the center of the waveform). This means we may trasposta come fosse un inviluppo spettrale. superpose any number of these formants to build a more complex spectrum and La Figura 6.7 mostra un segnale portante prodotto in questo modo, sintonizthe amplitudes of the partials will combine by addition. (The sidelobes don’t zato per produrre una formante centrata a 1.5 volte la frequenza fondamentale. behave so well: they are alternately of opposite sign and will produce cancellaIl segnale non ha una discontinuit` a palese alla frequenza di wraparound della tion patterns; but we can often just shrug them off as a small, uncontrollable, fase, ma ha una discontinuit` a nella pendenza, che, se non viene rimossa apresidual signal.) plicando un adeguato segnale di modulazione, comporterebbe delle componenti This method leads to an interesting generalization, which is to take a semolto udibili ad alte frequenze. quence of recorded wavetables, align all their component phases to those of Utilizzando possiamo fare una descrizione completa di come cosines, and usequesta them inidea place of the cosine function as the carrier signal. The utilizzare il diagramma a blocchi della Figura 6.3 per produrre una formanphase alignment is necessary to allow coherent cross-fading between samples so te desiderata. La envelope wavetablecan lookup sulsmoothly. lato sinistro produrrebbe una that the spectral change If, for example, we usesinusoide succes(posizionata modo chewe la fase zero al centro dellavocoder; wavetasive snippetssimmetricamente of a vocal sampleinas input, get asiastrikingly effective ble). La wavetable sul lato destro produrrebbe una Hann o un’altra appropriata see Section 9.6. funzione finestra. Se vogliamo che la frequenza fondamentale la frequenza Another technique for making carrier signals that can besia slidω,continuously centrale della formante sia ω e la larghezza di banda sia ω , dobbiamo impostac b frequency is up and down in frequency while maintaining a fundamental simply re il parametro “stretch” alla frequenza centrale quoziente definita come ωc /ω e to cross-fade between harmonics. The carrier signal is then: l’indice di modulazione alla larghezza di banda quoziente, ωb /ω. c(φ) =`ec(ωn) = p cos(kωn) q cos((k 1)ωn) cosinoidale alla Il segnale di uscita semplicemente un + sample di +un’onda frequenza centrale desiderata, ripetuta al periodo desiderato (non-correlato in where p + q = 1 and k is an integer, all three chosen so that genere) e ristretto a una finestra per eliminare le discontinuit`a agli estremi del periodo. (k + q) ∗ ω = ωc Bench´e non possiamo ancora trarre questo risultato (avremo bisogno dell’analisi di Fourier), si scoprir` a che, nel lobo principale della formante, le fasi sono tutte zero al centro della forma d’onda (cio`e, le componenti sono tutte coseni se consideriamo che la fase sia zero al centro della forma d’onda). Ci`o significa


6.3. Modulazione ad anello mobile

151

che possiamo utilizzare qualsiasi numero di queste formanti per costruire uno spettro pi` u complesso e le ampiezze delle parziali si combinano tramite somma (i sidelobes non si comportano cos`ı bene: sono alternativamente di segno contrario e producono schemi di cancellazione, ma spesso possiamo semplicemente rimuoverli come un piccolo e incontrollabile segnale residuo). Questo metodo porta ad una generalizzazione interessante, cio`e a prendere una sequenza di wavetables registrate, allineare tutte le fasi delle loro componenti a quelle dei coseni e utilizzarle al posto della funzione coseno come segnale portante. L’allineamento delle fasi `e necessario per consentire una dissolvenza incrociata coerente tra i samples in modo che l’inviluppo spettrale possa cambiare senza problemi. Se, ad esempio, utilizziamo frammenti successivi di un sample vocale come input, otteniamo un vocoder straordinariamente efficace; si veda il paragrafo 9.6. Un’altra tecnica per produrre segnali portanti, che possano essere mossi continuamente su e gi` u in frequenza pur mantenendo una frequenza fondamentale, `e semplicemente quella di usare una dissolvenza incrociata tra gli armonici. Il segnale portante `e quindi: c(φ) = c(ωn) = p cos(kωn) + q cos((k + 1)ωn) dove p + q = 1 e k `e un intero, tutti e tre scelti in modo che (k + q) · ω = ωc in modo che il centro spettrale della massa dei due coseni sia posto a ωc (si noti che impostiamo le ampiezze dei due coseni in modo che la loro somma sia uno invece di impostare la potenza totale a uno; facciamo questo perch´e il modulatore agir` a su essi coerentemente in fase). Per fare ci`o, basta semplicemente scegliere k e q come la parte intera e la parte frazionaria, rispettivamente, della frequenza centrale quoziente ωc /ω. Il modo pi` u semplice di realizzare un’interfaccia di controllo per questa tecnica di sintesi sarebbe quello di utilizzare rampe per aggiornare ω e ωc e quindi calcolare q e k come segnali audio da ω e ωc , uniformemente variabili nelle rampe. Stranamente, nonostante il fatto che k, p e q siano funzioni discontinue di ωc /ω, la portante c(φ) risulta variare in modo continuo con ωc /ω e quindi se la frequenza centrale desiderata ωc passa, tramite una rampa, da un valore a un altro valore, il risultato `e un cambiamento continuo nella frequenza centrale. Tuttavia, `e necessario un maggior lavoro se sono necessari cambiamenti discontinui nella frequenza centrale. Questa non `e una cosa irragionevole da desiderare, essendo analoga a cambiare la frequenza di un oscillatore in modo discontinuo. C’`e un ottimo modo per fare questo. Il trucco per l’aggiornamento di k e q `e quello di osservare che c(φ) = 1 ogni volta che φ `e un multiplo di 2π, indipendentemente dalla scelta di k, p e q finch´e p + q = 1. Quindi possiamo fare cambiamenti discontinui in k, p e q una volta per periodo (proprio quando la fase `e un multiplo di 2π), senza creare discontinuit`a nel segnale portante. Nel caso specifico della FM, se vogliamo, possiamo ora tornare indietro e modificare la formulazione originale a: p cos(nω2 t + r cos(ω1 t))+ +q cos((n + 1)ω2 t + r cos(ω1 t)).


152

Capitolo 6. Progettare spettri

Ci` o consente di aggiungere glissandi (udibili come dittonghi) alla tecnica originale di sintesi vocale basata sulla modulazione di fase di Chowning.

6.4

Phase-aligned formant generator (PAF)

Combinando il segnale portante di due coseni con il generatore di impulsi waveshaping, si ottiene il generatore di formante allineata in fase (phase-aligned formant generator), chiamato solitamente col suo acronimo PAF (il PAF `e oggetto di un brevetto del 1994 di propriet`a dell’IRCAM). La formula combinata `e x[n] = g(a sin(ωn/2)) [p cos(kωn) + q cos((k + 1)ωn)] . {z }| {z } | modulatore

portante

Qui la funzione g pu` o essere sia la funzione di waveshaping gaussiana o quella di Cauchy, ω `e la frequenza fondamentale, a `e un indice di modulazione che controlla la larghezza di banda e k, p e q controllano la frequenza centrale della formante. La Figura 6.8 mostra il PAF con un diagramma a blocchi, separato in un blocco per la generazione di fase, uno per la portante e uno per il modulatore. Il blocco per la generazione di fase emette un segnale a dente di sega alla frequenza fondamentale. Il modulatore `e fatto con un waveshaping standard, con una leggera torsione aggiunta. La formula per il segnale modulante, nel PAF, richiede in input una sinusoide a met`a della frequenza fondamentale, cio`e sin( ω2 ), e ci` o richiederebbe di utilizzare un phasor con frequenza met`a di quella fondamentale. Tuttavia, poich´e la funzione di waveshaping `e pari, possiamo sostituire con il valore assoluto della sinusoide:

ω

sin( )

2

che si ripete alla frequenza ω (il primo mezzo ciclo `e lo stesso del secondo). Possiamo calcolarlo semplicemente usando mezzo ciclo di una sinusoide come funzione di ricerca su wavetable (con fase che va da −π/2 a π/2), ed `e questa sinusoide rettificata che passiamo alla funzione di waveshaping. Anche se la funzione wavetable `e rappresentata da valori sia negativi che positivi (con range da −10 a 10), in realt`a stiamo utilizzando solo la parte positiva per la ricerca, da 0 a b, che `e l’indice di modulazione. Se l’indice di modulazione supera l’intervallo di input della tabella (qui impostato per fermarsi a 10, come esempio), l’indirizzo della ricerca della tabella dovrebbe essere tagliato. La tabella dovrebbe estendersi abbastanza sulla coda della funzione di waveshaping in modo che l’effetto del taglio non sia udibile. Il segnale portante `e una somma pesata di due coseni, le cui frequenze sono aumentate per moltiplicazione (rispettivamente per k e k + 1) e subiscono successivamente un’operazione di wrapping. In questo modo tutte le fasi di ricerca sono controllate dallo stesso oscillatore a dente di sega. Le quantit` a k, q e l’indice di wavetable b sono calcolate come mostrato nella Figura 6.9. Sono in funzione della frequenza fondamentale specificata, della frequenza centrale della formante e della larghezza di banda, che sono i parametri di partenza dell’algoritmo. La quantit`a p, non mostrata in figura, `e pari a 1 − q.


6.4. Phase-aligned formant generator (PAF)

153

6.4. PHASE-ALIGNED FORMANT (PAF) GENERATOR

159

phase generator fundamental frequency phase trigger S/H 1

0

carrier

modulator k WRAP 0

k+1 WRAP

1 b

0 10

-10

1 0 p

1 q

OUT

Figura 6.8:6.8: Diagramma a blocchi del PAF. Figure The PAF generator as ageneratore block diagram.


154 Capitolo 6. Progettare spettri 6.4. PHASE-ALIGNED FORMANT (PAF) GENERATOR 161 center frequency fundamental frequency

phase trigger S/H

bandwidth fundamental frequency

phase trigger S/H

WRAP

b

q k

Figure 6.9: Calculation of the time-varying parameters a (the waveshaping inFigura 6.9: Calcolo dei parametri, variabili nel tempo, a (l’indice di dex), k, and q for use in the block diagram of Figure 6.8. waveshaping), k e q, per l’utilizzo nel diagramma a blocchi di Figura 6.8. the Come center descritto partial’s amplitude. However, if using the PAF to generate formants nel paragrafo precedente, le quantit` a k, p, e q dovrebbero with specified peak amplitudes, the output should be multiplied by 1 b (ore cambiare solo nei punti di wraparound della fase, cio`e a periodi di 2π/ω. +Poich´ even, if necessary, a better approximation of the correction factor, whose exact il calcolo di k, p e q dipende dal valore del parametro ω, ne consegue che ω value on the waveshaping function). This amplitude should stessadepends deve essere aggiornata solo quando la fase `e un multiplocorrection di 2π; altrimenti be ramped, not sampled-and-held. una modifica di ω potrebbe inviare la frequenza centrale (k + q)ω ad un valore Since expansion the waveshaping (modulator) signal consists of alltutti coerrato perthe una frazione of (comunque molto udibile) di un periodo. In effetti, sine termsdei (i.e., since they all have initial phase zero),con as do components i calcoli parametri devono essere sincronizzati la the fasetwo dell’oscillatore of the carrier, it follows from the cosine product formula that the components originale. of the result as well. This that any number of PAF genUna voltaare cheallsicosines ha il controllo della means fase dell’oscillatore, l’aggiornamento erators, they are made to sharedithe same oscillator for phase generation, will della suaiffrequenza `e un esempio feedback, che in generale significa ri-utilizzare all be in phase and combining thesuoi suminputs. of the individual So l’output di qualsiasi processo them come gives uno dei Quando sispectra. elaborano we can make multiple-formant version di as campionamento shown in Figure fissa 6.10. (come stiamo segnali audioadigitali a una frequenza Figure non 6.12 `eshows a possibleavere output of a pair of formants generated thisinput, way; facendo), mai possibile l’output corrente del processo come the first formant is centered 3 and 4,ancora and the second poich´ e nel momento in cui ne halfway avremmobetween bisogno,partials non l’abbiamo calcolato. at partial che 12, possiamo with lowersperare amplitude and bandwidth. Thecampione Cauchy waveshaping Il meglio `e utilizzare il precedente in output – function used, whichun makes linearly spectra in con dB).strutture The two in effetti,was aggiungendo campione di sloped ritardo. Negli(viewed ambienti superpose additively, the spectral envelopediventa curves pi` smoothly from one a blocchi (come Max,soPdthat e Csound) la situazione u complicata, ma formant to the other. The lower formant capitolo also adds its own reflection about aspettiamo a discuterne fino al prossimo (e to semplicemente eliminiamo the vertical axis, that it appears il problema negli so esempi alla fine di slightly questo).curved upward there. L’ampiezza del picco nelloif desired spettro to delmake generatore PAF spectra `e di circa The PAF generator cancentrale be altered inharmonic by 1/(1 +the b); partials in altreupward parole, or`e downward vicino all’unit` a quando To l’indice b `eadd pi` ua piccolo sliding in frequency. do this, second di uno, etodiminuisce inversamente crescere b. toPer b minori di oscillator the phase of both carrieral cosines, butdinot the valori phase di of the modulacirca 10, l’intensit` a dell’output non varia notevolmente, poich´e l’introduzione di altre parziali, anche a basse ampiezze, compensa la diminuzione dell’ampiezza della parziale centrale. Tuttavia, se si utilizza il PAF per generare formanti


162

CHAPTER 6. DESIGNER SPECTRA

6.4. Phase-aligned formant generator (PAF)

155

fundamental frequency

phase generation

k1, p1, q1

b1

modulator 1

carrier 1

b2

modulator 2

k2, p2, q2

carrier 2

OUT

Figure 6.10: diagram for making a spectrumuno with two formants the Figura 6.10: Block Diagramma a blocchi per realizzare spettro con due using formanti PAF generator. utilizzando il generatore PAF.

con ampiezze di picco specificate, l’output deve essere moltiplicato per 1 + b (o anche, se necessario, per una migliore approssimazione del fattore di correzione, il cui valore esatto dipende dalla funzione di waveshaping). Questa correzione dell’ampiezza deve essere fatta tramite una rampa, e non con la tecnica del sample-and-hold. Poich´e l’espansione del segnale (modulatore) di waveshaping `e costituita da termini che sono tutti coseni (vale a dire, poich´e hanno tutti fase iniziale pari a zero), cos`ı come le due componenti della portante, ne deriva, dalla formula del prodotto del coseno, che anche le componenti risultanti sono tutte coseni. Ci`o significa che qualunque numero di generatori PAF, se condividono lo stesso oscillatore per la generazione di fase, saranno tutti in fase e combinandoli otterremo la somma dei singoli spettri. Quindi possiamo fare una versione multiformante come mostrato in Figura 6.10. La Figura 6.11 mostra un possibile output di una coppia di formanti generati in questo modo; la prima formante `e centrata a met`a tra i parziali 3 e 4 e la seconda `e al parziale 12, con minore ampiezza e minore larghezza di banda. ` stata utilizzata la funzione di waveshaping di Cauchy, che produce spettri E linearmente inclinati (visualizzati in dB). Le due formanti si sovrappongono


6.5. EXAMPLES

163

156

100

Capitolo 6. Progettare spettri

.

80

amplitude (dB)

60 40 20

0 2 4 6

...

partial number

Figura 6.11: Spettro ottenuto daaun generatore PAF due formanti.. Figure 6.11: Spectrum from two-formant PAF agenerator. in modo che l’inviluppo spettrale curvi da una tionadditivamente, portion of the diagram, nor to the controlling phase of regolarmente the sample-and-hold formante inferiore aggiunge la propria riflessione units. It turnsall’altra. out thatLa theformante sample-and-hold strategy anche for smooth parameter upsull’asse verticale, in modo che l’inviluppo spettrale appaia leggermente curvo dates still works; and furthermore, multiple PAF generators sharing the same verso l’alto. portion will still be in phase with each other. phase generation Il generatore pu` o essere modificato, se desiderato, spettri inarThis technique PAF for superposing spectra does not workper as fare predictably for monici facendo scorrere le parziali verso l’alto o verso il basso in frequenza. Per phase modulation as it does for the PAF generator; the partials of the phase fare questo, aggiungiamo un secondo oscillatore alla fase entrambi i coseni modulation output have complicated phase relationships anddithey seem difficult portanti, ma non alla fase della parte di modulazione del diagramma, n´e alla fase to combine coherently. In general, phase modulation will give more complicated di controllo dell’unit` a di sample-and-hold. Risulta che la strategia di samplepatterns of spectral evolution, whereas the PAF is easier to predict and turn to and-hold per l’aggiornamento regolare dei parametri funziona ancora; e inoltre, specific desired effects. i generatori multipli PAF che condividono la stessa porzione di generazione di fase saranno ancora in fase l’uno con l’altro. tecnica per la sovrapposizione di spettri non funziona, come prevedi6.5bile,Questa Examples per la modulazione di fase come invece fa per il generatore PAF; le parziali dell’output della modulazione di fase hanno complesse relazioni di fase e semWavetable pulse train coerentemente. In generale, la modulazione di fase brano difficili da combinare dar` a schemi pi` u complicati evoluzione spettrale, mentre il pulse PAF `etrain pi` u using facile Example F01.pulse.pd (Figure di 6.13) generates a variable-width da prevedere e si rivolge a specifici effetti desiderati. stretched wavetable lookup. Figure 6.14 shows two intermediate products of the

patch and its output. The patch carries out the job in the simplest possible way, placing the pulse at phase π instead of phase zero; in later examples this will 6.5 by Esempi be fixed adding 0.5 to the phase and wrapping. The initial phase is adjusted to run from -0.5 to 0.5 and then scaled by a Trenoofdiat impulsi multiplier least one,wavetable resulting in the signal of Figure 6.14 (part a); this corresponds to the output of the *~ object, fifth from bottom in the patch L’esempio F01.pulse.pd 6.12) treno di impulsi a larghezza shown. The graph in part (Figura (b) shows thegenera result un of clipping the sawtooth wave variabile usando stretched wavetable lookup. La Figura 6.13 mostra due proback to the interval between −0.5 and 0.5, using the clip~ object. If the scaling dotti intermedi della patch ed i suoi outputs. La patch svolge il lavoro nel multiplier were at its minimum (one), the sawtooth would only range from -0.5 modo pi` u semplice possibile, ponendo l’impulso a fase π anzich´e a fase zero; negli esempi successivi questo sar` a stabilito aggiungendo 0.5 alla fase e facendo successivamente wrapping.


6.5. Esempi

157

6.5. EXAMPLES

165

0

<-frequency

phasor~ -~ 0.5 0-centered sawtooth 0

<-index

/ 10 ...in tenths pack 0 50 line~ smooth it +~ 1 add 1 *~

increase amplitude of sawtooth

clip~ -0.5 0.5

clip to range -1/2 to 1/2

cos~ cosine wave lookup (-1/2 and 1/2 give -1) +~ 1

add one (range now from 0 to 2)

*~ 0.5 ...and now from 0 to 1 | (OUT)

Figura 6.13: 6.12: Example L’esempio della patch F01.pulse.pd, che sintetizza treno di Figure patch F01.pulse.pd, which synthesizes a pulseun train using impulsi utilizzando stretched wavetable lookup. stretched wavetable la lookup.


166

CHAPTER 6. DESIGNER SPECTRA

158

Capitolo 6. Progettare spettri

phase (a) 0.5 -0.5

clipped 0.5

(b)

-0.5 output 1 (c)

0

Figure signals Figure the result of Figura 6.14: 6.13: Intermediate Segnali audioaudio intermedi da from Figura 6.12: 6.13: (a) il (a) risultato di molmultiplying the phasor by the “index”; (b) the same, clipped to lie between -0.5 tiplicare il phasor per un “indice”; (b) lo stesso, ristretto fra −0.5 e 0,5; 167 (c) 6.5. EXAMPLES and 0.5; (c) the output. l’output. RING MODULATED PULSE TRAINS

0

<-- bandwidth

pd pulse-train 0 *

pulse train generator from before

<-- carrier frequency as multiple of fundamental r freq

osc~ carrier oscillator *~ | (OUT)

Figure 6.15: Excerpt from example F05.ring.modulation.pd combining ring Figura 6.14:with Estratto dall’esempio che combina la modulation a stretched wavetableF05.ring.modulation.pd pulse generator modulazione ad anello con un generatore di impulsi da stretched wavetable. the carrier signal is a broken sinusoid. Since its phase is the fundamental phase times the center frequency quotient, the sample-to-sample phase increment is the same as for a sinusoid at the center frequency. However, when the phase wraps around, the carrier phase jumps to a different place in the cycle, as was illustrated in Figure 6.7. Although the bandwidth quotient ωb /ω must be at least one, the center frequency quotient ωc /ω may be as low as zero if desired.

Two-cosine carrier signal


6.5. Esempi

159

La fase iniziale viene regolata per muoversi tra −0.5 e 0.5 e poi scalata con un moltiplicatore il cui valore `e almeno 1, determinando il segnale di Figura 6.13 (parte a); questo corrisponde all’output dell’oggetto ∗ ∼, il quinto dal basso nella patch mostrata. Il grafico nella parte (b) mostra il risultato di ritagliare l’onda a dente di sega nell’intervallo tra −0.5 e 0.5, usando l’oggetto clip∼. Se il moltiplicatore riscalante era al suo minimo (uno), il range dell’onda a dente di sega sarebbe comunque solo da −0.5 a 0.5 ed il wrapping non avrebbe alcun effetto. Per qualsiasi valore del moltiplicatore riscalante maggiore di uno, l’output del clipping starebbe sul valore −0.5, quindi sale a 0.5, infine sta su 0.5. Pi` u alto `e il moltiplicatore, pi` u rapidamente la forma d’onda sale e pi` u tempo spende negli estremi in basso e in alto. Successivamente l’oggetto cos∼ converte questa forma d’onda in un impulso. Gli inputs pari a −0.5 e 0.5 vanno entrambi a −1 (sono separati da un ciclo); al punto centrale della forma d’onda, l’input `e 0 e l’output `e quindi 1. L’output, quindi, si trova a −1, traccia un ciclo completo della funzione coseno, poi torna indietro e si ferma a −1. La percentuale di tempo che la forma d’onda spende percorrendo la funzione coseno `e divisa per il moltiplicatore; quindi `e il 100% per un moltiplicatore di 1, 50% per 2 e cos`ı via. Infine, l’output degli impulsi viene regolato per avere un range tra 0 e 1; questo `e illustrato nella parte (c) della figura.

Generatore semplice di formante I tre esempi successivi mostrano il suono della larghezza variabile dell’impulso, visualizzano il suo spettro e mostrano il contrasto col generatore di impulsi waveshaping. Saltando all’esempio F05.ring.modulation.pd (Figura 6.14), mostriamo il modo pi` u semplice di combinare il generatore di impulsi con un oscillatore modulante ad anello per fare una formante. Il treno di impulsi dell’esempio precedente `e contenuto nella sottopatch pd pulse-train. Questo viene moltiplicato per un oscillatore la cui frequenza `e regolata come un multiplo della frequenza fondamentale. Se il multiplo `e un intero, si ottiene un suono armonico. Non viene fatto alcun tentativo di controllare le fasi relative delle componenti del treno di impulsi e della sinusoide portante. L’esempio seguente, F06.packets.pd (Figura 6.15), mostra come combinare il treno a impulsi, ottenuto con stretched wavetable, con una sinusoide campionata per realizzare formanti mobili, come descritto nel paragrafo 6.3. Il generatore di impulsi `e come prima, ma adesso il segnale portante `e una sinusoide rotta. Poich´e la sua fase `e la fase fondamentale moltiplicata per la frequenza centrale quoziente, l’incremento di fase campione-a-campione `e lo stesso di una sinusoide alla frequenza centrale. Tuttavia, quando la fase `e nei punti di wraparound, la fase portante salta ad una posizione differente nel ciclo, come illustrato nella Figura 6.7. Anche se la larghezza di banda quoziente ωb /ω deve essere almeno uno, la frequenza centrale quoziente ωc /ω pu`o arrivare ad essere zero, se lo si desidera.

Segnale portante a due coseni L’esempio F08.two.cosines.pd (Figura 6.16) mostra come creare un segnale portante che fa una dissolvenza incrociata tra gli armonici per creare frequenze centrali variabili con continuit`a. La frequenza centrale quoziente appare come


160 168

Capitolo 6. Progettare spettri CHAPTER 6. DESIGNER SPECTRA

(frequency) | phasor~ 100 -~ 0.5 bandwidth (as multiple of fundamental) | *~

center frequency (as multiple of fundamental) | *~ magnified phase signal

clip~ -0.5 0.5 cos~ raised cosine +~ 1 pulse *~ 0.5 *~ | (OUT)

cos~ carrier

Figure stretched make a formant with movFigura 6.16: 6.15: Using Utilizzo di unawavetable sintesi disynthesis stretchedtowavetable per formare una able center frequency. formante con frequenza centrale mobile. center frequency output dell’oggetto line∼. Questo `eto separato nella sua parte frazionaria (uti(relative fundamental) fundamental lizzando l’oggetto wrap∼)| e la sua parte intera (sottraendo la parte frazionaria frequency Questi due line~ dall’originale). valori sono etichettati con q e k per uniformarsi alla | trattazione del paragrafo 6.3. wrap~ the fractional part "q" phasor~ La fase – un onda a dente di sega alla frequenza fondamentale – viene moltisubtract to get the l’onda integer part "k" plicata sia per k che per k-~+ 1 (quest’ultimo aggiungendo a dente di sega originaria al precedente) e vengono presi i coseni di entrambi; essi sono quindi a +~fondamentale multiply phase k and k+1 k e k + 1 volte la *~ frequenza e non hannobydiscontinuit` a nei punti di wraparound dellacos~ fase. I cos~ seguentisynthesize oggetti della patch calcolano la"c1" somma pesata two partials and "c2" pc1 + qc2 , dove c1 , c2 sono le due sinusoidi e p = 1 − q, tramite un’espressione equivalente, c1 +q(c2 −c1-~ ). Questo ac1 il segnale portante, a frequenza mobile, c2 ci-d` richiesto. *~ (non q *mostrato (c2 - c1) L’esempio F09.declickit.pd qui) mostra come, aggiungendo un oggetto samphold∼ dopo l’oggetto line∼ che la frequenza centra+~ q * c2 + (1-q) *controlla c1 le, `e possibile evitare discontinuit` a nel segnale di uscita anche se la frequenza | centrale desiderata cambia (OUT)in modo discontinuo. Nell’esempio la frequenza centrale quoziente alterna tra i valori 4 e 13.5. Con tempi di rampa inferiori a circa 20 msec ci sono artefatti udibili quando si usa solo l’oggetto line∼ che scompaiono quando viene aggiunto l’oggetto samphold∼ svantaggio applicare Figure 6.17: Cross-fading between sinusoids to make(uno movable center di frequencies. il sample-and-hold alla frequenza quoziente `e che, per frequenze fondamentali molto basse, le modifiche possono essere percepite come passi discreti. Quindi, in situazioni in cui la frequenza fondamentale `e bassa e la frequenza centrale non deve cambiare molto rapidamente, pu`o essere meglio ignorare la parte di


+~ 1 *~ 0.5

cosine pulse cos~

*~ | (OUT)

carrier

6.5. Esempi Figure 6.16: Using stretched wavetable synthesis to make a formant with mov- 161 able center frequency. center frequency (relative to fundamental) | line~

fundamental frequency | phasor~

wrap~ the fractional part "q" -~

subtract to get the integer part "k"

*~

+~

multiply phase by k and k+1

cos~

cos~

synthesize two partials "c1" and "c2"

-~

c2 - c1 *~

+~ | (OUT)

q * (c2 - c1)

q * c2 + (1-q) * c1

Figure sinusoids to make movable center frequencies. Figura6.17: 6.16:Cross-fading Dissolvenzabetween incrociata tra sinusoidi per creare frequenze centrali mobili.

sample-and-hold). I due esempi successivi mostrano l’utilizzo di una portante fatta con oscillatori in dissolvenza incrociata come parte della tecnica classica di modulazione di fase a due operatori. Lo stesso oscillatore modulante viene aggiunto separatamente alle fasi dei due coseni. Gli spettri risultanti possono essere fatti per muoversi su e gi` u in frequenza, ma a causa delle complicate relazioni di fase tra i picchi vicini nello spettro della modulazione di fase, indipendentemente da quanto si allineino tali spettri non si pu`o mai evitare di ottenere le cancellazioni di fase dove si sovrappongono.

Il generatore PAF L’esempio F12.paf.pd (Figura 6.17) `e una realizzazione del generatore PAF descritto nel paragrafo 6.4. Gli ingressi di controllo specificano la frequenza fondamentale, la frequenza centrale e la larghezza di banda, tutte in unit`a “MIDI”. I primi passaggi nella realizzazione sono quelli per dividere la frequenza centrale per la fondamentale (per ottenere la frequenza centrale quoziente) e la larghezza di banda per la fondamentale per ottenere l’indice di modulazione per il waveshaper. La frequenza centrale quoziente subisce un processo di sample-and-hold in modo che sia aggiornata solo al periodo della fondamentale. Un oscillatore (l’oggetto phasor∼) `e attivo alla frequenza fondamentale. Questo viene utilizzato sia per controllare un oggetto samphold∼ che sincronizza gli aggiornamenti della frequenza centrale quoziente (etichettata come “C.F. relative to fundamental” nella figura) e per calcolare le fasi per entrambi gli oggetti cos∼ che operano come mostrato in precedenza nella Figura 6.16. La parte di waveshaping della patch utilizza un mezzo periodo di sinusoide come funzione di ricerca (per compensare il raddoppio di frequenza a causa


170

CHAPTER 6. DESIGNER SPECTRA

162

Capitolo 6. Progettare spettri

center frequency 0

fundamental (MIDI units)

mtof

0

pack 0 50

bandwidth

mtof

line~

0

expr 1/$f1

mtof

*~ phasor~

pack 0 50

C.F. relative to fundamental samphold~ -~

*~

wrap~

+~

line~

*~ 0.5

divide by fundamental

-~ 0.25 cos~ *~

*~ 25 range for table

cos~ cos~ +~ 100

-~

*~

offset to middle of table

tabread4~ bell-curve +~

*~

waveshaper

*~ ring mod | (OUT)

Figura 6.17: Algoritmo di sintesi performant la formante allineata in fase (PAF). Figure 6.18: The phase-aligned (PAF) synthesis algorithm. della simmetria della funzione di ricerca). Per ottenere un mezzo ciclo della funzione seno moltiplichiamo la fase per 0.5 e sottraiamo 0.25, in modo che la fase regolata vada da −0.25 a +0.25, una volta per periodo. Questo esegue la scansione della met` a positiva del ciclo definito dall’oggetto cos∼. L’ampiezza della mezza sinusoide viene quindi regolata da un indice di modulazione (che `e proprio la larghezza di banda quoziente ωb /ω). La tabella (“bell-curve”) contiene una curva Gaussiana non-normalizzata campionata da −4 a 4 su 200 punti (25 punti per unit`a), quindi il centro della tabella, al punto 100, corrisponde al picco centrale della curva a campana . Al di fuori dell’intervallo da −4 a 4 la curva Gaussian `e trascurabilmente piccola. ` La Figura 6.18 mostra come viene preparata la wavetable Gaussiana. E necessario un nuovo oggetto di controllo: untill : quando l’ingresso “start” a sinistra riceve un bang, emette bang sequenziali (senza intervalli di tempo tra essi) in modo iterativo, finch´e l’entrata “stop” a destra non riceve un bang. Il messaggio “bang” di arresto deve prove-


6.5. EXAMPLES Esempi 6.5.

163 171

bell-curve

t b b 0

until f sel 199

+ 1 t f f

expr ($f1-100)/25 expr exp(-$f1*$f1) tabwrite bell-curve

Figura 6.18: Riempimento della wavetable per la Figura 6.17.

Figure 6.19: Filling in the wavetable for Figure 6.18. nire in qualche modo dall’uscita dell’oggetto until; altrimenti, l’uscita invier`a per sempre messaggi “bang”, congelando qualsiasi altro oggetto che potrebbe until : When the left, “start” inlet is banged, output sequential bangs (with interrompere il ciclo. no elapsed time between them) iteratively, until the right, “stop” inlet is banged. Per come viene usato qui, un ciclo guidato da un oggetto until conta da 0 The stopping “bang” message must originate somehow from the until object’s a 199, compresi. Il conteggio del ciclo viene mantenuto dagli oggetti “f” e “+ outlet; otherwise, thealimenta outlet will sendMa “bang” messages forever, freezing 1”, ognuno dei quali l’altro. poich´ e l’uscita dell’oggetto “+ 1”’out va any other object which could break the loop. all’entrata destra di “f”, il suo risultato (uno pi` u grande) uscir`a da “f” solo used here, loopriceve driven an da until object counts from 0 to inclula As prossima voltaache un by bang until. Quindi ogni bang da199, until sive. The loop count di is uno. maintained by the “f” and “+ 1” objects, each of which incrementa il valore feedsL’ordine the other. But since the “+ 1” object’s outputl’oggetto goes to “t thebright inlet of in cui viene avviato il loop `e importante: b” supethe “f”, its result (one emerge “f” the nextzero time it riore (abbreviazione pergreater) “trigger will bangonly bang”) deve from primathe inviare il valore “f”, cos` inizializzandolo, e poi impostare l’oggetto until ad the inviare bangs, isad banged byı “until”. So each bang from “until” increments value by one. incrementando valore,the finoloop a quando non si ferma. Per il The order inil which is started matters: the arrestarlo upper “t quando b b” object valore raggiunge 199, un oggetto select controlla il valore e, quando vede la (short for “trigger bang bang”) must first send zero to the “f”, thus initializing manda un bang all’entrata until. it,corrispondenza, and then set the until object sending “stop” bangs,dell’oggetto incrementing the value, until Nel frattempo, per ogni numero da 0 a 199 che esce dall’oggetto “f”, creiamo stopped. To stop it when the value reaches 199, a select object checks the una coppia ordinata di messaggi per l’oggetto tabwrite. Il primo, all’ingresso value and, when it sees the match, bangs the “stop” inlet of the until object. destro, invia l’indice stesso, da 0 a 199. Per l’ingresso sinistro, il primo oggetto Meanwhile, for every number 0 toprecedenza 199 that comes “f”edobject, expr regola l’indice che va da −4from a 4 (in variavaout da of 0 the a 199) il we create an ordered pair of messages to the tabwrite object. First, at right, secondo calcola la funzione gaussiana. goes In thequesta indexpatch itself,non from 0 to 199. Then for the left inlet, first expr object abbiamo affrontato completamente la the questione dell’agadjusts the index range from -4 to quoziente 4 (it previously ranged from 0 to 199) giornamento dellatofrequenza centrale nei momenti appropriati. Ogni and the second one evaluates Gaussianportante, function.lo step sample-and-hold ritarvolta che viene modificatathe la frequenza this patch we have not fully of updating the center daIn correttamente l’aggiornamento deladdressed quoziente. the Ma issue se invece, o in aggiunta, la stessa fondamentale bruscamente, allora,Whenever per una frazione di un frequency periodo, is frequency quotient atcambia the appropriate times. the carrier la frequenza dell’oggetto phasor∼ quoziente non sono non changed the sample-and-hold stepe il properly delays the sincronizzati. update of thePdquotient. consente all’output di samphold∼ la retroazione nell’input di phasor∼ senza But if, instead or in addition, the fundamental itself changes abruptly, then for ritardo (vedere il capitolo successivo) non esisteare un out a l’inclusione fraction ofdia un period theesplicito phasor~ object’s frequency and thee quotient modo semplice per modificare la patch per risolvere questo problema. of sync. Pd does not allow the samphold~ output to be connected back into the Supponendo che abbiamo sincronizzato, in qualche modo, l’input dell’og-


164

Capitolo 6. Progettare spettri

getto phasor∼ con i suoi punti di wraparound, quindi dovremmo fare altrettanto per il quoziente larghezza di banda/fondamentale sul lato destro della patch. Nello scenario corrente, tuttavia, non c’`e alcun problema ad aggiornare continuamente tale valore. Una soluzione pratica a questo problema di aggiornamento potrebbe essere semplicemente la riscrittura dell’intera patch in C come classe Pd; questo si traduce anche nell’utilizzo di molto meno tempo della CPU rispetto alla patch in figura, e rappresenta la soluzione pi` u pratica in generale – finch´e non si desidera sperimentare la creazione di abbellimenti o altre modifiche all’algoritmo. Tali abbellimenti potrebbero includere: aggiungere uno spostamento inarmonico verso l’alto o verso il basso nelle parziali; permettere di passare ad aggiornamenti della frequenza centrale in modo continuo o sample-and-hold; aggiungere controlli separati di guadagno per parziali pari e dispari; introdurre grani modulando irregolarmente la fase; permettere miscele di due o pi` u funzioni di waveshaping; o fare attacchi percussivi pi` u nitidi allineando la fase dell’oscillatore con la temporizzazione di un generatore di inviluppo di ampiezza. Un dettaglio finale sull’ampiezza `e necessario: poich´e l’ampiezza della parziale pi` u forte diminuisce approssimativamente come 1/(1 + b) dove b `e l’indice di modulazione, `e auspicabile a volte (ma non sempre) correggere l’ampiezza in output moltiplicando per 1 + b. Questa `e solo un’opzione se b `e aggiornato senza salti (come in questo esempio), ma non quando viene aggiornato tramite sample-and-hold. Una situazione in cui ci`o `e appropriato `e quando si vuole simulare corde pizzicate (impostando la frequenza centrale come la fondamentale, a partire da un indice di modulazione alto e abbassandolo esponenzialmente); sarebbe opportuno ascoltare la caduta, e non un aumento, della fondamentale in ampiezza durante il decadimento della corda.

Stretched wavetables Invece di usare la tecnica del waveshaping, `e possibile anche creare formanti utilizzando la tecnica delle stretched wavetables, come dimostrato nell’esempio F14.wave.packet.pd (non mostrato qui). La tecnica `e sostanzialmente quella vista nell’esempio B10.sampler.overlap.pd (descritta nel paragrafo 2.6), con una ricerca su coseno invece di quella pi` u generale su wavetable, ma con l’aggiunta di un controllo per impostare il duty cycle degli inviluppi di ampiezza. Le unit`a di misura sono regolate per essere compatibili con quelle dell’esempio precedente.

Esercizi 1. Un treno a impulsi `e costituito da finestre di Hann (coseni), da estremo a estremo, senza alcun gap tra essi. Qual `e lo spettro risultante? 2. Quali devono essere i valori di k e q (nella terminologia di Figura 6.8) per sintetizzare una formante alla frequenza centrale di 2000 Hertz e frequenza fondamentale di 300 Hertz? 3. Come deve essere modificato il diagramma a blocchi della Figura 6.8 per produrre solo armonici dispari?


Capitolo 7

Spostamenti temporali e ritardi Alle 5:00 di un qualche pomeriggio, fate partire la vostra registrazione preferita di Ramones string quarter number 5. Il sabato successivo, riproducete la stessa registrazione alle 5:00:01, un secondo pi` u tardi. Le due riproduzioni idealmente dovrebbe essere identiche. Spostare l’intera cosa di un secondo (o, se vogliamo, di qualche giorno e un secondo) non ha alcun effetto fisico sul suono. Ma supponiamo ora che l’abbiate riprodotta alle 5:00 e alle 5:00:01 dello stesso giorno (in due diversi sistemi di riproduzione, poich´e la musica dura molto pi` u di un secondo). Ora il suono `e molto diverso. La differenza, qualunque essa sia, non risiede, chiaramente, in nessuna delle due riproduzioni individuali, ma piuttosto nell’interferenza tra le due. Questa interferenza pu`o essere percepita in almeno quattro modi diversi: Canoni: combinando due copie di un segnale con un intervallo di tempo sufficiente per il segnale di cambiare in modo apprezzabile, potremmo sentire i due come flussi musicali separati, in effetti confrontando un segnale con lo stesso precedente. Se il segnale `e una melodia, l’intervallo di tempo pu`o essere paragonabile alla lunghezza di una o pi` u note. Echi: a spostamenti temporali tra circa 30 millisecondi e circa un secondo, la copia successiva del segnale pu`o suonare come un’eco del precedente. Un eco pu` o ridurre l’intelligibilit`a del segnale (soprattutto se si tratta di un parlato), ma di solito non cambier`a la “forma” globale delle melodie o delle frasi. Filtraggio: a spostamenti temporali sotto i 30 millisecondi, le copie sono troppo vicine nel tempo per essere percepite separatamente, e l’effetto dominante `e che alcune frequenze sono esaltate e altre sono soppresse. Questo modifica l’inviluppo spettrale del suono. Qualit` a della stanza alterata: se la seconda copia viene riprodotta ad un volume pi` u basso della prima, e soprattutto se aggiungiamo pi` u copie ritardate ad ampiezze ridotte, il risultato pu`o imitare gli echi che si presentano in una stanza o in altri spazi acustici. 165


166

Capitolo 7. Spostamenti temporali e ritardi

Il suono di una determinata disposizione di copie ritardate di un segnale pu`o combinare due o pi` u di questi effetti. Matematicamente, l’effetto di uno spostamento temporale su un segnale pu`o essere descritto come un cambio di fase in ciascuna delle componenti sinusoidali del segnale. Lo spostamento di fase di ciascuna componente `e diverso a seconda della sua frequenza (nonch´e della quantit`a di spostamento temporale). Nel resto di questo capitolo considereremo spesso sovrapposizioni di sinusoidi a fasi diverse. Finora siamo stati contenti di utilizzare, nella nostra analisi, sinusoidi a valori reali, ma in questo e nei prossimi capitoli le formule diventeranno pi` u complicate e avremo bisogno di strumenti matematici pi` u potenti per gestirle. In una sezione preliminare di questo capitolo svilupperemo le basi necessarie.

7.1

Numeri complessi

I numeri complessi sono scritti come: Z = a + ib √ dove a e b sono numeri reali e i = −1 (in questo libro usiamo le lettere maiuscole romane Z per indicare i numeri complessi. I numeri reali sono indicati con lettere minuscole romane o greche, ad eccezione di indici interi, normalmente scritti come M o N ). Poich´e un numero complesso ha due componenti reali, usiamo un piano cartesiano (al posto di una linea numerica) per illustrarlo, come mostrato in Figura 7.1. Le quantit` a a e b sono chiamate rispettivamente la parte reale e la parte immaginaria di Z, scritte come: a = re(Z), b = im(Z). Se Z `e un numero complesso, il suo modulo (o valore assoluto o magnitudine), indicato con |Z|, `e proprio la distanza, nel piano, del punto (a, b) dall’origine: p |Z| = (a2 + b2 )

ed il suo argomento, indicato con ∠(Z), `e l’angolo tra l’asse positivo a ed il segmento congiungente l’origine ed il punto (a, b): b ∠(Z) = arctan . a Se conosciamo il modulo e l’argomento di un numero complesso (li chiameremo r e θ) possiamo determinare le sue parti reale e immaginaria: a = r cos(θ), b = r sin(θ). Un numero complesso pu` o essere scritto in termini delle sue parti reale e immaginaria, a e b, come Z = a + ib (questa prende il nome di forma rettangolare) oppure, in alternativa, in forma polare, in termini di r e θ: Z = r · [cos(θ) + i sin(θ)].


7.1. Numeri complessi 176

167 CHAPTER 7. TIME SHIFTS AND DELAYS

b

Z=a+bi

|Z|

arg(Z) a

Figure thepiano complex plane. Gli Theassi axessono are per for la theparte real reale part Figura7.1: 7.1: A Unnumber, numero,Z,Z,innel complesso. aa and the imaginary part b. e la parte immaginaria b. The sound of a given arrangement of delayed copies of a signal may combine Le forme rettangolari e polari sono intercambiabili; le equazioni sopra mostrano two or more of these affects. come calcolare a e b da r e θ e viceversa. Mathematically, the effect of a time shift on a signal can be described as a Il motivo utilizziamo i numeri complessiThe nella musica eletphase change principale of each of per the cui signal’s sinusoidal components. phase shift of tronica ` e perch´ e magicamente automatizzano i calcoli trigonometrici. Dobbiamo each component is different depending on its frequency (as well as on the amount spesso perofparlare del cambiamento di fase di unsuperpositions segnale audio of time sommare shift). Inangoli the rest this chapter we will often consider all’avanzare del tempo (o quando subisce uno spostamento temporale, come in of sinusoids at different phases. Heretofore we have been content to use realquesto capitolo). Si scopre che, se si moltiplicano due numeri complessi, l’argovalued sinusoids in our analyses, but in this and later chapters the formulas will mento del prodotto `e la somma degli argomenti deipowerful due fattori. Per vedere tools come become more complicated and we will need more mathematical questo accada, moltiplichiamo due numeri Z e Z , scritti in forma polare: 1 2 to manage them. In a preliminary section of this chapter we will develop the additional background needed. Z1 = r1 · [cos(θ1 ) + i sin(θ1 )]

7.1

Z2 = r2 · [cos(θ2 ) + i sin(θ2 )] Complex numbers

Complex numbers are written as: ottenendo: Z 1= a + bi Z1 Z2 = r1 r2 · [cos(θ ) cos(θ 2 ) − sin(θ1 ) sin(θ2 )+ √ −1. (In2 ))]. this book we’ll use the where a and b are real numbers and2 )i+=cos(θ +i(sin(θ 1 ) cos(θ 1 ) sin(θ upper case Roman letters such as Z to denote complex numbers. Real numbers appear as lower casedavanti Romanaor Greek letters, except for integer bounds, usually Qui il segno meno sin(θ 1 ) sin(θ2 ) deriva dalla moltiplicazione di i per written as M N .)−1. Since a complex number two realpossiamo components, we use se stesso, cheorvale Nell’espressione soprahas descritta utilizzare le aformule Cartesian plane (in of ae number to graph it, as shown in Figure 7.1. di somma deiplace coseni dei seni line) e quindi semplificare: The quantities a and b are called the real and imaginary parts of Z, written as: Z1 Z2 = r1 r2 · [cos(θ1 + θ2 ) + i sin(θ1 + θ2 )]. a = re(Z) Risulta che il prodotto Z1 Z2 ha modulo r1 r2 e argomento θ1 + θ2 . b = im(Z) Possiamo usare questa propriet`a dei numeri complessi per sommare e sottrarre angoli (moltiplicando e dividendo numeri complessi con gli argomenti appropriati) e quindi prendere il coseno e il seno del risultato estraendo le parti reale e immaginaria.


168 178

Capitolo 7. Spostamenti temporali e ritardi CHAPTER 7. TIME SHIFTS AND DELAYS

A AZ

Z2

AZ 2

Z 1 Z −1

Figure 7.2: The powers of a complex number Z with |Z| = 1, and the same Figura 7.2: Le potenze un numero complesso Z con |Z| = 1, e la stessa sequence multiplied by a di constant A. sequenza moltiplicata per una costante A.

7.1.1 7.1.1 Complex Sinusoidi sinusoids complesse Recall the formula for a (real-valued) sinusoid fromreali) Page di 1: pagina 1: Richiamiamo la formula di una sinusoide (a valori x[n] x[n] = =a a cos(ωn cos(ωn + + φ) φ). Questa una sequenza di coseni di angoli (chiamati fasi) che increase aumentano aritmeThis is a`e sequence of cosines of angles (called phases) which arithmetiticamente con sample il sample number I coseni sono moltiplicati per factor il fattore cally with the number n.n.The cosines aretutti all adjusted by the a. a. Possiamo ora riscrivere formula la parte reale dieasier una sequenza di We can now rewrite this asquesta the real part ofcome a much simpler and to manipnumeri complessi molto pi` unumbers, semplici by e pi` u manipolabili, utilizzando propriet`a ulate sequence of complex using the properties of theirlearguments dei loro argomenti e dei loro moduli. and magnitudes. Supponiamo un numero complesso Z abbia modulo (cio`eone modulo Suppose thatche a complex number Z happens to have unitario magnitude and 1) e argomento ω, initmodo chewritten possa essere scritto come argument ω, so that can be as: Z= = cos(ω) cos(ω) + + ii sin(ω) sin(ω). Z Quindi per ogni numero intero n, il numero Z n deve avere esso stesso modulo 1 Then for any integer n, the number Z n must have magnitude one as well (be(per la moltiplicazione di moduli) e argomento nω (per la somma di argomenti). cause magnitudes multiply) and argument nω (because arguments add). So, Quindi Z nn = = cos(nω) cos(nω) + + ii sin(nω) sin(nω). Z Questo vale anche per i valori negativi di n, per esempio This is also true for negative values of n, so for example, 1 = Z −1 = cos(ω) − i sin(ω). 1 Z = Z −1 = cos(ω) − i sin(ω) Z La Figura 7.2 mostra graficamente come le potenze di Z si muovano intorno al cerchio unitario (cio` e di raggio 1), che `e l’insieme tuttiaround i numeri di Figure 7.2 shows graphically how the powers of Z di wrap thecomplessi unit circle, modulo uno. Essi formano una sequenza geometrica: which is the set of all complex numbers of magnitude one. They form a geometric

sequence:

. . . , Z 0, Z 1, Z 2, . . . . . . , Z 0, Z 1, Z 2, . . . e prendendo la parte reale di ogni termine otteniamo una sinusoide a valori reali reale con fase iniziale pari a zero e ampiezza uno: . . . , cos(0), cos(ω), cos(2ω), . . .


7.2. Spostamenti temporali e cambiamenti di fase

169

Inoltre, supponiamo di moltiplicare gli elementi della sequenza per una qualche costante (complessa) A con modulo a e argomento φ. Questo d`a . . . , A, AZ, AZ 2 , . . . I moduli sono tutti a e l’argomento del termine n−esimo `e nω + φ, quindi la sequenza `e uguale a AZ n = a · [cos(nω + φ) + i sin(nω + φ)] e la parte reale `e proprio la sinusoide a valori reali: re(AZ n ) = a · cos(nω + φ). Il numero complesso A incorpora sia l’ampiezza reale a che la fase iniziale φ; il numero complesso, di modulo unitario, Z controlla invece la frequenza che `e proprio il suo argomento ω. La Figura 7.2 mostra anche la sequenza A, AZ, AZ 2 , . . . ; in effetti questa `e la stessa sequenza di 1, Z, Z 2 , . . . , ma amplificata e ruotata a secondo dell’ampiezza e della fase iniziale. In una sinusoide complessa di questa forma, A prende il nome di ampiezza complessa. L’utilizzo di numeri complessi per rappresentare le ampiezze e le fasi delle sinusoidi pu` o chiarire manipolazioni che altrimenti potrebbero sembrare immotivate. Per esempio, supponiamo che vogliamo conoscere l’ampiezza e la fase della somma di due sinusoidi con la stessa frequenza. Nel linguaggio di questo capitolo, supponiamo che le due sinusoidi siano scritte come: X[n] = AZ n , Y [n] = BZ n dove A e B codificano le fasi e le ampiezze dei due segnali. La somma `e quindi uguale a: X[n] + Y [n] = (A + B)Z n che `e una sinusoide la cui ampiezza `e uguale a |A + B| e la cui fase `e uguale a ∠(A + B). Questo `e chiaramente un modo molto pi` u semplice per manipolare le ampiezze e le fasi anzich´e utilizzando le propriet`a dei seni e dei coseni. Alla fine, ovviamente, prenderemo la parte reale del risultato; questo, solitamente, pu` o essere fatto alla fine di tutte le operazioni che stiamo facendo.

7.2

Spostamenti temporali e cambiamenti di fase

Partendo da un qualsiasi segnale (reale o complesso) X[n], possiamo ottenere altri segnali spostando il segnale X per un intero (positivo o negativo) d: Y [n] = X[n − d] in modo che il campione d−esimo di Y sia il campione 0−esimo di X e cos`ı via. Se l’intero d `e positivo, allora Y `e una copia ritardata di X. Se d `e negativo, Y anticipa X; questo pu`o essere fatto per un suono registrato ma non `e pratico come operazione in tempo reale.


170

Capitolo 7. Spostamenti temporali e ritardi

Lo spostamento temporale `e un’operazione lineare (considerata come funzione del segnale di ingresso X); se facciamo uno spostamento temporale su una somma X1 + X2 si ottiene lo stesso risultato di applicare lo spostamento separatamente sui due segnali e in seguito fare la somma. Lo spostamento temporale ha l’ulteriore propriet`a che, se si sposta, temporalmente, una sinusoide di frequenza ω, il risultato `e un’altra sinusoide con la stessa frequenza; lo spostamento temporale non introduce mai frequenze che non erano presenti nel segnale prima che venisse spostato. Questa propriet`a, chiamata invarianza temporale, rende facile analizzare gli effetti degli spostamenti temporali – e delle loro combinazioni lineari – considerando separatamente cosa fanno sulle singole sinusoidi. Inoltre, l’effetto di uno spostamento temporale su una sinusoide `e semplice: cambia solo la fase. Se usiamo una sinusoide complessa, l’effetto `e ancora pi` u semplice. Se per esempio X[n] = AZ n allora Y [n] = X[n − d] = AZ (n−d) = Z −d AZ n = Z −d X[n] e quindi lo spostamento temporale di d campioni, di una sinusoide complessa, `e la stessa cosa che moltiplicare per Z −d – `e solo un cambiamento di ampiezza per un particolare numero complesso. Poich´e |Z| = 1 per una sinusoide, la variazione dell’ampiezza non cambia il modulo della sinusoide, solo la sua fase. La variazione di fase `e uguale a −dω, dove ω = ∠(Z) `e la frequenza angolare della sinusoide. Questo `e esattamente quello che ci si dovrebbe aspettare poich´e la sinusoide avanza di ω radianti per campione ed ha un offset (cio`e, `e ritardata) di d campioni.

7.3

Reti di ritardo

Se consideriamo i nostri campioni audio digitali X[n] in corrispondenza di momenti successivi nel tempo, allora lo spostamento temporale di d campioni del segnale corrisponde ad un ritardo (delay) di d/R unit`a di tempo, dove R `e la frequenza di campionamento. La Figura 7.3 mostra un esempio di una rete lineare di ritardo (linear delay network): un insieme di unit`a di ritardo, eventualmente con operazioni di riscalatura di ampiezza, combinate usando somme e sottrazioni. L’output `e una funzione lineare dell’input, nel senso che dare in input la somma di due segnali `e la stessa cosa che elaborare ciascuno separatamente e sommare i risultati. Inoltre, le reti lineari di ritardo non creano, in uscita, nuove frequenze che non erano presenti in input, fintanto che la rete rimane invariata nel tempo, in modo che i guadagni e i tempi di ritardo non cambino nel tempo. In generale ci sono due modi di pensare alle reti di ritardo. Possiamo pensarle nel dominio del tempo (time domain), in cui tracciamo le forme d’onda come funzioni del tempo (o dell’indice n) e consideriamo i ritardi come spostamenti temporali. In alternativa, possiamo pensarle nel dominio della frequenza (frequency domain), in cui l’input viene alimentato con una sinusoide complessa (in modo che il suo output sia una sinusoide alla stessa frequenza) e segnaliamo i cambiamenti di ampiezza e/o di fase effettuati dalla rete, in funzione della frequenza. Studiamo ora la rete di ritardo di Figura 7.3 in ciascuno dei due modi.


7.3. Reti di ritardo

171

7.3. DELAY NETWORKS

181

IN

d

OUT

Figure 7.3: A delay network. Here we add the incoming signal to a delayed copy ofFigura itself. 7.3: Una rete di ritardo. Qui sommiamo il segnale in ingresso con una copia ritardata di se stesso. We’ll now look at the delay network of Figure 7.3 in each of the two ways in turn. Figure 7.4 shows the network’s behavior in the time domain. We invent some sort of suitable test function as input (it’s a rectangular pulse eight samples wide 7. TIME SHIFTS AND in182 this example) and graph the CHAPTER input and output as functions of theDELAYS sample number n. This particular delay network adds the input to a delayed copy of itself. A frequently used test function is an impulse, which is a pulse lasting only input one sample. The utility of this is that, if we know the output of the network for an impulse, we can find the output for any other digital audio signal—because any signal x[n] is a sum of impulses, one of height x[0], the next one occurring n one sample later and having height x[1], and so on. Later, when the networks get more complicated, we will move to using impulses as input signals to show their time-domain behavior. Onoutput the other hand, we can analyze the same network in the frequency domain by considering a (complex-valued) test signal, X[n] = Z n where Z has unit magnitude and argument ω. We already know that the output d is another complex sinusoid with the same frequency, that is, HZ N Figura 7.4: 7.4: The La visualizzazione nel dominio del tempo della di ritardo di Figure time domain view of the delay network of rete Figure 7.3. The for some7.3. complex number H (which we wante to find). So we write the output Figura `e lainput somma della sua output is theL’output sum of the anddell’input its time shifted copy.copia traslata. directly as the sum of the input and its delayed copy: Z n + Z −d Z n = (1 + Z −d )Z n and find by inspection that: H = 1 + Z −d We can understand the frequency-domain behavior of this delay network by studying how the complex number H varies as a function of the angluar frequency ω. We are especially interested in its argument and magnitude—which tell us the relative phase and amplitude of the sinusoid that comes out. We will work this example out in detail to show how the arithmetic of complex numbers can predict what happens when sinusoids are combined additively. Figure 7.5 shows the result, in the complex plane, when the quantities 1 and Z −d are combined additively. To add complex numbers we add their real and complex parts separately. So the complex number 1 (real part 1, imaginary part


172

Capitolo 7. Spostamenti temporali e ritardi

La Figura 7.4 mostra il comportamento della rete nel dominio del tempo. Abbiamo inventato una sorta di funzione appropriata di test come input (in questo esempio `e un impulso rettangolare largo otto campioni) e disegniamo il grafico dell’input e dell’output come funzioni del sample number n. Questa particolare rete di ritardo somma l’input con una copia ritardata di se stesso. Una funzione di test utilizzata di frequente `e l’impulso, che `e una pulsazione della durata di solo un campione. L’utilit`a di ci`o `e che, se conosciamo l’output della rete per un impulso, possiamo trovare l’output per qualsiasi altro segnale audio digitale – perch´e qualsiasi segnale x[n] `e una somma di impulsi, uno di altezza x[0], il successivo che si verifica un campione pi` u tardi e che ha l’altezza x[1], e cos`ı via. Pi` u tardi, quando le reti diventeranno pi` u complicate, passeremo ad utilizzare gli impulsi come segnali di input per mostrare il loro comportamento nel dominio del tempo. D’altra parte, possiamo analizzare la stessa rete nel dominio della frequenza considerando un segnale di prova (a valori complessi) X[n] = Z n dove Z ha modulo unitario e argomento ω. Sappiamo gi`a che l’output `e un’altra sinusoide complessa con la stessa frequenza, cio`e, HZ n per un numero complesso H (che vogliamo trovare). Quindi scriviamo l’output direttamente come la somma dell’input e della sua copia ritardata: Z n + Z −d Z n = (1 + Z −d )Z n e confrontando si ottiene che H = 1 + Z −d . Possiamo comprendere il comportamento nel dominio della frequenza di questa rete di ritardo, studiando come il numero complesso H varia in funzione della frequenza angolare ω. Siamo particolarmente interessati al suo argomento e al suo modulo – che ci forniscono la fase relativa e l’ampiezza della sinusoide che otteniamo. Facciamo questo esempio in dettaglio per mostrare come l’aritmetica dei numeri complessi possa prevedere cosa succede quando le sinusoidi vengano combinate additivamente. La Figura 7.5 mostra il risultato, nel piano complesso, quando le quantit`a 1 e Z −d sono combinate in modo additivo. Per sommare numeri complessi, basta sommare separatamente le loro parti reali e complesse. Cos`ı il numero complesso 1 (parte reale 1, parte immaginaria 0) viene sommato, coordinata per coordinata, al numero complesso Z −d (parte reale cos(−dω), parte immaginaria sin(−dω)). Questa operazione `e ottenuta, graficamente, facendo un parallelogramma, con spigoli all’origine e ai due punti di cui si fa la somma, e il cui quarto spigolo `e la somma H. Come mostra la figura, il risultato pu`o essere compreso simmetrizzandolo sull’asse reale: invece di 1 e Z −d , `e pi` u facile sommare le quantit`a Z d/2 e −d/2 Z , perch´e sono simmetriche rispetto all’asse (orizzontale) reale (in senso stretto, non abbiamo definito correttamente le quantit`a Z d/2 e Z −d/2 ; stiamo usando queste espressioni per indicare numeri complessi di modulo unitario i cui


7.3. Reti di ritardo 7.3. DELAY NETWORKS

173 183

Z

d/2

HZ

d/2

1

real

Z -d/2

imaginary

Z

-d

H

Figure 7.5: Analysis, in the complex plane, of the frequency-domain behavior of Figura Analisi, nel piano del comportamento nelthe dominio della the delay7.5: network of Figure 7.3.complesso, The complex number Z encodes frequency − complesso Z codifica la frequenza della rete di ritardo di Figura 7.3. Il numero of the input. The delay line output is the input times Z d. The total (complex) frequenza dell’input. L’output della di ritardo `e l’input moltiplicato per gain is H. We find the magnitude and linea argument of H by symmetrizing the sum, −d Z . Il guadagno totale (complesso) ` e H. Troviamo il modulo e l’argomento rotating it by d/2 times the angular frequency of the input. di H simmetrizzando la somma, ruotandola per d/2 volte la frequenza angolare dell’input. in rectangular form: Z d/2 + Z −d/2 argomenti sono la met` a di quelli di Z d e Z −d , in modo che il loro elevamento al = (cos(ωd/2) i sin(ωd/2))il+guadagno (cos(ωd/2) − i sin(ωd/2)) quadrato dia Z d e Z −d .)+Riscriviamo come: = 2 cos(ωd/2) H = Z −d/2 (Z d/2 + Z −d/2 ). This real-valued quantity may be either positive or negative; its absolute value Il primo `e uno spostamento u gives the termine magnitude of the output: di fase di −dω/2. Il secondo termine `e pi` comprensibile in forma rettangolare: |H| = 2| cos(ωd/2)| Z d/2 + Z −d/2 The quantity |H| is called the gain of the delay network at the angular frequency = (cos(ωd/2) + i sin(ωd/2)) (cos(ωd/2) − i sin(ωd/2)) ω, and is graphed in Figure 7.6. The +frequency-dependent gain of a delay network (that is, the gain as a function of frequency) is called the network’s = 2 cos(ωd/2). frequency response. Since the network has greater gain at some frequencies than at others, it may Questa quantit` valori reali, essere positiva ocertain negativa; il suo valore be considered asa,a afilter that can pu` beoused to separate components of a assoluto d` a il modulo dell’output: sound from others. Because of the shape of this particular gain expression as a function of ω, this kind of delay network is called a (non-recirculating) comb |H| = 2|cos(ωd/2)|. filter. output the network is di a sum of two(gain) sinusoids equal La The quantit` a |H|of prende il nome guadagno dellaofrete di amplitude, ritardo alla and whose angolare phases differ ωd. The resulting frequency response agrees with frequenza ω ed by `e rappresentata in Figura 7.6. Il guadagno, dipendente common sense: if(cio` thee angular frequency ω is set so that an integer number dalla frequenza il guadagno in funzione della frequenza), di una rete ofdi periods into dilsamples, if ω isinafrequenza multiple of 2π/d, the output of the delay ritardo fit prende nome di i.e., risposta della rete. is exactly the same as the original signal, and so the two combine to make an Poich´e la rete ha un guadagno maggiore ad alcune frequenze rispetto ad altre, output with twice the original amplitude. On the other hand, if for example we pu` o essere considerato come un filtro che pu`o essere utilizzato per separare, in un suono, determinate componenti da altre. A causa della forma di questa particolare espressione del guadagno in funzione di ω, questo tipo di rete di ritardo prende il nome di filtro a pettine (non-ricircolante) ((non-recirculating) comb filter).


184 174

CHAPTER 7. TIME SHIFTS AND DELAYS Capitolo 7. Spostamenti temporali e ritardi

gain 2

2 d

4 d

Figure 7.6: Gain of the delay network of Figure 7.3, shown as a function of Figura 7.6: Guadagno della rete di ritardo di Figura 7.3, mostrato in funzione angular frequency ω. della frequenza angolare ω. take ω = π/d so that the delay is half the period, then the delay output is out of phase and cancels the input exactly. This particular delay network has an interesting application: if we have a L’output della rete `e una incoming somma disignal, due sinusoidi di uguale ampiezza e le periodic (or nearly periodic) whose fundamental frequency is cui fasi differiscono di ωd. La risposta in frequenza risultante ` e in accordo ω radians per sample, we can tune the comb filter so that the peaks in con the il buon se at la frequenza angolare `e impostata modo che the un numero gain aresenso: aligned even harmonics andω the odd onesinfall where gain is intero di periodi stia esattamente in d campioni, cio` e se ω ` e un multiplo zero. To do this we choose d = π/ω, i.e., set the delay time to exactly di one2π/d, half l’output `e esattamente uguale al segnale originale, e quindi i due si period of del theritardo incoming signal. In this way we get a new signal whose harmonics combinano per .dare un output con has ampiezza volte quellafrequency originale.atD’altra are 2ω, 4ω, 6ω, . ., and so it now a newdue fundamental twice parte, se per esempio noi prendiamo ω = π/d in modo che il ritardo la met`a the original one. Except for a factor of two, the amplitudes of thesia remaining del periodo,still allora l’output del ritardo `e fuoriof fase l’input. harmonics follow the spectral envelope thee annulla original esattamente sound. So we have a tool now for raising the pitch of an incoming sound by an octave without Questaitsparticolare rete di ritardo ha un’interessante applicazione: se octave abbiachanging spectral envelope. This octave doubler is the reverse of the mo un segnale in entrata periodico (o quasi periodico), la cui frequenza fondadivider introduced back in Chapter 5. mentale `e ω and radianti per campione, possiamo sintonizzareways il filtro a pettine in The time frequency domains offer complementary of looking at the modo che i picchi nel guadagno siano allineati agli armonici pari mentre quelli same delay network. When the delays inside the network are smaller than the dispari si trovino doveevents il guadagno `e zero.than Perabout fare ci` sceglieremo d = π/ω, ear’s ability to resolve in time—less 20o milliseconds—the time cio` e , impostiamo il tempo di ritardo a esattamente met` del sedomain picture becomes less relevant to our understandingaofdel theperiodo delay network, gnaleweinturn ingresso. modo otterremopicture. un nuovo i cui armonici and mostlyIn to questo the frequency-domain Onsegnale the other hand, when sono 2ω, 4ω, 6ω, . . . e quindi adesso ha una nuova frequenza fondamentale pari delays are greater than about 50 msec, the peaks and valleys of plots showing a due volte quella originale. Fatta eccezione per un fattore di due, le ampiezze gain versus frequency (such as that of Figure 7.6) crowd so closely together that dei frequency-domain restanti armonici seguono ancoraless l’inviluppo spettrale delnonetheless suono originale. the view becomes important. Both are valid Quindi abbiamo uno strumento per aumentare di un’ottava il tono di un suono over the entire range of possible delay times. in ingresso senza cambiare il suo inviluppo spettrale. Questo octave doubler `e l’opposto dell’octave divider introdotto nel Capitolo 5.

7.4

Recirculating delay networks

I domini del tempo e della frequenza offrono modalit`a complementari per It is sometimes desirable toritardo. connectQuando the outputs of all’interno one or more delays in a esaminare una stessa rete di i ritardi della rete sono network back intorispetto their own each aothers’ inputs.diInstead of getting onenel or a tempi inferiori alla or capacit` dell’orecchio distinguere gli eventi several of di thecirca original sound as in –thelaexample above, wenel candominio potentially tempo echos – meno 20 millisecondi rappresentazione del get an diventa infinite meno number of echos, each one comprensione feeding back della into rete the di network tempo rilevante per la nostra ritardotoe engender yet others. ci rivolgiamo principalmente alla rappresentazione nel dominio della frequenza. D’altro canto, quando i ritardi sono superiori a circa 50 msec, i picchi e le valli della rappresentazione che mostrano il guadagno in funzione della frequenza (come quella in Figura 7.6) sono cos`ı strettamente vicini che la visualizzazione nel dominio della frequenza diventa meno importante. Entrambe sono comunque valide per tutta la gamma di possibili tempi di ritardo.


7.4. Reti di ritardo ricircolanti 7.4. RECIRCULATING DELAY NETWORKS

175 185

IN

OUT d

g

Figure diagram for a recirculating filter. Here d is the Figura 7.7: 7.7: Block Diagramma a blocchi per un filtro comb a pettine ricircolante. Qui delay d `e il time in samples and g is the feedback coefficient. tempo di ritardo in campioni e g `e il coefficiente di feedback. The simplest example of a recirculating network is the recirculating comb 7.4 whose Reti ritardo ricircolanti filter blockdi diagram is shown in Figure 7.7. As with the earlier, simple comb filter, the input signal is sent down a delay line whose length is d samples. But now `ethe delay line’s output le is also feddiback itsuinput; the input is A volte auspicabile collegare uscite uno to o pi` ritardi, indelay’s una rete, nuothe sum of the original input and the delay’s output. The output is multiplied vamente al proprio ingresso o a quelli degli altri. Invece di ottenere uno o pi` u by a del number before feeding it back into its input. possiamo potenzialmente echi suonog originale come nell’esempio precedente, The time domain behavior the recirculating comb filter is shown Figure ottenere un numero infinito diofechi, ciascuno di essi che ritorna nellainrete per 7.8. Here we consider the effect of sending an impulse into the network. We generarne ancora altri. get back the original impulse, plus a series of echos, each in turn d samples L’esempio pi` u semplice di una rete ricircolante `e il filtro a pettine ricircolante after the previous one, and multiplied each time by the gain g. In general, a il cui diagramma a blocchi `e mostrato in Figura 7.7. Come per il filtro a pettine delay network’s output given an impulse as input is called the network’s impulse semplice visto prima, il segnale in input viene inviato ad una linea di ritardo la response. cui lunghezza `e d campioni. Ma ora anche l’output della linea di ritardo torna Note that we have chosen a gain g that is less than one in absolute value. al suo input; l’input del ritardo `e la somma dell’input originale e dell’output Ifdelweritardo. chose aL’output gain greater than one (or moltiplicato less than -1), echo would have di a del ritardo viene pereach un numero g prima larger magnitude than the previous one. Instead of falling exponentially as they ritornare al suo ingresso. do in the figure, they would grow exponentially. A recirculating network whose Il comportamento dominio tempo del filtro a pettine ricircolante output eventually fallsnel toward zerodel after its input terminates is called stable;`e mostrato in Figura 7.8. Qui consideriamo l’effetto di inviare un impulso nella one whose output grows without bound is called unstable. rete. Otteniamo l’impulso originale, pi` u una serie di echi, ognuno d campioni We can also analyse the recirculating comb filter in the frequency domain. doposituation il precedente, e moltiplicato ogni volta guadagnoand g. soInwe generale, The is now quite hard to analyze usingper realilsinusoids, get the quando si ha un impulso come input, l’output di una rete di ritardo ` e chiamato first big payoff for having introduced complex numbers, which greatly simplify risposta all’impulso della rete. the analysis. Si as notibefore, che abbiamo un guadagno che `e inferiore a 1 in valore assoluto. If, we feedscelto the input with theg signal, Se avessimo scelto un guadagno maggiore di 1 (o minore di −1), ogni eco avrebbe X[n] = Z n Invece di calare esponenzialmente un modulo maggiore rispetto al precedente. come fanno nella figura, crescerebbero esponenzialmente. Una rete ricircolante with = 1, we can write output as il cui|Z| output scende a zerothe dopo che l’input `e finito si dice stabile; una rete il cui output cresce senza limiti `e detta instabile. Y [n] = (1 + gZ −d + g 2 Z −2d + · · ·)X[n] Possiamo anche analizzare il filtro a pettine ricircolante nel dominio della frequenza. La situazione adesso `e molto difficile da analizzare usando sinusoidi reali e pertanto otteniamo il primo grande guadagno di aver introdotto i numeri complessi, che semplificano notevolmente l’analisi.


186 176

CHAPTER TIME SHIFTS AND DELAYS Capitolo 7. 7. Spostamenti temporali e ritardi

input

n

output

d

Figura Analisi nel dominio del filtro acomb pettine ricircolante, Figure 7.8: 7.8: Time-domain analysisdelof tempo the recirculating filter, using an utilizzando un impulso come input. impulse as input. Se,the come prima, della from rete `ethe il segnale, Here terms in thel’input sum come series of discrete echos. It follows that the amplitude of the output is: X[n] = Z n 2

H = 1 l’output + gZ −d + (gZ −d ) + · · · con |Z| = 1, possiamo scrivere come −2d the standard technique. First This is a geometricYseries; we+can sum [n] = (1 gZ −d + git2 Zusing + · · · )X[n]. −d multiply both sides by gZ to give: Qui i termini della somma provengono dalla serie di echi discreti. Ne consegue 2 3 gZ −d H =`e:gZ −d + (gZ −d ) + (gZ −d ) + · · · che l’ampiezza dell’output −d 2 H =1+ gZ −d +to (gZ ) + ··· and subtract from the original equation give:

Questa `e una serie geometrica; possiamo usando la tecnica standard. H − gZ −dsommarla H =1 Innanzitutto moltiplichiamo entrambi i lati per gZ −d per avere Then solve for H: −d 1 2 + (gZ −d )3 + · · · gZ −d H = gZ −d H +=(gZ ) −d 1 − gZ e sottraendola dall’equazione originale si ottiene: A faster (but slightly less intuitive) method to get the same result is to examine the recirculating network H −itself gZ −dto H yield = 1. an equation for H, as follows. We named the input X[n] and the output Y [n]. The signal going into the delay Quindi, risolvendo si ha: line is the output Yper [n],Hand passing this through the delay line and multiplier gives 1 H Y=[n] · gZ −d . 1 − gZ −d This plus the input is just the output signal again, so: Un metodo pi` u veloce (ma meno intuitivo) per ottenere lo stesso risultato `e quello di esaminare la rete ricircolante stessa per−dprodurre un’equazione per Y [n] = X[n] + Y [n] · gZ H, nel modo seguente. Chiamiamo X[n] l’input e Y [n] l’output. Il segnale che entra nella linea di ritardo `e l’output Y [n] e passando questo attraverso la linea di ritardo ed il moltiplicatore otteniamo Y [n] · gZ −d .


7.4. Reti di ritardo ricircolanti

177

Questo, insieme all’input, `e proprio il segnale di uscita, quindi: Y [n] = X[n] + Y [n] · gZ −d e dividendo per X[n] e ponendo poi H = Y [n]/X[n] si ha: H = 1 + HgZ −d che `e equivalente all’equazione trovata precedentemente per H. Ora vorremmo fare un grafico della risposta in frequenza (il guadagno in funzione della frequenza) come abbiamo fatto per i filtri a pettine non-ricircolanti in Figura 7.6. Questo richiede ancora di fare un passaggio preliminare nel piano complesso. Vorremmo stimare il modulo di H uguale a: |H| =

1 |1 − gZ −d |

dove abbiamo usato la propriet`a moltiplicativa dei moduli per concludere che il modulo di un inverso (complesso) `e l’inverso di un modulo (reale). La Figura 7.9 mostra la situazione graficamente. Il guadagno |H| `e l’inverso della lunghezza del segmento che va dal punto 1 al punto gZ −d . La Figura 7.10 mostra un grafico della risposta in frequenza |H| in funzione della frequenza angolare ω = ∠(Z). La Figura 7.9 pu` o essere utilizzata per analizzare come la risposta in frequenza |H(ω)| dovrebbe comportarsi qualitativamente in funzione di g. L’altezza e la larghezza di banda dei picchi dipendono entrambi da g. Il valore massimo che |H| pu` o raggiungere `e quando Z −d = 1. Ci` o si verifica alle frequenze ω = 0, 2π/d, 4π/d, . . . come nel caso del filtro a pettine semplice visto sopra. A queste frequenze il guadagno raggiunge |H| =

1 . 1−g

La prossima importante domanda riguarda la larghezza di banda dei picchi nella risposta in frequenza. Quindi vorremmo trovare sinusoidi W n , con frequenza ∠(W ), che danno origine ad un valore di |H| che `e, diciamo, 3 decibel al di sotto del massimo. Per fare questo, torniamo alla Figura 7.9 e cerchiamo di posizionare W in modo che la distanza√dal punto 1 al punto gW −d sia di circa √ 2 volte la distanza da 1 a g (poich´e 2:1 `e un rapporto di circa 3 decibel). Facciamo ci` o imponendo che la parte immaginaria di gW −d sia approssimativamente 1 − g o il suo opposto negativo, ottenendo un triangolo nei punti 1, 1 − g e gW −d che `e quasi un triangolo rettangolo isoscele (qui supponiamo che g sia almeno 2/3 o quasi, altrimenti questa approssimazione √ non `e molto buona). L’ipotenusa di un triangolo rettangolo isoscele `e sempre 2 volte il cateto, e quindi il guadagno scende per quel fattore rispetto al suo massimo. Ora facciamo un’altra approssimazione, cio`e che la parte immaginaria di gW −d sia approssimativamente l’angolo in radianti che taglia sull’asse reale: ±(1 − g) ≈ im(gW −d ) ≈ ∠(W −d ). Quindi la regione di ogni picco che resta entro 3 decibel del valore massimo `e circa (1 − g)/d


178

Capitolo 7. Spostamenti temporali e ritardi

188

CHAPTER 7. TIME SHIFTS AND DELAYS

188

CHAPTER 7. TIME SHIFTS AND DELAYS

imaginary imaginary

1−g 1−g

1

real real

gW gW

gZ gZ

−d

−d −d

1

−d 1−gW −d 1−gW

−d

Figure 7.9: Diagram in the complex plane for approximating the output gain Figura 7.9: Diagramma nel piano complesso per approssimare il guadagno di |H| of the recirculating comb filters at three different frequencies: 0, and the uscita |H| filtri ainpettine ricircolanti treapproximating diverse frequenze: 0, e gligain arFigure 7.9: dei Diagram the complex planea for the output arguments of two unit complex numbers W and Z; W is chosen to give a gain gomenti due numeri complessi unitari W edifferent Z; W viene scelto per un |H| of thedi recirculating comb filters at three frequencies: 0, avere and the about 3 dB below the peak. guadagno di 3 dBcomplex al di sotto del picco. arguments of circa two unit numbers W and Z; W is chosen to give a gain about 3 dB below the peak.

gain 5

gain

5

2 2d

4 4d

d d Figure 7.10: Frequency response of the recirculating comb filter with g = 0.8. The peak gain is 1/(1 − g) = 5. Peaks are much narrower than for the nonFigure 7.10: Frequency response of the recirculating comb filter with g = 0.8. Figura 7.10: comb Risposta in frequenza del filtro a pettine ricircolante con g = 0.8. recirculating filter. The peak gain is 1/(1 − g) = 5. Peaks are much narrower than for the nonIl guadagno di picco `e 1/(1 − g) = 5. I picchi sono molto pi` u stretti che nel caso recirculating comb filter. del filtro a pettine non-ricircolante.


7.5. Conservazione della potenza e reti di ritardo complesse

179

(in radianti) ai due lati del picco. La larghezza di banda si restringe (e i picchi del filtro diventano pi` u nitidi), quando g si avvicina al suo valore massimo, pari a 1. Come per il filtro a pettine non-ricircolante del paragrafo 7.3, i denti del pettine sono pi` u vicini tra loro per valori pi` u grandi del ritardo d. D’altra parte, un ritardo di d = 1 (il pi` u breve possibile) fornisce solo un dente (a frequenza zero) al di sotto della frequenza di Nyquist π (il dente successivo, a 2π, corrisponde nuovamente a una frequenza pari a zero a causa del foldover). Quindi il filtro a pettine ricircolante con d = 1 `e praticamente un filtro passabasso. Le reti di ritardo con ritardi di un campione saranno la base per la progettazione di molti altri tipi di filtri digitali nel Capitolo 8.

7.5

Conservazione della potenza e reti di ritardo complesse

Le stesse tecniche funzionano per analizzare qualsiasi rete di ritardo, anche se per reti pi` u complicate diventa pi` u difficile caratterizzare i risultati, o progettare la rete per avere propriet`a specifiche e desiderate. Un altro punto di vista pu` o talvolta essere utile per la situazione, soprattutto quando sono necessarie risposte piatte in frequenza, per motivi propri o altrimenti per assicurare che una rete ricircolante complessa rimanga stabile a guadagni di feedback vicini a uno. Il fatto principale che useremo `e che se una qualsiasi rete di ritardo, con uno o pi` u inputs e outputs, `e costruita in modo che la sua potenza di uscita (in media nel tempo) sia sempre uguale alla sua potenza in entrata, tale rete deve avere una risposta piatta in frequenza. Questa `e quasi una tautologia; se inseriamo una sinusoide, a qualsiasi frequenza, su uno degli ingressi, si otterranno sinusoidi della stessa frequenza nelle uscite e la somma della potenza su tutte le uscite sar`a uguale alla potenza dell’ingresso, quindi il guadagno, opportunamente definito, `e esattamente uno. Al fine di lavorare con reti di ritardo con conservazione della potenza avremo bisogno di una definizione esplicita di “potenza media totale”. Se c’`e un solo segnale (chiamiamolo x[n]), la potenza media `e data da: P (x[n]) = |x[0]|2 + |x[1]|2 + · · · + |x[N − 1]|2 /N dove N `e un numero sufficientemente grande in modo che tutte le fluttuazioni dell’ampiezza si calcolino in media. Questa definizione funziona sia per segnali complessi che per quelli a valori reali. La potenza totale media per diversi segnali audio digitali non `e altro che la somma delle potenze dei segnali individuali: P (x1 [n], . . . , xr [n]) = P (x1 [n]) + · · · + P (xr [n]) dove r `e il numero di segnali da combinare. Si scopre che una vasta gamma di interessanti reti di ritardo ha la propriet`a che la potenza totale in output sia uguale alla potenza totale in input; queste reti prendono il nome di unitarie. Per cominciare, possiamo mettere in parallelo qualsiasi numero di ritardi, come mostrato in Figura 7.11. Qualunque sia la potenza totale degli ingressi, la potenza totale delle uscite deve essere uguale.


190 180

CHAPTER TIME SHIFTS AND DELAYS Capitolo 7. 7. Spostamenti temporali e ritardi IN

d 1

d 2

d d 3 4

OUT

Figure 7.11: fundamental building blockdifor unitary delay delay Figura 7.11: First Primo fondamentale blocco costruzione pernetworks: reti di ritardo lines in parallel. unitarie: linee di ritardo in parallelo. To start with, wefamiglia can putdiany number of delays in parallel,della as shown in Figure Una seconda trasformazioni di conservazione potenza `e com7.11. da Whatever total power the inputs, power of the outputs posta rotazionithe e riflessioni dei of segnali x1 [n], . .the . , xtotal in ogni r [n], considerandoli, has to nequal it. come le r coordinate di un punto nello spazio r−dimensionale. punto fissato, A second ofamily of power-preserving transformations is composed rotaLa rotazione la riflessione deve essere una che lascia l’origine (0, . . . 0)offissata. tions and reflections of the n, signals x1 [n], ...totale , xr [n], them, each Per ogni sample number il contributo allaconsidering potenza media delat segnale time point an, as the r coordinates of a point in r-dimensional space. The `efixed proporzionale rotation or reflection must be one |x1 |2that + · ·leaves · + |xrthe |2 . origin (0, . . . , 0) fixed. For each sample the total contribution the average signal power Questa `e proprio la number distanzan,pitagorica del punto (xto 1 , . . . , xr ) dall’origine. Sicis proportional to come le rotazioni e le riflessioni sono che preservano le distanze, 2 trasformazioni 2 · · · + |xr | 1| + la distanza dall’origine prima |x della trasformazione deve essere uguale alla di-

stanza dopo. Quindi la potenza totale di un di (x segnali This is dall’origine just the Pythagorean distance from the origin to insieme the point xr ). 1 , . . . , deve essere preservata perreflections rotazione.are distance-preserving transformations, the disSince rotations and La from Figura mostra unatransforming matrice di rotazione chethe opera su duefrom segnali. tance the7.12 origin before must equal distance the Nella (a) la So trasformazione `e mostrata esplicitamente. i segnali di origin parte afterward. the total power of a collection of signals Se must must be ingresso x1 [n] e x2 [n], gli outputs sono: preservedsono by rotation. Figure 7.12 shows a rotation matrix operating on two signals. In part (a) y1 [n] = cx1 [n] − sx2 [n] the transformation is shown explicitly. If the input signals are x1 [n] and x2 [n], the outputs are: y [n] = sx [n] + cx [n] y12[n] = cx11[n] − sx22[n] dove c, s sono dai da y2 [n] = sx1 [n] + cx2 [n] c = cos(θ) where c, s are given by cs = = cos(θ) sin(θ)

per un angolo di rotazione θ. Considerato come un punto sul piano cartesiano, s = sin(θ) il punto (y1 , y2 ) `e proprio il punto (x1 , x2 ) ruotato in senso antiorario di un for an angle θ. Considered the Cartesian plane, the angolo pari a of θ. rotation I due punti sono quindi as allapoints stessaondistanza dall’origine: point (y1 , y2 ) is just the point (x1 , x2 ) rotated counter-clockwise by the angle θ. 2 2 |y2 |2distance = |x1 |2 from + |x2 |the The two points are thus at|ythe same origin: 1| + 2 hanno2 la stessa 2 2 e quindi i due segnali di uscita totale dei due segnali di |y1 | + |y2 | = |x1 | +potenza |x2 | ingresso. Per una descrizione alternativa della rotazione in dimensione 2, consideriamo numeri complessi X = x1 + ix2 e Y = y1 + iy2 . La trasformazione di cui sopra equivale a porre Y = XZ


7.5. Conservazione POWER CONSERVATION COMPLEX DELAY NETWORKS 191 della potenza eAND reti di ritardo complesse 181

(a)

(b)

IN IN

c

-s

s

c c

-s

s

c

OUT OUT

Figura 7.12: Second Secondofundamental fondamentalebuilding blocco block per la for costruzione di retinetworks: di ritarFigure unitary delay do unitarie: rotazione di signals. due segnali digitali. La parte (a) explicitly; mostra la rotating two digital audio Part audio (a) shows the transformation trasformazione modo esplicito; (b) shows it as ainmatrix operation.(b) la mostra in termini matriciali. dovesoZthe `e un complesso modulo unitario e argomento θ. signals. Poich´e and twonumero output signals havecon the same total power as the two input |Z| For = 1,an segue che |X| description = |Y |. alternative of rotation in two dimensions, consider complexSenumbers X una = xrotazione Y = y1 +diy2segnali i. Thee above eseguiamo su una coppia poi ne transformation invertiamo uno 1 + x2 i and amounts to setting (ma non l’altro), il risultato `e una riflessione. Anche la riflessione conserva la Y possiamo = XZ potenza totale del segnale, in quanto invertire uno o tutti gli elementi in un insieme di segnali senza cambiare la potenza totale. In dimensione 2, una where Z is a complex number with unit magnitude and argument θ. Since riflessione appare come una trasformazione della forma |Z| = 1, it follows that |X| = |Y |. If we perform a rotation on a pair of signals and then invert one (but not y1 [n] = cx1 [n] + sx2 [n] the other) of them, the result is a reflection. This also preserves total signal . power, since we can invert any or all of a collection of signals without changing y2 [n] = sx1 [n] − cx2 [n] the total power. In two dimensions, a reflection appears as a transformation of the form Una matrice di rotazione particolare ed utile viene ottenuta impostando y [n] p = cx1 [n] + sx2 [n] θ = π/4, in modo che s = c1 = 1/2. Ci`o consente di semplificare i calcoli, come mostrato in Figura 7.13 a), −perch´ e ciascun segnale deve essere y2 [n](parte = sx1 [n] cx2 [n] moltiplicato per la sola quantit`a c = s. A useful rotation matrix is obtained by setting θ = π/4, so that ` special ! andeffettuare E possibile rotazioni o riflessioni pi` u complicate di pi` u di due s = c = 1/2. This allows us to simplify the computation as shown in Figure segnali di ingresso semplicemente ruotandoli e/o riflettendoli ripetutamente a 7.13 (part a) because each signal need only be multiplied by the one quantity coppie. Ad esempio, in Figura 7.13 (parte b), quattro segnali vengono combinati c = s. in coppia, in due passaggi successivi, in modo che alla fine ogni ingresso di More complicated rotations or reflections of more than two input signals may segnale appaia in tutte le uscite. Potremmo fare altrettanto con otto segnali be made by repeatedly rotating and/or reflecting them in pairs. For example, (usando tre passaggi) e cos`ı via. Inoltre, se usiamo l’angolo speciale π/4, tutti in Figure 7.13 (part b), four signals are combined in pairs, in two successive i segnali di ingresso contribuiranno ugualmente a ciascuna delle uscite. Qualsiasi combinazione di ritardi e matrici di rotazione, applicata in successione ad una collezione di segnali audio, provocher`a una risposta piatta in frequenza, in quanto ogni singola operazione fa questo. Ci`o ci permette gi`a di generare un’infinit` a di reti di ritardo a risposta piatta, ma finora, nessuna di


192 182

CHAPTER 7. TIME SHIFTS AND DELAYS Capitolo 7. Spostamenti temporali e ritardi (a)

(b)

IN

IN

R

R a

R

1

3

a R

OUT

2

4

OUT

Figure 7.13: Details about rotation (and reflection) matrix! operations: (a) roFiguraby 7.13: rotazione (a) tation the Dettagli angle θ =sulle π/4,operazioni so that a matriciali = cos(θ) =disin(θ) = (e 1/2riflessione): ≈ 0.7071; p (b) rotazione di un angolo di θ = π/4, cosicch´ e a = cos(θ) = sin(θ) = 1/2 ≈ combining two-dimensional rotations to make higher-dimensional ones. 0.7071; (b) combinazione di rotazioni bidimensionali per ottenere quelle in dimensione maggiore. stages, so that in the end every signal input feeds into all the outputs. We could do the same with eight signals (using three stages) and so on. Furthermore, if esseuse `e ricircolante. Unaπ/4, terzaalloperazione, mostrata Figura 7.14, consente di we the special angle the input signals willincontribute equally to each effettuare reti ricircolanti che danno ancora risposte piatte in frequenza. of the outputs. La parte (a) della figura mostra il layout generale. La trasformazione R `e Any combination of delays and rotation matrices, applied in succession to una qualsiasi combinazione di ritardi e matrici di miscelazione che preservano a collection of audio signals, will result in a flat frequency response, since each la potenza totale. I segnali x1 , . . . , xk entrano in una rete di ritardo unitaria individual operation does. This already allows us to generate an infinitude of e ne emergono i segnali di uscita y1 , . . . , yk . Altri segnali w1 , . . . , wj (dove j flat-response delay networks, but so far, none of them are recirculating. A third non `e necessariamente uguale a k) appaiono all’uscita della trasformazione R e operation, shown in Figure 7.14, allows us to make recirculating networks that vengono riportati al suo ingresso. still enjoy flat frequency responses. Se R conserva effettivamente la potenza, la potenza totale di ingresso (la Part (a) of the figure shows the general layout. The transformation R is potenza dei segnali x1 , . . . , xk pi` u quella dei segnali w1 , . . . , wj ) deve essere assumed to be any combination of delays and mixing matrices that preserves uguale alla potenza di uscita (la potenza dei segnali y1 , . . . , yk pi` u quella dei total power. The signals x1 , . . . xk go into a unitary delay network, and the segnali w1 , . . . , wj ) e sottraendo tutti gli w dall’uguaglianza, troviamo che le output signals y1 , . . . yk emerge. Some other signals w1 , . . . wj (where j is not potenze totali di ingresso e di uscita sono uguali. necessarily equal to k) appear at the output of the transformation R and are Se poniamo j = k = 1 in modo di avere un solo segnale x, y e w e supponiamo fed back to its input. che la trasformazione R sia una rotazione di un angolo θ seguita da un ritardo di If R is indeed powerWpreserving, inputall-pass power filter. (the power of the d campioni sull’output , il risultatothe `e iltotal ben noto Con qualche signals x , . . . x plus that of the signals w , . . . w ) must equal the output power 1 k 1 j manipolazione e ponendo c = cos(θ) possiamo dimostrare che `e equivalente (the power of the signals y , . . . y plus w , . . . w ), and subtracting all the w from 1 k 1 j alla rete mostrata nella parte (b) della figura. I filtri all-pass hanno molte the equality, we find that the total input and output power are equal. applicazioni, alcune delle quali verrano viste pi` u avanti in questo libro. If we let j = k = 1 so that there is one x, y, and w, and let the transformation R be a rotation by θ followed by a delay of d samples on the W output, the result

7.6

Riverberazione artificiale

La riverberazione artificiale `e ampiamente utilizzata per migliorare il suono delle registrazioni, ma ha una vasta gamma di altre applicazioni musicali [DJ85, pp.289-340]. La riverberazione in spazi naturali, reali, deriva da un complesso


7.6. Riverberazione artificiale ARTIFICIAL REVERBERATION (a)

(b)

IN x1

183 193

xk

... ... R wj w

...

1

d

c

d1 ... dj c y

y k 1 OUT

Figure 7.14: Flat frequency response in recirculating networks: (a) in general, Figura 7.14: Risposta in frequenza piatta nelle reti ricircolanti: (a) in generale, using a rotation matrix R; (b) the “all-pass” configuration. utilizzando una matrice di rotazione R; (b) la configurazione “all-pass” is the well-known all-pass filter. With some juggling, and letting c = cos(θ), we schema diitriflessioni sonore pareti e shown su altriin oggetti cheofdefiniscono spazio. can show is equivalent to sulle the network part (b) the figure.loAll-pass Imitare questo processo utilizzando reti di ritardo ricircolanti e discrete `e una filters have many applications, some of which we will visit later in this book. grande semplificazione. Tuttavia, modellare la riverberazione utilizzando linee di ritardo ricircolanti pu` o, con molto lavoro, essere fatto per dare buoni risultati. centrale `e quella di idealizzare qualsiasi stanza (o altro spazio riverbe7.6L’ideaArtificial reverberation rante) come una collezione di linee di ritardo parallele che modellano la memoria Artificialall’interno reverberation widely used to improve the pareti sound della of recordings, but dell’aria dellaisstanza. Ad ogni punto sulle stanza molti has a wide range of other musical applications [DJ85, pp.289-340]. Reverberapercorsi lineari terminano, ciascuno dei quali trasporta il suono a quel punto; in real, natural spaces complicated pattern of originato sound reflections iltion suono allora si riflette in arises molti from altri apercorsi, ognuno di essi in quel off the ewalls and other objects thatad define the punto space. suItunis muro. a great oversimpunto, che conduce eventualmente un altro plification toilimitate process using recirculating, delayalla networks. Anche se muro (ethis l’aria che abbiamo attraversato discrete per arrivare parete) Nonetheless, reverberation usingpotenza recirculating delay lines can, assorbe un po’modeling del suono, una parte della incidente `e riflessa versowith un muchmuro. work, Se be la made to yield good results. ricircola, la stanza riverbera per un altro maggior parte dell’energia Thelungo; central to idealize anyla room (or otherdura reverberant space) tempo se idea tuttaisl’energia lo fa, riverberazione per sempre. Seasa a collection of parallel delayriflettono lines that memory of thericevuta, air inside qualsiasi frequenza le pareti pi` umodels energiathe rispetto a quella il the room. each instabilmente; point on the walls of non the accade room, many paths suono verr` aAt ripreso questo mai instraight-line ambienti reali (la terminate, eachdell’energia carrying sound to that point; the theninreflects into many conservazione lo impedisce), ma pu` o sound succedere un riverberatore other paths, each`eone originating at correttamente. that point, and leading eventually to some artificiale se non stato progettato other wall. Perpoint fare on un ariverberatore artificiale usando una rete di ritardo, dobbiamo Although the wall (and the air richieste we passedconcorrenti. through to Innanzitutto, get to the wall) soddisfare simultaneamente a due le absorbs linee di some ofdevono the sound, some portion of the incident powerlaiscolorazione reflected and makes it ritardo essere abbastanza lunghe per impedire nell’output to another wall.delIf filtraggio most of the energy (anche recirculates, the room for a come risultato a pettine se passiamo al reverberates di l`a del semplice long time; if alldel of paragrafo it does, the reverberation forever.tende If atad any frequency filtro a pettine 7.4, la risposta inlasts frequenza avere picchi walls more energy overall than they receive, the sound will feed back ethe valli la reflect cui distanza varia inversamente al tempo totale di ritardo). D’altra parte, non dovremmo ascoltare singoli echi; la densit` a di eco dovrebbe essere idealmente almeno mille per secondo. Nel perseguimento di questi obiettivi, assembliamo un certo numero di linee di ritardo e connettiamo i loro outputs ai loro inputs. Il percorso di feedback –


184

Capitolo 7. Spostamenti temporali e ritardi IN R1 d1 R2 d2 R R3 d3

9

g

d7 d8 d9

OUT

Figure 7.15: Reverberator design using power-preserving transformations and Figura 7.15: Progettazione di un riverberatore che utilizza trasformazioni che recirculating delays. conservano la potenza e ritardi ricircolanti. la connessione dalle uscite agli ingressi dei ritardi – dovrebbe avere un guadagno aggregato che varia leggermente in funzione della frequenza e non supera mai uno per nessuna frequenza. Un buon punto di partenza `e dare al percorso di feedback una risposta piatta in frequenza e un guadagno leggermente inferiore a uno; questo pu` o essere fatto usando le matrici di rotazione. Idealmente questo `e tutto ci` o che dobbiamo fare, ma in realt`a non vorremmo sempre usare le migliaia di linee di ritardo che ci vorrebbero per modellare i percorsi tra ogni possibile coppia di punti sulle pareti. Nella pratica usiamo solitamente tra quattro e sedici linee di ritardo per modellare la stanza. Questa semplificazione a volte riduce la densit`a di eco al di sotto di ci`o che vorremmo, e quindi potremmo utilizzare pi` u linee di ritardo all’ingresso della rete ricircolante per aumentare la densit` a. La Figura 7.15 mostra un semplice progetto di riverberatore che usa questo principio. Il suono in entrata, mostrato come due segnali separati in questo esempio, viene prima ispessito ritardando progressivamente uno dei due segnali e poi mescolandoli utilizzando una matrice di rotazione. Ad ogni passaggio il numero di echi del segnale originale `e raddoppiato; tipicamente utilizzeremo tra i 6 e gli 8 passaggi per ottenere tra i 64 e i 256 echi, tutti con un ritardo totale compreso tra i 30 e gli 80 millisecondi. La figura mostra tre di tali passaggi.


7.6. Riverberazione artificiale

185

Successivamente arriva la parte ricircolante del riverbero. Dopo l’ispessimento iniziale, il segnale di ingresso entra in uno banco di linee di ritardo parallele e le loro uscite vengono nuovamente miscelate utilizzando una matrice di rotazione. Le uscite miscelate sono attenuate da un guadagno g ≤ 1 e ricondotte nelle linee di ritardo per creare una rete ricircolante. Il valore g controlla il tempo di riverberazione. Se la lunghezza media delle linee di ritardo ricircolanti `e d, allora qualsiasi suono in ingresso viene attenuato di un fattore pari a g dopo un ritardo di tempo pari a d. Dopo un tempo t il segnale `e ricircolato t/d volte, perdendo 20 log10 (g) decibel ogni volta, quindi il guadagno totale, in decibel, `e: t 20 log10 (g). d La misura usuale del tempo di riverberazione (RT) `e il tempo a cui il guadagno scende di sessanta decibel: 20 RT d log10 (g) = −60, RT =

−3d log10 (g) .

Se g vale uno, questa formula d`a ∞, poich´e il logaritmo di uno `e zero. Il quadro illustrato in precedenza `e la base di molti riverberatori moderni. Sono state proposte molte estensioni di questo schema. Il passo successivo pi` u importante sarebbe quello di introdurre filtri nel percorso di ricircolo in modo che le frequenze alte possano essere fatte decadere pi` u rapidamente di quelle basse; questo `e facilmente realizzabile con un semplice filtro passa-basso, ma non lo mostreremo qui, non avendo ancora sviluppato la teoria dei filtri necessaria. In generale,utilizzare questo schema per progettare un riverberatore comporta delle scelte molto complicate sui tempi di ritardo, guadagni e coefficienti di filtraggio. Sono state pubblicate montagne di letteratura su questo argomento; Barry Blesser ha pubblicato una buon saggio [Ble01]. Molto altro si sa sulla progettazione di riverberatori e sul tuning che non `e ancora stato pubblicato; progettazioni precise vengono spesso tenute segrete per motivi commerciali. In generale, il processo di progettazione coinvolge impotenti e prolungate sintonizzazioni con prove, errori e ascolti critici.

7.6.1

Controllo dei riverberatori

La riverberazione artificiale viene utilizzata quasi universalmente nella registrazione o nella ripresa sonora per addolcire il suono complessivo. Tuttavia, e pi` u interessante, la riverberazione pu`o essere usata come fonte sonora in proprio. Il caso speciale di riverberazione infinita `e utile per catturare i suoni dal vivo e estenderli nel tempo. Per fare questo lavoro, in pratica, `e necessario aprire l’ingresso del riverberatore solo per un breve periodo di tempo, durante il quale il suono d’ingresso non varia troppo rapidamente. Se un ingresso di un riverberatore infinito viene lasciato aperto troppo a lungo, il suono si raccoglier`a e diventer`a rapidamente una massa indecifrabile. Per “riverberare infinitamente” una nota di uno strumento dal vivo, `e meglio aspettare dopo la parte di attacco della nota e quindi


7.7. VARIABLE AND FRACTIONAL SHIFTS

186

197

Capitolo 7. Spostamenti temporali e ritardi

IN

reverb

(a)

feedback

OUT

(b)

input 1 gain

t1

t2

time

feedback 1

t3

Figure 7.16: Controlling a reverberator to capture sounds selectively: (a) the Figura 7.16: Controllo di un riverberatore per catturare in modo selettivo i network; (b) examples of how to control the input gain and feedback to capture suoni: (a) la rete; (b) esempi di come controllare i guadagni d’ingresso e di two sounds at times t1 and t2 , and to hold them until a later time t3 . feedback per catturare due suoni ai tempi t1 e t2 e mantenerli fino a t3 .

lasciare entrare, nel riverberatore, forse 1/2 secondo dello stato stazionario del` possibile costruire accordi da uno strumento monofonico aprendo la nota. E ripetutamente l’ingresso in momenti diversi in cui il tono `e stabile. La Figura 7.16 mostra come ci` o possa essere fatto in pratica. I due controlli pi` u importanti sono i guadagni di ingresso e di feedback del riverberatore. Per catturare un suono, impostiamo il guadagno di feedback su uno (tempo di riverbero infinito) e apriamo momentaneamente l’ingresso al tempo t1 . Per aggiungere altri suoni ad un gi` a trattenuto, ri-apriamo semplicemente il guadagno d’ingresso nei momenti appropriati (ad esempio t2 in figura). Infine, possiamo cancellare il suono ricircolante, sia smorzando l’uscita sia svuotando il riverberatore impostando il guadagno di feedback ad un valore inferiore a uno (come al momento t3 ). Pi` u riduciamo il guadagno di feedback, pi` u velocemente l’output decadr` a.


7.7. Spostamenti variabili e frazionari

7.7

187

Spostamenti variabili e frazionari

Come tutte le tecniche di sintesi o di elaborazione audio, le reti di ritardo diventano molto pi` u potenti e interessanti se le loro caratteristiche possono essere fatte cambiare nel tempo. I parametri del guadagno (ad esempio g nel filtro a pettine ricircolante) possono essere controllati da generatori di inviluppo, variandoli evitando i clicks o altri artefatti. I tempi di ritardo (come d prima) non sono cos`ı facili da variare in maniera regolare per due motivi. In primo luogo, abbiamo definito solo gli spostamenti temporali per valori interi di d, poich´e per valori frazionari di d un’espressione come x[n − d] non `e determinata se x[n] `e definito solo per valori interi di n. Per fare ritardi frazionari dovremo introdurre un adeguato schema di interpolazione. E se vogliamo variare d con regolarit` a nel tempo, saltare semplicemente da un numero intero al successivo non dar` a buoni risultati. In secondo luogo, anche una volta che avessimo raggiunto cambiamenti dei tempi di ritardo perfettamente uniformi, gli artefatti causati dalle variazioni dei tempi di ritardo diventerebbero evidenti anche a piccolissimi tassi di variazione; mentre nella maggior parte dei casi `e possibile fare una rampa, su un controllo di ampiezza, tra due valori con un tempo superiore a 30 millisecondi senza problemi, modificare un ritardo di un solo campione su un centinaio comporta un notevole cambiamento nel tono – anzi, spesso si varier`a un ritardo deliberatamente proprio per ascoltare gli artefatti, solo passando incidentalmente da un valore specifico di tempo di ritardo ad un altro. Il primo problema (ritardi frazionari) pu`o essere affrontato utilizzando uno schema di interpolazione, esattamente come per la wavetable lookup (paragrafo 2.5). Ad esempio, supponiamo che vogliamo un ritardo di d = 1.5 campioni. Per ogni n dobbiamo stimare un valore per x[n − 1.5]. Possiamo fare questo utilizzando l’interpolazione standard a quattro punti, prendendo un polinomio cubico che passa per i quattro punti “conosciuti” (0, x[n]), (1, x[n − 1]), (2, x[n − 2]), (3, x[n − 3]) e quindi valutare il polinomio al punto 1.5. Facendo questo ripetutamente per ogni valore di n, possiamo ottenere il segnale ritardato. Questo schema di interpolazione a quattro punti pu`o essere utilizzato per qualsiasi ritardo di almeno un campione. I ritardi di meno di un campione non possono essere calcolati in questo modo perch´e abbiamo bisogno di due punti di ingresso recenti almeno come il ritardo desiderato. Questi erano disponibili nell’esempio precedente, ma per un tempo di ritardo di 0.5 campioni, per esempio, avremmo bisogno del valore di x[n + 1], che si trova nel futuro. L’accuratezza della stima potrebbe essere ulteriormente migliorata utilizzando schemi di interpolazione di ordine superiore. Tuttavia, esiste un compromesso tra la qualit` a e l’efficienza computazionale. Inoltre, se passiamo a schemi di interpolazione di ordine superiore, il tempo minimo possibile di ritardo aumenta, causando problemi in alcune situazioni. Il secondo problema da considerare sono gli artefatti – sia voluti che indesiderati – che derivano dalla modifica delle linee di ritardo. In generale, una modifica discontinua del tempo di ritardo dar`a luogo a una modifica discontinua del segnale di uscita, poich´e `e effettivamente interrotto in un punto e fatto saltare ad un altro. Se l’ingresso `e una sinusoide, il risultato `e un cambiamento di fase discontinuo. Se si desidera modificare occasionalmente la linea di ritardo tra tempi di ritardo fissati (ad esempio, all’inizio delle note musicali), allora `e possibile utilizza-


7.7. VARIABLE AND FRACTIONAL SHIFTS

188

199

Capitolo 7. Spostamenti temporali e ritardi

input time

D

output time

Figure 7.17: A variable length delay line, whose output is the input from some Figura 7.17: di ritardo lunghezza variabile, il cui output `e l’input previous time.Una Thelinea output samplesa can’t be newer than the input samples, nor rispetto a qualche tempo I campioni di output non possono essere older than the length D ofprecedente. the delay line. The slope of the input/output curve pi` u recenti campioni transposition di input, n´e of pi` uthe vecchi della lunghezza D della linea controls thedei momentary output. di ritardo. La pendenza della curva di input/output controlla la transizione momentanea dell’output.

re le tecniche di gestione delle discontinuit`a sporadiche che abbiamo introdotto nel paragrafo 4.3. In pratica queste tecniche funzionano mutando l’uscita in un modo o nell’altro. D’altra parte, se si desidera che il tempo di ritardo cambi continuamente – mentre si ascolta l’output – allora dobbiamo tener conto degli artefatti che risultano dalle modifiche. La Figura 7.17 mostra la relazione tra il tempo di input e di output in una linea di ritardo variabile. Si suppone che la linea di ritardo abbia una lunghezza massima fissata pari a D. Ad ogni campione di output (corrispondente ad un punto sull’asse orizzontale), emetteremo un campione (probabilmente interpolato) dell’input della linea di ritardo. L’asse verticale indica quale campione (intero o frazionato) utilizzare dal segnale di ingresso. Se n denota il sample number in output, l’asse verticale mostra la quantit`a n−d[n], dove d[n] `e il ritardo (variabile nel tempo) in campioni. Se indichiamo la posizione del campione di input con y[n] = n − d[n] allora l’output della linea di ritardo `e: z[n] = x[y[n]]


7.8. Fedelt` a delle linee di ritardo interpolanti

189

dove il segnale x viene calcolato al punto y[n], interpolando opportunamente nel caso y[n] non sia un intero. Questa `e esattamente la formula per la wavetable lookup (pagina 25). Possiamo utilizzare tutte le propriet`a della wavetable lookup di suoni registrati per prevedere il comportamento delle linee di ritardo variabili. Resta una differenza tra linee di ritardo e wavetables: il materiale nella linea di ritardo viene costantemente aggiornato. Non solo non possiamo leggere nel futuro, ma se la linea di ritardo ha una lunghezza di D campioni, non possiamo leggere oltre i D campioni nel passato: 0 < d[n] < D oppure, moltiplicando per −1 la disuguaglianza precedente e aggiungendo n ad ogni lato, n > y[n] > n − D. Questa ultima relazione rappresenta la regione tra le due linee diagonali di Figura 7.17; la funzione y[n] deve restare all’interno di questa striscia. Tornando al paragrafo 2.2, possiamo usare le formule di transizione momentanee per wavetables per calcolare la trasposizione t[n] dell’output. Ci`o fornisce la formula di transizione momentanea per le linee di ritardo: t[n] = y[n] − y[n − 1] = 1 − (d[n] − d[n − 1]). Se d[n] non cambia con n, il fattore di trasposizione `e 1 e il suono emerge dalla linea di ritardo alla stessa velocit`a in cui `e entrato. Ma se il tempo di ritardo aumenta in funzione di n, il suono risultante `e trasposto verso il basso e se d[n] diminuisce, verso l’alto. Questo `e chiamato effetto Doppler, e si verifica anche in natura. L’aria che il suono attraversa pu` o essere considerata come una linea di ritardo. Cambiare la lunghezza della linea di ritardo corrisponde a spostare l’ascoltatore pi` u vicino o pi` u lontano da una sorgente sonora stazionaria; l’effetto Doppler dovuto al cambiamento della lunghezza del percorso funziona esattamente nello stesso modo della linea di ritardo come se fosse nel caso fisico dell’aria. Tornando alla Figura 7.17, possiamo prevedere che non ci sia uno spostamento di tono all’inizio, ma poi quando la pendenza del percorso diminuisce, il tono scender` a per un intervallo di tempo prima di tornare al tono originale (quando la pendenza torna a uno). Il tempo di ritardo pu`o essere manipolato per dare una qualsiasi trasposizione desiderata, ma maggiore `e la trasposizione, tanto meno possiamo mantenerla prima di arrivare sulla parte inferiore o su quella superiore della regione diagonale.

7.8

Fedelt` a delle linee di ritardo interpolanti

Poich´e stiamo in effetti facendo una ricerca su wavetable, le linee di ritardo variabili introducono distorsioni ai segnali su cui operano. Inoltre, un problema pi` u sottile pu` o sopraggiungere anche quando la linea di ritardo non cambia in lunghezza: la risposta in frequenza, in situazioni reali, non `e mai perfettamente piatta per una linea di ritardo la cui lunghezza non sia un intero. Se il tempo di ritardo cambia da campione a campione, si applicano i risultati sulla distorsione del paragrafo 2.5. Per utilizzarli, supponiamo che l’ingresso


190

Capitolo 7. Spostamenti temporali e ritardi

della linea di ritardo possa essere suddiviso in sinusoidi e consideriamo separatamente ci` o che accade a ciascuna singola sinusoide. Possiamo utilizzare la Tabella 2.1 (pagina 43) per prevedere il livello RMS dei prodotti di distorsione combinati per una linea di ritardo variabile interpolata. Assumiamo qui che vogliamo utilizzare l’interpolazione a quattro punti. Per le sinusoidi con periodi superiori a 32 campioni (cio`e per frequenze inferiori a 1/16 della frequenza di Nyquist), la distorsione `e di 96 dB o migliore – improbabile che sia mai evidente. Ad una frequenza di campionamento di 44 kHz, questi periodi corrisponderebbero alle frequenze fino a circa 1400 Hertz. A frequenze pi` u alte la qualit` a si degrada, e al di sopra di 1/4 della frequenza di Nyquist i prodotti di distorsione, che sono solo a circa 50 dB, saranno probabilmente udibili. La situazione per un tono complesso dipende principalmente dalle ampiezze e dalle frequenze delle sue parziali superiori. Supponiamo, ad esempio, che le parziali di un tono sopra a 5000 Hz siano almeno 20 dB in meno rispetto alle sue parziali pi` u forti e che al di sopra di 10000 Hertz siano inferiori a 60 dB. Allora, da una stima approssimativa, i prodotti di distorsione nel range 5000 − 10000 saranno ciascuno limitati a circa −68 dB e quelli oltre i 10000 Hertz saranno limitati a circa −75 dB (perch´e la situazione peggiore nella tabella `e di circa −15 dB e questo deve essere aggiunto alla forza della parziale coinvolta). Se il contenuto nelle frequenze alte del segnale di ingresso fornisce prodotti di distorsione non accettabili, in generale `e pi` u efficace aumentare la frequenza di campionamento rispetto al numero di punti di interpolazione. Per periodi superiori a 4 campioni, raddoppiando il periodo (raddoppiando per esempio la frequenza di campionamento) la distorsione diminuisce di circa 24 dB. La risposta in frequenza della linea di ritardo interpolanti a 4 punti `e quasi piatta fino a met` a della frequenza di Nyquist, ma successivamente scende rapidamente. Supponiamo (per scegliere il caso peggiore) che il ritardo sia impostato a met` a tra due interi, ad esempio 1.5. L’interpolazione cubica d`a: x[1.5] =

−x[0] + 9x[1] + 9x[2] − x[3] . 8

Ora, sia x[n] una sinusoide (a valori reali) di ampiezza unitaria con frequenza angolare ω, la cui fase `e zero a 1.5: x[n] = cos(ω · (n − 1.5)) e calcoliamo x[1.5] utilizzando la formula sopra: x[1.5] =

9 cos(ω/2) − cos(3ω/2) . 4

Questo `e il valore di picco della sinusoide che esce fuori dalla linea di ritardo e poich´e l’ampiezza di picco in entrata valeva 1, ci`o mostra la risposta in frequenza della linea di ritardo. Questo `e illustrato nella Figura 7.18. A met`a della frequenza di Nyquist (ω = π/2) il guadagno `e di circa −1 dB, che `e un calo appena percettibile dell’ampiezza. Alla frequenza di Nyquist stessa, tuttavia, il guadagno `e zero. Come per i risultati della distorsione, la risposta in frequenza migliora radicalmente con un raddoppio della frequenza di campionamento. Se eseguiamo il nostro ritardo ad una frequenza di campionamento di 88200 Hertz invece dello standard a 44100, avremo solo circa 1 dB di scivolamento fino a 20000 Hertz.


7.9. Spostamento di tono 202

191 CHAPTER 7. TIME SHIFTS AND DELAYS

gain 1

2

Figure 7.18: Gain of a four-point interpolating delay line with a delay halfway Figura 7.18: Guadagno di una linea di ritardo con interpolazione a quattro punti between two integers. The DC gain is one. con un ritardo a met` a tra due interi. Il guadagno DC `e uno. ω, whose phase is zero at 1.5:

7.9

Spostamento di tono (pitch shifting)

x[n] = cos(ω · (n − 1.5)) Uno degli utilizzi preferiti delle linee di ritardo variabili `e quello di modificare il tono di un x[1.5] suono using in entrata utilizzando l’effetto Doppler. Pu`o essere desideand compute the above formula: rabile modificare il tono in modo variabile (casualmente o periodicamente, ad esempio), oppure mantenere un intervallo di trasposizione per un certo 9 cos(ω/2)musicale − cos(3ω/2) x[1.5] = periodo di tempo. 4 Ritornando alla Figura 7.17, vediamo che con una singola linea di ritardo This is the peak value of the sinusoid comes back out of the delay variabile possiamo mantenere qualsiasi that spostamento desiderato di tono perline, un and since the peak di amplitude going was one, this shows frequency reintervallo limitato tempo, ma se in vogliamo sostenere una the trasposizione fissponse thearriveremo delay line.sempre This isalgraphed Figure 7.18.diagonale At half dei the tempi Nyquist sa, allaoffine di fuori in dalla striscia di frequency (ω = π/2) the gainscenario is aboutpi` -1 which varieremo is a barelysemplicemente perceptible drop ritardo ammissibili. Nello u dB, semplice, la in amplitude. verso At thel’alto Nyquist frequency however, the gainnella is zero. trasposizione e verso il bassoitself, in modo da rimanere striscia. As with funziona, the resultsadfor distortion, the frequency response improves radically Questo esempio, se vogliamo applicare un vibrato ad un suono with doublinginofFigura sample7.19. rate.Qui If we run our delay at a `esample rate of 88200 comeamostrato la funzione di ritardo Hertz instead of the standard 44100, we will get only about 1 dB of roll-off all the way up to 20000 Hertz. d[n] = d0 + a cos(ωn) dove d0 `e il ritardo medio, a `e l’ampiezza della variazione del ritardo medio La trasposizione momentanea (pagina 189) `e approssimativamente A favorite use of variable delay to alter the pitch of an incoming sound t = 1lines + aωiscos(ωn − π/2). using the Doppler effect. It may be desirable to alter the pitch variably (ranQuestaorvaria in valore for traexample), 1 − aω e 1or+else aω. to maintain a fixed musical interval domly periodically, Supponiamo,over d’altra parte,of che vogliamo mantenere una trasposizione coof transposition a length time. stante su un intervallo tempo pi` uthat lungo. caso non possiamo Returning to Figure di 7.17, we see withIna questo single variable delay line wemancan tenere per trasposizione, `e comunque su maintain anysempre desiredlapitch shift for a ma limited interval ofpossibile time, butmantenerla if we wish to intervalli fissatitransposition di tempo interrotti modifiche discontinue, comethe mostrato in sustain a fixed we will da always eventually land outside diagonal Figura Il tempo di times. ritardo In `e l’output di unascenario, opportuna a dente strip of 7.20. admissible delay the simplest we funzione simply vary the di sega normalizzata l’output linea diinritardo variabile viene inviluppata, transposition up and edown so asdella to remain the strip. come mostrato in figura, per evitare le discontinuit`a. Questo viene eseguito come mostrato in Figura 7.21. L’output del generatore a dente di sega `e utilizzato in due modi. Innanzitutto `e regolato per funzionare tra i limiti d0 e d0 + s, e questa dente di sega modificata controlla e ω `e una frequenza angolare. 7.9 Pitch shifting


192

Capitolo 7. Spostamenti temporali e ritardi

input time

output time

Figure a variable delay Since the pitch shifte alternates Figura7.19: 7.19:Vibrato Vibratousing usando una linea di line. ritardo variabile. Poich´ lo sposta204 CHAPTER 7. TIME SHIFTS AND DELAYS between and verso downward, is possible to `maintain without drifting mento diupward tono varia l’alto eit verso il basso, e possibileitmantenerlo senza outside strip of della admissible deviarethe al di fuori strisciadelay. di ritardo ammissibile.

input time

output time

Figure Piecewisedilinear delay functions a constant transpoFigura 7.20: Funzioni ritardo lineari a tratti to permaintain mantenere una trasposizione sition (except at the points of discontinuity). The outputs are subiscono enveloped un as costante (ad eccezione dei punti di discontinuit` a). Gli outputs suggested by thesuggerito bars above each point, toogni smooth theper output at the pointsnei of inviluppo come dalle barre sopra punto, smussare l’uscita discontinuity in delaya time. punti di discontinuit` nel tempo di ritardo. This works, for example, if we wish to apply vibrato to a sound as shown in Figure 7.19. Here the delay function is d[n] = d0 + a cos(ωn) where d0 is the average delay, a is the amplitude of variation about the average delay, and ω is an angular frequency. The Momentary Transposition (Page 200), is approximately


7.9. Spostamento di tono

193

7.9. PITCH SHIFTING

205

f 1 IN 0

s N delay time

d

0

1 0

0

N

OUT

Figure a variable delaydiline as avariabile pitch shifter. wave Figura 7.21: Using Utilizzo di una linea ritardo come The pitchsawtooth shifter. L’oncreates a smoothly or decreasing delay The output of the senza delay da a dente di sega increasing crea un tempo di ritardo chetime. aumenta o diminuisce line is enveloped to avoid copy of same discontidiagram irregolarit` a. L’output delladiscontinuities. linea di ritardoAnother `e inviluppato perthe evitare should run 180 degrees (π radians) out of phase withessere this one. nuit` a. Un’altra copia dello stesso diagramma deve eseguita a 180 gradi (π radianti) fuori fase rispetto al primo.


194

Capitolo 7. Spostamenti temporali e ritardi

il tempo di ritardo, in campioni. Il ritardo iniziale d0 deve essere almeno sufficiente per rendere possibile il ritardo variabile; per l’interpolazione a quattro punti deve essere di almeno un campione. Valori maggiori per d0 aggiungono un ritardo addizionale, costante, all’output; questo `e generalmente proposto come un ulteriore controllo in un pitch shifter poich´e `e essenzialmente gratuito. La quantit` a s `e talvolta chiamata dimensione della finestra (window size) e corrisponde approssimativamente alla lunghezza del campione in un campionatore ciclico (paragrafo 2.2). L’output dell’onda a dente di sega `e anche utilizzato per inviluppare l’output stesso esattamente come nel caso del campionatore wavetable di Figura 2.7 (pagina 36). L’inviluppo `e zero nei punti in cui l’onda a dente di sega si riavvolge e, in mezzo, aumenta senza irregolarit`a fino ad un valore massimo di 1 (per guadagno unitario). Se la frequenza dell’onda a dente di sega `e f (in cicli al secondo), il suo valore spazia da 0 a 1 ogni R/f campioni (dove R `e la frequenza di campionamento). La differenza tra valori successivi `e dunque f /R. Se denotiamo con x[n] l’output dell’oscillatore a dente di sega, allora x[n + 1] − x[n] =

f R

(ad eccezione dei punti di wraparound). Se regoliamo l’intervallo di uscita dell’oscillatore wavetable sul valore s (come viene fatto in figura), otterremo una nuova pendenza: sf s · x[n + 1] − s · x[n] = . R Aggiungere la costante d0 non ha alcun effetto su questa pendenza. La trasposizione momentanea (pagina 189) `e quindi: t=1−

sf . R

Per completare la progettazione del pitch shifter dobbiamo aggiungere un’altra copia, ma met` a fuori fase. Ci` o d` a origine ad uno schema di lettura del ritardo come mostrato in Figura 7.22. Il pitch shifter pu` o trasportare sia in maniera ascendente (usando le frequenze negative per l’onda a dente di sega, come nella figura) o in maniera discendente, utilizzando quelle positive. Lo spostamento di tono `e di solito controllato cambiando f e mantenendo s fisso. Per ottenere un intervallo di trasposizione desiderato t, poniamo f=

(t − 1)R . s

La window size s dovrebbe essere scelta abbastanza piccola, se possibile, in modo che le due copie ritardate (di s/2 campioni) non suonino come echi distinti. Tuttavia, per valori molto piccoli di s si ha un aumento di f ; valori di f superiore a circa 5 Hertz comportano una modulazione molto udibile. Quindi, se sono richieste trasposizioni molto grandi, potrebbe essere necessario aumentare il valore di s. I valori tipici vanno da 30 a 100 millisecondi (circa da R/30 a R/10 campioni). Anche se la frequenza pu` o essere modificata a piacimento, anche in maniera discontinua, `e necessario modificare s con maggiore attenzione. Una possibile


7.10. Esempi

195

input time

output time

Figure 7.22: 7.22: Schema The pitch delay reading pattern usingutilizzando two delay due lines, so Figura di shifter’s lettura del ritardo del pitch shifter linee that one isinatmodo maximum amplitude exactly massima when theesattamente other is switching. di ritardo, che uno sia all’ampiezza quando l’altro sta commutando.

soluzione `e quella di disattivare l’output mentre si cambia s in modo discontinuo; in alternativa, s pu` o essere variata, in maniera continua, con delle rampe, ma questo provoca effetti Doppler difficili da controllare. Una buona scelta per l’inviluppo `e un mezzo ciclo di sinusoide. Se supponiamo, in media, che le due uscite di ritardo siano non-correlate (pagina 10), la potenza del segnale dalle due linee di ritardo, dopo l’inviluppo, avr`a somma pari ad una costante (poich´e la somma dei quadrati dei due inviluppi `e uno). Su questo algoritmo di pitch shifting esistono molte varianti. Una variante classica utilizza una singola linea di ritardo, senza alcun inviluppo. In questa situazione `e necessario scegliere il punto in cui il tempo di ritardo salta e il punto a cui si salta, in modo che l’uscita rimanga continua. Ad esempio, si potrebbe trovare un punto in cui il segnale di uscita passa attraverso lo zero (uno “zerocrossing”) e saltare in maniera discontinuit`a ad un altro. Utilizzare una sola linea di ritardo ha il vantaggio che l’uscita del segnale suona pi` u “presente”. Uno svantaggio `e che, poich´e il tempo di ritardo `e in funzione del valore del segnale di ingresso, l’output non `e pi` u una funzione lineare dell’input, pertanto gli inputs non periodici possono dare origine ad artefatti quali la differenza di tono.


208 196

CHAPTER TIME SHIFTS AND DELAYS Capitolo 7. 7. Spostamenti temporali e ritardi

loadbang metro 1000 tabplay~ G01-tab input signal write to delay line delwrite~ delay1 1000 0

<-- delay time (msec)

delread~ delay1 +~ | (OUT)

read from delay line

Figure 7.23: Example patch G01.delay.pd, showing a noninterpolating delay Figura 7.23:timePatch dell’esempio G01.delay.pd, che mostra un ritardo with a delay controlled in milliseconds. non-interpolato con un tempo di ritardo controllato in millisecondi. A good choice of envelope is one half cycle of a sinusoid. If we assume on 7.10 that Esempi average the two delay outputs are uncorrelated (Page 11), the signal power from the two delay lines, after enveloping, will add to a constant (since the sum of squares the two envelopes is one). Linea diofritardo fissa, non-interpolata Many variations exist on this pitch shifting algorithm. One classic variant L’esempio (Figura 7.23) applica di ritardo semplice ad uses a singleG01.delay.pd delay line, with no enveloping at all.una In linea this situation it is necessary un segnale in ingresso. Sono necessari due nuovi oggetti: to choose the point at which the delay time jumps, and the point it jumps to, so that the output stays continuous. example, couldIlfind a point wherearguthe delwrite∼ : definisce e scrive suFor una linea dione ritardo. primo creation output signal passes through zero (a “zero crossing”) and jump discontinuously ment fornisce il nome della linea di ritardo (e due linee di ritardo non possono to another one. Using only one delay line has the advantage the signal condividere lo stesso nome). Il secondo creation argument `e la that lunghezza della output sounds more “present”. A disadvantage is that, since the delay is linea di ritardo in millisecondi. L’ingresso riceve un segnale audio e lotime scrive acontinuamente function of input signal value, the output is no longer a linear function of the nella linea di ritardo. input, so non-periodic inputs can give rise to artifacts such as difference tones. delread∼ : legge (o “tap’, da“to tap”-tamburellare, NdT) una linea di ritardo. Il primo creation argument fornisce il nome della linea di ritardo (che dovrebbe coincidere con il nome del corrispondente oggetto delwrite∼; questo 7.10 Examples `e il modo in cui Pd sa quale delwrite∼ associare all’oggetto delread∼). Il secondo creation argument (opzionale) Fixed, noninterpolating delay fornisce line il tempo di ritardo in millisecondi. Questo non pu` o essere negativo e non pu`o neanche superare la lunghezza della lineaG01.delay.pd di ritardo specificata nell’oggetto numeri in entraExample (Figure 7.23) applies adelwrite∼. simple delayI line to an input ta (messaggi) possono utilizzati per modificare dinamicamente il tempo signal. Two new objectsessere are needed: didelwrite~ ritardo. Tuttavia, ci` o comporter` a unaline. modifica discontinua che : define and write to a delay The first creation dell’output, argument gives dovrebbe pertanto essere disattivato quando il tempo di ritardo cambia. the name of the delay line (and two delay lines may not share the same name). L’esempio accoppia semplicemente un oggetto delwrite∼ con un oggetto delread∼ per fare un ritardo semplice non-interpolante. Il segnale di ingresso `e una registrazione in loop. Il segnale ritardato e quello non ritardato vengono sommati per creare un filtro a pettine non-ricircolante. A tempi di ritardo inferiori a circa 10 millisecondi, l’effetto filtrante `e pi` u prominente e, soprattutto,


7.10. Esempi 210

CHAPTER 7. TIME SHIFTS AND DELAYS

197

<-- pitch

0 mtof

1

phasor~ adsr 1 100 1000 0 1000 *~

*~ input signal

0

<-- delay time

delread~ G02-del 160

read from delay line

*~ 0.7 feedback gain +~ add the original and the delayed signal | delwrite~ G02-del 2000 write to delay line (OUT)

Figure 7.24: Recirculating delay (still noninterpolating).

Figura 7.24: Ritardo ricircolante (ancora non-interpolante). 0

<-- pitch

si sente un eco discreto. Non c’`e alcuna protezione di disattivazione per l’output mtof del ritardo,0 quindi clicks sono possibili quando cambia il tempo di ritardo. <-- i timbre * 0.5

* 0.01

0

pack 0 100

/ 100

<-- cycle frequency (hundredths)

Filtro a pettine ricircolante osc~

0

cycle depth (msec) L’esempio G02.delay.loop.pd (Figura 7.24)<-mostra come effettuare una rete di line~ osc~ 0 ritardo ricircolante. Il ritardo `e nuovamente ottenuto utilizzando una coppia pack 0 100 *~ delwrite∼/delread∼. L’output e moltiplicato per un +~ 1 dell’oggetto delread∼ ` line~ guadagno di feedback di 0.7 e poi inviato all’oggetto delwrite∼. Un input cos~ (fornito dal phasor∼ e dagli*~ oggetti ad esso associati) viene aggiunto all’ingresso 0 <-- feedback hip~ 10 di delwrite∼; questa somma diventa l’output della rete. Questo `e il filtro a +~ 1.46 * 0.01 (hundredths) pettine clip~ ricircolante -0.2 0.2 del paragrafo 7.4. vd~ G03-del La rete di oggetti tilde non ha cicli, nel pack senso 0di100 oggetti che alimentano +~ direttamente o indirettamente (tramite connessioni attraverso altri oggetti) se line~ tra gli oggetti delwrite∼ stessi. Il feedback della rete si verifica implicitamente hip~ 5 e| delread∼. (OUT)

Linea di ritardo variabile

*~

clip~ -1 1 delwrite~ G03-del 1000

L’esempio seguente, G03.delay.variable.pd (Figura 7.25), `e un altro filtro a pettine ricircolante, questa volta ottenuto utilizzando una linea di ritardo a lunghezza variabile. Qui7.25: vieneThe introdotto un interpolating, nuovo oggetto: Figure flanger: an variable delay line. vd∼ : lettura da una linea di ritardo, con un tempo di ritardo variabile. Come l’oggetto delread∼, questo legge da una linea di ritardo il cui nome `e specificato come creation argument. Invece di utilizzare un secondo argomento e/o messaggi di controllo per specificare il tempo di ritardo, per l’oggetto vd∼ il ritardo in millisecondi `e specificato da un segnale audio in entrata. La linea di ritardo viene letta utilizzando l’interpolazione (cubica) a quattro punti; il ritardo minimo ottenibile `e un campione.


0

signal

<-- delay time

delread~ G02-del 160

read from delay line

*~ 0.7 feedback gain +~ add the original and the delayed signal | delwrite~ G02-del 2000 write to delay line (OUT)

198

0

Capitolo 7. Spostamenti temporali e ritardi

Figure 7.24: Recirculating delay (still noninterpolating). <-- pitch

mtof

0

* 0.5 osc~

<-- timbre

* 0.01

0

pack 0 100

/ 100

line~

osc~ 0

*~

<-- cycle frequency (hundredths)

+~ 1

cos~

0

<-- cycle depth (msec)

pack 0 100 line~

*~

hip~ 10 clip~ -0.2 0.2

0

<-- feedback * 0.01 (hundredths)

+~ 1.46 vd~ G03-del

pack 0 100

+~ hip~ 5 | (OUT)

line~ *~ clip~ -1 1 delwrite~ G03-del 1000

Figure 7.25: The flanger: an interpolating, variable delay line.

Figura 7.25: Il flanger: una linea di ritardo variabile, interpolante.

Qui gli oggetti sul lato sinistro, dall’alto verso il basso fino all’oggetto clip∼ -0.2 0.2, formano una rete waveshaping; l’indice `e impostato dal controllo “timbre” e l’output del waveshaping varia tra una quasi sinusoide e un suono brillante e ronzante. L’output viene sommato all’output dell’oggetto vd∼. La somma viene poi filtrata con un passa-alto (l’oggetto hip∼ in basso a sinistra), moltiplicata per un guadagno di feedback, ritagliata e scritta nella linea di ritardo in basso a destra. C’`e un controllo a destra per impostare il guadagno di feedback; qui, in contrasto con l’esempio precedente, `e possibile specificare un guadagno superiore a uno per ottenere feedback instabili. Per questo motivo il secondo oggetto clip∼ viene inserito nel ciclo di ritardo (appena sopra l’oggetto delwrite∼) in modo che il segnale non possa superare 1 in valore assoluto. La lunghezza del ritardo `e controllata dall’input del segnale nell’oggetto vd∼. Un oscillatore con frequenza e guadagno variabili, al centro della figura, fornisce il tempo di ritardo. All’oscillatore viene sommato 1 per renderlo non-negativo prima di moltiplicarlo per il controllo “cycle depth”, che imposta effettivamente il range dei tempi di ritardo. Il tempo di ritardo minimo di 1.46 millisecondi viene aggiunto in modo che il range vero dei tempi di ritardo sia tra il minimo e lo stesso pi` u due volte la “depth” (profondit`a). La ragione di questo tempo di ritardo minimo sar` a ripresa nella spiegazione del prossimo esempio. I filtri a pettine con tempi di ritardo variabili sono a volte chiamati flangers. Quando il tempo di ritardo cambia, i picchi della risposta in frequenza si muovono in su e in gi` u in frequenza, in modo che il timbro dell’output cambia costantemente in modo caratteristico.


7.10. Esempi 212

199 CHAPTER 7. TIME SHIFTS AND DELAYS

(a) (b) a~ b~

c~

a~

b~

d~

Figure 7.26: Order of execution of tilde objects in Pd: (a), an acyclic network. Figura 7.26: may Ordine esecuzione di oggetti Pd: (a), or una“a-c-b-d”. rete aciclica. The objects be di executed in either the tilde orderin“a-b-c-d” In Gli oggetti possono essere eseguiti nell’ordine “a-b-c-d” o “a-c-b-d”. Nellaofparte part (b), there is a cycle, and there is thus no compatible linear ordering the (b), c’`ebecause un ciclo, e quindi non need c’`e un ordinamento compatibile degli objects each one would to be run before lineare the other. oggetti perch´e ognuno avrebbe bisogno di essere eseguito prima dell’altro. details.) Ordine di effect esecuzione e limiti inferiori tempi di ritardo To see the of the order of computation on asui delwrite~/delread~ pair, we can write explicitly the input and output signals in the two possible orders, Quando si utilizzano ritardi (cos`ı come altri oggetti di tilde, in Pd, di condiviwith minimum possible delay. If the write first, at eseguite a block sionethe di stato), l’ordine in cui le operazioni di operation scrittura ecomes lettura sono starting at sample number N , the operation can be written as: pu` o influenzare l’esito del calcolo. Anche se gli oggetti tilde in una patch pos-

sono avere una topologia audio, in realt`a Pd li esegue x[N ], . complessa . . , x[N + Bdi−connessioni 1] −→ delwrite~ tutti in ordine sequenziale, uno dopo l’altro, per calcolare ogni blocco di output audio. BQuesto ordinesize lineare garantito perHaving essere put compatibile con le interconwhere is the block (as in`eSection 3.2). those particular samples nessioni audio,line, nel senso che non viene eseguito calcolo di unvalues oggetto tilde into the delay a following delread~ is ablealcun to read the same out: finch´e non sono stati calcolati tutti gli inputs, per quel blocco stesso. delread~ x[Ndi ], .topologie . . , x[N +degli B − 1] La Figura 7.26 mostra due −→ esempi oggetti tilde e la loro interpretazione in una sequenza di calcolo. Nella parte (a) ci sono quattro On the other suppose delread~l’oggetto object comes the delwrite~. oggetti tilde e, hand, a causa delle the connessioni, a∼ before deve produrre il suo Then the samples x[N ], . . . , x[N + B − 1] have not yet been stored in the adelay output prima che si possa eseguire sia b∼ o c∼; ed entrambi questi, loro line, the mostutilizzati recent samples that may be read belong to the ordini previous volta,sovengono nel calcolo di d∼. Quindi i possibili di block: questi quattro oggetti sono “a-b-c-d” e “a-c-b-d”. Questi due ordinamenti avranno delread~ −→ x[N − B], . . . , x[N − 1] esattamente lo stesso risultato, a meno che il calcolo di b∼ e c∼ non influenzi, in qualche modo, l’output l’uno dell’altro (come potrebbero fare, ad esempio, le x[N ], . . . , x[N + B − 1] −→ delwrite~ operazioni di ritardo). HereLathe minimum delay we mostra can possibly obtain is thetilde. block Questa size B. rete So non the parte (b) della figura un ciclo di oggetti minimum is eitherin0 un or B, depending on the order in which the delread~ pu` o esseredelay organizzata ordine sequenziale compatibile, poich´ e sia a∼ che and delwrite~objects are sorted intosia a sequence execution. b∼ richiedono che l’output dell’altro calcolato of prima. In generale, un ordine Looking di back at the patches of Figures 7.24seand which feature sequenziale oggetti tilde `e possibile se e solo non7.25, ci sono cicliboth in qualsiasi recirculating delays, delread~ vd~loro object must be placed earlier in the punto della rete deglithe oggetti tilde eordelle interconnessioni di segnale audio. sequence than delwrite~ is true of (si anynoti design a delay’s Pd segnala unthe errore quando object. appare This un tale ciclo cheinlawhich situazione per output is fed back di into its input. minimum possible delay is B samples. le interconnessioni controllo tra The oggetti `e pi` u complicata e flessibile, si veda For a (typical) sample rate 44100 Hertz and block size of 64 samples, this la documentazione di Pd perofi dettagli). comes 1.45 milliseconds. This might not sound first like a very important Pertovedere l’effetto dell’ordine di calcolo su unaatcoppia delwrite∼/read∼, restriction. But if esplicitamente you are trying itosegnali tune adirecirculating to a possibili specific possiamo scrivere ingresso e dicomb uscitafilter nei due ordini, con il minimo ritardo possibile. Se l’operazione di scrittura viene prima, in un blocco a partire dal sample number N , l’operazione pu`o essere scritta come: x[N ], . . . , x[N + B − 1] −→ delwrite∼


200

Capitolo 7. Spostamenti temporali e ritardi

dove B `e la dimensione del blocco (come nel paragrafo 3.2). Avendo inserito questi particolari campioni nella linea di ritardo, un delread∼ successivo `e in grado di leggere gli stessi valori: delread∼ −→ x[N ], . . . , x[N + B − 1]. D’altra parte, supponiamo che l’oggetto delread∼ arrivi prima dell’oggetto delwrite∼. Quindi i campioni x[N ], . . . , x[N + B − 1] non sono ancora stati memorizzati nella linea di ritardo, perci`o i campioni pi` u recenti che possono essere letti appartengono al blocco precedente: delread∼ −→ x[N − B], . . . , x[N − 1] x[N ], . . . , x[N + B − 1] −→ delwrite∼ . Qui il ritardo minimo che possiamo ottenere `e la dimensione B del blocco. Quindi il ritardo minimo `e 0 o B, a seconda dell’ordine in cui gli oggetti delwrite∼ e read∼, vengono ordinati in una sequenza di esecuzione. Guardando nuovamente alle patch delle Figure 7.24 e 7.25, che forniscono entrambi ritardi ricircolanti, gli oggetti delread∼ o vd∼ devono essere posizionati prima, nella sequenza, dell’oggetto delwrite∼. Questo vale per qualsiasi schema in cui l’output del ritardo viene ri-inviato al suo ingresso. Il ritardo minimo possibile `e B campioni. Per una frequenza di campionamento (tipica) di 44100 Hertz e una dimensione del blocco di 64 campioni, si ha un ritardo minimo di 1.45 millisecondi. Questo, in un primo momento, potrebbe non suonare come una limitazione molto importante. Ma se si sta tentando di sintonizzare un filtro a pettine ricircolante a uno specifico tono, quello pi` u alto possibile che si pu` o ottenere `e solo di circa 690 Hertz. Per ottenere ritardi ricircolanti pi` u brevi `e necessario aumentare la frequenza di campionamento o diminuire la dimensione del blocco. L’esempio G04.control.blocksize.pd (Figura 7.27) mostra come la dimensione del blocco possa essere controllata in Pd utilizzando un nuovo oggetto: block∼ , switch∼ : imposta la dimensione del blocco locale nella finestra della patch in cui l’oggetto si trova. Le dimensioni dei blocchi sono normalmente potenze di due. Inoltre, l’oggetto switch∼ pu`o essere utilizzato per attivare e disattivare il calcolo dell’audio all’interno della finestra, utilizzando i messaggi di controllo. I creation arguments aggiuntivi possono impostare la frequenza di campionamento locale e specificare i calcoli sovrapposti (illustrati nel Capitolo 9). Nella parte (a) della figura (la patch principale), un impulso rettangolare viene inviato alla sottopatch pd delay-writer, il cui output viene quindi restituito alla patch principale. La parte (b) mostra il contenuto della sottopatch, che invia gli impulsi in una rete di ritardo ricircolante. L’oggetto block∼ specifica che, in questa sottopatch, il calcolo del segnale utilizza una dimensione del blocco (B) di solo un campione. Quindi il ritardo minimo raggiungibile `e un campione invece dei 64 di default. Mettere un impulso (o un altro segnale di eccitazione) in un filtro a pettine ricircolante per ottenere un tono viene a volte chiamata sintesi di KarplusStrong, ed `e stata descritta in un loro lavoro [KS83], anche se l’idea sembra essere pi` u vecchia. Si ritrova ad esempio nel pezzo di Paul Lansky del 1979, Six Fantasies on a Poem by Thomas Campion.


7.10. Esempi

201

7.10. EXAMPLES

213

(a)

(b)

loadbang metro 500 random 60 del 1 1

0

vline~

incoming pulses

delay time

inlet~

inlet delread~ G04-del

+ 30 mtof expr 1000/$f1

pd delay-writer | (OUT)

+~

*~ 0.99

delwrite~ G04-del 1000 outlet~

block~ 1 set block size

Figure 7.27: A patch using block size control to lower the loop delay below the Figura 64 7.27: Una patch utilizza controllo della dimensione delwith blocco normal samples: (a) theche main patch;il(b) the “delay-writer” subpatch a per block~ object and a recirculating network. abbassare il ritardo del ciclo al delay di sotto dei normali 64 campioni: (a) la patch

principale; (b) la sottopatch “delay-writer” con un oggetto block∼ e una rete di ritardo ricircolante. pitch, the highest you can get only comes to about 690 Hertz. To get shorter 214 CHAPTER 7. TIME DELAYS recirculating delays you must increase the sample rate orSHIFTS decreaseAND the block size. Example G04.control.blocksize.pd (Figure 7.27) shows how the block size delay in 45 can be controlled in Pd using a new object: samples (a) (b) 44.1 the object block~ switch~ : Set the local block size of the patch /window pd ,pulse sits in. Block sizes are normally powers of two. The switch~ pack object, 0in 30 addition, delwrite~ G05−d1 1000 within the window on and off, using can be used to turn audio computation control messages. Additional creation arguments can set theline~ local sample rate G05−d1computations (demonstrated in Chapter 9). and specifyvd~ overlapping pd pulse In +~ part (a) of the figure (the main patch), a rectangular pulse is sent to the pd delay−writer pd delay-writer subpatch, whose output is then returned to the main patch. (BAD) Part (b) shows the contents of the subpatch, which sends the pulses into a pd delay−reader recirculating delay. The block~ object specifies that, in this subpatch, signal computation uses a block size (B) of only one. So the minimum achievable delay (GOOD) is one sample instead of the default 64. Putting a pulse (or other excitation signal) into a recirculating comb filter Figure Using subpatches ensure that delay are diwritten Figura Utilizzo di sottopatches per assicurare chelines le linee ritardo siano to make 7.28: a pitch is sometimes calledtoKarplus-Strong synthesis, having been de-before they are read in non-recirculating networks: (a) the delwrite~ and vd~ objects scritte prima di essere lette in reti non-ricircolanti: (a) gli oggetti delwrite∼ scribed in a paper by them [KS83], although the idea seems to be older. It might be executed in either the “right” or the “wrong” (b) delwrite~ e vd∼up potrebbero essere eseguiti in 1979 ordine “giusto” oorder; “errato”; (b) l’oggetto shows for example in Paul Lansky’s piece, Six Fantasies on athe Poem by object isCampion. inside the pd delay-writer subpatch and the vd~e l’oggetto object is vd∼ inside`e delwrite∼ `e all’interno della sottopatch pd delay-writer Thomas

the pd delay-reader one. pd Because of the audio connection between theaudio two all’interno della sottopatch delay-reader. A causa della connessione subpatches, the order ofl’ordine execution of the read/write pair is to be the tra le due sottopatches, di esecuzione della coppia di forced lettura/scrittura one.a essere quello corretto. `correct e costretto

Order of execution in non-recirculating delay lines In non-recirculating delay networks, it should be possible to place the operation of writing into the delay line earlier in the sequence than that of reading it. There should thus be no lower limit on the length of the delay line (except whatever is imposed by the interpolation scheme; see Section 7.7). In languages such as Csound, the sequence of unit generator computation is (mostly) explicit, so this is easy to specify. In graphical patching environments, however, the order is implicit and another approach must be taken to ensuring that, for example, a delwrite~ object is computed before the corresponding delread~ object. One way of accomplishing this is shown in example G05.execution.order.pd (Figure


7.10. 202 EXAMPLES

215 Capitolo 7. Spostamenti temporali e ritardi

pd looper delwrite~ G06-del 100 fiddle~ 2048 unpack

mtof fundamental frequency

moses 1

expr 500/$f1

1/2 period, in msec

t f b samplerate~ expr 2048000/$f1 + delread~ G06-del

estimate fiddle~ delay as one window (in msec)

pack 0 20 line~

vd~ G06-del +~ | (OUT)

Figure 7.29: An “octave doubler” uses pitch information (obtained using a Figura 7.29: Unto“octave utilizza le informazioni di tono in (ottenute fiddle~ object) tune a doubler” comb filter to remove the odd harmonics an inusando un oggetto fiddle∼) per sintonizzare un filtro a pettine per rimuovere coming sound. gli armonici dispari in un suono in entrata. In this example, the “right” and the “wrong” way to make the comb filter Ordine di different esecuzione linee diless ritardo have audibly results.inFor delays than 64non-ricircolanti samples, the right hand side of the patch (using subpatches) gives the correct result, but the left hand Nellecan’t reti di ritardodelays non-ricircolanti, dovrebbe posizionare, nella side produce below the 64 sample essere block possibile size. sequenza, l’operazione di scrittura nella linea di ritardo prima di quella che la legge. Non `e quindi previsto un limite inferiore della lunghezza della linea di Non-recirculating comb octave ritardo (ad eccezione di ci` o che `e filter impostoas dallo schemadoubler di interpolazione, vedere il paragrafo 7.7). In linguaggi come Csound, la sequenza di calcolo del generatore In example G06.octave.doubler.pd (Figure 7.29) we revisit the idea of pitchunitario ` e (in gran parte) esplicita, quindi ` e facile da specificare. Negli ambienti based octave shifting introduced earlier in E03.octave.divider.pd. There, knowdi patching grafici, tuttavia, l’ordine ` e implicito ed ` e necessario adottare un ing the periodicity of an incoming sound allowed us to tune a ring modulator altro approccio per assicurare che, ad esempio, un oggetto delwrite∼ venga to introduce subharmonics. Here we realize the octave doubler described in calcolato7.3. prima dela corrispondente oggetto delread∼. Unwe modo Section Using variable, non-recirculating comb filter takeper out realizzare odd harci` o ` e mostrato nell’esempio G05.execution.order.pd (Figura 7.28). monics, leaving only the even ones, which sound an octave higher. As before, parte (a) della figura, le is connessioni nella patch nonoperation, determinano in the Nella spectral envelope of the sound roughly preserved by the so we quale ordine le due operazioni di ritardo appaiano nella sequenza di calcolo decan avoid the “chipmunk” effect we would have got by using speed change to gli the oggetti tilde; l’oggetto delwrite∼ potrebbe essere calcolato prima o dopo do transposition. l’oggetto vd∼. Se vogliamo che l’operazione di scrittura verifichi The comb filtering is doneassicurarci by combining two delayed copies of thesiincoming prima dell’operazione di lettura, possiamo procedere come nella parte (b) della signal (from the pd looper subpatch at top). The fixed one (delread~) is set to figura e mettere le due operazioni in sottopatches, collegandole tramite segnali the window size of the pitch following algorithm. Whereas in the earlier example audio in modo che la prima sottopatch debba essere calcolata prima della seconda (il calcolo audio nelle sottopatches `e fatto atomicamente, nel senso che tutti i contenuti della sottopatch sono considerati come per il calcolo audio per la sottopatch nel suo complesso. Quindi tutto quello che c’`e in una sottopatch si verifica prima di tutto quello che c’`e nella seconda).


7.10. Esempi

203

In questo esempio, il modo “giusto” e quello “sbagliato” per fare il filtro a pettine hanno risultati udibili diversi. Per i ritardi di meno di 64 campioni, il lato destro della patch (utilizzando le sottopatches) d`a il risultato corretto, ma il lato sinistro non pu` o produrre ritardi con blocchi di dimensione inferiori a 64 campioni.

Filtro a pettine non-ricircolante come octave doubler Nell’esempio G06.octave.doubler.pd (Figura 7.29) rivisitiamo l’idea di spostamento di ottave, basato sul tono, che `e stata introdotta precedentemente nell’esempio E03.octave.divider.pd. In quel caso, conoscere la periodicit`a di un suono in entrata ci ha permesso di sintonizzare un modulatore ad anello per introdurre sub-armonici. Qui realizziamo l’octave doubler descritto nel paragrafo 7.3. Utilizzando un filtro a pettine variabile e non-ricircolante, rimuoviamo gli armonici dispari, lasciando solo quelli pari, che suoneranno ad un’ottava superiore. Come prima, l’inviluppo spettrale del suono `e preservato approssimativamente dall’operazione, in modo da evitare l’effetto “chipmunk” che avremmo ottenuto utilizzando il cambio di velocit`a per effettuare la trasposizione. Il filtraggio a pettine `e fatto combinando due copie ritardate del segnale in entrata (dalla sottopatch pd looper in cima). Quella fissa (delread∼) `e impostata sulla dimensione della finestra dell’algoritmo di tracciamento del tono. Mentre nell’esempio precedente questo `e stato nascosto in un’altra sottopatch, possiamo adesso mostrarlo esplicitamente. Il ritardo in millisecondi `e stimato essere pari alla finestra di analisi, di 2048 campioni, utilizzata dall’oggetto fiddle∼; in millisecondi questo diventa pari a 1000 · 2048/R dove R `e la frequenza di campionamento. Il ritardo variabile `e lo stesso, pi` u 1/2 del periodo misurato del suono in entrata, o 1000/(2f ) millisecondi dove f `e la frequenza in cicli al secondo. La somma di questo e del tempo di ritardo fisso viene quindi resa regolare usando un oggetto line∼ per ottenere il segnale di ingresso per la linea di ritardo variabile. Poich´e la differenza tra i due ritardi `e 1/(2f ), le frequenze di risonanza del filtro a pettine risultante sono 2f, 4f, 6f, . . . ; la risposta in frequenza (paragrafo 7.3) `e zero alle frequenze f, 3f, . . . , quindi il suono risultante contiene solo le parziali multiple di 2f – un’ottava superiore all’originale. Visto in un altro modo, il suono in entrata viene emesso due volte, con una differenza di met`a ciclo; gli armonici dispari vengono quindi spostati a 180 gradi (π radianti) e annullati; gli armonici pari sono in fase con le loro copie ritardate e rimangono nella somma. Sia questo che l’octave divider possono essere alterati per fare spostamenti con rapporti di 3 o 4 a 1 in frequenza e possono anche essere combinati per fare spostamenti composti come una quinta musicale (un rapporto di 3:2) spostando in basso di un’ottava e quindi alzando di un fattore tre (lo spostamento in basso va fatto prima di quello verso l’alto per ottenere i risultati migliori).

Filtro a pettine complesso variabile: shakers L’esempio G07.shaker.pd (Figura 7.30) mostra un modo diverso di estendere l’idea di un filtro a pettine. Qui combiniamo il segnale di ingresso con quattro


204

Capitolo 7. Spostamenti temporali e ritardi

frequency

time constant (msec) 0

on/off

0 phasor~ 80 delwrite~ G07-del 30 *~

line~

metro f

* 4

+ 1 mod 4

t f b delread~ G07-del 30 *~

line~

random 1000 expr 2 * $f1/1000 - 0.7

delread~ G07-del 17 *~

line~

pack 0 0 200 route 0 1 2 3

delread~ G07-del 11 *~

line~

+~ | (OUT)

Figure 7.30: A “shaker”, a four-tap comb filter with randomly varying gains on

Figura the taps.7.30: Uno “shaker”, un filtro a pettine a quattro taps con guadagni a variazione casuale nei taps.

diversi spostamenti di tempo (invece di due, come nel filtro a pettine nonricircolante originale), ognuno con un diverso guadagno positivo o negativo. A tal fine, inseriamo il segnale di ingresso in una linea di ritardo e facciamo un “tap” in tre punti diversi; il quarto “tap” `e il segnale originale, non ritardato. Per pensare alla risposta in frequenza di un filtro a pettine a quattro taps, consideriamo innanzitutto cosa succede quando due dei quattro guadagni sono vicini allo zero. Otterremo quindi un semplice filtro a pettine non-ricircolante, con la leggera complicazione che i guadagni delle due copie ritardate possono essere diversi. Se sono entrambi dello stesso segno, otteniamo li stessi picchi e le stesse valli come previsto nel paragrafo 7.3, solo che le valli tra i picchi sono forse meno profonde. Se sono di segno contrario, le valli diventano picchi e i picchi diventano valli. A seconda di quali dei due taps si suppongano essere diversi da zero, i picchi e le valli sono distanziate da quantit`a diverse; i tempi di ritardo vengono scelti in modo che si possano verificare 6 tempi di ritardo diversi, compresi tra 6 e 30 millisecondi. Nel caso generale in cui tutti i guadagni sono diversi da zero, possiamo immaginare che la funzione di risposta in frequenza vari continuamente tra questi estremi, dando cos`ı una successione di configurazioni complicate. Questo ha l’effetto di sollevare e abbassare le ampiezze delle parziali del segnale in entrata, tutte indipendentemente dalle altre, in uno schema complicato, per dare un timbro costantemente variabile nel tempo. Il lato destro della patch si occupa della modifica dei guadagni del segnale di ingresso e delle sue tre copie spostate. Ogni volta che l’oggetto metro emette un bang, un contatore viene incrementato (gli oggetti f, + 1 e mod 4). Questo controlla quali delle ampiezze saranno cambiate. L’ampiezza stessa `e calcolata


7.10. Esempi

205

creando un numero casuale e normalizzandolo affinch´e si trovi in valore tra −0.7 e 1.3. Il valore casuale e l’indice sono impacchettati (insieme ad un terzo valore, un intervallo di tempo) e questa terna passa all’oggetto route. Il primo elemento della terna (il contatore) seleziona a quale uscita inviare gli altri due valori; di conseguenza, uno dei quattro possibili oggetti line∼ riceve un messaggio per fare una rampa ad un nuovo valore. Se la variazione del tempo viene eseguita abbastanza rapidamente, c’`e anche un effetto di modulazione sul segnale originale; in questa situazione i segmenti di linea retta utilizzati in questo esempio devono essere sostituiti da segnali modulanti con un contenuto di frequenza pi` u controllabile, ad esempio utilizzando i filtri (l’argomento del Capitolo 8).

Riverberatore L’esempio G08.reverb.pd (Figura 7.31) mostra un semplice riverberatore artificiale, in sostanza una realizzazione del progetto mostrato nella Figura 7.15. Quattro linee di ritardo vengono alimentate con l’input e con la propria uscita ricircolante. Le uscite dei ritardi vengono mescolate utilizzando matrici di rotazione, costruite da rotazioni elementari di π/4 come nella Figura 7.13 (parte a). p La moltiplicazione di normalizzazione (per 1/2 ad ogni passo) viene assorbita nel guadagno di feedback, che quindi non pu`o superare 1/2. A un guadagno di feedback di esattamente 1/2, tutta l’energia che lascia le linee di ritardo viene reinserita in esse, quindi la riverberazione dura per sempre. La Figura 7.32 mostra l’interno dell’abstraction reverb-echo utilizzata nel riverberatore. I due ingressi sono miscelati (usando la stessa matrice di rotazione e lasciando nuovamente la ri-normalizzazione a pi` u tardi). Un canale viene quindi ritardato. I tempi di ritardo sono definiti per crescere approssimativamente in maniera esponenziale; questo assicura uno schema di echi regolare e diffuso. Sono possibili molte estensioni di questa idea delle quali ne citeremo solo ` naturale, innanzitutto, mettere filtri passa-basso alla fine delle linee alcune. E di ritardo, per imitare il decadimento, tipicamente pi` u veloce, delle frequenze ` anche comune utilizzare pi` alte rispetto a quelle basse. E u di quattro ritardi ricircolanti; un riverberatore nella distribuzione Pd ne usa sedici. Infine `e norma comune consentire un controllo separato delle ampiezze dei primi echi (ascoltati direttamente) e di quella del segnale ricircolante; parametri come questi sono pensati per controllare le qualit`a soniche descritte come “presenza”, “calore”, “chiarezza” e cos`ı via.

Pitch shifter L’esempio G09.pitchshift.pd (Figura 7.33) mostra una realizzazione del pitch shifter descritto nel paragrafo 7.9. Una linea di ritardo (definita e scritta altrove nella patch) viene letta usando due oggetti vd∼. I tempi di ritardo variano tra un ritardo minimo (fornito dal controllo “delay”) e il minimo pi` u la dimensione di una finestra (il controllo “window”).


206

Capitolo 7. Spostamenti temporali e ritardi

7.10. EXAMPLES

219

inlet~ reverb-echo echo-del1 5.43216

"early echo" generators, which also increase echo

reverb-echo echo-del2 8.45346

density.

reverb-echo echo-del3 13.4367 reverb-echo echo-del4 21.5463 reverb-echo echo-del5 34.3876 reverb-echo echo-del6 55.5437

Get the outputs of the recirculating delays. Add the inputs to two of them. delread~ loop-del1 60 delread~ loop-del2 71.9345 +~

+~

delread~ loop-del3 86.7545 delread~ loop-del4 95.945

outlet~ outlet~ Tap outputs here.

+~

-~

+~

+~

+~

-~

Do a power-conserving mix of them in pairs. First combine (1, 2) and (3, 4)...

-~

-~

then (1, 3) and (2, 4)

feedback gain on a scale of 0-100 controls reverb time. / 200 inlet *~

*~

*~

*~

min 100 max 0

delwrite~ loop-del4 95.945 delwrite~ loop-del3 86.7545 delwrite~ loop-del2 71.9345 delwrite~ loop-del1 60 Put the signals back into the recirculating delays.

Figure 7.31: artificial reverberator. Figura 7.31:AnUn riverberatore artificiale.


220

CHAPTER 7. TIME SHIFTS AND 207DELAYS

7.10. Esempi

220

CHAPTER 7. TIME SHIFTS AND DELAYS

inlet~

inlet~

inlet~

+~

inlet~

-~

-~

+~

delwrite~ $1 $2 $2 delwrite~ $1 delread~ $1 $2 $2 delread~ $1

outlet~ outlet~ outlet~ outlet~

Figure 7.32: The echo generator used in the reverberator.

FigureFigura 7.32:7.32: TheIl echo generator usednelinriverberatore. the reverberator. generatore di eco usato r transpose r window

<-- transposition 7 r transpose (halftones)

1.4982

exp

change

- 1

speed 1.4982* -1 change - 1

* 0.001 t b f

+~ 0.5

line~

phasor~ tape head wrap~ rotation freq

200 -~pack 0.5 0 *~

-6.228-~ 0.5 +~*~ 0.5 *~ 0.5

phasor~

cos~

+~

wrap~

vd~ G09-del

*~

-~ 0.5 *~

*~

+~ 0.5| +~ (OUT)

cos~ *~

pack 0 200

t b f

* -1 -6.228 /

delay (msec)

tape head* 0.001 rotation freq

/

<--window

80

r window (msec) max 1 <--window 80 (msec) max 1

* 0.05776 <-transposition (halftones) exp * 0.05776 speed

7

vd~ G09-del

r delay

delay (msec) max 1.5 0

r delay pack 0 200 line~ 0

line~ *~ 0.5

+~

cos~

vd~ G09-del

max 1.5 pack 0 200

-~*~0.5

*~

*~ 0.5

+~

cos~

vd~ G09-del

line~

Figure 7.33: pitch shifter two variabili variableintaps delay line. Figura 7.33: Un A pitch shifter conusing due taps unainto lineaa di ritardo.

*~

+~ | (OUT)

Figure 7.33: A pitch shifter using two variable taps into a delay line.


208

Capitolo 7. Spostamenti temporali e ritardi

Lo spostamento di tono desiderato in semitono (h) viene prima convertito in un fattore di trasposizione t = 2h/12 = elog(2)/12·h ≈ e0.05776h (denominato “speed change” nella patch). Il calcolo etichettato come “tape head rotation speed” `e lo stesso della formula per f data a pagina 194. Qui l’intervallo positivo (sette semitoni) genera un fattore di trasposizione maggiore di uno e quindi un valore negativo per f . Una volta calcolata f , la produzione dei due segnali a dente di sega in fase ed i corrispondenti inviluppi riprende esattamente quella dell’overlapping sample looper (esempio B10.sampler.overlap.pd, pagina 52). Il ritardo minimo viene aggiunto a ciascuno dei due segnali delle onde a dente di sega per creare gli inputs di ritardo per gli oggetti vd∼, i cui outputs sono moltiplicati per i corrispondenti inviluppi e sommati.

Esercizi 1. Un numero complesso ha modulo uno e argomento π/4. Quali sono le sue parti reale e immaginaria? 2. Un numero complesso ha modulo uno e parte reale 1/2. Qual `e la sua parte immaginaria? (Ci sono due valori possibili.) 3. Quale tempo di ritardo si deve dare ad un filtro a pettine in modo che il suo primo picco di risposta in frequenza sia a 440 Hertz? Se la frequenza di campionamento `e 44100, quale frequenza corrisponderebbe al ritardo intero pi` u vicino? 4. Supponiamo di fare una variazione del filtro a pettine non-ricircolante in modo che il segnale ritardato venga sottratto dall’originale anzich´e essere sommato. Qual `e la nuova risposta in frequenza? 5. Se si desidera effettuare un vibrato a 6 Hz con una linea di ritardo che varia in maniera sinusoidale e se si desidera che il vibrato modifichi la frequenza del 5%, quanto `e necessario che sia grande la variazione di ritardo? Come cambierebbe se si volesse che la stessa profondit`a del vibrato fosse a 12 Hertz? 6. Una sinusoide complessa X[n] ha frequenza 11025 Hertz, ampiezza 50 e fase iniziale 135 gradi. Un’altra, Y [n], ha la stessa frequenza, ma ampiezza 20 e fase iniziale di 45 gradi. Qual `e l’ampiezza e la fase iniziale della somma di X e Y ? 7. Qual `e la frequenza, la fase iniziale e l’ampiezza del segnale ottenuto quando X[n] (sopra) viene ritardato di 4 campioni? 8. Mostrare che la risposta in frequenza di un filtro a pettine ricircolante, con tempo di ritardo d e guadagno di feedback g, in funzione della frequenza angolare ω, `e uguale a: [(1 − g cos(ωd))2 + (g sin(ωd))2 ]−1/2 .


Capitolo 8

Filtri Nel capitolo precedente abbiamo visto che una rete di ritardo pu`o avere una risposta in frequenza non uniforme – un guadagno che varia in funzione della frequenza. Le reti di ritardo modificano anche la fase dei segnali in ingresso variabilmente dipendente della frequenza. Quando i tempi di ritardo usati sono molto brevi, le propriet`a pi` u importanti di una rete di ritardo diventano la sua risposta in frequenza e la sua risposta di fase. Una rete di ritardo che `e progettata appositamente per la sua risposta in frequenza o di fase `e chiamata un filtro. Nei diagrammi a blocchi, i filtri sono mostrati come nella Figura 8.1 (parte a). La curva mostrata all’interno del blocco fornisce una rappresentazione qualitativa della risposta in frequenza del filtro. La risposta in frequenza pu`o variare nel tempo e, a seconda della progettazione del filtro, `e possibile utilizzare uno o pi` u controlli (o ingressi audio aggiuntivi) per modificarla. Supponiamo che, seguendo la procedura del paragrafo 7.3, introduciamo una sinusoide complessa con frequenza angolare ω, a ampiezza unitaria, in un filtro. Ci aspettiamo di ottenere una sinusoide della stessa frequenza e con qualche ampiezza, che dipende da ω. Ci`o ci d`a una funzione complessa H(ω), che viene chiamata funzione di trasferimento del filtro. ` La risposta in frequenza `e il guadagno in funzione della frequenza ω. E uguale al modulo della funzione di trasferimento. La risposta in frequenza di un filtro viene normalmente rappresentata graficamente come in Figura 8.1 (parte b). Una sinusoide in entrata, di ampiezza unitaria e frequenza ω, esce dal filtro con modulo |H(ω)|. A volte `e utile conoscere anche la risposta di fase del filtro, pari a ∠(H(ω)). Per una frequenza fissata ω, la fase dell’output del filtro sar`a ∠(H(ω)) radianti in anticipo rispetto alla fase in ingresso.

La progettazione e l’uso dei filtri sono un soggetto enorme: l’ampia gamma di usi che un filtro pu` o avere ci suggerisce un’ampia variet`a di processi di progettazione dei filtri. In alcune applicazioni un filtro deve seguire esattamente una risposta in frequenza prescritta, in altri `e importante minimizzare i tempi di calcolo, in altri la risposta di fase `e importante e in altri ancora il filtro deve comportarsi bene quando i suoi parametri cambiano rapidamente con il tempo. 209


224 210

CHAPTER 8. FILTERS Capitolo 8. Filtri

gain

(a)

(b)

Figure filter: (a) (a) in ainblock diagram; (b) a graph (b) of Figura 8.1: 8.1: Representations Rappresentazioniofdia un filtro: un diagramma a blocchi; its frequency response. un grafico della sua risposta in frequenza.

8.1

Taxonomy filters Tassonomiaofdei filtri

Over thetutta history of electronic music the technology for building filters has Durante la storia della musica elettronica, la tecnologia per la costruzione changed but certain kinds filters In this section di filtri `econstantly, cambiata costantemente, maofcerti tipireappear di filtri often. riappaiono spesso. In we will give some nomenclature for describing filters of descrivere several generic, questo paragrafo forniremo alcune nomenclature per filtri recurring di diversi types. Later we’ll develop some basic strategies for making filters desired tipi, generici e ricorrenti. Successivamente svilupperemo alcunewith strategie di characteristics, and finally we’ll discuss some common applications of filters in base per creare filtri con le caratteristiche desiderate e infine discuteremo alcune electronic music. applicazioni comuni dei filtri nella musica elettronica.

8.1.1

Filtri passa-basso e passa-alto Low-pass and high-pass filters

Lo scopo gran frequent lunga pi` upurpose frequente l’utilizzo filtro `e quello estrarre By far thedimost forper using a filterdiisun extracting eitherdithe lowuna porzione a bassa frequenza portion o ad alta frequenza di unattenuating segnale audio, attefrequency or the high-frequency of an audio signal, the rest. nuando il resto. Ci` o siusing ottiene utilizzando un filtro filter. passa-basso (low-pass filter) This is accomplished a low-pass or high-pass o unIdeally, filtro passa-alto filter). a low-pass (high-pass or high-pass filter would have a frequency response of one Idealmente, un afiltro passa-basso o passa-alto up to (or down to) specified cutoff frequency anddovrebbe zero past avere it; butuna suchrisposta filters in frequenza in su in (opractice. in gi` u) fino a unawefrequenza taglio (cutoff frequency) cannot be realized Instead, try to finddirealizable approximations specificata, zero passata ma tali filtriand noncomputation possono essere to this ideale response. Thequesta; more design effort timerealizzati we put in pratica. Invece,wecerchiamo into it, the closer can get. di trovare approssimazioni realizzabili di questa risposta Maggiore `e lo sforzoresponse di progettazione e il tempo calcolo che Figureideale. 8.2 shows the frequency of a low-pass filter. di Frequency is abbiamointo messo in esso, tanto pi` u ci avvicinare. divided three bands, labeled onpossiamo the horizontal axis. The passband is the La Figura 8.2 mostra la risposta in frequenza di un La region (frequency band) where the filter should pass its filtro inputpassa-basso. through to its frequenza `e suddivisa treabande, etichettate banda output with unit gain.inFor low-pass filter (as sull’asse shown), orizzontale. the passbandLareaches passante `e la regione (banda in cui limit. il filtroFor deve lasciar passare from a frequency of zero up todia frequenza) certain frequency a high-pass filter, con passband guadagnowould unitario il suo verso la sua uscita. unand filtro passa-basso the appear oninput the right-hand side of the Per graph would extend (comethe mostrato), banda va dalla frequenza zero fino una cerfrom frequencylalimit up passante to the highest frequency possible. Anyadrealizable ta frequenza limite. Peronly un approximately filtro passa-alto, la the banda passante apparir` a sul filter’s passband will be flat; deviation from flatness is lato destro del grafico si estender` a dalla frequenza limite fino alla called the ripple, and iseoften specified by giving the ratio between themassima highest frequenza possibile. Ogni banda passante realizzabile del filtro sar`a solo approssimativamente piatta (flat); la deviazione dalla piattezza `e chiamata ripple (ondulazione) e viene spesso specificata dando il rapporto tra il maggiore e il minor guadagno nella banda passante, espresso in decibel. Il filtro passa-basso o passa-alto ideale avrebbe un ripple di 0 dB.


8.1. Tassonomia dei filtri

211

ripple

stopband attenuation

passband

stopband transition band

Figura 8.2: 8.2: Terminology Terminologiafor perdescribing descriverethe la risposta in response frequenzaofdei filtri passaFigure frequency low-pass and basso e passa-alto. orizzontale la frequenza l’asse verticale guahigh-pass filters. TheL’asse horizontal axis is`efrequency andethe vertical axis `eisilgain. dagno. Viene visualizzato filtro passa-basso; unsame filtrofeatures passa-alto ha le stesse A low-pass filter is shown; aun high-pass filter has the switched from caratteristiche right to left. commutate da destra a sinistra. La stopband (fascia di arresto) di un filtro passa-basso o passa-alto `e la banda di frequenza in cui il filtro non trasmette il suo input. L’attenuazione della stopband `e la differenza, in decibel, tra il guadagno pi` u basso nella banda passante e il guadagno pi` u alto nella stopband. Idealmente questo sarebbe infinito; pi` u sar` a alto, migliore sar`a il filtro. Infine, un filtro realizzabile, la cui risposta in frequenza `e sempre una funzione continua della frequenza, deve avere una banda di frequenza su cui il guadagno scende dal guadagno della banda passante al guadagno della stopband; questa si chiama banda di transizione (transition band). Pi` u sottile questa banda pu` o essere fatta, pi` u il filtro sar`a ideale.

8.1.2

Filtri passa-banda ed elimina-banda

Un filtro passa-banda (pass-band) ammette frequenze all’interno di una data banda, rifiutando le frequenze al di sotto e al di sopra di essa. La Figura 8.3 mostra la risposta in frequenza di un filtro passa-banda, con i parametri chiave etichettati. Un filtro elimina-banda (stop-band) fa l’azione inversa, respingendo le frequenze all’interno della banda e lasciando passare le frequenze al di fuori di essa. Nella pratica, spesso viene utilizzato un linguaggio pi` u semplice per la descrizione dei filtri passa-banda, come mostrato nella Figura 8.4. Qui ci sono solo due parametri: una frequenza centrale e una larghezza di banda. La banda passante viene considerata quella regione in cui il filtro ha almeno la met`a del


212 226

Capitolo 8. Filtri CHAPTER 8. FILTERS

ripple

stopband attenuation

passband stopband

stopband transition bands

Figure of dei band-pass and Figura 8.3: 8.3: Terminology Terminologiafor perdescribing descriverethe la frequency risposta inresponse frequenza filtri passastop-band filters. The horizontal axis is frequency and the vertical axis is gain. banda ed elimina-banda. L’asse orizzontale `e la frequenza e l’asse verticale `e A is shown; a stop-band filter would haveun a contiguous stopband il band-pass guadagno. filter Viene visualizzato un filtro passa-banda; filtro elimina-banda surrounded by two passbands. avrebbe una stop-band circondata da due bande passanti. 8.1. TAXONOMY OF FILTERS 227 and lowest gain in the passband, expressed in decibels. The ideal low-pass or high-pass filter would have a ripple of 0 dB. The stopband of a low-pass or high-pass filter is the frequency band over which the filter is intended not to transmit its input. The stopband attenuation bandwidth is the dierence, in decibels, between the lowest gain in the passband and the highest gain in the stopband. Ideally this would be infinite; the higher the better. Finally, a realizable filter, whose frequency response is always a continuous function of frequency, must have a frequency band over which the gain drops from the passband gain to the stopband gain; this is called the transition band. The thinner this band can be made, the more nearly ideal the filter.

8.1.2

Band-pass and stop-band filters

center frequency A band-pass filter admits frequencies within a given band, rejecting frequencies below it and above it. Figure 8.3 shows the frequency response of a band-pass filter, with the key parameters labelled. A stop-band filter does the reverse, Figure AUna simplified view of a band-pass filter, showing bandwidth and rejecting frequencies within the band and letting through frequencies it. Figura 8.4: 8.4: vista semplificata di un filtro passa-banda, che outside mostra la center frequency. larghezza di banda e la frequenza centrale.

In practice, a simpler language is often used for describing bandpass filters, as shown in Figure 8.4. Here there are only two parameters: a center frequency and a bandwidth. The passband is considered to be the region where the filter has at least half the power gain as at the peak (i.e., the gain is within 3 decibels of its maximum). The bandwidth is the width, in frequency units, of the passband. The center frequency is the point of maximum gain, which is approximately the midpoint of the passband.

8.1.3

Equalizing filters


228

CHAPTER 8. FILTERS

8.2. Filtri elementari

213

high frequency gain

low frequency gain crossover frequency

Figure shelving filter, showing low and frequency gain, and crossover Figura8.5: 8.5:AUn filtro shelving, che mostra il high guadagno a bassa e alta frequenza frequency. e la frequenza di crossover. guadagno di potenza del picco (vale a dire, il guadagno `e entro 3 decibel del suo massimo). La larghezza di banda `e la larghezza, in unit`a di frequenza, della banda passante. La frequenza centrale `e il punto di massimo guadagno, che `e approssimativamente il punto medio della banda passante. bandwidth

8.1.3

Filtri di equalizzazione

in-band In alcune applicazioni, come l’equalizzazione, l’obiettivo non `e quello di passare gain segnali a determinate frequenze, eliminandone altre, ma di effettuare regolazioni controllabili, aumentando o attenuando un segnale, su una gamma di frequenze, tramite un guadagno desiderato. Due tipi di filtri sono utili per questo scopo. In primo luogo, viene utilizzato un filtro shelving (Figura 8.5) per aumentare o ridurre selettivamentegain l’estremit`a bassa o alta della gamma delle frequenze. Al di out-of-band sotto di una frequenza di crossover selezionabile, il filtro tende verso un guadagno a bassa frequenza, e al di sopra di essa tende verso uno ad alta frequenza. La frequenza di crossover, il guadagno a bassa frequenza e il guadagno ad alta frequency frequenza possonocenter essere regolati indipendentemente. In secondo luogo, un peaking filter (filtro di picco, Figura 8.6) `e in grado di aumentare o attenuare i segnali entro un intervallo di frequenze. La frequenza Figure 8.6: peaking filter, with(che controllable center frequency, bandwidth, and centrale e laAlarghezza di banda insieme controllano l’intervallo di frequenze in-band and out-of-band interessate), e i guadagnigains. in-banda e fuori-banda sono regolabili separatamente. Gli equalizzatori parametrici utilizzano spesso due filtri shelving (per regolare le estremit` a basse e alte dello spettro) e due o tre filtri di picco per regolare le bande in mezzo.

8.2

Filtri elementari

Abbiamo visto nel Capitolo 7 come prevedere la risposta in frequenza e di fase delle reti di ritardo. L’arte della progettazione dei filtri sta nel trovare una rete di ritardo la cui funzione di trasferimento (che controlla la risposta in frequenza


crossover frequency

Figure 8.5: A shelving filter, showing low and high frequency gain, and crossover frequency.

214

Capitolo 8. Filtri bandwidth in-band gain

out-of-band gain

center frequency

Figure peaking with con controllable center frequency, bandwidth, ande Figura8.6: 8.6:A Un filtrofilter, peaking, frequenza centrale, larghezza di banda in-band and out-of-band gains. controllabili. guadagni in-banda e fuori-banda e di fase) abbia una forma desiderata. Svilupperemo un approccio per costruire reti di ritardo a partire dai due tipi di filtro a pettine sviluppati nel Capitolo 7: ricircolante e non-ricircolante. Adesso saremo interessati al caso speciale in cui il ritardo ha lunghezza pari ad un solo campione. In questa situazione, le risposte in frequenza mostrate nelle Figure 7.6 e 7.10 non sono pi` u simili a pettini; il secondo picco scende fino alla frequenza di campionamento, 2π radianti, quando d = 1. Poich´e solo le frequenze tra 0 e la frequenza di Nyquist (π radianti) sono udibili c’`e, in effetti, solo un picco quando d = 1. Nei filtri a pettine mostrati nel Capitolo 7, i picchi sono situati a DC (frequenza zero), ma spesso vorremmo collocarli in altre frequenze diverse da zero. Questo viene fatto usando reti di ritardo – filtri a pettine – con guadagni a valori complessi.

8.2.1

Filtro elementare non-ricircolante

Il filtro a pettine non-ricircolante pu` o essere generalizzato per produrre il disegno mostrato in Figura 8.7. Questo `e il filtro elementare non-ricircolante, della prima forma. Il suo singolo parametro complesso Q controlla il guadagno complesso del segnale ritardato, sottratto da quello originale. Per trovare la sua risposta in frequenza, come nel Capitolo 7, alimentiamo la rete di ritardo con una sinusoide complessa 1, Z, Z 2 , . . . la cui frequenza `e ω = arg(Z). Il campione n−esimo dell’input `e Z n e quello dell’output `e (1 − QZ −1 )Z n quindi la funzione di trasferimento `e H(Z) = 1 − QZ −1 . Questo pu` o essere analizzato graficamente come mostrato in Figura 8.8. I numeri reali r e α sono il modulo e l’argomento del numero complesso Q: Q = r · (cos(α) + i sin(α)).


8.2. Filtri elementari 8.2. ELEMENTARY FILTERS

215 229 IN

d=1 Q

OUT

Figure 8.7: A delay network with a single-sample delay and a complex gain Q. Figura 8.7: Una rete di ritardo con un ritardo di un singolo campione e un This is the non-recirculating elementary filter, first form. Compare the nonguadagno complesso Q. Questo `e il filtro elementare non-ricircolante, prima recirculating comb filter shown in Figure 7.3, which corresponds to choosing forma. Confrontandolo con il filtro a pettine non-ricircolante mostrato in Figura Q = −1 here. 7.3, questo corrisponde, qui, a scegliere Q = −1. 230 CHAPTER 8. FILTERS

8.2

Elementary filters

We saw in Chapter 7 how to predict the frequency and phase response of delay networks. The art of filter design lies in finding a delay network whose transfer imaginary function (which controls the frequency and phase response) has a desired shape. We will develop an approach to building such delay networks out of the two types of comb filters developed in Chapter 7: recirculating and non-recirculating. Here Z we will be interested in the special case where the delay is only one sample in length. In this situation, the frequency responses shown inZ-Q Figures 7.6 and 7.10 Q r peak recedes all the way to the sample no longer look like combs; the second rate, 2π radians, when d = 1. Since only frequencies between 0 and the Nyquist frequency (π radians) are audible, in effect there is only one peak when d = 1. In the comb filters shown in Chapter 7, the peaks 1 are situated at DC (zero real frequency), but we will often wish to place them at other, nonzero frequencies. -1 This is done using delay networks—comb filters—with complex-valued gains. QZ -1 1-QZ

8.2.1

Elementary non-recirculating filter

The non-recirculating comb filter may be generalized to yield the design shown in Figure 8.7. This is the elementary non-recirculating filter, of the first form. Its single, complex-valued parameter Q controls the complex gain of the delayed signal subtracted from the original one. To find its frequency response, as in Chapter 7 we feed the delay network a complex sinusoid 1, Z, Z 2 , . . . whose frequency is ω = arg(Z). The nth sample of the input is Z n and that of the output is Figure 8.8: Diagram for calculating −1 the nfrequency response of the nonFigura 8.8: Diagramma per il calcolo della)Zrisposta in frequenza del filtro ele(1 − QZ recirculating elementary filter (Figure 8.7). The frequency response is given mentare non-ricircolante (Figura 8.7). La risposta in frequenza `e data dalla by the length of the segment connecting Z to Q in the complex plane. lunghezza del segmento che collega Z a Q nel piano complesso.

so the transfer function is H(Z) = 1 − QZ −1 This can be analyzed graphically as shown in Figure 8.8. The real numbers r and α are the magnitude and argument of the complex number Q: Q = r · (cos(α) + i sin(α)) The gain of the filter is the distance from the point Q to the point Z in the complex plane. Analytically we can see this because


8.2. 216 ELEMENTARY FILTERS

231 Capitolo 8. Filtri

gain

|Q|=1 0.5 0

0

frequency

2

Figure 8.9: Frequency response of the elementary non-recirculating filter Figure Figura 8.9: Risposta in frequenza del filtro elementare non-ricircolante di Figura 8.7. Three values of Q are used, all with the same argument (-2 radians), but 8.7. Si utilizzano tre valori di Q, tutti con lo stesso argomento (−2 radianti), with varying absolute value (magnitude) r = |Q|. ma con valore assoluto variabile (modulo) r = |Q|. is at a minimum, equal to 1 − r. The maximum occurs which Z is at the Il guadagno deloffiltro la distanza dal8.9 punto Q al punto Z nelfunction piano complesso. opposite point the `ecircle. Figure shows the transfer for three Possiamo vedere questo analiticamente perch´ e different values of r = |Q|.

8.2.2

|1 − QZ −1 | = |Z||1 − QZ −1 | = |Q − Z|.

Non-recirculating filter, second form

Graficamente, il numero QZ −1 `e proprio il numero Q ruotato all’indietro (in Sometimes we will need a variant of the filter above, shown in Figure 8.10, called senso orario) per la frequenza angolare ω della sinusoide in entrata. Il valore the elementary non-recirculating filter, second form. Instead of multiplying the |1 − QZ −1 | `e la distanza da QZ −1 a 1 nel piano complesso, uguale alla distanza delay output by Q we multiply the direct signal by its complex conjugate Q. If da Q a Z. Poich´e la frequenzaAdell’input spazia da 0 a+2π, il punto Z si muove in senso = a + bi = r · (cos(α) i sin(α)) orario attorno al cerchio unitario. Al punto in cui ω = α, la distanza `e al is any complex complexsiconjugate is defined minimo, pari a number, 1 − r. Ilits massimo verifica quando Z `eas: al punto opposto del cerchio. La Figura 8.9Amostra la funzione di trasferimento = a − bi = r · (cos(α) − i sin(α)) per tre diversi valori di r = |Q|. Graphically this reflects points of the complex plane up and down across the real axis. Filtro The transfer function of the new filter is forma 8.2.2 non-ricircolante, seconda

H(Z) = Q −mostrata Z −1 A volte abbiamo bisogno di una variante, in Figura 8.10, del filtro di cui sopra chiamata filtro elementare non-ricircolante, seconda This gives rise to the same frequency response as before since forma. Invece di moltiplicare l’output di ritardo per Q, moltiplichiamo il segnale diretto per il − Z −1 | = |Q − Z −1 | = |Q − Z| coniugato complesso Q.|QSe −1 Here we use the fact that any unit A =Za= +Z ib =, rfor · (cos(α) + icomplex sin(α)) number Z, as can be verified by writing out ZZ in either polar or rectangular form. Although the two forms of coniugato the elementary non-recirculating filter have the `e un numero complesso, il suo complesso `e definito come: same frequency response, their phase responses are different; this will occasionA =second a − ib form. = r · (cos(α) − i sin(α)). ally lead us to prefer the

Graficamente corrisponde a riflettere i punti del piano complesso in su e in gi` u attraverso l’asse reale. La funzione di trasferimento del nuovo filtro `e H(Z) = Q − Z −1 .


232

CHAPTER 8. 217FILTERS

8.2. Filtri elementari

IN

d=1

Q

OUT filtro elementare non-ricircolante, seconda Figure Figura 8.10: 8.10: The Ilelementary non-recirculating filter, forma. second form.

8.2.3

Ci` o provoca la stessa risposta in frequenza di prima poich´e

Elementary |Q recirculating filter − Z −1 | = |Q − Z −1 | = |Q − Z|.

The elementary filter recirculating comb filter of Z, Figure 7.7 Qui usiamorecirculating il fatto che Z = Z −1 , is perthe qualsiasi numero complesso unitario che si pu` o verificare scrivendo ZZ in forma polare o rettangolare. with a complex-valued feedback gain P as shown in Figure 8.11 (part a). By Sebbene leasdue forme del filtro elementare non-ricircolante la stesthe same analysis before, feeding this network a sinusoidhanno whose nth sample sa risposta in frequenza, le loro risposte di fase sono diverse; ci` o ci porter` a, is Z n gives an output of: occasionalmente, a preferire la seconda forma. 1 Zn −1 − PZ 8.2.3 Filtro elementare1 ricircolante so the transfer function ricircolante is Il filtro elementare `e il filtro a pettine ricircolante di Figura 7.7 con un guadagno di feedback P a valori complessi come mostrato in Figura 1 8.11 (parte a). Con la stessaH(Z) analisi= di prima, introducendo in questa rete una sinusoide il cui n−esimo campione `e Z n1si−ha output di P un Z −1 1

The recirculating filter is stable when |P | <Z n1;, when, instead, |P | > 1 the output 1 − P Z −1 grows exponentially as the delayed sample recirculates. quindi la funzione di trasferimento `e The transfer function is thus just the inverse of that of the non-recirculating 1 H(Z)two = in series . with P = Q, the output thefilter (first form). If you put the 1 − P Z −1 oretically equals the input. (This analysis only demonstrates it for sinusoidal Il filtro ricircolante `e stabile quando |P | < 1; quando, invece, |P | > 1 l’output inputs; that follows for other as well canricircola. be verified by working out cresce it esponenzialmente quandosignals il campione ritardato the impulseLaresponse oftrasferimento the combined network). funzione di `e quindi esattamente l’inverso di quella del

8.2.4

filtro non-ricircolante (prima forma). Se mettiamo i due in serie con P = Q, l’output `e teoricamente uguale all’input (questa analisi mostra ci`o solo per gli Compound input sinusoidali; chefilters si applichi anche ad altri segnali pu`o essere verificato elaborando la risposta all’impulso della rete combinata).

We can use the recirculating and non-recirculating filters developed here to create a8.2.4 compound by putting several elementary ones in series. If the Filtrifilter composti parameters of the non-recirculating (of the first are per Q1crea, . . . , Qj and Possiamo utilizzare i filtri ricircolantiones e non-ricircolanti, quitype) sviluppati, those of rethe ones areinPserie ,uPfiltri putting all indiseries, in un recirculating filtro composto mettendo elementari. Se them i parametri 1 , . . .pi` k , then any order, will give the transfer function: (1 − Q1 Z −1 ) · · · (1 − Qj Z −1 ) H(Z) = (1 − P1 Z −1 ) · · · (1 − Pk Z −1 ) The frequency response of the resulting compound filter is the product of those of the elementary ones. (One could also combine elementary filters by adding


8.2. 218 ELEMENTARY FILTERS

IN

233 Capitolo 8. Filtri

|P|=0.75 0.5 OUT d=1 0

P 0

frequency

(a)

2

(b)

Figura 8.11: Il filtro elementare ricircolante: (a) diagramma a blocchi; (b) Figure 8.11: The elementary recirculating filter: (a) block diagram; (b) frerisposta in frequenza. quency response. quelli non-ricircolanti (del primo tipo) sono Q1 , . . . , Qj e quelli dei ricircolanti their outputs, or making more complicated networks of them; but for most sono P , . . . , Pk , allora mettendoli tutti in serie, in qualsiasi ordine, la funzione purposes1 the series configuration is the easiest one to work with.) di trasferimento sar` a:

8.2.5

−1 (1 − Qcomplex ) · · · (1filters − Qj Z −1 ) Real outputs from 1Z H(Z) = . −1 −1

(1 − P Z ) · · · (1 − Pk Z ) In most applications, we start with a1 real-valued signal to filter and we need a real-valued output, but in general, a compound filter with a transferdifunction as La risposta in frequenza del filtro composto risultante `e il prodotto quelle dei above will give a complex-valued output. However, we can construct filters with filtri elementari (si potrebbe anche combinare filtri elementari sommando i loro non-real-valued coefficients nonetheless give outputs, so degli that outputs o facendo, con essi,which reti pi` u complicate; mareal-valued per la maggior parte the analysis that we carry out using complex numbers can be used to predict, scopi la configurazione in serie `e quella pi` u semplice da utilizzare). explain, and control real-valued output signals. We do this by pairing each elementary filter (with coefficient P or Q) with another having as its coefficient 8.2.5 Outputs da filtri complessi the complex conjugatereali P or Q. For example, putting two non-recirculating filters, with coefficients Q and Nella maggior parte delle applicazioni, partiamo da un segnale reale da filtrare Q, in series gives a transfer function equal to: e abbiamo bisogno di un output a valori reali, ma in generale un filtro compo−1a un output complesso. sto con una funzione H(Z) di trasferimento come = (1 − QZ −1 ) · (1sopra − QZdar` ) Tuttavia, possiamo costruire filtri con coefficienti a valori non reali che tuttavia which has the property that: reale, in modo che l’analisi che realizziamo usanforniscono outputs di valore do numeri complessi possa essere utilizzata per predire, spiegare e controllare H(Z) = H(Z) segnali di uscita con outputs a valori reali. Facciamo ci`o associando ad ogni filtroifelementare il coefficiente P o Q) un altro che ha come coefficiente il Now we put any(con real-valued sinusoid: coniugato complesso P o Q. n n n 2 re(AZ ) = AZ + AZ Ad esempio, mettereXnin=serie due filtri non-ricircolanti, con coefficienti Q e Q,get fornisce we out: una funzione di trasferimento uguale a n

A · H(Z) · Z n + A · H(Z) · Z H(Z) = (1 − QZ −1 ) · (1 − QZ −1 ) che ha la propriet` a che H(Z) = H(Z).


8.2. Filtri elementari

219

Ora, se vi introduciamo una sinusoide valori reali: Xn = 2re(AZ n ) = AZ n + AZ otteniamo A · H(Z) · Z n + A · H(Z) · Z

n

n

che, analizzandola, risulta un’altra sinusoide reale. Qui stiamo utilizzando due propriet` a dei coniugati complessi. Innanzitutto, possiamo sommarli e moltiplicarli a piacere: A+B =A+B AB = A · B

e, in secondo luogo, se si somma qualcosa al suo coniugato complesso si ottiene un numero reale, ed `e infatti il doppio della sua parte reale: A + A = 2re(A). Questo risultato per due filtri coniugati si estende a qualsiasi filtro composto; in generale, otteniamo sempre un output a valori reali da un input a valori reali se ogni coefficiente Qi e Pi , nel filtro composto, `e a valori reali, oppure se appare in coppia con il suo coniugato complesso.

8.2.6

Due filtri ricircolanti al prezzo di uno

Quando accoppiamo filtri elementari ricircolanti, `e possibile evitare l’elaborazione di un elemento in ciascuna coppia, a condizione che l’input sia reale (e quindi anche l’output). Supponiamo che l’input sia una sinusoide reale della forma: AZ n + AZ −n e che applichiamo un unico filtro ricircolante con coefficiente P . Denotiamo con a[n] la parte reale dell’output, allora si ha i h a[n] = re 1−P1Z −1 AZ n + 1−P1Z −1 AZ −n = re

h

1 n 1−P Z −1 AZ

= re = re

h

h

+

1 AZ n 1−P Z −1

2−2re(P )Z −1 AZ n (1−P Z −1 )(1−P Z −1 )

1−re(P )Z −1 AZ n (1−P Z −1 )(1−P Z −1 )

+

i

i

−1

−n 1−re(P )Z −1 −1 AZ (1−P Z )(1−P Z )

i

(nel secondo passaggio abbiamo usato il fatto che si pu`o coniugare tutto o parte di un’espressione, senza cambiare il risultato, se si vuole prendere solo la parte reale. Il quarto passaggio fa la stessa cosa all’indietro). Confrontando l’input e l’output, vediamo che l’effetto di passare un segnale reale attraverso un filtro complesso a un polo, quindi prendere la parte reale, equivale a far passare il segnale attraverso un filtro a due poli e uno zero, con funzione di trasferimento uguale a 1 − re(P )Z −1 Hre (Z) = . (1 − P Z −1 )(1 − P Z −1 )


220

Capitolo 8. Filtri

Un calcolo simile mostra che prendere la solo parte immaginaria (considerata come un segnale reale) equivale a filtrare l’input con la funzione di trasferimento: Him (Z) =

im(P )Z −1 . (1 − P Z −1 )(1 − P Z −1 )

Quindi, prendere la parte reale o quella immaginaria dell’output di un filtro a un polo fornisce filtri con due poli coniugati. Le due parti possono essere combinate per sintetizzare filtri con altri possibili numeratori; in altre parole, con un filtro ricircolante complesso possiamo sintetizzare un filtro che agisce sui segnali reali con due poli (complessi coniugati) ed uno zero (reale). Questa tecnica, nota come partial fractions, pu`o essere ripetuta per un qualsiasi numero di iterazioni in serie finch´e calcoleremo l’appropriata combinazione di parti reali e immaginarie dell’output di ciascuna iterazione per formare l’input (reale) dell’iterazione successiva. Non esiste alcuna scorciatoia simile per i filtri non-ricircolanti; per loro `e necessario calcolare esplicitamente ciascun membro di ciascuna coppia di coniugati complessi.

8.3

Progettazione dei filtri

La risposta in frequenza di una serie di filtri elementari ricircolanti e nonricircolanti pu` o essere stimata graficamente disegnando, sul piano complesso, tutti i coefficienti Q1 , . . . , Qj e P1 , . . . , Pk e ragionando come in Figura 8.8. La risposta in frequenza globale `e il prodotto di tutte le distanze dal punto Z ad ognuno dei Qi , diviso per il prodotto delle distanze ad ognuno dei Pi . Di solito si segna ciascuno degli Qi con un “o” (chiamandolo “zero”) e ciascuno degli Pi con un “x” (un ’“polo”); i loro nomi sono presi in prestito dal campo dell’analisi complessa. Una rappresentazione grafica che mostra i poli e gli zeri associati a un filtro `e chiamata, senza troppa immaginazione, diagramma polo-zero (pole-zero plot). Quando Z `e vicino ad uno zero, la risposta in frequenza tende a diminuire e quando `e vicino ad un polo, la risposta in frequenza tende ad aumentare. L’effetto di un polo o di uno zero `e pi` u pronunciato, e anche pi` u locale, se `e vicino al cerchio unitario su cui Z `e costretto a giacere. Per avere un filtro stabile i poli devono trovarsi all’interno del cerchio unitario. Gli zeri possono trovarsi sul cerchio unitario o fuori di esso, ma qualsiasi zero Q al di fuori del cerchio unitario pu` o essere sostituito da uno all’interno di esso, al punto 1/Q, per dare un multiplo costante della stessa risposta in frequenza. Tranne in casi particolari, manterremo gli zeri, cos`ı come i poli, all’interno del cerchio. Nel resto di questo paragrafo mostreremo come costruire alcuni tipi di filtri pi` u ampiamente utilizzati nella musica elettronica. La teoria della progettazione dei filtri digitali `e vasta e qui daremo solo un’introduzione. Un trattamento pi` u approfondito `e disponibile online, grazie a Julius Smith, su ccrma.stanford.edu. Si pu` o vedere anche [Ste96] per un’introduzione al filtraggio dal punto di vista pi` u generale dell’elaborazione di segnali digitali.

8.3.1

Filtro passa-basso ad un polo

Il filtro passa-basso ad un polo (one-pole) ha un singolo polo situato su un numero reale positivo p, come mostrato in Figura 8.12. Questo altro non `e


236

CHAPTER 8. FILTERS

8.3. Progettazione dei filtri

221

half-power point

p

0 (a)

2 (b)

Figure 8.12: low-pass filter: diagram; (b) frequency re- (b) Figura 8.12: One-pole Filtro passa-basso ad (a) un pole-zero polo: (a) diagramma polo-zero; sponse. in frequenza. risposta

8.3.1 One-pole filter che un filtro a pettinelow-pass ricircolante con lunghezza di ritardo d = 1 e si applica l’analisi del paragrafo 7.4. Il guadagno massimo si verifica a frequenza zero, The one-pole low-pass filter has a single pole located at a positive real number corrispondente al punto sul cerchio pi` u vicino al punto p. Qui il guadagno `e p, as pictured in Figure 8.12. This is just a recirculating comb filter with delay 1/(1 − p). Supponendo che p sia vicino a uno, se ci spostiamo ad una distanza length d = 1, and the analysis of Section 7.4 applies. The maximum gain occurs di p verso of l’alto verso il √bassotodall’asse (orizzontale), at 1a − frequency zero,o corresponding the pointreale on the circle closestlatodistanza the aumenta di un fattore di circa 2 e quindi ci aspettiamo che ilif punto di amet`a point p. The gain there is 1/(1 − p). Assuming p is close to one, we move potenza frequenza angolare di circa 1 − p. distance venga of 1 − pottenuto units upad or una down √ from the real (horizontal) axis, the distance Questo calcolo ` e spesso fatto in senso se half-power vogliamo che punto increases by a factor of about 2, and so weinverso: expect the pointil to di met` a potenza si trovi ad una determinata frequenza angolare ω, poniamo occur at an angular frequency of about 1 − p. p =This 1 −calculation ω. Questa funziona se il valore di ω `e is approssimazione often made in reverse: if webene wish solo the half-power point ben spesso accadeω,inwepratica. `e ω. soliti normalizzare il filtro to liesotto at a π/2, givencome angular frequency set p = Si 1− This approximation only works well the value of ω is well per under π/2, ascostante it often 1is−inp practice. passa-basso a unifpolo, moltiplicandolo il fattore per ottenere It isguadagno customarydito1 normalize the one-pole low-pass filter, multiplying it by the un un alla frequenza zero; frequenze non-nulle avranno quindi constant factor 1 − ap uno. in order to give a gain of 1 at zero frequency; nonzero guadagno inferiore frequencies will then get a gain` than one. in Figura 8.12 (parte b). Le freLa risposta in frequenza e less rappresentata The udibili frequency response is graphed in Figure 8.12il(part b). The audible quenze raggiungono solo la met` a del grafico; lato destro della curva di frequencies only reachsitotrova the middle of thedella graph; the right-hand sideπ. of the risposta in frequenza al di sopra frequenza di Nyquist frequency curve all polo lies above Nyquist frequency π. Il filtroresponse passa-basso a un vienethe spesso utilizzato per cercare andamenti in The one-pole low-pass filter is often used to seek trends in noisy For segnali rumorosi. Ad esempio, se si utilizza un controller fisico e signals. ci si preoccupa instance, if you use a physical controller and only care about changes on the con solo di modifiche nell’ordine di 1/10 di secondo, `e possibile regolare i valori order of 1/10 second or so, you can smooth the values with a low-pass filter un filtro passa-basso, il cui punto a met`a potenza `e 20 o 30 cicli al secondo. whose half-power point is 20 or 30 cycles per second.

8.3.2

Filtro passa-alto ad un polo ed uno zero

A volte un segnale audio porta un offset costante indesiderato, o, in altre parole, una componente a frequenza zero. Ad esempio, gli spettri di waveshaping del paragrafo 5.3 contengono quasi sempre una componente costante. Questa non `e udibile ma, poich´e specifica la potenza elettrica che viene inviata agli altoparlanti, la sua presenza riduce il livello di volume che `e possibile raggiungere senza


222

Capitolo 8. Filtri

8.3. DESIGNING FILTERS

237

p

0 (a)

(b)

Figure one-zeroad high-pass diagram;polo-zero; (b) Figura8.13: 8.13: One-pole, Filtro passa-alto un polo filter: e uno (a) zero:pole-zero (a) diagramma frequency response (from zero Nyquist frequency).di Nyquist). (b) risposta in frequenza (datozero alla frequenza

distorsioni. Un altro nome per una componente di segnale costante `e “DC”, che 8.3.2 One-pole, one-zero high-pass filter

significa “direct current”. Un modo e pratico componente Sometimes an semplice audio signal carriesper an rimuovere unwanted la constant offset, di orfrequenza in other zero da un segnale audio ` e quello di utilizzare un filtro passa-basso ad un polo words, a zero-frequency component. For example, the waveshaping spectra of per estrarla e quindi sottrarre il risultato dal segnale originale. La funzione di Section 5.3 almost always contain a constant component. This is inaudible, trasferimento risultante `e 1 meno funzione di your trasferimento delpresence filtro passabut, since it specifies electrical power la that is sent to speakers, its basso: the level of loudness you can reach without distortion. Another name reduces 1−p 1 − Z −1 for a constant signal component “direct current”. H(Z) = 1is−“DC”, meaning = p . 1 − pZ −1 1 − pZ −1 An easy and practical way to remove the zero-frequency component from an Il fattore −to p nel della funzione di trasferimento passa-basso e il audio signal1 is use numeratore a one-pole low-pass filter to extract it, and then subtract ` fattore di from normalizzazione necessario in modo chefunction il guadagno 1 a frequenza the result the signal. The resulting transfer is onesia minus the transfer zero. function of the low-pass filter:

Esaminando il lato destro dell’equazione (confrontandolo con la formula generale dei filtri composti), vediamo e ancora un polo nel numero reale p, 1 − Z −1 1 −che p c’` = p = 1 (one-zero) − e adesso c’`e anche H(Z) uno zero nel punto 1. e 1 − pZ −1 1 − pZ −1 Il diagramma polo-zero ` mostrato in Figura 8.13 (parte a) e la risposta in frequenza in parte (b) (da qui di seguito riportiamo solo le risposte in frequenza fino alla frequenza di Nyquist The factor of 1 − p in the numerator of the low-pass transfer function is the π; nell’esempio precedente avevamo tracciato la risposta in frequenza fino alla normalization factor needed so that the gain is one at zero frequency. frequenza di campionamento, 2π). By examining the right-hand side of the equation (comparing it to the general formula for compound filters), we see that there is still a pole at the real number Filtro p,8.3.3 and there is now shelving also a zero at the point 1. The pole-zero plot is shown in Figure 8.13 (part a), and the frequency part (b). one-zero) (Henceforth, wesopra, Generalizzando il filtro ad un polo e response uno zeroin(one-pole visto will only plot frequency responses to the Nyquist frequency π; in the previous supponiamo di mettere lo zero in un punto q, un numero reale vicino, ma inexample it all wayp,up` sample rate, feriore, we a 1.plotted Il polo, al the punto e tointhe posizione simile2π.) e pu`o essere maggiore o

minore di q, cio`e rispettivamente a destra o a sinistra, ma con entrambi q e p all’interno del cerchio unitario. Questa situazione `e illustrata nella Figura 8.14. Nei punti del cerchio lontani da p e q, gli effetti del polo e dello zero sono quasi inversi (le distanze da essi sono quasi uguali), quindi il filtro passa quelle frequenze quasi inalterate. In un intorno di p e q, d’altra parte, il filtro avr`a un guadagno maggiore o minore di uno a seconda di chi, tra p e q sia pi` u vicino


8.3. Progettazione dei filtri 238

223 CHAPTER 8. FILTERS

imaginary

1-d

q

p

real 1

0

d (b)

(a)

Figure 8.14: One-pole, one-zero shelving filter: (a) pole-zero diagram; (b) freFigura 8.14: Filtro shelving ad un polo e uno zero: (a) diagramma polo-zero; quency response. (b) risposta in frequenza.

8.3.3 Shelving filter al cerchio. Questa configurazione, dunque, funge da filtro shelving a bassa frequenza (per fare un filtro shelving ad alta frequenza, facciamo la stessa cosa, Generalizing the one-zero, one-pole filter above, suppose we place the zero at a solo posizionando p e q vicini a −1 invece di 1). point q, a real number close to, but less than, one. The pole, at the point p, is Per trovare i parametri filtrogreater shelving, data una than frequenza similarly situated, and mightdibeuneither than or less q, i.e.,ditotransithe zione desiderata ω (in unit` a angolari) e un guadagno per la bassa frequenza right or left, respectively, but with both q and p within the unit circle. This g, innanzitutto scegliamo una distanza media d, come mostrato in figura, dal polo situation is diagrammed in Figure 8.14. e dallo zero al bordo del cerchio. Per valori di d piccoli, la regione di influenza At points of the circle far from p and q, the effects of the pole and the zero `e di circa d radianti, quindi impostiamo semplicemente d = ω per ottenere la are nearly inverse (the distances to them are nearly equal), so the filter passes frequenza di transizione desiderata. those frequencies nearly unaltered. In the neighborhood of p and q, on the other √ √ Quindi mettiamo il polo p = 1or − less d/ than g e lo in q = on 1− d g.of Il hand, the filter will have a gainingreater onezero depending which a frequenza zero This `e allora pguadagno or q is closer to the circle. configuration therefore acts as a low-frequency shelving filter. (To make a high-frequency 1 − q shelving filter we do the same thing, only placing p and q close to -1 instead of = 1.)g 1−p To find the parameters of a shelving filter given a desired transition frequency ω (in angular units)Ad and low-frequency gaindg,`e first chooseean distance come desiderato. esempio, in figura, 0.25 we radianti g average `e 2. d, as pictured in the figure, from the pole and the zero to the edge of the circle. For small Filtro values ofpassa-banda d, the region of influence is about d radians, so simply set 8.3.4 d = ω to get the desired transition frequency. √ √ poli e zeri a Partendo dai the tre pole tipi di precedenza, Then put atfiltri p = 1mostrati − d/ g in and the zero attutti q = dotati 1 − d di g. The gain valori reali, ora li trasformiamo per operare su bande situate al di fuori dell’asse reale. I filtri passa-basso, passa-alto e shelving diventano quindi filtri passabanda, elimina-band e peaking. In primo luogo sviluppiamo il filtro passabanda. Supponiamo di volere una frequenza centrale a ω radianti e una larghezza di banda pari a β. Prendiamo il filtro passa-basso con frequenza di taglio β; il


224 8.3. DESIGNING FILTERS

P

Capitolo 8. 239 Filtri

1

P

2 0 (b)

(a)

Figure 8.15: band-pass filter: pole-zero diagram; (b) frequency Figura 8.15: Two-pole Filtro passa-banda a due(a) poli: (a) diagramma polo-zero; (b) response. risposta in frequenza. at zero is then suo polofrequency si trova, per valori piccoli di β, approssimativamente su p = 1 − β. Ora 1−q ruotiamo questo valore di ω radianti nel = piano g complesso, cio`e moltiplichiamolo 1 −p per il numero complesso cos(ω) + i sin(ω). Il nuovo polo si trova in as desired. For example, in the figure, d is 0.25 radians and g is 2. P1 = (1 − β)(cos(ω) + i sin(ω)).

8.3.4 Band-pass Per ottenere un output filter a valori reali, questo deve essere associato ad un altro polo: Starting with the three filter types shown above, which all have real-valued poles P2 = P1them = (1to − operate β)(cos(ω) i sin ω)). and zeros, we now transform on − bands located off the real axis.

low-pass, polo-zero high-pass,risultante and shelving filters will become IlThe diagramma `e mostrato in then Figura 8.15. band-pass, stopband, and peaking filters. First we develop the band-pass Suppose we Il picco `e approssimativamente (non esattamente) allafilter. frequenza centrale want a center frequency at ω radians and a bandwidth of β. We take the lowdesiderata ω, e la risposta in frequenza scende di 3 decibel a circa β radianti al pass filter cutoff β; `eitsauspicabile pole is located, for small values β, di sopra e alwith di sotto di frequency essa. Spesso normalizzare il filtro perofavere roughly at p = 1 − β. Now rotate this value by ω radians in the complex plane, un guadagno di picco vicino all’unit` a; questo viene fatto moltiplicando l’input o i.e., multiply by the complex number cos ω + i sin ω. The new pole is at: l’output per il prodotto delle distanze dei due poli dal picco sul cerchio o (molto approssimativamente): P1 = (1 − β)(cos ω + i sin ω) β · (β + 2ω). To get a real-valued output, this must aggiungere be paired with Per alcune applicazioni `e auspicabile unoanother zero neipole: punti 1 e −1, in modo che il guadagno scenda a zero alle frequenze angolari 0 e π. P2 = P1 = (1 − β)(cos ω − i sin ω)

8.3.5 Filtri peaking elimina-banda The resulting pole-zero plot ised as shown in Figure 8.15. The peak is approximately (not exactly) at the desired center frequency ω, Allo stesso modo, un filtro peaking viene ottenuto da un filtro shelving ruotando and the frequency response drops by 3 decibels approximately β radians above il polo e lo zero e fornendo un polo e uno zero coniugati, come mostrato in Figura and below it. It is often desirable to normalize the filter to have a peak gain 8.16. Se la frequenza centrale desiderata `e ω, e i raggi del polo e dello zero (come per il filtro shelving) sono p e q, allora collochiamo il polo e lo zero superiori in

P1 = p · (cos(ω) + i sin(ω)), Q1 = q · (cos(ω) + i sin(ω)).


8.3. Progettazione dei filtri 240

225 CHAPTER 8. FILTERS

0 (b)

(a)

Figure 8.16: 8.16: Un A peaking pole-zero diagram; (b) frequency response. Figura filtro difilter: picco:(a)(a) diagramma polo-zero; (b) risposta in freHere the filter is set to attenuate by 6 decibels at the center frequency. quenza. Qui il filtro `e impostato per attenuare di 6 decibel alla frequenza centrale. near unity; this is done by multiplying the input or output by the product of the distances of the two poles to the peak on the circle, or (very approximately): Come caso speciale, posizionando lo zero sulla circonferenza unitaria si ha un filtro elimina-banda; in questo caso `e zero sulla frequenza centrale. β ∗il(βguadagno + 2ω) Questo `e analogo al filtro passa-alto ad un polo e uno zero visto sopra. For some applications it is desirable to add a zero at the points 1 and −1, so that the gain drops to zero at angular frequencies 0 and π.

8.3.6 Filtri di Butterworth 8.3.5 Peaking and stop-band filter Un filtrosame con way, un polo reale e filter uno zero reale pu` o essere configurato un filtro In the a peaking is obtained from a shelving filtercome by rotating shelving, come un filtro passa-alto (mettendo lo zero nel punto 1) o come the pole and the zero, and by providing a conjugate pole and zero, as shown inun filtro passa-basso lo zero in −1).isLe in frequenza di questi Figure 8.16. If the(mettendo desired center frequency ω, risposte and the radii of the pole and filtri smussate; parole, le regioni di the transizione sono zero sono (as forabbastanza the shelving filter) areinpaltre and q, then we place the upper pole ampie. `e auspicabile ottenere un filtro pi` u nitido, sia shelving, passaand zeroSpesso at basso o passa-alto, in cui le due siano u piatte e separate da una regione P1 =bande p · (cos ω + pi` i sin ω) di transizione pi` u ristretta. Q1 = q · (cos ω + i sin ω) Una procedura presa in prestito dal mondo dei filtraggio analogico trasforma As a reali, special placing thezero zero nei on corrispondenti the unit circle gives a stop-band filter; filtri adcase, un polo e uno filtri di Butterworth, che in this regioni case thedigain at the center frequency is zero. This is `eanalogous the hanno transizione pi` u strette. Questa procedura descrittatochiaraone-pole, one-zero high-pass above. capitolo di [Ste96]. Il modo di ottenerli mente ed in maniera elegantefilter nell’ultimo richiede un background matematico maggiore di quello che abbiamo sviluppato qui e noi semplicemente mostreremo 8.3.6 Butterworth filters il risultato senza ricavarlo. Per fare un filtro di Butterworth a partire da un filtro passa-alto, da uno A filter with one real pole and one real zero can be configured as a shelving passa-basso o da uno shelving, supponiamo che sia il polo che lo zero siano dati filter, as a high-pass filter (putting the zero at the point 1) or as a low-pass dall’espressione filter (putting the zero at −1). The frequency responses of these filters are quite 1 − r2 (1 + r)2

dove r `e un parametro che varia tra 0 e ∞. Se r = 0 si ha il punto 1, e se r = ∞ si ha −1.


226

Capitolo 8. Filtri

Quindi, per ragioni che resteranno misteriose, sostituiamo il punto (che sia il polo o lo zero) con n punti dati da: (1 − r2 ) − (2r sin(α))i 1 + r2 + 2r cos(α) dove α varia sui valori: π 1 π 3 π 2n − 1 ( − 1), ( − 1), . . . , ( − 1). 2 n 2 n 2 n In altri termini, α `e uno degli n angoli equidistanti tra π/2 e π/2. I punti sono disposti nel piano complesso come mostrato in Figura 8.17. Essi si trovano su un cerchio che passa per il punto reale di partenza e che interseca la circonferenza unitaria in angoli retti. Una buona stima per la frequenza di taglio o di transizione definita da questi insiemi circolari di poli o zeri `e semplicemente il punto in cui il cerchio interseca la circonferenza unitaria, corrispondente a α = π/2. Questo d`a il punto (1 − r2 ) − 2ri 1 + r2 che, dopo qualche calcolo algebrico, fornisce una frequenza angolare pari a β = 2 arctan(r). La Figura 8.18 (parte a) mostra un diagramma polo-zero e una risposta in frequenza per un filtro passa-basso di Butterworth con tre poli e tre zeri. La parte (b) mostra la risposta in frequenza del filtro passa-basso e di tre altri filtri ottenuti scegliendo diversi valori di β (e quindi di r) per gli zeri, ma lasciando i poli stazionari. Mentre gli zeri avanzano da β = π a β = 0, il filtro, che inizia come filtro passa-basso, diventa un filtro shelving e infine un passa-alto.

8.3.7

Ridimensionando il cerchio unitario con funzioni razionali

Nel paragrafo 8.3.4 abbiamo visto un modo semplice per trasformare un filtro passa-basso in uno passa-banda. Saremmo quindi tentati di applicare lo stesso metodo per trasformare il nostro filtro passa-basso di Butterworth in un filtro passa-banda di qualit` a superiore; ma se vogliamo preservare l’alta qualit`a del filtro di Butterworth dobbiamo essere molto pi` u attenti di prima nella progettazione della trasformazione utilizzata. In questo paragrafo presentiamo le basi necessarie per ottenere il filtro passa-banda di Butterworth introducendo una classe di trasformazioni razionali del piano complesso che preservano il cerchio unitario. Questa trattazione `e adattata da [PB87, pp. 201-206] (sono grato a Julius Smith per questa indicazione). In [PB87] la trasformazione `e effettuata in tempo continuo, ma qui abbiamo adattato il metodo per operare in tempo discreto, al fine di rendere la trattazione pi` u contenuta. L’idea `e quella di iniziare con qualsiasi filtro con una funzione di trasferimento come prima: H(Z) =

(1 − Q1 Z −1 ) · · · (1 − Qj Z −1 ) (1 − P1 Z −1 ) · · · (1 − Pk Z −1 )


8.3. Progettazione dei filtri

227

242

CHAPTER 8. FILTERS r=1 r=2

r=0.5

242

CHAPTER 8. FILTERS

= 3

r=1 r=2

r=0.5

/8

= = = 3

= = -3

/8

/8

= -3 =

/8

/8

/8 /8 /8

Figure 8.17: Replacing a real-valued zeroreale (shown as a solid dot)unwith an Figura Sostituzione di un polo pole o unoorzero (mostrato come punto array of four of them (circles) as for a Butterworth filter. In this example we nero) con un array di quattro punti (cerchi) come per un filtro di Butterworth. getquesto four new polesotteniamo or zeros asquattro shown,nuovi lyingpoli along thecome circlemostrato, where r = 0.5. In esempio o zeri che stanno nel cerchio dove r = 0.5. Figure 8.17: Replacing a real-valued pole or zero (shown as a solid dot) with an array of four of them (circles) as for a Butterworth filter. In this example we get four new poles or zeros as shown, lying along the circle where r = 0.5.

shelf 2

shelf 2

3

hi-pass 3

shelf 1

hi-pass

low-pass

shelf 1

0 (a)

(b)

0

low-pass

(b) (a)

Figure 8.18: Butterworth low-pass filter with three poles and three zeros: (a) pole-zero plot. The poles are chosen for a cutoff frequency β = π/4; (b) freFigure 8.18: Butterworth low-pass filter with three poles and three zeros: (a) Figura 8.18: passa-basso di for Butterworth conconfiguration, tre βpoli e tre(b) zeri: (a) diaquency responses fourare filters with the same frequency pole with pole-zero plot.Filtro Thefor poles chosen a cutoff = π/4; fre-different placements of zeros (but leaving the The low-pass filter gramma polo-zero. I poli sono scelti per fixed). una di with taglio βresults = π/4;from (b) quency responses for four filters with thepoles same pole frequenza configuration, different setting βin=of πzeros for (but theper zeros; thepoles two shelving filters correspond tofrom β = 3π/10 risposte frequenza quattro filtrifixed). con la stessa configurazione di poli, con placements leaving the The low-pass filter results and β= 2π/10, finally the high-pass filter iscorrespond obtained setting βpassa-basso = 0. The diverse zeri (ma lasciando i poli fissati). to Il setting βcollocazioni = π for and the degli zeros; the two shelving filters βfiltro = 3π/10 and β = 2π/10, finally the setting β = corrispondono 0. Theand the high-pass filter is normalized for unitglifilter gain the filtri Nyquist frequency, corrisponde ad and impostare β =high-pass π per zeri;isatiobtained due shelving high-pass normalized unitil gain the Nyquist frequency, andimpostando the forfilter unit at DC.e for aothers β = 3π/10 e is βgain = 2π/10 infine filtroatpassa-alto viene ottenuto at DC. viene normalizzato per avere guadagno unitario alla βothers = 0. for Il unit filtrogain passa-alto frequenza di Nyquist, mentre gli altri per avere guadagno unitario al DC.


228

Capitolo 8. Filtri

la cui risposta in frequenza (il guadagno ad una frequenza ω) `e data da: |H(cos(ω) + i sin(ω))|. Supponiamo ora di poter trovare una funzione razionale, R(Z), che distorce il cerchio unitario in qualche modo desiderabile. Richiedere che R sia una funzione razionale significa che pu` o essere scritta come un quoziente di due polinomi (ad esempio, la funzione di trasferimento H `e una funzione razionale). Richiedere che R mandi punti del cerchio unitario su altri punti del cerchio unitario ` possibile corrisponde alla condizione che |R(Z)| = 1 ogni volta che |Z| = 1. E verificare facilmente che qualsiasi funzione della forma R(Z) = U ·

An Z n + An−1 Z n−1 + · · · + A0 A0 Z n + A1 Z n−1 + · · · + An

(dove |U | = 1) ha questa propriet` a. Lo stesso ragionamento del paragrafo 8.2.2 assicura che |R(Z)| = 1 se |Z| = 1. Una volta che abbiamo una funzione razionale R appropriata, possiamo semplicemente comporla con la funzione di trasferimento originale H per costruire una nuova funzione razionale, J(Z) = H(R(Z)). Il guadagno del nuovo filtro J alla frequenza ω `e quindi uguale a quello di H ad una diversa frequenza φ, scelta in modo che: cos(φ) + i sin(φ) = R(cos(ω) + i sin(ω)). La funzione R muove i punti intorno al cerchio unitario; J, in ogni punto, `e uguale ad H sul punto da cui R si `e spostata. Ad esempio, supponiamo di iniziare con un filtro passa-basso ad un polo e uno zero: 1 + Z −1 H(Z) = 1 − gZ −1 e applichiamo la funzione R(Z) = −Z 2 = −

1 · Z2 + 0 · Z + 0 . 0 · Z2 + 0 · Z + 1

Geometricamente, questa scelta di R allunga il cerchio unitario uniformemente a due volte la sua circonferenza e lo avvolge due volte. I punti 1 e −1 vengono entrambi inviati al punto −1 e i punti i e −i vengono inviati al punto 1. La funzione di trasferimento risultante `e J(Z) =

1 − Z −2 (1 − Z −1 )(1 + Z −1 ) = . √ √ −2 1 + gZ (1 − i gZ −1 )(1 + i gZ −1 )

I diagrammi polo-zero di H e J sono mostrati in Figura 8.19. Da un filtro passa-basso siamo finiti ad un filtro passa-banda. I punti i e −i che R invia a 1 (dove il guadagno del filtro originale `e pi` u alto) diventano punti di maggiore guadagno per il nuovo filtro.


8.3. Progettazione dei filtri 244

229 CHAPTER 8. FILTERS

(b)

(a)

Figure one-zeroalow-pass pole-zero plot; (b)poloplot for Figura8.19: 8.19: One-pole, Filtro passa-basso un polo filter: ed uno(a) zero: (a) diagramma 2 the resulting filter after the transformation R(Z) = −Z . The result is a zero; (b) diagramma del filtro risultante dopo la trasformazione R(Z) = −Z 2band. pass filter with frequency π/2. Il risultato `e uncenter filtro passa-banda con frequenza centrale π/2.

8.3.8 passa-banda di Butterworth and applyFiltro the function Possiamo applicare la trasformazione R(Z) −Z02· Z per+ convertire il filtro di 1 · Z=2 + 0 2 R(Z) = −Z = Butterworth in un filtro passa-banda di − alta qualit` a con frequenza centrale π/2. 0 · Z 2 + 0 · Z per + 1spostare la frequen` quindi possibile applicare un’ulteriore trasformazione E za centrale su qualsiasi valore desiderato tra unit 0 e π.circle La trasformazione sar`a its Geometrically, this choice of R stretchesωthe uniformly to twice della forma circumference and wraps it around itself The points 1 and −1 are both aZ twice. +b = i and −i are sent to the point 1. The sent to the point −1, and theS(Z) points bZ + a

resulting transfer function is

dove a e b sono numeri reali e non entrambi possono essere uguali a zero. Questo `e un caso particolare della forma fornita sopra per le funzioni razionali 1− Z −2 generale (1 − Z −1 )(1 + Z −1 ) J(Z) = = √ √ =−1−1 e le met`a che preservano il cerchio unitario. Si ha S(1) = 1 e S(−1) −2 −1 1 + gZ (1 − i gZ )(1 + i gZ ) superiore e inferiore del cerchio unitario vengono trasformate simmetricamente (se Z va su Wplots , allora su JWare ). L’effetto dellaFrom trasformazione The pole-zero of Z H va and shown inqualitativo Figure 8.19. a low-passSfilter ` e quello di comprimere i punti del cerchio unitario verso 1 o −1. we ended up with a band-pass filter. The points i and −i which R sends to 1 In particolare, unagain frequenza centrale desiderata (where the originaldata filter’s is highest) become pointsω,ofvogliamo highest scegliere gain for the S in modo che: new filter. S(cos(ω) + i sin(ω)) = i. 2

Se consideriamo R = −Z come prima, e siafilter H la funzione di trasferimento per 8.3.8 Butterworth band-pass

un filtro passa-basso di Butterworth, allora il filtro combinato, con funzione di

We can applyH(R(S(Z))), the transformation R(Z) = −Z 2 to thecentrale Butterworth trasferimento sar`a un filtro passa-banda conconvert frequenza ω. filter into a per high-quality Risolvendo a e b si haband-pass filter with center frequency π/2. A further transformation can then be applied to shift the center frequency to any desired π ω π ω − ), b = sin( will − be ). of the form, = The cos( transformation value ω between 0 andaπ. 4

2

4

2

aZ + b avr`a 2n poli e 2n zeri (se n `e La nuova funzione di trasferimento, H(R(S(Z))), S(Z) = bZ +a il grado del filtro di Butterworth H).


230 246

8. Filtri CHAPTER 8.Capitolo FILTERS

3

3

0 (a)

(b)

Figure 8.20: Butterworth band-pass di filter: (a) pole-zero (b) frequency Figura 8.20: Filtro passa-banda Butterworth: (a)diagram; diagramma polo-zero; (b) response. The center frequency is π/4. The bandwidth depends both centerdipenrisposta in frequenza. La frequenza centrale `e π/4. La larghezza dionbanda frequency and on the bandwidth of the original Butterworth low-pass filter used.

de sia dalla frequenza centrale che dalla larghezza di banda del filtro originario passa-basso di Butterworth utilizzato.

amplitude envelope) the output will behave smoothly as well. But one subtlety arises when trying to normalize a recursive filter’s output when the feedback Conoscere la funzione di trasferimento `e una cosa, ma `e ancora gain is close to one. For example, suppose we havebuona a one-pole low-pass filtermeglio conoscere le posizioni di tutti i poli e gli zeri del nuovo filtro, che dobbiamo with gain 0.99 (for a cutoff frequency of 0.01 radians, or 70 Hertz at the usualessere in grado di To calcolare usando filtri elementari. Semultiply Z `e un by polo della funzione di sample rate). normalize this for unit DC gain we 0.01. Suppose trasferimento H(R(S(Z))), cio`e by se changing J(Z) = the ∞ allora R(S(Z)) now we wish to J(Z) double=the cutoff frequency gain slightly to deve essere un ispolo H. Lothat stesso per gli zeri. trovaredoubles. un polo oIf uno 0.98. This finediexcept the vale normalizing factorPer suddenly we zero multiply the filter’s output = by W the, dove normalizing output suddenly, di J, poniamo R(S(Z)) W `e unfactor, polo the o uno zero will di H e risolviamo although only momentarily, jump by a factor of two. rispettoperhaps a Z. Questo d` a: i2 filter, not the output. Figure 8.21 h of the The trick is to normalize at the input aZ+b = Wfeedback gain P , normalized − (part a) shows a complex recirculatingbZ+a filter, with at the input by 1 − |P | so that the peak gain is one. Part (b) shows the wrong √ aZ+b way to do it, multiplying at the output. bZ+a = ± −W Things get more complicated when several elementary recirculating filters √ are put in series, since the correct normalizing factor is in general a function of √ −W −b Z = ±a ∓b if−W +aa filter is required to change all the coefficients. One possible approach, such rapidly, is to normalize each input separately as if it were acting alone, then (qui a e b the sono definiti comebysopra e abbiamo il fatto che a2 + b2 = 1). multiplying output, finally, whatever further usato correction is needed.

Nella figura 8.20 `e mostrato un esempio di diagramma polo-zero e di risposta in frequenza di J.

8.3.10

Impulse responses of recirculating filters

In Section 7.4 we analyzed the impulse response of a recirculating comb filter, of 8.3.9 Coefficienti temporalmente variabili which the one-pole low-pass filter is a special case. Figure 8.22 shows the result for two progettazione low-pass filtersdiand one filtri complex one-pole resonant filter. All del are filtro ele- pu` Nella alcuni ricorsivi, cambiare i coefficienti o mentary recirculating filters as introduced in Section 8.2.3. Each is normalized inserire energia nel sistema. Un analogo fisico `e un bambino su un’altalena.

Il bambino oscilla avanti e indietro alla frequenza di risonanza del sistema, e spingendo o tirando il bambino si inserisce o si estrae l’energia senza problemi. Tuttavia, se si decide di accorciare la catena o di spostare l’altalena stessa, `e possibile inserire una quantit` a imprevedibile di energia nel sistema. La stessa cosa pu` o accadere quando si cambiano i coefficienti in un filtro ricircolante risonante.


8.3. Progettazione filtri 8.3. DESIGNING dei FILTERS

231 247

IN IN 1-|P| 1-|P| OUT

d=1

d=1

OUT

P P (a - right)

(b - wrong)

Figure Normalizing a recirculating elementaryricircolante: filter: (a) correctly, by Figura 8.21: Normalizzazione di un filtro elementare (a) correttamultiplying in the normalization at the input;all’input; (b) incorrectly, multiplying mente, moltiplicando il fattore difactor normalizzazione (b) erroneamente, at the output. all’output. moltiplicandolo

I filtri semplici ad un polo e uno zero usati qui non hanno questa difficolt`a; to have unit maximum gain. se ilInguadagno di feedback di feed-forward viene modificato regolarmente (nel the case of a low-passo filter, the impulse response gets longer (and lower) senso di un inviluppo di ampiezza) anche l’output si comporter` a in modo regoas the pole gets closer to one. Suppose the pole is at a point 1 − 1/n (so that lare.cutoff Ma una sottigliezza si radians). presenta quando si cerca di factor normalizzare l’output di the frequency is 1/n The normalizing is also 1/n. After un filtro ricorsivo quando il guadagno di feedback ` e vicino a uno. Ad esempio, n points, the output diminishes by a factor of supponiamo di avere un filtro passa-basso a un polo con guadagno 0.99 (per una ! o 70 "n frequenza di taglio di 0.01 radianti, 1 Hertz 1 all’usuale frequenza di campio1 − ≈ unitario di DC, moltiplichiamo namento). Per normalizzarlo per il guadagno n e per 0.01. Supponiamo ora di voler raddoppiare la frequenza di taglio cambiando leggermente guadagnoabout a 0.98. Questo va bene, tranne che il fattore di where e is Euler’silconstant, 2.718. The filter can be said to have a settling normalizzazione improvvisamente raddoppia. Se si moltiplica l’output del filtro time of n samples. In the figure, n = 5 for part (a) and n = 10 for part (b). pergeneral, il fattore normalizzazione, l’output is improvvisamente, anche forse solo In thedisettling time (in samples) approximately one oversethe cutoff temporaneamente, salta di un fattore di due. frequency (in angular units). Il trucco `e quello normalizzare l’input delwefiltro, La Figura 8.21 The situation getsdimore interesting when lookl’output. at a resonant one-pole (parte a) mostra un filtro ricircolante complesso, con guadagno di feedback P, filter, that is, one whose pole lies off the real axis. In part (c) of the figure, the normalizzato all’input da 1 − |P | in modo che il guadagno di picco sia uno. La pole P has absolute value 0.9 (as in part b), but its argument is set to 2π/10 parte (b)We mostra il modo per farlo, all’output. radians. get the samesbagliato settling time as in moltiplicando part (b), but the output rings at cose diventano u complicate quandoofdiversi filtri elementari ricircolanti the Le resonant frequencypi` (and so at a period 10 samples in this example). vengono messi in serie, poich´e il fattore di normalizzazione corretto `e, in geneA natural question to ask is, how many periods of ringing do we get before rale, una funzione di tutti i coefficienti. Un possibile approccio, se `e richiesto the filter decays to strength 1/e? If the pole of a resonant filter has magnitude che tale filtro cambi rapidamente, `e quello di normalizzare ciascun input sepa1 − 1/n as above, we have seen in Section 8.2.3 that the bandwidth (call it b) ratamente come se stesse agendo da solo, quindi moltiplicare l’output, alla fine, is about 1/n, and we see here that the settling time is about n. The resonant per qualsiasi ulteriore correzione sia necessaria. frequency (call it ω) is the argument of the pole, and the period in samples of the ringing is 2π/ω. The number of periods that make up the settling time is

8.3.10

Risposte agli impulsi dei filtri ricircolanti

Nel paragrafo 7.4 abbiamo analizzato la risposta all’impulso di un filtro a pettine ricircolante, di cui il filtro passa-basso a un polo `e un caso speciale. La Figura


248

CHAPTER 8. FILTERS

232

Capitolo 8. Filtri

1/5 (a) 1/(5e)

5

n

1/10 (b) 1/(10e) 10

1/10 (c)

1/(10e) 10

Figura La risposta tre elementary filtri elementari ricircolanti (a un Figure 8.22: 8.22: The impulse all’impulso response of di three recirculating (one-pole) polo), normalizzati per guadagno di picco 1: (a) passa-basso con P = 0.8; (b) filters, normalized for peak gain 1: (a) low-pass with P = 0.8; (b) low-pass with passa-basso con P = 0.9; (c) passa-banda (mostrata solo la parte reale), con P = 0.9; (c) band-pass (only the real part shown), with |P | = 0.9 and a center |P | = 0.9 e of una frequenza centrale di 2π/10. frequency 2π/10. 8.22 mostra il risultato per due filtri passa-basso e un filtro risonante complesso a un polo. Tutti sono filtri elementari ricircolanti come introdotti nel paragrafo 8.2.3. Ciascuno `e normalizzato per avere guadagno massimo unitario. Nel caso di un filtro passa-basso, la risposta all’impulso diventa pi` u lunga (e pi` u bassa) quando il polo si avvicina a uno. Supponiamo che il polo sia nel punto 1 − 1/n (in modo che la frequenza di taglio sia 1/n radianti). Anche il fattore di normalizzazione `e 1/n. Dopo n punti, l’output diminuisce di un fattore pari a n 1 1 1− ≈ n e dove e `e la costante di Eulero, pari a circa 2.718. Si pu`o dire che il filtro abbia un tempo di stabilizzazione (settling time) di n campioni. Nella figura, n = 5 per la parte (a) e n = 10 per la parte (b). In generale, il tempo di stabilizzazione (in campioni) `e di circa l’inverso della frequenza di taglio (in unit`a angolari).


8.3. Progettazione dei filtri

233

La situazione diventa pi` u interessante se si guarda un filtro risonante a un polo, cio`e un filtro il cui polo `e fuori dall’asse reale. Nella parte (c) della figura, il polo P ha valore assoluto 0.9 (come nella parte (b)), ma il suo argomento `e impostato su 2π/10 radianti. Otteniamo lo stesso tempo di stabilizzazione come nella parte (b), ma l’output squilla alla frequenza di risonanza (e quindi ad un periodo di 10 campioni, in questo esempio). Una domanda naturale da chiedersi `e: quanti periodi di risonanza si ottiene prima che il filtro decade alla forza 1/e? Se il polo di un filtro risonante ha modulo 1 − 1/n come sopra, abbiamo visto nel paragrafo 8.2.3 che la larghezza di banda (chiamiamola b) `e di circa 1/n e vediamo qui che il tempo di stabilizzazione `e di circa n . La frequenza di risonanza (chiamiamola ω) `e l’argomento del polo e il periodo in campioni della risonanza `e 2π/ω. Il numero di periodi che compongono il tempo di stabilizzazione `e quindi 1 ω q n = = 2π/ω 2π b 2π dove q `e la qualit` a del filtro, definita come la frequenza centrale divisa per la larghezza di banda. I filtri risonanti vengono spesso specificati in termini della frequenza centrale e di “q” al posto della larghezza di banda.

8.3.11

Filtri all-pass

A volte un filtro viene utilizzato per ottenere un cambiamento di fase desiderato, piuttosto che modificare le ampiezze delle componenti frequenziali di un suono. Per fare ci` o occorrerebbe un modo per progettare un filtro con una risposta costante unitaria in frequenza, ma che modifichi la fase di una sinusoide in ingresso in un modo che dipende dalla sua frequenza. Abbiamo gi`a visto nel Capitolo 7 che un ritardo di lunghezza d introduce un cambiamento di fase di −dω, alla frequenza angolare ω. Un’altra classe di filtri, detti filtri all-pass, possono apportare modifiche di fase che sono funzioni pi` u interessanti di ω. Per progettare un filtro all-pass, cominciamo con due fatti: innanzitutto, un filtro elementare ricircolante ed uno elementare non-ricircolante si cancellano perfettamente l’uno con l’altro se hanno lo stesso coefficiente di guadagno. In altre parole, se un segnale `e stato immesso attraverso un filtro a uno zero, reale o complesso, l’effetto pu`o essere invertito applicando sequenzialmente un filtro a un polo, e viceversa. Il secondo fatto `e che il filtro elementare non-ricircolante della seconda forma ha la stessa risposta in frequenza di quello della prima forma; essi differiscono solo nella risposta di fase. Quindi, se combiniamo un filtro elementare ricircolante con uno elementare non-ricircolante della seconda forma, le risposte in frequenza si annullano (ad un guadagno piatto, indipendente dalla frequenza), ma la risposta di fase non `e costante. Per trovare la funzione di trasferimento, scegliamo lo stesso numero complesso P , con |P | < 1, come coefficiente per entrambi i filtri elementari e moltiplichiamo le loro funzioni di trasferimento: H(Z) =

P − Z −1 . 1 − P Z −1

Il coefficiente P controlla sia la posizione del polo (a P stesso) che dello zero (a 1/P ). La Figura 8.23 mostra il negativo della risposta di fase del filtro all-pass


250 234

CHAPTER 8. FILTERS Capitolo 8. Filtri

2 0.4 p=0.8 0 -0.8 0 0

2

Figura 8.23: Negativo della risposta di fase dei filtri all-pass con diverse posizioni Figure 8.23: Phase response of all-pass filters with different pole locations p. p del polo. Quando il polo si trova a zero, il filtro si riduce a un ritardo di un When the campione. pole is located at zero, the filter reduces to a one-sample delay. per quattrosample scelte p, a valori reali, del frequenze 0, π e crossovers, rate converters, andcoefficiente. DC removalA(which we pari have aalready 2π, lain risposta di fase `e proprio quella we’ll di unberitardo di unwith campione; ma per used earlier chapters). Here, though, concerned the specifically le frequenze tra questi valori, la risposta di fase `e piegata verso l’alto o verso il musical applications. basso a seconda del coefficiente. I coefficienti complessi forniscono curve di risposta di fase simili, ma le frequenze alle quali attraversano la linea diagonale nella figura vengono spostate a secondaSubtractive dell’argomento synthesis del coefficiente P . 8.4.1

Subtractive synthesis is the technique of using filters to shape the spectral en8.4 Applicazioni velope of a sound, forming another sound, usually preserving qualities of the original sound such as pitch, roughness, noisiness, or graniness. The spectral I filtri vengono utilizzati in un’ampia gamma di applicazioni sia in ingegneria envelope of the resulting sound is the product of the spectral envelope of the audio che in musica elettronica. Le prime includono, ad esempio, equalizzatori, original sound with the frequency response of the filter. Figure 8.24 shows a speaker crossover, convertitori di frequenza di campionamento e rimozione DC possible configuration of source, filter, and result. (che abbiamo gi` a utilizzato nei capitoli precedenti). Qui, per`o, ci preoccuperemo The filter mayspecificatamente be constant or musicali. time-varying. Already in wide use by the delle applicazioni mid 1950s, subtractive synthesis boomed with the introduction of the voltagecontrolled filter (VCF), which became widely available in the mid 1960s with 8.4.1 Sintesi sottrattiva the appearance of modular synthesizers. A typical VCF has two inputs: one for the sound to filter, and one to vary the center or modellare cutoff frequency of the filter. La sintesi sottrattiva `e la tecnica di usare filtri per l’inviluppo spettrale di un suono, use formando un isaltro suono,the checenter normalmente le qualit` a A popular of a VCF to control frequencyconserva of a resonant filter del suono originale, il tono, la rugosit` la rumorosit` a oa la granularit` a. from the same ADSRcome generator that controlsa, the amplitude; possible block L’inviluppo spettrale del suono `e il prodotto dell’inviluppo spettrale diagram is shown in Figure 8.25.risultante In this configuration, the louder portion of a del suono originale con controlled la risposta by in frequenza del filtro. Figura may 8.24 mostra note (loudness roughly the multiplier at theLa bottom) also be una possibile sorgente, filtro the e risultato. made to soundconfigurazione brighter, usingdithe filter, than quieter parts; this can mimic filtro pu` o essereofcostante o variabile nel tempo.over Gi` a inlife largo dalla the Il spectral evolution strings or brass instruments the of auso note. met` a degli anni ‘50, la sintesi sottrattiva `e emersa con l’introduzione del filtro controllato dalla tensione (VCF, da voltage-controlled filter), che `e diventato ampiamente disponibile alla met` a degli anni ‘60 con la comparsa dei sintetizzatori modulari. Un VCF tipico ha due ingressi: uno per il suono da filtrare e uno per variare la frequenza centrale, o di taglio, del filtro.


8.4. Applicazioni

235

(a)

amplitude

frequency (b)

(c)

Figure synthesis: spectrum of input sound; (b) freFigura 8.24: 8.24: Subtractive Sintesi sottrattiva: (a)(a) spettro del suono in ingresso; (b)filter risposta quency response; (c) spectrum of output sound. in frequenza del filtro; (c) spettro del suono in uscita. Un uso popolare di un VCF `e quello di controllare la frequenza centrale di un filtro risonante tramite lo stesso generatore ADSR che controlla l’ampiezza; un possibile diagramma a blocchi viene mostrato in Figura 8.25. In questa configurazione, la parte pi` u forte di una nota (la rumorosit`a controllata approssimativamente dal moltiplicatore in basso) pu`o anche essere resa pi` u nitida, usando il filtro, rispetto alle parti pi` u silenziose; questo pu`o simulare l’evoluzione spettrale per la durata di vita di una nota di strumenti a corde o d’ottone.

8.4.2

Envelope following

Spesso `e auspicabile utilizzare la potenza, variabile nel tempo, di un segnale in ingresso per attivare o controllare un processo musicale. Per fare questo, avremo bisogno di una procedura per misurare la potenza di un segnale audio. Poich´e la maggior parte dei segnali audio passa attraverso lo zero molte volte al secondo, non `e sufficiente prendere valori istantanei del segnale per misurarne la loro potenza; invece, dobbiamo calcolare la potenza media su un intervallo di tempo abbastanza lungo che le sue variazioni non appaiano nella stima della potenza, ma abbastanza corto che i cambiamenti nel livello del segnale vengano rapidamente segnalati. Un calcolo che fornisce una stima della potenza, che varia nel tempo, di un segnale, prende il nome di envelope follower. L’output di un filtro passa-basso pu`o essere considerato come una media variabile del suo input. Ad esempio, supponiamo di applicare un filtro passa-


236

Capitolo 8. Filtri

252

CHAPTER 8. FILTERS

frequency

center frequency

OUT

Figura 8.25: Sintesi sottrattiva controllata tramite ADSR.

Figure 8.25: ADSR-controlled subtractive synthesis.

8.4.2

Envelope following

It is frequently desirable to use the time-varying power of an incoming signal to trigger or control a musical process. To do this, we will need a procedure for measuring the power of an audio signal. Since most audio signals pass through zero many times per second, it won’t suffice to take instantaneous values of the signal to measure its power; instead, we must calculate the average power over an interval of time long enough that its variations won’t show up in the power estimate, but short enough that changes in signal level are quickly reported. A computation that provides a time-varying power estimate of a signal is called an envelope follower. The output of a low-pass filter can be viewed as a moving average of its input. For example, suppose we apply a normalized one-pole low-pass filter with coefficient p, as in Figure 8.21, to an incoming signal x[n]. The output (call it y[n]) is the sum of the delay output times p, with the input times 1 − p:


8.4. APPLICATIONS 8.4. Applicazioni

253 237

IN

OUT

Figure 8.26: Envelope follower. The output is the average power of the input Figura 8.26: Envelope follower. L’output `e la potenza media del segnale di signal. ingresso. For more insight into the design of a suitable low-pass filter for an envelope basso normalizzato a un polo con coefficiente p, come in Figura 8.21, a un segnale follower, we analyze it from the point of view of signal spectra. If, for instance, in ingresso x[n]. L’output (denominato y[n]) `e la somma dell’output del ritardo we put in a real-valued sinusoid: moltiplicato per p, con l’input moltiplicato per 1 − p: x[n] = a · cos(αn) y[n] = p · y[n − 1] + (1 − p) · x[n]

the result of squaring is: cos`ı ogni input viene ponderato, con peso 1 − p, nell’output precedente per produrre un nuovo output. Quindi possiamo fare una media mobile del quadrato a2 2 x[n] =il diagramma (cos(2αn)di+ Figura 1) di un segnale audio utilizzando 8.26. L’output `e una 2 media variabile nel tempo della potenza istantanea x[n]2 e la struttura del filtro and so if thecontrolla, low-passtra filter effectively stops the component of media frequency 2α passa-basso l’altro, il tempo di stabilizzazione della mobile. we will approximately the constant a2 /2, whichdiisun indeed average Per get una out maggiore comprensione nella progettazione filtro the passa-basso power. adatto per un envelope follower, lo analizziamo dal punto di vista degli spettri The situation a signalviwith severaluna components similar. Suppose the di segnale. Se, perforesempio, inseriamo sinusoide is a valori reali input signal is now, = a · cos(αn) x[n] = x[n] a · cos(αn) + b · cos(βn) whose spectrum is plotted in Figure il risultato di elevare al quadrato `e: 8.27 (part a). (We have omitted the two phase terms but they will have no effect on the outcome.) Squaring the signal a2 (b) (see Section 5.2).) We can get the produces the spectrum shown 2in part (cos(2αn) + 1) 2 2x[n] = desired fixed value of (a +b )/2 simply 2 by filtering out all the other components; ideally the result will be a constant (DC) signal. As long as we filter out all the e quindi se il filtro passa-basso blocca in modo efficace la componente alla frepartials, and also all the difference tones, we end up with a stable output that quenza 2α otterremo approssimativamente la costante a2 /2, che `e effettivamente correctly estimates the average power. la potenza media. Envelope followers may also be used on noisy signals, which may be thought La situazione per un segnale con diverse componenti `e simile. Supponiamo of as signals with dense spectra. In this situation there will be difference frequenche il segnale in ingresso sia ora, cies arbitrarily close to zero, and filtering them out entirely will be impossible; x[n] = a · cos(αn) + b · cos(βn). Il cui spettro `e rappresentato in Figura 8.27 (parte a) (abbiamo omesso i due termini di fase ma non avranno alcun effetto sul risultato). Fare il quadrato


238 254

Capitolo 8. Filtri CHAPTER 8. FILTERS amplitude (a)

b/2 a/2

frequency

2 2 a +b 2

(b)

0

-

2

+

2

Figure spectral point of view:(a) (a)un ansegnale incoming Figura8.27: 8.27:Envelope Envelopefollowing followingfrom dal the punto di vista spettrale: in signal with two components; (b) the result of squaring it. entrata con due componenti; (b) il risultato dell’elevamento al quadrato. we always get fluctuations the output, but they will decrease proportiondelwill segnale produce lo spettroinindicato in parte (b) (si veda il paragrafo 5.2). ally as the ottenere filter’s passband narrowed. Possiamo il valore isfisso desiderato (a2 + b2 )/2 semplicemente filtrana narrower passband will always give a sar` cleaner whether do Although tutte le altre componenti; idealmente il risultato a un output, segnale costante for discrete ore continuous spectra, the filter’s settling will lengthen propor(DC). Finch´ filtriamo tutti le parziali e tutti i toni time di differenza, finiremo con tionally as the passband is narrowed. There lais potenza thus a tradeoff un’output stabile che calcola correttamente media. between getting a quick a smooth result. Gli response envelope and followers possono anche essere usati su segnali rumorosi, che possono essere pensati come segnali con spettri densi. In questa situazione ci saranno frequenze di differenza arbitrariamente vicine a zero e filtrarle via 8.4.3 Single Sidebandotterremo Modulation interamente sar` a impossibile; sempre delle fluttuazioni in output, ma diminuiranno proporzionalmente alla riduzione della banda passante. As we saw in Chapter 5, multiplying two real sinusoids together results in a sigSebbene passante pi` u sum stretta fornisca sempre unoriginal output pi` u pulinal with two una new banda components at the and difference of the frequento, sia per gli spettri discreti che per quelli continui, il tempo di stabilizzazione cies. If we carry out the same operation with complex sinusoids, we get only one del filtro si prolungher` a proporzionalmente in funzione di quanto la banda pasnew resultant frequency; this is one result of the greater mathematical simplicity sante venga ridotta. C’`e quindi un compromesso tra una risposta rapida e un of complex sinusoids as compared to real ones. If we multiply a complex sinurisultato regolare. 2 soid 1, Z, Z 2 , . . . with another one, 1, W, W 2 , . . . the result is 1, W Z, (W Z) , . . ., which is another complex sinusoid whose frequency, ̸ (ZW ), is the sum of the two original frequencies. 8.4.3 Modulazione a banda laterale singola In general, since complex sinusoids have simpler properties than real ones, abbiamo Capitolo 5, moltiplicando insieme due sinusoidiones. reali,In si itCome is often usefulvisto to benel able to convert from real sinusoids to complex ottiene un segnale con real due nuove componenti date dalla somma e dalla differenza other words, from the sinusoid: delle frequenze originali. Se eseguiamo la stessa operazione con sinuosoidi complesse, otteniamo solamente una nuova x[n] = a frequenza · cos(ωn) risultante; questo `e il risultato della maggiore semplicit` a matematica delle sinusoidi complesse rispetto a quelle reali. Se moltiplichiamo una sinusoide complessa 1, Z, Z 2 , . . . con un’altra, 1, W, W 2 , . . . il risultato `e 1, W Z, (W Z)2 , . . . , che `e un’altra sinusoide complessa la cui frequenza, ∠(ZW ), `e la somma delle due frequenze originali.


8.5. Esempi

239

In generale, poich´e le sinusoidi complesse hanno propriet`a pi` u semplici di quelle reali, spesso `e utile poter passare da sinusoidi reali a quelle complesse. In altre parole, dalla sinusoide reale: x[n] = a · cos(ωn) (con un picco spettrale di ampiezza a/2 e frequenza ω) vorremmo un modo di calcolare la sinusoide complessa: X[n] = a(cos(ωn) + i sin(ωn)) cos`ı che x[n] = re(X[n]). Ci piacerebbe avere un processo lineare per farlo, in modo che le sovrapposizioni di sinusoidi vengano trattate come se le loro componenti venissero trattate separatamente. Naturalmente potremmo scegliere, altrettanto bene, la sinusoide complessa con frequenza −ω: X 0 [n] = a(cos(ωn) − i sin(ωn)) e infatti x[n] `e proprio la met`a della somma delle due. In sostanza abbiamo bisogno di un filtro che passa attraverso le frequenze positive (praticamente le frequenze tra 0 e π, corrispondenti ai valori di Z sulla met`a superiore del cerchio unitario complesso) dai valori negativi (da −π a 0 o, equivalentemente, da π a 2π – la met` a inferiore del cerchio unitario). Si pu` o progettare un tale filtro progettando un filtro passa-basso con frequenza di taglio π/2 e quindi, eseguire una rotazione di π/2 radianti utilizzando la tecnica del paragrafo 8.3.4. Tuttavia, risulta pi` u facile farlo usando due reti, progettate appositamente, di filtri all-pass con coefficienti reali. Chiamiamo H1 e H2 le funzioni di trasferimento dei due filtri, progettiamo i filtri in modo che ( π/2 0 < ∠(Z) < π ∠(H1 (Z)) − ∠(H2 (Z)) ≈ −π/2 −π < ∠(Z) < 0 o, in altri termini, H1 (Z) ≈ iH2 (Z), 0 < ∠(Z) < π, H1 (Z) ≈ −iH2 (Z), −π < ∠(Z) < 0. Quindi per ogni segnale, a valori reali, x[n] in entrata, creiamo semplicemente un numero complesso a[n]+ib[n] dove a[n] `e l’output del primo filtro e b[n] `e l’output del secondo. Ogni componente sinusoidale complessa di x[n] (chiamiamola Z n ) verr` a trasformata in ( 2H1 (Z) 0 < ∠(Z) < π H1 (Z) + iH2 (Z) ≈ . 0 altrimenti Avendo iniziato con un segnale a valori reali, la cui energia `e suddivisa equamente nelle frequenza positive e negative, otteniamo, alla fine, un segnale, a valori complessi, con solo frequenze positive.


256 240

CHAPTER 8. FILTERS Capitolo 8. Filtri

noise~ white noise, test signal 0

<-- cutoff

lop~ low-pass filter | (OUT) (a)

osc~ 220 +~ 1

sinusoidal test signal

add "DC" 0

hip~ 5 | (OUT)

high-pass filter

(b)

Figura 8.28: Utilizzo di filtri prefabbricati in Pd: (a) un filtro passa-basso, con rumore ingresso come test;in(b) di un filtro passa-alto per Figure 8.28: bianco Using in prefabricated filters Pd:utilizzo (a) a low-pass filter, with white rimuovere una componente di segnale di frequenza 0. noise as a test input; (b) using a high-pass filter to remove a signal component

of frequency 0.

8.5

Esempi

Prefabricated low-, high-, and band-pass filters In questa sezione introduciamo inizialmente alcuni filtri prefabbricati disponibili Patches H02.high-pass.pd, andche H03.band-pass.pd (Figure 8.28) in Pd, diH01.low-pass.pd, facile utilizzo, per sviluppare esempi mostrano le applicazioni del show Pd’s built-in filters, which implement filter designs described in Sections paragrafo precedente. Quindi mostreremo alcune applicazioni pi` u sofisticate che 8.3.1, 8.3.2 filtri and appositamente 8.3.4. Two of the patches also use a noise generator we have richiedono progettati. not introduced before. We will need four new Pd objects:

lop~ : one-pole low-pass filter. The left inlet takes a signal to be filtered, and the rightprefabbricati inlet takes control messages to set-alto, the cutoff frequency of the filter. Filtri passa-basso, -banda The filter is normalized so that the gain is one at frequency 0. Le patches H01.low-pass.pd, H02.high-pass.pd e H03.band-pass.pd (Figura 8.28) hip~ : one-pole, one-zero high-pass filter, with the same inputs and outputs mostrano i filtri incorporati di Pd che implementano i filtri descritti nei paragrafi as lop~, normalized to have gain of utilizzano one at theanche Nyquist 8.3.1, 8.3.2 e 8.3.4. Due delleapatches un frequency. generatore di rumore bp~non : resonant The middle inlet takes control to set theoggetti center che abbiamofilter. ancora presentato. Avremo bisognomessages di quattro nuovi Pd: frequency, and the right inlet to set “q”. noise~: : filtro whitepassa-basso noise generator. EachL’ingresso sample issinistro an independent lop∼ a un polo. riceve un pseudosegnale random number, uniformly distributed from -1 to 1. da filtrare e l’ingresso destro accetta i messaggi di controllo per impostare la The first demonstrate theseinthree Figure frequenza di three taglioexample del filtro.patches Il filtro `e normalizzato modofilters che il(see guadagno 8.28). The lop~ and bp~ objects are demonstrated with noise as input; hip~ as sia uno alla frequenza 0. shown is used to remove the DC (zero frequency) component of a signal. hip∼ : filtro passa-alto a un polo e uno zero, con gli stessi ingressi e uscite come lop∼, normalizzatotime-varying per avere un guadagno di uno alla frequenza di Nyquist. Prefabricated band-pass filter bp∼ : filtro band-pass risonante. filtering, L’ingresso accetta i messaggi di controllo per Time-varying as centrale often used in classical subtractive synthesis impostare la frequenza centrale e l’ingresso destro quelli per impostare “q”. (Section 8.4.1), can be done using the vcf~ object, introduced here: noise∼ generatore di rumore bianco.filter, Ognisimilar campione `e un vcf~ : a :“voltage controlled” band-pass to bp~, butnumero with a quasisignal casuale indipendente, distribuito uniformemente da −1 a 1. Le prime tre patches di esempio mostrano questi tre filtri (vedere la Figura 8.28). Gli oggetti lop∼ e bp∼ sono mostrati con rumore come input; hip∼, come mostrato, `e usato per rimuovere la componente DC (frequenza zero) di un segnale.


8.5. EXAMPLES 8.5. Esempi

257 241 pitch

0 mtof

phasor~

sawtooth oscillator sweep speed

0

phasor~ 0

LFO for sweep sweep depth

*~ 0 +~

base center frequency add base to sweep

tabread4~ mtof convert to Hz. 0

Q (selectivity)

vcf~ | (OUT)

Figure vcf~ band-passvcf∼, filter, con withlaits frequency controlled by Figura 8.29: 8.29: The Il filtro passa-banda suacenter frequenza centrale controllata an audio signal (as compared to bp~ which takes only control messages to set da un segnale audio (rispetto a bp∼ che accetta solo messaggi di controllo per its center frequency. impostare la frequenza centrale). inlet to control center frequency. Both bp~ and vcf~ are one-pole resonant filters Filtro prefabbricato passa-banda variabile as developed in Section 8.3.4; bp~ outputs only the real nel part tempo of the resulting signal, while vcf~ outputs the real and imaginary parts separately. Il filtraggio variabile(Figure nel tempo, utilizzato using spessothe nella sintesi Examplepassa-banda H04.filter.sweep.pd 8.29)come demonstrates vcf~ obsottrattiva classica (paragrafo 8.4.1), pu` o essere eseguito utilizzando l’oggetto ject for a simple and characteristic subtractive synthesis task. A phasor~ object vcf∼, (at top)introdotto creates a qui: sawtooth wave to filter. (This is not especially good practice as we are not controlling the possibility of foldover; a better sawtooth generator vcf∼ : un filtro “voltage-controlled”, simile a bp∼, ma con un for this purpose willpassa-banda be developed in Chapter 10.) The second phasor~ object entrata di segnale per controllare la frequenza centrale. Sia bp∼ che vcf∼ sono (labeled “LFO for sweep”) controls the time-varying center frequency. After filtri risonanti un depth polo, come nel paragrafo bp∼ solo la adjusting to setadthe and adescritto base center frequency8.3.4; (given in emette MIDI units), parte reale del segnale risultante, mentre vcf∼ emette separatamente la parte the result is converted into Hertz (using the tabread4~ object) and passed to reale e quella immaginaria. vcf~ to set its center frequency. Another example of using a vcf~ object for L’esempio H04.filter.sweep.pd (Figura 8.29) mostra l’utilizzo dell’oggetto subtractive synthesis is demonstrated in example H05.filter.floyd.pd. vcf∼ per un compito semplice e caratteristico della sintesi sottrattiva. Un oggetto phasor∼ (in alto) crea un’onda a dente di sega da filtrare (questa non `e Envelope followers una pratica particolarmente buona poich´e non stiamo controllando la possibilit`a di foldover: nel Capitolo 10 verr`a shows sviluppato, per and questo scopo, un generatore Example H06.envelope.follower.pd a simple self-explanatory realizaa dente di sega migliore). Il secondo oggetto phasor∼ (denominato “LFO apfor tion of the envelope follower described in Section 8.4.2. An interesting sweep”) controlla la frequenza nel tempo. Dopo alcune regolaplication of envelope following centrale is shownche invaria Example H07.measure.spectrum.pd zioni per8.30, impostare la profondit` e una frequenza centrale basesound. (data inRather unit`a (Figure part a). A famousa bell sample is looped as di a test MIDI), il risultato viene convertito in Hertz (utilizzando l’oggetto tabread4∼) e passato a vcf∼ per impostare la sua frequenza centrale. Un altro esempio di utilizzo di un oggetto vcf∼ per la sintesi sottrattiva `e mostrato nell’esempio H05.filter.floyd.pd.


258 242

CHAPTER 8. FILTERS Capitolo 8. Filtri

phasor~ 100

r $0-loopf

signal to analyze

phasor~ *~

0

r $0-totsamps

test frequency

phasor~

+~ 1 tabread4~ $0-array

+~ 0.25

signal to analyze 0

cos~ cos~ modulate to DC

test frequency 0

Q

bp~ bp~ | env~ 4096 (OUT) 0 measured strength

(a)

*~

*~

lop~

lop~ low-pass filter

0

responsiveness

r $0-tick snapshot~ 0 real part

snapshot~ 0 imaginary part (b)

Figura 8.30: Analisi dello spettro di un suono: (a) passa-banda che filtra un Figure 8.30: Analyzing the spectrum of a sound: (a) band-pass filtering a samsuono campionato di campana e fa l’envelope following del risultato; (b) spopled bell sound and envelope-following the result; (b) frequency-shifting a partial stamento di frequenza da una parziale a DC e lettura della sua parte reale e to DC and reading off its real and imaginary part. immaginaria. than get the overall mean square power of the bell, we would like to estimate Envelope followers the frequency and power of each of its partials. To do this we sweep a band-pass L’esempio mostra realizzazione filter up andH06.envelope.follower.pd down in frequency, listening to una the result and/or semplice watchinged theesplifilcativa dell’envelope follower descrittofollower. nel paragrafo 8.4.2. ter’s output power using an envelope (We use twoUn’applicazione band-pass filtersintein ressante envelope following nell’esempio H07.measure.spectrum.pd series for di better isolation of the`e mostrata partials; this is not especially good filter design (Figura but 8.30,itparte a).inUn famoso sample di campana messo loop come practice will do this context.) When the filter viene is tuned to ainpartial the suono di follower prova. Piuttosto che considerare la potenza quadrata media complessienvelope reports its strength. va Example della campana, vorremmo stimare la frequenza la potenza ciascuna delle H08.heterodyning.pd (part (b) of the efigure) showsdian alternative sue of parziali. tal fine, muoviamo filtro passa-basso su the e gi` u in frequenway finding A partial strengths of anun incoming sound; it has advantage of za, ascoltando il risultato e/o potenza di uscita filtro partial usando reporting the phase as well as theguardando strength. la First we modulate thedel desired un envelope (utilizziamo filtri passa-banda in serie un migliodown to zerofollower frequency. We use due a complex-valued sinusoid as per a modulator re that isolamento questa una praticaofparticolarmente so we get delle only parziali; one sideband fornon each`e component the input. Thebuona test di progettazione del frequency filtro, ma that lo sar` in questo contesto). Quando il filtro `e frequency is the only isa modulated to DC; others go elsewhere. sintonizzato su una riporta forza. We then low-pass theparziale, resultingl’envelope complex follower signal. (We can la usesua a real-valued lowH08.heterodyning.pd (b) della figura) mostra un removes modo alpassL’esempio filter separately on the real and (parte imaginary parts.) This essentially ternativo per trovare la forza delle parziali di un suono in entrata; ha il vantaggio di riportare la fase oltre che la forza. In primo luogo, moduliamo la parziale desiderata verso la frequenza zero. Utilizziamo una sinusoide complessa come modulatore in modo da ottenere una sola banda laterale per ogni componente dell’input. La frequenza di prova `e l’unica frequenza che `e modulata a DC; le


8.5. 8.5. EXAMPLES Esempi

259 243

sample loop for test signal pd bell-loop pair of allpass filters to make 90 degree phase shifted versions hilbert~ *~ -~ | (OUT)

*~

0

shift frequency

phasor~ -~ 0.25 cos~ cos~

cosine and sine waves to form the real and imaginary part of a complex sinusoid

<-- complex multipier (calculates real part)

Figura di una retefilter di filtri all-pass effettuare uno shifter Figure8.31: 8.31:Utilizzo Using an all-pass network to per make a frequency shifter.di frequenza.

all the partials except for the DC one, which we then harvest. This technique altrove. Applichiamo quindi un filtro passa-basso isaltre the vanno basis of Fourier analysis, the subject of Chapter 9. al segnale complesso risultante (possiamo usare un filtro passa-basso a valore reale separatamente sulle parti reale e immaginaria). Questo rimuove essenzialmente tutte le parziali Single sideband modulation tranne quella a DC, che poi raccogliamo. Questa tecnica `e la base dell’analisi di Fourier, argomento del Capitolo 9. of all-pass filters can be constructed to As described in Section 8.4.3, a pair give roughly π/2 phase difference for positive frequencies and −π/2 for negative ones. The design of pairs is beyond the scope of this discussion (see, for Modulazione a these banda laterale singola instance, [Reg93]) but Pd does provide an abstraction, hilbert~, to do this. Come descritto nel paragrafo 8.4.3,shown una coppia di filtri pu`o essere co-to Example H09.ssb.modulation.pd, in Figure 8.31,all-pass demonstrates how struita per fornire,abstraction approsimativamente, una differenza di fase di π/2 le use the hilbert~ to do signal sideband modulation. The per Hilbert frequenze dates positive e dianalog −π/2 era per [Str95, quelle pp.129-132]. negative. La progettazione di quetransform to the steThe coppie al di l` aof degli scopi di questa discussione ad esempio, two `eoutputs hilbert~, considered as the real (si andveda, imaginary parts of tuttavia signal, Pd fornisce un’abstraction, hilbert∼, per farlo. L’esempio a[Reg93]), complex-valued are multiplied by a complex sinusoid (at right in the H09.ssb.modulation.pd, mostrato in Figura 8.31, mostra come utilizzare l’abfigure), and the real part is output. The components of the resulting signal are straction hilbert∼ per effettuare la modulazione a banda laterale del segnale. those of the input shifted by a (positive or negative) frequency specified in the La trasformata di Hilbert risale all’era analogica [Str95, pp.129-132]. number box. I due outputs di hilbert∼, considerati come parte reale e immaginaria di un segnale a valori complessi, sono moltiplicati per una sinusoide complessa (a Using elementary directly: shelving and peaking destra nella figura) e la filters parte reale viene emessa. Le componenti del segnale risultante sono quelle dell’input spostate di una frequenza (positiva o No finite set of prefabricated filters could fill every possible need, negativa) and so Pd specificata casella numerica. provides thenella elementary filters of Sections 8.2.1-8.2.3 in raw form, so that the user can supply the filter coefficients explicitly. In this section we will describe patches that realize shelving and peaking filters ofshelving Sections 8.3.3 and 8.3.5 Utilizzare filtri the elementari direttamente: e peaking directly from elementary filters. First we introduce the six Pd objects that Nessunelementary insieme finito di filtri prefabbricati potrebbe soddisfare ad ogni possibile realize filters: esigenza, e quindi Pd fornisce i filtri elementari dei paragrafi 8.2.1–8.2.3 in forma grezza, in modo che l’utente possa fornire i coefficienti di filtro in modo esplicito. In questa sezione descriveremo le patches che realizzano i filtri shelving e pea-


244 260

Capitolo 8. Filtri CHAPTER 8. FILTERS

0

zero

pole (%)

0

0

(IN) / 100 / 100 | rzero~ rpole~ | (OUT) (a)

angle (degrees)

zero and pole * 3.14159 radii (%) / 180 0 0 sin / 100 / 100 cos t b f t b f (IN) * | czero~

*

cpole~ | (OUT)

*

*

(b)

Figura 8.32: 8.32:Building Costruire filtrifrom a partire da quelli grezzi: (b) (a) peakshelving; Figure filters elementary, raw elementari ones: (a) shelving; (b) peaking. ing. rzero~ , rzero rev~ rpole~ : elementary real-valued coeffiking dei paragrafi 8.3.3 ,e 8.3.5 direttamente daifilters filtriwith elementari. Innanzitutto introduciamo i sei oggetti Pd che realizzano filtri elementari: cients operating on real-valued signals. The three implement non-recirculating filters of the first and second types, and the recirculating filter.coefficienti They all have rzero∼ , rzero rev∼ , rpole∼ : filtri elementari con a valori one inlet, at right, to supply the coefficient that sets the location of the zero reali che operano su segnali a valori reali. I tre oggetti implementano filtriornonpole. The inlet the coefficient welleasilthe leftricircolante. inlet for the signal filter)una ricircolanti delfor primo e secondo(as tipo, filtro Tuttitohanno take audio signals. No stability check is performed. sola entrata, a destra, per fornire il coefficiente che determina la posizione dello czero~ czeroL’ingresso rev~ , cpole~ : elementary filters with complex-valued zero o del, polo. per il coefficiente (cos` ı come l’ingresso sinistro per il segnale da filtrare) accetta segnali audio. Non viene eseguito alcun controllo coefficients, operating on complex-valued signals, corresponding to the realsulla stabilit` a. valued ones above. Instead of two inlets and one outlet, each of these filters has four inlets ,(real and rev∼ imaginary part of the signalelementari to filter, and real and imaginary czero∼ czero , cpole∼ : filtri con coefficienti a valori part of the coefficient) and two outlets for the complex-valued output. complessi, che operano su segnali a valori complessi, corrispondenti ai filtri Theaexample patches use ea avere pair ofdue abstractions graph the ciascuno frequencydiand sopra, valori reali. Anzich´ ingressi e to una uscita, questi phase responses of filters as explained in Example H10.measurement.pd. Examfiltri ha quattro ingressi (parte reale e immaginaria del segnale da filtrare, parte ple H11.shelving.pd 8.32, parte a) shows how make a ashelving filter. reale e immaginaria(Figure del coefficiente) due uscite pertol’output valori complessi. One elementary non-recirculating filter (rzero~) and one elementary recircuLe patches di esempio utilizzano una coppia di abstractions per tracciare le lating one (rpole~) are put in series. As the analysis of Section 8.3.9 might risposte in frequenza e di fase come spiegato nell’esempio H10.measurement.pd. suggest, the rzero~ object is placed first. L’esempio H11.shelving.pd (Figura 8.32, parte a) mostra come creare un filExample H12.peaking.pd (part (b) of the figure) implements a peaking filter. tro shelving. Un filtro elementare non-ricircolante (rzero∼) ed uno elementaHere the pole and the zero are rotated by an angle ω to control the center re ricircolante (rpole∼) vengono messi in serie. Come suggerisce l’analisi del frequency of the filter. The bandwidth and center frequency gain are equal to paragrafo 8.3.9, l’oggetto primo. the shelf frequency and therzero∼ DC gainviene of theper corresponding shelving filter. L’esempio H12.peaking.pd (parte (b) della implementa unButterfiltro peaExample H13.butterworth.pd demonstrates afigura) three-pole, three-zero king. Qui il polo e lo zero sono ruotati di un angolo di ω per controllare worth shelving filter. The filter itself is an abstraction, butterworth3~, for easy la frequenza centrale del filtro. La larghezza di banda ed il guadagno della frequenza centrale sono uguali alla frequenza shelf e al guadagno DC del relativo filtro shelving. L’esempio H13.butterworth.pd mostra un filtro shelving di Butterworth a tre poli e tre zeri. Il filtro stesso `e un’abstraction, butterworth3∼, per un facile ri-utilizzo.


8.5. Esempi

245

8.5. EXAMPLES

261 phasor~ 0.3 expr~ abs($v1-0.5) pd chord expr~ 0.97 - 0.6*$v1*$v1 rzero_rev~ rpole~ rzero_rev~

pole (%)

rpole~

0

rzero_rev~

/ 100

rpole~

rzero_rev~

rzero_rev~

rpole~ | (OUT) (a)

rpole~ +~ | (OUT)

(b)

Figura8.33: 8.33:All-pass Filtri filters: all-pass: realizzazione un from filtro elementary all-pass dafilters; filtri Figure (a) (a) making an all-passdifilter elementari; (b)all-pass utilizzofilters di quattro filtri all-pass per costruire un phaser. (b) using four to build a phaser.

reuse.

Making and using all-pass filters Example H14.all.pass.pd (Figure 8.33, part a) shows how to make an all-pass filter out of a non-recirculating filter, second form (rzero rev~) and a recirculating filter (rpole~). The coefficient, ranging from -1 to 1, is controlled in hundredths. Example H15.phaser.pd (part b of the figure) shows how to use four all-pass filters to make a classic phaser. The phaser works by summing the input signal with a phase-altered version of it, making interference effects. The amount of phase change is varied in time by varying the (shared) coefficient of the all-pass filters. The overall effect is somewhat similar to a flanger (time-varying comb filter) but the phaser does not impose a pitch as the comb filter does.


246

Capitolo 8. Filtri

Realizzazione e utilizzo di filtri all-pass L’esempio H14.all.pass.pd (Figura 8.33, parte a) mostra come fare un filtro allpass da un filtro non-ricircolante, seconda forma (rzero rev∼) e da un filtro ricircolante (rpole∼). Il coefficiente, compreso tra −1 e 1, `e controllato in centesimi. L’esempio H15.phaser.pd (parte b della figura) mostra come utilizzare quattro filtri all-pass per creare un phaser classico. Il phaser funziona sommando il segnale in input con una versione modificata in fase dello stesso, creando cos`ı effetti di interferenza. La quantit` a di cambiamento di fase `e variabile nel tempo cambiando il coefficiente (condiviso) dei filtri all-pass. L’effetto complessivo `e in qualche modo simile a un flanger (filtro a pettine variabile nel tempo), ma il phaser non impone un pitch come invece fa il filtro a pettine.

Esercizi 1. Un filtro elementare ricircolante ha un polo a i/2. A quale frequenza angolare il suo guadagno `e maggiore e qual `e tale guadagno? A quale frequenza angolare il suo guadagno `e minimo e qual `e tale guadagno? 2. Un filtro shelving ha un polo a 0.9 e uno zero a 0.8. Quanto valgono: il guadagno DC; il guadagno di Nyquist; la frequenza approssimata di transizione? 3. Supponiamo che un filtro ricircolante complesso abbia un polo in P . Supponiamo che si desideri combinare i suoi outputs reale e immaginario per produrre un segnale singolo, a valori reali, equivalente a un filtro a due poli con poli a P e P . Come andrebbero pesati i due outputs? 4. Supponiamo di voler progettare un filtro peaking con guadagno 2 a 1000 Hertz e larghezza di banda di 200 Hertz (ad una frequenza di campionamento di 44100 Hertz). Dove, approssimativamente, bisognerebbe mettere il polo superiore e lo zero? 5. Nella stessa situazione, dove bisognerebbe mettere il polo (superiore) e lo zero per rimuovere completamente una sinusoide a 1000 Hertz, pur attenuando solo 3 decibel a 1001 Hertz? 6. Un filtro complesso a un polo `e eccitato da un impulso per fare un tono a 1000 Hertz, che decade 10 decibel in un secondo (ad una frequenza di campionamento di 44100 Hertz). Dove bisogna mettere il polo? Qual `e il valore di “q”?


Capitolo 9

Analisi e risintesi di Fourier Tra le applicazioni dei filtri discusse nel Capitolo 8, abbiamo visto come usare l’eterodina combinata con un filtro passa-basso per trovare l’ampiezza e la fase di una componente sinusoidale di un segnale (pagina 242). In questo capitolo rifiniremo questa tecnica in quella che viene chiamata analisi di Fourier. Nella sua forma pi` u semplice, l’analisi di Fourier prende in input un qualsiasi segnale periodico (di periodo N ) e fornisce in output le ampiezze, a valori complessi, delle sue N possibili componenti sinusoidali. Queste N ampiezze complesse possono essere teoricamente utilizzate per ricostruire esattamente il segnale originale. Questa ricostruzione prende il nome di risintesi di Fourier. In questo capitolo inizieremo sviluppando la teoria dell’analisi e della risintesi di Fourier di segnali periodici campionati. Poi continueremo mostrando come applicare le stesse tecniche a segnali arbitrari, sia periodici che non. Infine, svilupperemo alcune applicazioni standard come il vocoder di fase.

9.1

Analisi di Fourier di segnali periodici

Supponiamo che X[n] sia un segnale a valori complessi che si ripete ogni N campioni (stiamo continuando ad utilizzare segnali a valori complessi, piuttosto che a valori reali, per semplificare la parte matematica). A causa del periodo N , i valori di X[n] per n = 0, . . . , N − 1 determinano X[n] per tutti i valori interi di n. Supponiamo inoltre che X[n] possa essere scritto come una somma di sinusoidi complesse di frequenza 0, 2π/N, 4π/N, . . . , 2(N − 1)π/N . Queste sono le parziali, a partire dalla 0−esima, per un segnale con periodo N . Ci fermiamo al termine N −esimo, perch´e il successivo avrebbe frequenza 2π, equivalente alla frequenza 0, che `e gi` a nella lista. Dati i valori di X, vogliamo trovare le ampiezze complesse delle parziali. Supponiamo che vogliamo la k−esima parziale, dove 0 ≤ k < N . La frequenza di questa parziale `e 2πk/N . Possiamo trovare la relativa ampiezza complessa modulando X, verso il basso, di 2πk/N radianti per campione in frequenza, in modo che la k−parziale sia modulata a frequenza zero. Quindi passiamo il segnale attraverso un filtro passa-basso con una frequenza di taglio cos`ı bassa che non rimane altro che la parziale a frequenza zero. Possiamo, in effetti, fare ci` o calcolando la media su un numero enorme di campioni; ma poich´e il segnale 247


248

Capitolo 9. Analisi e risintesi di Fourier

si ripete ogni N campioni, questa media enorme `e la stessa della media dei primi N campioni. In breve, per misurare una componente sinusoidale di un segnale periodico, lo moduliamo fino al DC e quindi calcoliamo la media lungo un periodo. Sia ω = 2π/N la frequenza fondamentale per il periodo N , e sia U il numero complesso di modulo unitario e argomento ω: U = cos(ω) + i sin(ω). La k−esima parziale del segnale X[n] `e del tipo: n Pk [n] = Ak U k

dove Ak `e l’ampiezza complessa della parziale, e la frequenza della parziale `e: ∠(U k ) = k∠(U ) = kω. Stiamo assumendo, per il momento, che il segnale X[n] possa essere effettivamente scritto come una somma di N parziali, cio`e: n n n X[n] = A0 U 0 + A1 U 1 + · · · + AN −1 U N −1 .

Per l’operazione di filtraggio-eterodina vista sopra, ci aspettiamo di essere in grado di misurare ogni Ak moltiplicando per una sinusoide alla frequenza −kω e facendo la media lungo un periodo: 1 N −1 1 −k 0 U X[0] + U −k X[1] + · · · + U −k X[N − 1] . Ak = N Questa `e una formula talmente utile da avere la propria notazione. La trasformata di Fourier di un segnale X[n], su N campioni, `e definita come: FT {X[n]} (k) = V 0 X[0] + V 1 X[1] + · · · + V N −1 X[N − 1] dove V = U −k . La trasformata di Fourier `e una funzione della variabile k, pari a N volte l’ampiezza della k−esima parziale del segnale in input. Finora k ha assunto solo valori interi, ma la formula ha senso per ogni valore di k se si definisce V in modo pi` u generale come: V = cos(−kω) + i sin(−kω) dove, come prima, ω = 2π/N `e la frequenza fondamentale (angolare) associata al periodo N .

9.1.1

Periodicit` a della trasformata di Fourier

Se X[n] `e, come sopra, un segnale che si ripete ogni N campioni, anche la trasformata di Fourier di X[n] si ripete ogni N unit`a di frequenza cio`e FT {X[n]} (k + N ) = FT {X[n]} (k) per tutti i valori reali k. Questo segue immediatamente dalla definizione della trasformata di Fourier, dal momento che il fattore V = cos(−kω) + i sin(−kω) rimane invariato quando sommiamo N (o un qualsiasi multiplo di N ) a k.


9.2. Propriet` a delle trasformate di Fourier

9.1.2

249

Trasformata di Fourier come sintesi additiva

Consideriamo adesso un segnale arbitrario X[n] che si ripete ogni N campioni (precedentemente si era ipotizzato che X[n] potesse essere ottenuto come somma di sinusoidi e non abbiamo ancora scoperto se ogni X[n] periodico possa essere ottenuto in questo modo). Sia Y [k] la trasformata di Fourier di X per k = 0, . . . , N − 1: Y [k] = FT {X[n]} (k) 0 1 N −1 = U −k X[0] + U −k X[1] + · · · + U −k X[N − 1]

k k k = U 0 X[0] + U −1 X[1] + · · · + U −(N −1) X[N − 1].

Nella seconda versione abbiamo riorganizzato gli esponenti per dimostrare che Y [k] `e una somma di sinusoidi complesse, con ampiezze complesse X[m] e frequenze −mω per m = 0, . . . , N − 1. In altri termini, Y [k] pu`o essere considerato come una serie di Fourier di per s´e, la cui componente m−esima ha forza X[−m] (l’espressione X[−m] ha senso perch´e X `e un segnale periodico). Possiamo anche esprimere l’ampiezza delle parziali di Y [k] in termini della sua propria trasformata di Fourier. Mettendo a equazione i due termini si ha 1 FT {Y [k]} (m) = X[−m]. N Ci` o significa a sua volta che X[−m] pu`o essere ottenuto sommando sinusoidi con ampiezze Y [k]/N . Ponendo n = −m si ha: X[n] =

1 N FT

{Y [k]} (−n)

n n n = U 0 Y [0] + U 1 Y [1] + · · · + U (N −1) Y [N − 1].

Ci` o dimostra che ogni X[n] periodico pu`o essere effettivamente ottenuto come somma di sinusoidi. Inoltre, la formula mostra esplicitamente come ricostruire X[n] dalla sua trasformata di Fourier Y [k], se conosciamo il suo valore per gli interi k = 0, . . . , N − 1.

9.2

Propriet` a delle trasformate di Fourier

In questo paragrafo verificheremo cosa succede quando prendiamo la trasformata di Fourier di una sinusoide (complessa). Il caso pi` u semplice `e quello “DC”, la sinusoide speciale di frequenza zero. Dopo aver calcolato la trasformata di Fourier di questa, svilupperemo alcune propriet`a delle trasformate di Fourier che consentono di applicare il risultato a qualsiasi altra sinusoide.

9.2.1

Trasformata di Fourier di DC

Sia X[n] = 1 per ogni n (quindi si ripete con un qualsiasi periodo intero N > 1 desiderato). Dalla discussione precedente, ci aspettiamo di scoprire che ( N k=0 FT {X[n]} (k) = . 0 k = 1, . . . , N − 1


250

Capitolo 9. Analisi e risintesi di Fourier

Spesso dovremo conoscere la risposta per valori non interi di k, e per questo non c’`e niente di meglio da fare che calcolare direttamente il valore: FT {X[n]} (k) = V 0 X[0] + V 1 X[1] + · · · + V N −1 X[N − 1] dove V `e, come prima, il numero complesso di modulo 1 e argomento −kω. Questa `e una serie geometrica; finch´e V 6= 1 otterremo: FT {X[n]} (k) =

VN −1 . V −1

Simmetriziamo la parte superiore e quella inferiore nello stesso modo che abbiamo fatto prima nel paragrafo 7.3. Per fare ci`o sia ξ = cos(πk/N ) − i sin(πk/N ) in modo che ξ 2 = V . Quindi, mettendo a fattor comune potenze appropriate di ξ al numeratore e al denominatore si ha: FT {X[n]} (k) = ξ N −1 Ora `e facile semplificare il numeratore:

ξ N − ξ −N . ξ − ξ −1

ξ N − ξ −N = (cos(πk) − i sin(πk)) − (cos(πk) + i sin(πk)) = −2i sin(πk) e similmente per il denominatore, ottenendo sin(πk) . FT {X[n]} (k) = cos(πk(N − 1)/N ) − i sin(πk(N − 1)/N ) sin(πk/N )

Indipendentemente se V = 1 oppure no, abbiamo FT {X[n]} (k) = cos(πk(N − 1)/N ) − i sin(πk(N − 1)/N ) DN (k) dove DN (k), conosciuto come kernel di Dirichlet, `e definito come ( N k=0 DN (k) = sin(πk) k 6= 0, −N < k < N sin(πk/N )

La Figura 9.1 mostra la trasformata di Fourier di X[n] = 1, con N = 100. La trasformata si ripete ogni 100 campioni, con un picco a k = 0, un altro a k = 100 e cos`ı via. La figura si “sforza” di mostrare sia il comportamento dell’ampiezza che della fase utilizzando un grafico a 3 dimensioni proiettato sulla pagina. Il termine di fase cos(πk(N − 1)/N ) − i sin(πk(N − 1)/N ) agisce per invertire i valori di FT {X[n]} (k) intorno all’asse k con un periodo di circa due. Il kernel di Dirichlet DN (k), mostrato in Figura 9.2, controlla la magnitudine di FT {X[n]} (k). Ha un picco, largo due unit`a, intorno a k = 0. Il picco `e circondato da sidelobes larghi un’unit`a, alternati in segno e gradualmente decrescenti in magnitudine, a seconda se k aumenti o diminuisca allontanandosi da zero. Il termine di fase ruota di quasi π radianti ogni volta che il kernel di Dirichlet cambia segno, in modo che il prodotto dei due rimanga approssimativamente nello stesso semipiano complesso per k > 1 (e nel semipiano opposto per k < −1). La fase ruota di quasi 2π radianti nel picco da k = −1 a k = 1.


9.2. Propriet` a delle trasformate di Fourier

251

9.2. PROPERTIES OF FOURIER TRANSFORMS

267

real

-5

0

5

k

imaginary

Figure 9.1: Fourier transform of a signal of all ones. Figura 9.1: The La trasformata di Fourier di un consisting segnale costituito da Here tutti N=100, 1. Qui and values are shown for k ranging from -5 to 10. The result is complex-valued N = 100 e sono mostrati valori per k che va da −5 a 10. Il risultato `e a valori and showne as a projection, with una the proiezione, real axis pointing up reale the page and the complessi viene mostrato come con l’asse che punta in imaginary axis pointing away from it. su nella pagina e l’asse immaginario che punta fuori da essa. and so on. The figure endeavors to show both the magnitude and phase behavior using a 3-dimensional graph projected onto the page. The phase term

268

cos(πk(N − 1)/N ) − i sin(πk(N − 1)/N ) AND RESYNTHESIS CHAPTER 9. FOURIER ANALYSIS

acts to twist the values of FT {X[n]} (k) around the k axis with a period of approximately two. The Dirichlet kernel DN (k), shown in Figure 9.2, controls the magnitude of FT {X[n]} (k). It has a peak, two units wide, around k = 0. This is surrounded by one-unit-wide sidelobes, alternating in sign and gradually decreasing in magnitude as k increases or decreases away from zero. The phase term rotates by almost π radians each time the Dirichlet kernel changes sign, so that the product of the two stays roughly in the same complex half-plane for k > 1 (and in the opposite half-plane for k < −1). The phase rotates by almost 2π radians over the peak from k = −1 to k = 1.

-5 9.2.2

0 Shifts and phase changes

5

frequency (bins)

Section 7.2 showed how time-shifting a signal changes the phases of its sinusoidal components, and Section 8.4.3 showed how multiplying a signal by a complex Figura 9.2: Il kernel di Dirichlet, per N = 100. sinusoid shifts its Figure component These two effects corresponding 9.2:frequencies. The Dirichlet kernel, for Nhave = 100. identities involving the Fourier transform. First we consider a time shift. If X[n], as usual, is a complex-valued signal

that repeats every N samples, let Y [n] be X[n] delayed d samples: Y [n] = X[n − d] which also repeats every N samples since X does. We can reduce the Fourier transform of Y [n] this way: FT {Y [n]} (k) = V 0 Y [0] + V 1 Y [1] + · · · + V N −1 Y [N − 1] = V 0 X[−d] + V 1 X[−d + 1] + · · · + V N −1 X[−d + N − 1]


252

9.2.2

Capitolo 9. Analisi e risintesi di Fourier

Spostamenti e cambiamenti di fase

Nel paragrafo 7.2 abbiamo mostrato come uno spostamento temporale di un segnale modifichi le fasi delle sue componenti sinusoidali e nel paragrafo 8.4.3 abbiamo mostrato come la moltiplicazione di un segnale per una sinusoide complessa sposti le frequenze delle sue componenti. Questi due effetti hanno corrispondenti identit` a che coinvolgono la trasformata di Fourier. In primo luogo consideriamo uno spostamento temporale. Se X[n], come al solito, `e un segnale a valori complessi che si ripete ogni N campioni, sia Y [n] il segnale X[n] ritardato di d campioni: Y [n] = X[n − d] che si ripete ogni N campioni poich´e X lo fa. Possiamo ridurre la trasformata di Fourier di Y [n] in questo modo: FT {Y [n]} (k) = V 0 Y [0] + V 1 Y [1] + · · · + V N −1 Y [N − 1] V 0 X[−d] + V 1 X[−d + 1] + · · · + V N −1 X[−d + N − 1] = V d X[0] + V d+1 X[1] + · · · + V d+N −1 X[N − 1] = V d (V 0 X[0] + V 1 X[1] + · · · + V N −1 X[N − 1]) = V d FT {X[n]} (k) (la terza riga `e solo la seconda con i termini sommati in un ordine diverso). Otteniamo quindi la formula di spostamento temporale per le trasformate di Fourier: FT {X[n − d]} (k) = cos(−dkω) + i sin(−dkω) FT {X[n]} (k).

La trasformata di Fourier di X[n − d] `e un termine di fase moltiplicato per la trasformata di Fourier di X[n]. La fase `e cambiata di −dkω, una funzione lineare della frequenza k. Ora supponiamo invece di cambiare il nostro segnale di partenza X[n] moltiplicandolo per un esponenziale complesso Z n con frequenza angolare α: Y [n] = Z n X[n], Z = cos(α) + i sin(α). La trasformata di Fourier `e: FT {Y [n]} (k) = V 0 Y [0] + V 1 Y [1] + · · · + V N −1 Y [N − 1] = V 0 X[0] + V 1 ZX[1] + · · · + V N −1 Z N −1 X[N − 1] = (V Z)0 X[0] + (V Z)1 X[1] + · · · + (V Z)N −1 X[N − 1] = FT {X[n]} (k − ωα ).

Si ottiene quindi la formula di spostamento della fase per le trasformate di Fourier: αN FT {(cos(α) + i sin(α))X[n]}(k) = FT {X[n]}(k − ). 2π


270 CHAPTER 9. FOURIER ANALYSIS AND RESYNTHESIS 9.2. Propriet` a delle trasformate di Fourier 253

amplitude (a)

0

-5

5

k->

(b)

0

5

-5

Figura 9.3: Trasformate di Fourier di sinusoidi complesse, con N = 100: (a) Figure 9.3: Fourier transforms of complex sinusoids, N =di100: (a) with con frequenza 2ω; (b) con frequenza 1.5ω (l’effetto delwith termine avvolgimento frequency 2ω`e ;mostrato). (b) with frequency 1.5ω. (The effect of the phase winding term di fase non is not shown.)

9.2.3

Trasformata di Fourier di una sinusoide

Possiamo usare la formula di spostamento della fase per trovare la trasformata di Fourier di qualsiasi sinusoide complessa Z n con frequenza α, semplicemente ponendo X[n] = 1 nella formula e utilizzando la trasformata di Fourier per DC: FT {Z n } (k) = FT {1} (k − ωα ) 0

α = [cos(Φ(k)) + i sin(Φ(k))]D 100 200N (k − ω )

dove DN `e il kernel di Dirichlet e Φ `e un “brutto” termine di fase: Φ(k) = −π · (k −

α ) · (N − 1)/N. ω

Se la frequenza della sinusoide α `ewith un multiplo intero Figure 9.4: A complex sinusoid frequency α =della 1.5ωfrequenza = 3π/N ,fondamenforced to tale ω, il kernel di Dirichlet viene spostato a sinistra o a destra un part intero. repeat every N samples. (N is arbitrarily set to 100; only the direal is In questo caso gli zero-crossings del kernel di Dirichlet si allineano con valori shown.) interi di k, in modo che solo una parziale non sia nulla. Questo `e illustrato nella Figura 9.3 (parte a). La parte (b) mostra il risultato quando la frequenza α cade a met`a tra due interi. Le parziali hanno ampiezze che decadono approssimativamente come 1/k in entrambe le direzioni, misurate dalla frequenza effettiva α. Che l’energia debba diffondersi su molte parziali, quando dopotutto abbiamo iniziato con


-5

Figure 9.3: Fourier transforms of complex sinusoids, with N = 100: (a) with frequency 2ω ; (b) with frequency 1.5ω. (The effect of the phase winding term is not shown.) 254

Capitolo 9. Analisi e risintesi di Fourier

0

100

200

Figura 9.4: Una sinusoide complessa con frequenza α = 1.5ω = 3π/N , costretta Figure 9.4: A complex sinusoid with frequency α = 1.5ω = 3π/N , forced to a ripetersi ogni N campioni (N `e arbitrariamente impostato su 100, solo la parte repeat every N samples. (N is arbitrarily set to 100; only the real part is reale `e mostrata). shown.) una singola sinusoide, potrebbe sembrare sorprendente in un primo momento. Tuttavia, come mostrato in Figura 9.4, il segnale si ripete ad un periodo N che non `e in accordo con la frequenza della sinusoide. Di conseguenza c’`e una discontinuit` a all’inizio di ogni periodo, e l’energia viene spinta su una vasta gamma di frequenze.

9.3

Analisi di Fourier di segnali non periodici

La maggior parte dei segnali non sono periodici, e anche uno periodico potrebbe avere un periodo sconosciuto. Quindi dobbiamo essere pronti a fare un’analisi di Fourier sui segnali senza fare l’ipotesi confortante che il segnale da analizzare si ripeta ad un determinato periodo N . Naturalmente, possiamo semplicemente prendere N campioni del segnale e renderlo periodico; questo `e essenzialmente quello che abbiamo fatto nel paragrafo precedente, in cui una sinusoide pura ci ha dato la complicata trasformata di Fourier di Figura 9.3 (parte b). Tuttavia, sarebbe meglio ottenere un risultato in cui la risposta a una sinusoide pura sia meglio localizzata intorno al valore corrispondente di k. Possiamo ottenere questo utilizzando la tecnica di enveloping introdotta prima in Figura 2.7 (pagina 36). Applicare questa tecnica all’analisi di Fourier non solo migliorer` a le nostre analisi, ma far` a anche luce sull’enveloping looping sampler del Capitolo 2. Dato un segnale X[n], periodico o no, definito nei punti da 0 a N − 1, la tecnica `e quella di inviluppare il segnale prima di eseguire l’analisi di Fourier. La forma dell’inviluppo `e conosciuta come funzione finestra (window function). Dato una window function w[n], la trasformata di Fourier su finestra (windowed Fourier transform) `e: FT {w[n]X[n]}(k). Molto inchiostro `e stato versato per la progettazione di funzioni finestra adeguate per situazioni particolari, ma qui prenderemo in considerazione la pi` u semplice, chiamata la funzione finestra di Hann (il nome `e talvolta storpiato ad “Hanning” negli ambienti DSP). La finestra di Hann `e: w[n] =

1 1 − cos(2πn/N ). 2 2


9.3. Analisi di Fourier di segnali non periodici 255 272 CHAPTER 9. FOURIER ANALYSIS AND RESYNTHESIS

amplitude

M(k) D (k) N D (k-1) N

-1

0

1

2

k->

Figura 9.5: La magnitudine M (k) della trasformata di Fourier della funzione ` la somma finestra9.5: di Hann. E di tre copie (spostate e ingrandite) del kernel di Figure The magnitude M(k) of the Fourier transform of the Hann window Dirichlet D = of 100. function. ItNis, con the N sum three (shifted and magnified) copies of the Dirichlet kernel DN , with N = 100. ` facile analizzare l’effetto di moltiplicare un segnale per la finestra di Hann E prima di prendere la trasformata di Fourier, perch´e 9.5. la finestra di Hann pu`o The magnitude function M (k) is graphed in Figure The three Dirichlet essere components scritta come are unaalso somma di tre esponenziali complessi kernel shown separately. The main lobe of M (k) is four 1harmonics wide, 1 1 −ntwice the width of the main − U non−theUother lobe of the Dirichlet kernel. w[n] The = sidelobes, hand, have much smaller 2 4 4 magnitude. Each sidelobe of M (k) is a sum of three sidelobes of Dn (k), one dove, comeby prima, U `ethe il numero modulo unitariobycon argomento attenuated 1/2 and others, complesso opposite indisign, attenuated 1/4. They do 2π/N . Ora possiamo calcolare la trasformata di Fourier su finestra di una not cancel out perfectly but they do cancel out fairly well. sinusoide Z n con frequenza angolare α come prima. Lenear fasi usciranno disordinate The sidelobes reach their maximum amplitudes their midpoints, and e lecan sostituiremo con approssimazioni semplificate: we estimate their amplitudes there, using the approximation: n FT {w[n]Z }(k) N sin(πk) D (k) ≈ N n o πk = FT 21 Z n − 14 (U Z)n − 41 (U −1 Z)n (k) Setting k = 3/2, 5/2, . . . gives sidelobe amplitudes, relative to the peak height N , of: ≈ [cos(Φ(k)) + i sin(Φ(k))]M (k − α ) ω

2 2 2 2 dove il termine di fase (approssimativo) ≈ −13dB, ≈ −18dB, `e: ≈ −21dB, ≈ −23dB, . . . 3π 5π 7π 9π α Φ(k) = more −π · (kslowly − ) so that the tenth one is only The sidelobes drop off progressively ω attenuated about 30 dB and the 32nd one about -40 dB. On the other hand, e laHann funzione di magnitudine `e: attenuated by: the window sidelobes are 1 1 + 2 1 Dn2(k + 1) + 1 Dn (k − 1) . M (k) = 2 Dn (k) ] ≈ −32.30dB 2 − [ 4+ 4 5π 2 3π 7π La funzione di magnitudine M dB (k) for viene in figura 9.5. Sono inoltre and −42, −49, −54, and −59 therappresentata next four sidelobes. mostrare, separatamente, le tre componenti del kernel di Dirichlet. This shows that applying a Hann window before taking the Fourier transform Il lobo principale di M (k) ` e ampio quattro armonici, larghezza will better allow us to isolate sinusoidal components. due If a volte signalla has many del lobo principale del kernel di Dirichlet. I sidelobes, d’altro canto, hanno una grandezza molto minore. Ogni sidelobe di M (k) `e una somma di tre sidelobes di DN (k), uno attenuato da 1/2 e gli altri, opposti in segno, attenuati di 1/4. Non si cancellano perfettamente, ma si annullano abbastanza bene.


256 FOURIER ANALYSIS OF NON-PERIODIC Capitolo 9. Analisi e risintesi di Fourier 9.3. SIGNALS 273

real

0

5

10

k

imaginary

Figura 9.6: The La trasformata di Fourier Hann-windowed un segnale con sinudue Figure Hann-windowed Fourier transform of adisignal with two componenti sinusoidali, alle frequenze 5.310.6 e 10.6 volte fondamentale, con soidal components, at frequencies 5.3 and times thelafundamental, ande with diverse ampiezze different complex complesse. amplitudes. I sidelobes raggiungono le loro ampiezze massime vicino ai loro punti medi e possiamo stimare le loro ampiezze in questi punti, usando l’approssimazione: N sin(πk) sinusoidal components, the sidelobes DN (k) ≈engendered .by each one will interfere with πk amplitude of the sidelobes reduces the main lobe of all the others. Reducing the this interference. Impostare k = 3/2, 5/2, . . . d` a le ampiezze dei sidelobes, rispetto all’altezza N del picco, di: Figure 9.6 shows a Hann-windowed Fourier analysis of a signal with two 2 2 2 2 sinusoidal components. are separated by about 5≈times the fundamental ≈ −13dB, The≈two −18dB, ≈ −21dB, −23dB, ... 3π 5π 7π 9π frequency ω, and for each we see clearly the shape of the Hann window’s Fourier transform. Four points of the Fourier analysis lie within main of M (k) I sidelobes scendono progressivamente pi` u lentamente in the modo chelobe il decimo `e corresponding to circa each sinusoid. amplitude and−40 phase the individual attenuato di solo 30 dB e il The 32−esimo di circa dB.ofD’altra parte, i sinusoids are reflected theattenuati (four-point-wide) peaks. The four points sidelobes della finestra in di those Hann of sono da: fall at integer within a peak which happen to values k are successively about 2 1 2 2 + ≈ −32.30dB one half cycle out of phase.− 5π 2 3π 7π e −42, −49, resolve −54 e −59 per i of successivi sidelobes. To fully the dB partials a signal,quattro we should choose an analysis size Questo mostra finestra Hann prima fare la N large enough so che thatl’applicazione ω = 2π/N is di nouna more than adiquarter of the di frequency trasformatabetween di Fourier ci permetter` a meglio le componenti sinusoidali. separation neighboring partials. Fordiaisolare periodic signal, for example, the Se un segnale ha molteby componenti sinusoidali, i sidelobes da ciascuna partials are separated the fundamental frequency. For generati the analysis to fully interferiranno con il the loboanalysis principale di tutti gli altri. resolve the partials, period N must be atRiducendo least fourl’ampiezza periods of dei the sidelobes si riduce questa interferenza. signal. La Figura 9.6 mostra un’analisi Fourier su finestra di Hann, di un segnale con due componenti sinusoidali. Esse sono separate da circa 5 volte la frequenza In some applications it works to allow the peaks to overlap as long as the fondamentale ω e per ciascuno vediamo chiaramente la forma della trasformata center of each peak is isolated from all the other peaks; in this case the fourdi Fourier sulla finestra di Hann. Quattro punti dell’analisi di Fourier si trovaperiod rule may be relaxed to three or even slightly less. no all’interno del lobo principale di M (k) corrispondenti a ciascuna sinusoide. L’ampiezza e la fase delle singole sinusoidi si riflettono in quelle dei picchi (ampi quattro punti). I quattro punti all’interno di un picco che cadono su valori interi k sono sequenzialmente circa un mezzo ciclo fuori fase.


9.4. Analisi di Fourier e ricostruzione di segnali audio

257

Per risolvere completamente le parziali di un segnale, dovremmo scegliere una dimensione di analisi N abbastanza grande in modo che ω = 2π/N non sia pi` u di un quarto della separazione di frequenza tra parziali vicine. Per un segnale periodico, ad esempio, le parziali vengono separate dalla frequenza fondamentale. Per l’analisi, per risolvere completamente le parziali, il periodo di analisi N deve essere almeno quattro periodi del segnale. In alcune applicazioni funziona consentire che i picchi si sovrappongano finch´e il centro di ogni picco `e isolato da tutti gli altri picchi; in questo caso la regola di quattro periodi pu`o essere abbassata a tre o anche leggermente meno.

9.4

Analisi di Fourier e ricostruzione di segnali audio

L’analisi di Fourier pu` o essere utilizzata, a volte, per trovare le componenti sinusoidali in un segnale audio. Anche quando non si pu`o andare cos`ı lontano, si pu` o comunque separare un segnale in regioni di frequenze, nel senso che per ogni k, il punto k−esimo della trasformata di Fourier sia influenzato solo da componenti vicino alla frequenza nominale kω. Ci`o suggerisce molte operazioni interessanti che potremmo eseguire su un segnale considerando la sua trasformata di Fourier, trasformando il risultato e ricostruendo poi un nuovo segnale, trasformato, dalla trasformazione modificata. La Figura 9.7 mostra come effettuare un’analisi di Fourier, una modifica e una ricostruzione di un segnale audio. Il primo passo `e quello di dividere il segnale in finestre, che sono segmenti del segnale, di N campioni ciascuna, di solito con qualche sovrapposizione. Ogni finestra viene poi modellata moltiplicandola per una funzione finestra (di Hann, ad esempio). Quindi la trasformata di Fourier viene calcolata per gli N punti k = 0, 1, . . . , N − 1 (a volte `e auspicabile calcolare la trasformata di Fourier per pi` u punti, ma qui saranno sufficienti questi N punti). L’analisi di Fourier ci d`a un array bidimensionale di numeri complessi. Denotiamo con H la hop size, il numero di campioni con cui ogni finestra `e avanzata rispetto alla finestra precedente. Quindi per ogni m = . . . , 0, 1, . . . , la finestra m−esima consiste degli N punti a partire dal punto mH. L’n−esimo punto dell’m−esima finestra `e mH + n. La trasformata Fourier su finestra: `e quindi uguale a: S[m, k] = FT {w[n]X[n − mH]}(k). Questa `e sia una funzione del tempo (m, in unit`a di H campioni) che della frequenza (k, come multiplo della frequenza fondamentale ω). Fissando il numero di frame m e guardando alla trasformata Fourier su finestra in funzione di k, S[k] = S[m, k], ci d` a una misura dello spettro momentaneo del segnale X[n]. D’altra parte, fissando una frequenza k possiamo guardarla come il canale k−esimo di un segnale N −canali: C[m] = S[m, k].


258

Capitolo 9. Analisi e risintesi di Fourier

9.4. FOURIER ANALYSIS AND RECONSTRUCTION OF AUDIO SIGNALS275

INPUT

...

extract windows

shape windows

Fourier analysis

modification

Fourier resynthesis

FT

ANYTHING

iFT

FT

ANYTHING

iFT

shape windows again

overlapadd

...

OUTPUT

Figura 9.7: Analisi di scorrimento delle finestre e risintesi di un segnale audio Figure 9.7: Sliding-window analysis and resynthesis of an audio signal using utilizzando le trasformate di Fourier. In questo esempio il segnale viene filtrato Fourier transforms. In this example the signal is filtered by multiplying the moltiplicando la trasformata di Fourier per una desiderata risposta in frequenza. Fourier transform with a desired frequency response.


9.4. Analisi di Fourier e ricostruzione di segnali audio

259

Da questo punto di vista, la trasformata di Fourier su finestra separa il segnale originale X[n] in N regioni strette di frequenza, chiamate bande. Dopo aver calcolato la trasformata Fourier su finestra, applichiamo le modifiche desiderate. Nella figura, la modifica `e semplicemente sostituire la met`a superiore dello spettro con lo zero, che d`a un filtro passa-basso altamente selettivo (altre due possibili modifiche, la composizione a banda stretta e il vocoding sono descritte nei seguenti paragrafi). Infine ricostruiamo un segnale in uscita. Per fare ci`o si applica l’inverso della trasformata di Fourier (denominata “iFT” nella figura). Come mostrato nel paragrafo 9.1.2 questo pu`o essere fatto prendendo un’altra trasformata di Fourier, normalizzandola e spostando il risultato all’indietro. Nel caso in cui la finestra ricostruita non vada in maniera regolare a zero ai suoi due estremi, applichiamo una seconda volta la funzione di finestra di Hann. Facciamo questa operazione ad ogni finestra successiva dell’input, e poi sommiamo gli outputs usando la stessa sovrapposizione dell’analisi. Se utilizziamo la finestra di Hann e una sovrapposizione di quattro (cio`e, scegliamo N un multiplo di quattro e collochiamo ogni finestra H = N/4 campioni oltre la precedente), possiamo ricostruire fedelmente il segnale originale omettendo il passaggio di “modifica”. Ci`o `e dovuto al fatto che la iFT annulla il lavoro della FT e quindi stiamo moltiplicando ogni finestra per la funzione Hann al quadrato. L’output `e dunque l’input, moltiplicato per la funzione finestra di Hann al quadrato, sovrapposto a quattro. Una facile verifica mostra che questo fornisce la costante 3/2, quindi l’output `e uguale all’input per un un fattore costante. La capacit` a di ricostruire esattamente il segnale di ingresso `e utile perch´e alcuni tipi di modifica possono essere fatti per gradi e quindi l’output pu`o essere fatto variare con regolarit`a tra l’input e qualche versione trasformata di esso.

9.4.1

Narrow-band companding

Un compander `e uno strumento che amplifica un segnale con un guadagno variabile, a seconda dell’ampiezza misurata del segnale. Il termine `e una contrazione di “compressor” e “expander”. Il guadagno del compressore diminuisce quando il livello dell’input aumenta in modo che la gamma dinamica, ovvero la variazione complessiva del livello di segnale, sia ridotta. Un expander fa il contrario, aumentando la gamma dinamica. Frequentemente il guadagno dipende non solo dal livello del segnale immediato ma dalla sua storia; per esempio il tasso di variazione potrebbe essere limitato o potrebbe esserci un ritardo di tempo. Utilizzando l’analisi di Fourier e la risintesi, possiamo fare companding singolarmente su canali a banda stretta. Se C[m] `e una tale banda, applichiamole un guadagno g[m], per avere g[m]C[m]. Sebbene C[m] `e un numero complesso, il guadagno `e un numero reale non-negativo. In generale il guadagno potrebbe essere una funzione non solo di C[m] ma anche di ciascuno o tutti i samples precedenti nel canale: C[m − 1], C[m − 2] e cos`ı via. Qui prenderemo in considerazione la situazione pi` u semplice in cui il guadagno `e semplicemente una funzione dell’ampiezza del sample corrente: |C[m]|. La patch illustrata in Figura 9.8 mostra un’applicazione molto utile di companding chiamata noise gate. Qui il guadagno g[m] dipende dall’ampiezza del canale C[m] e da un livello di rumore che `e una funzione f del numero del canale k. Per chiarezza applicheremo l’indice k della frequenza al guadagno, scritto


260

Capitolo 9. Analisi e risintesi di Fourier

9.4. FOURIER ANALYSIS AND RECONSTRUCTION OF AUDIO SIGNALS277

IN extract and shape windows NOISE FLOOR

FT |Z|

threshold function iFT overlap and add OUT

Figura 9.8: Diagramma a blocchi per la soppressione di rumore a banda stretta tramite companding.

Figure 9.8: Block diagram for narrow-band noise suppression by companding.


9.4. Analisi di Fourier e ricostruzione di segnali audio

261

ora come g[m, k], e alla trasformata di Fourier su finestra S[m, k] = C[m]. Il guadagno `e dato da: ( 1 − f [k]/|S[m, k]| |S[m, k]| > f [k] . g[m, k] = 0 altrimenti Ogni volta che la magnitudine S[m, k] `e inferiore alla soglia f [k] il guadagno `e zero e quindi l’ampiezza S[m, k] viene sostituita da zero. Altrimenti, moltiplicando l’ampiezza per g[m, k] si riduce la magnitudine verso il basso a |S[m, k]| − f [k]. Poich´e il guadagno `e un numero reale non-negativo, la fase `e conservata. Nella figura, il guadagno `e calcolato come funzione di soglia del rapporto x = |S[m, k]|/f [k] dell’ampiezza del segnale rispetto al livello di rumore; la soglia `e g(x) = 1 − 1/x quando x < 1 e zero altrimenti, anche se si potrebbe sostituire facilmente con altre funzioni di soglia. Questa tecnica `e utile per rimuovere il rumore da un suono registrato. Misuriamo o forniamo a caso i valori del livello di rumore f [k]. A causa della progettazione della funzione di guadagno g[m, k], solo le ampiezze superiori al livello di rumore raggiungono l’uscita. Poich´e questo `e fatto su bande strette di frequenze, a volte `e possibile rimuovere la maggior parte del rumore anche quando il segnale stesso, nelle frequenze in cui `e pi` u forte del livello di rumore, `e maggiormente conservato. La tecnica `e utile anche come preparazione prima di applicare un’operazione non-lineare ad un suono, come la distorsione. Spesso `e meglio distorcere solo le frequenze pi` u salienti del suono. Sottrarre il suono con rumore soppresso dall’originale d` a un segnale residuo che pu`o essere passato non distorto.

9.4.2

Timbre stamping (vocoder classico)

Una seconda applicazione dell’analisi e della risintesi di Fourier `e un filtro, variabile nel tempo, in grado di far si che un suono prenda l’inviluppo spettrale in evoluzione di un’altro. Questo `e ampiamente conosciuto nei circoli di musica elettronica come vocoder, cos`ı chiamato, non proprio accuratamente, dopo l’originale strumento di analisi/sintesi vocale dei Bell Laboratories. La tecnica descritta qui viene pi` u precisamente definita timbre stamping. Sono usati due segnali di ingresso, uno da filtrare e l’altro per controllare il filtro tramite il suo inviluppo spettrale variabile nel tempo. La trasformata Fourier su finestra viene utilizzata sia sull’input del segnale di controllo per stimare il suo inviluppo spettrale, sia sull’ingresso del filtro per applicare il filtro. Nella Figura 9.9 `e mostrato un diagramma a blocchi per il timbre stamping. Come nell’esempio precedente, il timbre stamping agisce moltiplicando la trasformata di Fourier su finestra, a valori complessi, dell’ingresso del filtro per numeri reali non-negativi, quindi modificando le loro ampiezze, ma lasciando intatte le loro fasi. Qui la modifica `e che vogliamo semplicemente sostituire le ampiezze dell’originale, |S[m, k]|, con magnitudini ottenute dall’ingresso di controllo (chiamiamole |T [m, k]|). Il guadagno necessario sarebbe quindi, g[m, k] =

|T [m, k]| . |S[m, k]|

In pratica `e meglio limitare il guadagno ad un certo valore massimo (che potrebbe dipendere dalla frequenza) in quanto altrimenti i canali che non contengano


262

278

Capitolo 9. Analisi e risintesi di Fourier

CHAPTER 9. FOURIER ANALYSIS AND RESYNTHESIS FILTER INPUT

CONTROL INPUT

window FT |Z| |Z|

limiting function iFT overlap and add OUT Figura 9.9: Diagramma a blocchi per il timbre stamping (AKA “vocoding”).

Figure 9.9: Block diagram for timbre stamping (AKA “vocoding”).

g(x) = 1 − 1/x when x < 1 and zero otherwise, although other thresholding functions could easily be substituted. This technique is useful for removing noise from a recorded sound. We either measure or guess values of the noise floor f [k]. Because of the design of the gain function g[m, k], only amplitudes which are above the noise floor reach the output. Since this is done on narrow frequency bands, it is sometimes possible to remove most of the noise even while the signal itself, in the frequency ranges where it is louder than the noise floor, is mostly preserved. The technique is also useful as preparation before applying a non-linear operation, such as distortion, to a sound. It is often best to distort only the most salient frequencies of the sound. Subtracting the noise-gated sound from the original then gives a residual signal which can be passed through undistorted.

9.4.2

Timbre stamping (classical vocoder)


9.5. Fase

263

altro che rumore, sidelobes o addirittura errore di troncamento potrebbero essere elevati all’audibilit` a. Quindi una funzione di limitazione adatta viene applicata al guadagno prima di utilizzarlo.

9.5

Fase

Finora abbiamo operato su segnali alterando le ampiezze delle loro trasformate di Fourier su finestra, ma lasciando intatte le fasi. Le ampiezze codificano l’inviluppo spettrale del suono. Le fasi, d’altra parte, codificano la frequenza e il tempo, nel senso che la variazione di fase, da una finestra ad una diversa, si accumula, nel tempo, secondo la frequenza. Per effettuare una trasformazione che consenta un controllo indipendente dalla frequenza e dal tempo richiede l’analisi e la ricostruzione della fase. Negli esempi di analisi/sintesi del paragrafo precedente, la fase dell’output viene copiata direttamente dalla fase dell’input. Ci`o `e appropriato quando il segnale di output corrisponde in tempo con il segnale di input. A volte si desiderano modifiche di tempo, ad esempio per fare stretching o contrazione del tempo. Alternativamente la fase di output potrebbe dipendere da pi` u di un input, per esempio per fare morphing tra un suono e un altro. La Figura 9.10 mostra come, data una sinusoide complessa come input, la fase della trasformata di Fourier cambia da finestra a finestra. La frequenza della sinusoide `e α = 3ω, in modo che il picco nella trasformata di Fourier sia centrato su k = 3. Se la fase iniziale `e φ, le fasi vicine possono essere definite come: ∠S[0, 2] = φ + π ∠S[1, 2] = φ + Hα + π ∠S[2, 2] = φ + 2Hα + π

∠S[0, 3] = φ ∠S[1, 3] = φ + Hα ∠S[2, 3] = φ + 2Hα

∠S[0, 4] = φ + π ∠S[1, 4] = φ + Hα + π . ∠S[2, 4] = φ + 2Hα + π

Questo d` a un ottimo modo per stimare la frequenza α: scegliere un qualsiasi canale la cui ampiezza sia dominata dalla sinusoide e sottrarre due fasi successive per ottenere Hα: Hα = ∠S[1, 3] − ∠S[0, 3] α=

∠S[1,3]−∠S[0,3]+2pπ H

dove p `e un intero. Ci sono H frequenze possibili, distanziate di 2π/H. Se si utilizza una sovrapposizione di 4, cio`e H = N/4, le frequenze sono distanziate di 8π/N = 4ω. Fortunatamente, questa `e la larghezza del lobo principale per la finestra di Hann, quindi non pi` u di un possibile valore di α pu`o spiegare qualsiasi differenza di fase misurata all’interno del lobo principale di un picco. Il valore corretto di p da scegliere `e quello che fornisce una frequenza pi` u vicina alla frequenza nominale del canale, kω. Quando si calcolano le fasi per sintetizzare un segnale nuovo o modificato, vogliamo mantenere le opportune relazioni di fase tra le finestre successive di risintesi e contemporaneamente anche tra i canali adiacenti. Tuttavia, questi due insiemi di relazioni non sono sempre compatibili. Il nostro primo obbligo sar`a quello di onorare i rapporti tra le finestre successive di risintesi e preoccuparci delle relazioni di fase tra i canali solo successivamente. Supponiamo di voler costruire l’m−esimo spettro S[m, k] per la risintesi (avendo gi` a costruito il precedente, l’(m − 1)−esimo). Supponiamo di volere che


264

Capitolo 9. Analisi e risintesi di Fourier

280

CHAPTER 9. FOURIER ANALYSIS AND RESYNTHESIS

(a) real incoming sinusoid

...

imaginary

windowed FT

windowed FT

S[0, 3]

S[1, 3]

windowed FT

S[2, 3]

(b) imaginary

real S[0, 3]

H

S[1, 3] S[2, 3]

Figura 9.10: Fase nell’analisi di Fourier su finestra: (a) una sinusoide complessa Figure 9.10: Phase in windowed Fourier analysis:per (a)una singolo complex sinusoid analizzata in tre finestre successive; (b) il risultato canale (k =ana3), lyzed on three successive windows; (b) the result for a single channel (k=3), for per le tre finestre. the three windows.


9.5. Fase

265

THIS INPUT

ANOTHER INPUT T[k]

T'[k]

phase diff

phase diff

phase accum S[m-1, k]

phase accum S[m+1, k]

S[m, k] ...

... OUTPUT

Figura 9.11: Propagazione delle fasi nella risintesi. Ciascuna fase, come quella Figure Propagating phases in resynthesis. Each phase, as that of di S[m,9.11: k] qui, dipende dalla precedente fase di output e dalla such differenza delle S[m, k] input. here, depends on the previous output phase and the difference of the fasi di input phases. le relazioni di fase tra le finestre m − 1 e m siano quelle di un segnale x[n], ma che le fasi del numero di finestra m − 1 possano provenire da qualche altra parte e non si possa supporre che siano in linea con i nostri desideri. Per scoprire quanto la fase di ciascun canale debba essere diversa da quella precedente, eseguiamo due analisi del segnale x[n], separate dalla stessa hop size H che stiamo usando per la risintesi: T [k] = FT {w[n]X[n]}(k), T 0 [k] = FT {w[n]X[n + H]}(k). La Figura 9.11 mostra il processo di accumulo di fase, in cui le fasi di output dipendono ciascuna dalla precedente fase di output e dalla differenza di fase per due analisi su finestre dell’input. La Figura 9.12 illustra la relazione di fase nel piano complesso. La fase del nuovo output S[m, k] deve essere quella del precedente pi` u la differenza tra le fasi delle due analisi: ∠S[m, k] = ∠S[m − 1, k] + (∠T 0 [k] − ∠T [k]) =∠

S[m−1,k]T 0 [k] T [k]

.

Qui abbiamo usato il fatto che moltiplicare o dividere due numeri complessi d`a la somma o la differenza dei loro argomenti.


9.5. PHASE 266

283 Capitolo 9. Analisi e risintesi di Fourier

imaginary T'[k] real S[m-1, k]

T[k]

S[m, k]

Figura 9.12: 9.12: Phases Fasi di of unone canale delleoffinestre di analisi e due and successive finestre Figure channel the analysis windows two successive di risintesi. resynthesis windows. Se l’ampiezza desiderata `e un numero reale a, allora dobbiamo impostare S[m,magnitudes k] su: The of the second and third terms cancel out, so that the magnitude

−1real numbers 0 so the argument is of S[m, k] reduces to a; the

first two terms0 are S[m − 1, k]T [k]

S[m − 1]T [k] controlled by the last S[m, k] term. = a ·

.

· T [k] T [k] If we want to end up with the magnitude from the spectrum T as well, we ′ I moduli del|Tsecondo del terzo termine si annullano, in modo che il modulo can set a = [k]| andesimplify: di S[m, k] si riduca ad a; i primi due termini sono numeri reali in modo che ! !−1 l’argomento sia controllato dall’ultimo ! S[m − 1, k]termine. ! S[m − 1, k]T ′ [k] ! ! · = ! con la magnitudine Se vogliamo S[m, finirek]anche dello spettro T , possiamo im! T [k] T [k] postare a = |T 0 [k]| e semplificare:

S[m − 1, k] −1 S[m − 1, k]T 0 [k]

·

k] =

. 9.5.1 Phase S[m, relationships channels

T [k] between T [k]

In the scheme above, the phase of each S[m, k] depends only on the previ9.5.1 Rapporti di fase tra i canali ous value for the same channel. The phase relationships between neighboring channels are left to chance. This sometimes works fine, the inNello schema sopra, la fase di ogni S[m, k] dipende solo but dal sometimes valore precedente coherence of neighboring rise tra to an unintended effect. We per lo stesso canale. Lechannels relazionigives di fase i canali vicinichorus sono lasciati al would ideally awish S[m, k]bene, and S[m, + 1]l’incertezza to have the phase caso. Questo voltefor funziona ma a kvolte deisame canali vicinirelad`a tionship as un for effetto T ′ [k] and T ′ [k + 1],dibut also for the phase relationship origine ad involontario chorus. Vorremmo idealmente che between S[m, k] S[m, k] kand − 1, k]latostessa be the same asdibetween T ′ [k] T [k]. e S[m, + 1]S[m abbiano relazione fase come perand T 0 [k] e T [k + 1], ma anche che2N la equations relazione di tra S[m, k] e S[m − 1, k] sia uguale a but quella These forfase N phases in general will have no solution, we tra can 0 T [k] e T [k]. alter the equation for S[m, k] above so that whenever there happens to be a soQueste equazioni per system le N fasi, in generale, avranno alcuna solulution to the2N over-constrained of equations, thenon reconstruction algorithm zione, ma possiamo alterare l’equazione per S[m, k] in modo che ogni qualvolta homes in on the solution. This approach is called phase locking [Puc95b], and ci sia soluzione al sistema sovra-vincolato di equazioni, l’algoritmo di ricohas theuna virtue of simplicity although more sophisticated techniques are available struzione porti a quella soluzione. Questo approccio ` e chiamato phase locking [DL97]). [Puc95b] e ha la virt` u della semplicit`a (anche se sono disponibili tecniche pi` u sofisticate [DL97]). La relazione di fase in output desiderata, al frame m − 1, `e ∠T [k + 1] − ∠T [k] = ∠S[m − 1, k + 1] − ∠S[m − 1, k]


9.6. Phase bashing

267

o, riarrangiando i termini: S[m − 1, k + 1] S[m − 1, k] ∠=∠. T [k + 1] T [k] In altre parole, la fase del quoziente S/T non dovrebbe dipendere da k. Con questo in mente, possiamo riscrivere la formula di ricorsione per S[m, k]: S[m, k] = |R[k]|−1 ¡ R[k]T 0 [k] con R[k] =

T [k] ¡ S[m − 1, k] |S[m − 1, k]|

e a causa della precedente equazione, gli R[k] dovrebbero essere tutti in fase. Il trucco `e ora quello di sostituire R[k], per ogni k, con la somma dei tre vicini. Il calcolo `e quindi: S[m, k] = |R0 [k]|−1 ¡ R0 [k]T 0 [k] con R0 [k] = R[k + 1] + R[k] + R[k − 1]. Se i canali sono gi` a nella relazione di fase corretta, questo non ha alcun effetto (la fase risultante sar` a uguale a quella nel caso in cui solo R[k] fosse usato). Ma in generale la somma condivider`a due termini in comune con il suo vicino a k + 1: R0 [k + 1] = R[k + 2] + R[k + 1] + R[k] in modo che il R0 tender`a a puntare maggiormente nella stessa direzione rispetto a quanto faccia R. Applicando questo iterativamente, tutti gli R0 saranno eventualmente allineati alla stessa fase, fintanto che le relazioni di fase tra gli spettri misurati T e T 0 lo consentano.

9.6

Phase bashing

Nel paragrafo 2.3, sull’enveloped sampling, abbiamo visto come fare una forma d’onda periodica a partire da un suono registrato, prendendo in considerazione il timbro del suono originale ma eseguendolo ad un pitch specifico. Se la finestra nel suono registrato viene fatta per precessare nel tempo, il timbro risultante varia in imitazione del suono registrato. Si presenta un problema importante, che se prendiamo forme d’onda da diverse finestre di un sample (o da samples diversi), non c’`e garanzia che le fasi si abbinino. Se non lo fanno, il risultato pu`o essere brutto, poich´e le variazioni di fase casuale vengono percepite come fluttuazioni di frequenza. Ci`o pu`o essere corretto utilizzando l’analisi e la risintesi di Fourier [Puc05]. La Figura 9.13 mostra un modo semplice per utilizzare l’analisi di Fourier per allineare le fasi in una serie di finestre in una registrazione. Prendiamo semplicemente la FFT della finestra e poi impostiamo ogni fase su zero per i valori pari di k e su Ď€ per quelli dispari. La fase al centro della finestra `e dunque zero sia per valori pari che per quelli dispari di k. Per impostare le fasi (gli argomenti delle ampiezze complesse nello spettro) nel modo desiderato, troviamo innanzitutto la magnitudine, che pu`o essere considerata un numero complesso


268

Capitolo 9. Analisi e risintesi di Fourier

INPUT

...

FT MAGNITUDE (-1)

k

iFT ...

PHASE-BASHED INPUT

Figura 9.13: Phase-bashing di un suono registrato (qui, una sinusoide con Figure 9.13: Phase-bashing recorded (here,wavetables. a AND sinusoid with rising fre286 CHAPTER FOURIER ANALYSIS RESYNTHESIS frequenza crescente) per darea9.una serie disound oscillatori quency) to give a series of oscillator wavetables. osc~

(a)

(c)

fft~

block~ 512

tabwrite~ $0-imaginary

inlet~ tabreceive~ $0-hann

tabwrite~ $0-real *~ (b) 0 * 10 osc~

<- frequency, tens of Hz.

click here and pd fft-analysis <- see

rfft~ *~

*~

+~ sqrt~ tabwrite~ $0-magnitude

Figure in Pd: (a) the ∼ object; (b) using a subwindow Figura 9.14: 9.14: Fourier Analisianalysis di Fourier in Pd: (a) fft l’oggetto fft∼; (b) utilizzo di una to control block size of the la Fourier transform; (c) the subwindow, using a real sotto-patch per controllare dimensione del blocco della trasformata di Fourier; Fourier transform (the fft~object) and the di Hann windowing function.rfft∼) e (c) la sotto-patch, che usa una trasformata Fourier reale (l’oggetto la funzione finestra di Hann. Figure 9.13 shows a simple way to use Fourier analysis to align phases in a series of windows in a recording. We simply take the FFT of the window and then set each phase to zero for even values of k and π for odd ones. The phase at the center of the window is thus zero for both even and odd values of k. To set the phases (the arguments of the complex amplitudes in the spectrum) in the desired way, first we find the magnitude, which can be considered a complex number with argument zero. Then multiplying by (−1)k adjusts the amplitude so that it is positive and negative in alternation. Then we take the inverse Fourier transform, without even bothering to window again on the way back; we will probably want to apply a windowing envelope later anyway as was shown


9.7. Esempi

269

con argomento zero. Quindi moltiplicando per (−1)k si regola l’ampiezza in modo che sia positiva e negativa alternativamente. Poi prendiamo la trasformata inversa di Fourier, senza nemmeno preoccuparci di suddividere in finestre nella fase di ritorno; probabilmente vogliamo comunque applicare un inviluppo windowing in seguito, come `e stato mostrato nella Figura 2.7. I risultati possono essere combinati con le tecniche di modulazione del Capitolo 6 per produrre potenti strumenti per la sintesi vocale e altri sintesi imitative.

9.7

Esempi

Analisi e risintesi di Fourier in Pd L’esempio I01.Fourier.analysis.pd (Figura 9.14, parte a) mostra come calcolare la trasformata Fourier di un segnale audio usando l’oggetto fft∼: fft∼ : trasformata di Fourier veloce (Fast Fourier Transform). I due ingressi accettano segnali audio che rappresentano la parte reale e la parte immaginaria di un segnale a valori complessi. La dimensione della finestra N `e data dalla dimensione di blocco di Pd. Una trasformata di Fourier viene eseguita su ogni blocco. La trasformata di Fourier veloce [Sl03] riduce, in Pd, il costo computazionale dell’analisi di Fourier a solo quello di un numero di oggetti osc∼ tra 5 e 15, in configurazioni tipiche. L’algoritmo FFT nella sua forma pi` u semplice considera il caso in cui N sia una potenza di due, che `e anche (normalmente) un vincolo sulle dimensioni dei blocchi in Pd. L’esempio I02.Hann.window.pd (Figura 9.14, parti b e c) mostra come controllare la dimensione del blocco usando un oggetto block∼, come applicare una finestra di Hann e una versione diversa della trasformata di Fourier. La parte (b) mostra la chiamata a un sotto-patch che, a sua volta, `e mostrata nella parte (c). I nuovi oggetti sono: rfft∼ : trasformata di Fourier veloce reale. La parte immaginaria dell’input viene considerata pari a zero. Solo i primi N/2+1 canali di output sono calcolati (gli altri sono determinati per simmetria). Questo richiede met`a del tempo di calcolo dell’oggetto (pi` u generale) fft∼. tabreceive∼ : riproduce ripetutamente il contenuto di una wavetable. Ogni blocco di calcolo emette gli stessi N primi campioni della tabella. In questo esempio, la tabella “$0-hann” contiene una funzione finestra di Hann di lunghezza 512, in accordo con la dimensione del blocco specificato. Il segnale da analizzare appare (dalla patch genitore) tramite l’oggetto inlet∼. Le ampiezze del canale (l’output dell’oggetto rfft∼) vengono ridotte ad ampiezze reali: le parti reale e immaginaria sono elevate al quadrato separatamente, i due quadrati vengono sommati e il risultato `e passato all’oggetto sqrt∼. Infine, la magnitudine viene scritta (controllata da una connessione non mostrata in figura) tramite tabwrite∼ in un’altra tabella, “$0-magnitude”, per visualizzarla graficamente. L’esempio I03.resynthesis.pd (Figura 9.15) mostra come analizzare e risintetizzare un segnale audio seguendo la strategia di Figura 9.7. Come prima c’`e una sotto-finestra per eseguire il lavoro ad una dimensione di blocco adeguata al


288

CHAPTER 9. FOURIER ANALYSIS AND RESYNTHESIS

270

Capitolo 9. Analisi e risintesi di Fourier

block~ 512 4

inlet~ *~

512-sample block, 4-fold overlap (hop size 128).

inlet~ now takes care of buffering and shifting for overlapped windowing.

tabreceive~ $0-hann

rfft~

Hann window as before

real FT as before tabreceive~ $0-gain *~

read "gain" from a table in parent patch

raise to 4th power (a more convenient scale)

*~

*~

/~ 768 renormalize: divide by window size 512 and an additional factor of 3/2 to correct for twice-Hann-windowed overlap-add in outlet~ below. *~

rifft~ real inverse fast Fourier transform (not normalized). *~

tabreceive~ $0-hann Hann window again on output.

outlet~ outlet~ does overlap-adding because of block~ setting above.

Figure 9.15: Fourier analysis and resynthesis, using block~ to specify an overlap Figura 9.15: Analisi e risintesi di Fourier, utilizzando block∼ per of 4, and rifft~ to reconstruct the signal after modification.

specificare una sovrapposizione di 4, e rifft∼ per ricostruire il segnale dopo la modifica. compito; la figura mostra solo la sotto-finestra. Abbiamo bisogno di un nuovo oggetto per la trasformata di Fourier inversa: rifft∼ : trasformata di Fourier veloce inversa reale. Utilizzando i primi N/2 + 1 punti dei suoi inputs (considerati come una coppia reale/immaginaria) e assumendo, per simmetria, valori appropriati per gli altri canali, ricostruisce un’output a valori reali. Non viene eseguita alcuna normalizzazione, in modo che una coppia rfft∼/rifft∼ abbia, insieme, un guadagno di N . L’oggetto ifft∼ `e anche disponibile, che calcola un inverso non-normalizzato per l’oggetto fft∼, ricostruendo un output a valori complessi. L’oggetto block∼, nella sotto-patch, viene richiamato con un secondo argomento che specifica un fattore di sovrapposizione di 4. Ci`o impone che la sottopatch venga eseguita quattro volte ogni N = 512 campioni, a intervalli regolari di 128 campioni. L’oggetto inlet∼ fa il necessario buffering e la riorganizzazione dei campioni in modo che il suo output dia sempre gli ultimi 512 campioni di input in ordine. Nell’altro senso, l’oggetto outlet∼ somma i segmenti dei suoi quattro precedenti inputs per eseguire la schema di sovrapposizione mostrato in Figura 9.7. I blocchi di 512 campioni vengono moltiplicati per la finestra di Hann sia all’input che all’output. Se gli oggetti rfft∼ e rifft∼ fossero stati collegati senza alcuna modifica tra di essi, l’output ricostruirebbe fedelmente l’input. Tuttavia, viene applicata una modifica: ogni canale viene moltiplicato per un guadagno (reale positivo). L’ampiezza complessa per ogni canale viene scalata moltiplicando separatamente le parti reale e immaginaria per il guadagno. Il guadagno (che dipende dal canale) viene da un’altra tabella, denominata “$0-gain”. Il risultato `e un filtro di equalizzazione grafica; muovendo


9.7. Esempi

9.7. EXAMPLES rfft~ real FT *~

*~

(a) compute power (call it "s")

+~

pd calculate-mask subpatch shown in (b) mask table tabreceive~ $0-mask *~

r mask-level

power ("s") minus mask ("m") max~ 0 force >= 0

(b) loop to number of frames

+~ 1e-20 protect against division by zero /~ sqrt((s-m)/s) q8_sqrt~ (or 0 if s < m)

0 float

/ + 1

<

t f f

0

hop size / 4 in msec number of frames

sel 0 expr 1/($f1+1) current power inlet~ -~

normalize by 2/(3N)

rifft~ real iFT

t b f r window-msec

spigot

/~ 1536 *~

r make-mask

bang~

-~

*~

271

289

+~

*~

0

0 weight to average new power into mask

tabreceive~ $0-mask average current power into last mask to get new mask. New value is weighted 1/n on the nth iteration.

tabsend~ $0-mask

Figure 9.16: NoiseSoppressione suppression as andel example of narrow-band companding: (a) Figura 9.16: rumore come esempio di companding analysis and reconstruction of the signal; (b) computation of the “mask”.

a banda stretta: (a) analisi e ricostruzione del segnale; (b) calcolo della “maschera”.

il mouse nella finestra grafica per questa tabella, `e possibile progettare curve guadagno-frequenza. real-valued) gain. The complex-valued amplitude for each channel is scaled by separately multiplying the real and imaginary parts by the gain. The gain Videpends `e un ritardo intrinseco di block∼ (which on the channel) comesintrodotto from anotherdall’uso table, named “$0-gain”.per aumentare la dimensione del blocco (ma nessun ritardo se viene utilizzato, come mostrato nel The result is a graphical equalization filter; by mousing in the graphical window for this table,7,you design gain-frequency curves. Capitolo percanridurre la dimensione del blocco rispetto alla finestra genitore).

Il ritardo pu` o essere misurato dall’input all’output della sotto-patch ed `e uguale There is an inherent introduceddei by using to increase the block alla differenza delledelay dimensioni due block~ blocchi. In questo esempio il ritardo di size (but none if it is used, as shown in Chapter 7, to reduce block size relative buffering ` e 512 − 64 = 448 campioni. Il ritardo di blocco non dipende dalla to the parent window.) The delay can be measured from the inlet to the outlet sovrapposizione, solo dalle dimensioni dei blocchi. of the sub-patch, and is equal to the difference of the two block sizes. In this example the buffering delay is 512-64=448 samples. Blocking delay does not depend on overlap, only on block sizes.

Companding a banda stretta: soppressione del rumore

L’esempio I04.noisegate.pd (Figura 9.16) mostra un esempio di companding a banda stretta usando l’analisi/risintesi di Fourier (questa `e una realizzazione del diagramma a blocchi della Figura 9.8). La parte (a) della figura mostra una configurazione del filtro simile a quella dell’esempio precedente, ad eccezione del fatto che il guadagno per ogni canale `e ora in funzione della magnitudine del canale. Per ciascun k, se indichiamo con s[k] la potenza nel canale k e con m[k] un livello di mascheratura (un livello presumibilmente un po’ pi` u alto della potenza del rumore per il canale k), allora il guadagno nel canale k `e dato da (q s[k]−m[k] s[k] > m[k] s[k] . 0 altrimenti


272

Capitolo 9. Analisi e risintesi di Fourier

La potenza nel canale k−esimo `e cos`ı ridotto di m[k] se possibile, e altrimenti sostituita con zero. La mascheratura stessa `e il prodotto del rumore medio misurato in ciascun canale, che `e contenuto nella tabella “$0-mask”, moltiplicato per un valore denominato “mask-level”. Il rumore medio `e misurato in una sotto-patch (pd calculate-mask), il cui contenuto `e mostrato nella parte (b) della figura. Per calcolare la mascheratura utilizziamo due nuovi oggetti: bang∼ : invia un bang in anticipo di ogni blocco di calcolo. Il bang compare al tempo logico del primo campione in ogni blocco (il primo tempo logico in cui il calcolo del controllo influenza quel blocco e non quello precedente), seguendo lo schema mostrato in Figura 3.2. tabsend∼ : l’oggetto compagno di tabreceive∼, copia ripetutamente il suo input nel contenuto di una tabella, interessando fino ai primi N campioni della tabella. Il calcolo della media della potenza viene avviato inviando una durata di tempo in millisecondi a “make-mask”. La patch calcola il numero equivalente di blocchi b e genera una sequenza di pesi: 1, 1/2, 1/3, . . . , 1/b, in base alla quale la potenza di ciascuno dei successivi b blocchi viene calcolato in media indipendentemente da cosa la tabella di mascheratura contenga nel blocco precedente. Alla fine dei b blocchi la tabella contiene la media ponderata di tutte le b misure di potenza. Successivamente, il peso per la fare la media sulle nuove misurazioni di potenza `e zero, quindi la media misurata smette di modificarsi. Per utilizzare questa patch per la soppressione classica del rumore occorre almeno qualche secondo di rumore registrato senza l’attuale “segnale”. Questo viene riprodotto nella patch e la sua durata viene inviata a “make-mask”, in modo che la tabella “$0-mask” contenga la potenza media di rumore misurata per ogni canale. Quindi, facendo l’assunzione che la parte rumorosa del segnale raramente superi 10 volte la sua potenza media (per esempio), “mask-level” `e impostato su 10 e il segnale da cui sopprimere il rumore viene inviato attraverso la parte (a) della patch. Il rumore sar`a quasi tutto sparito, ma quei canali in cui il segnale supera 20 volte la potenza del rumore verranno attenuati solo di 3dB e i canali con potenza pi` u alta progressivamente meno (naturalmente, la soppressione effettiva del rumore potrebbe non essere l’applicazione pi` u interessante della patch; si potrebbe tentare di mascherare qualsiasi segnale con qualsiasi altro).

Timbre stamp (“vocoder”) L’esempio I05.compressor.pd (Figura 9.17) `e un altro compander di canale che viene presentato in preparazione per l’esempio I06.timbre.stamp.pd, che esamineremo successivamente. Si tratta di una realizzazione del timbre stamp della Figura 9.9, leggermente modificata. Ci sono due inputs, uno a sinistra da filtrare (e la cui trasformata di Fourier viene utilizzata per la risintesi dopo la modifica delle magnitudini), e uno alla destra che funge da sorgente di controllo. In parole povere, se le due magnitudini sono f [k] per l’input del filtro e c[k] per la sorgente di controllo, “sbianchiamo” semplicemente l’input del filtro, moltiplicando per 1/f [k] e poi “timbrando” le magnitudini di controllo sul risultato moltiplicando ulteriormente per c[k]. In pratica, dobbiamo limitare il guadagno ad un valore ragionevole massimo.


9.7. Esempi

273

9.7. EXAMPLES

inlet~ *~

291

filter input

tabreceive~ $0-hann

rfft~ *~

*~

reciprocal modulus of

+~ +~ 1e-20 q8_rsqrt~

filter input amplitude

expr 0.01*$f1*$f1

*~

*~

control source

tabreceive~ $0-hann

rfft~

r squelch

clip~

inlet~

limit gain to squelch*squelch/100

*~

*~

+~ q8_sqrt~

modulus of control amplitude

multiply the two amplitude factors (for compression and to apply new timbre)

/~ 1536 *~

*~

rifft~ *~

tabreceive~ $0-hann

outlet~

Figura Timbre Figure 9.17: 9.17: Timbre stamp. stamp.

Timbre stamp (“vocoder”) Example I05.compressor.pd (Figure 9.17) is another channel compander which is presented in preparation for Example I06.timbre.stamp.pd, which we will examine next. This is a realization of the timbre stamp of Figure 9.9, slightly modified. There are two inputs, one at left to be filtered (and whose Fourier transform is used for resynthesis after modifying the magnitudes), and one at right which acts as a control source. Roughly speaking, if the two magnitudes are f [k] for the filter input and c[k] for the control source, we just “whiten” the filter input, multiplying by 1/f [k], and then stamp the control magnitudes onto the result by further multiplying by c[k]. In practice, we must limit the gain to some reasonable maximum value. In this patch this is done by limiting the whitening factor 1/f [k] to a specified maximum value using the clip~ object. The limit


274

Capitolo 9. Analisi e risintesi di Fourier

In questa patch viene fatto limitando il fattore di sbiancamento 1/f [k] ad un valore massimo specificato utilizzando l’oggetto clip∼. Il limite `e controllato dal parametro “squelch”, che `e elevato al quadrato e diviso per 100 per mappare i valori da 0 a 100 in un range utile. Un altro schema possibile `e quello di limitare il guadagno dopo aver formato il quoziente c[k]/f [k]. La limitazione del guadagno pu`o, in entrambi i casi, essere ` anche utile, a volte, elevare il guadagno ad una dipendente dalla frequenza. E potenza p compresa tra 0 e 1; se p vale 1, si ha un timbre stamp, se invece p vale 0 l’input del filtro passa in modo invariato mentre i valori intermedi danno un’interpolazione regolare tra i due.

Phase vocoder time bender Con phase vocoder ci si riferisce solitamente alla tecnica generale di passaggio da ampiezze (a valori complessi) di canale a coppie costituite da frequenze di precessione di ampiezza (a valori reali) e di fase (“frequenze”) e viceversa, come descritto in Figura 9.11 (paragrafo 9.5). Nell’esempio I07.phase.vocoder.pd (Figura 9.18), utilizziamo questa tecnica con l’obiettivo specifico di allungare e/o contrarre il tempo di un suono registrato tramite un controllo in tempo reale. Cio`e, controlliamo in qualsiasi momento in tempo reale la posizione del suono registrato che si sente. Sono usati due nuovi oggetti: lrshift∼ : sposta un blocco a sinistra o a destra (in base al creation argument). Se l’argomento `e positivo, ogni blocco dell’output `e l’input spostato di quel numero di spazi a destra, riempiendo con gli zeri, per quanto necessario, a sinistra. Un argomento negativo sposta a sinistra, riempendo con gli zeri a destra. q8 rsqrt∼ : radice quadrata reciproca rapida e approssimata. Esegue il reciproco della radice quadrata del suo ingresso, buona a circa una parte su 256, usando un calcolo molto inferiore di quanto una radice quadrata completa e reciproca farebbe. Il processo inizia con una sotto-patch, pd read-windows, che emette due blocchi, Hann-windowed, del suono registrato, uno “indietro” e uno “avanti” 1/4 di finestra nella registrazione. La finestra mostrata utilizza le due uscite della sotto-patch per guidare l’ampiezza e la modifica di fase di ciascun canale della propria uscita. I primi due oggetti tabreceive∼ richiamano il precedente blocco di ampiezze complesse inviato all’oggetto rifft∼ in fondo, corrispondenti a S[m − 1, k] nella discussione del paragrafo 9.5. La patch nel suo complesso calcola S[m, k] e poi il suo inverso di Hann su finestra FT per l’output. Dopo la normalizzazione di S[m − 1, k], il suo coniugato complesso (l’inverso normalizzato) viene moltiplicato per la trasformata di Fourier sulla finestra “indietro” T [k], dando il prodotto R[k]di pagina 267. Poi, a seconda del valore del parametro “lock”, il valore calcolato di R[k] viene sostituito condizionatamente con la versione phase-locking R0 [k]. Questo viene fatto usando gli oggetti lrshift∼, i cui outputs vengono aggiunte a R[k] se “lock” `e impostato su uno, oppure no se `e zero. Il risultato viene quindi normalizzato e moltiplicato per la trasformata di Fourier su finestra di Hann della finestra “front” (T 0 [k]) per dare S[m, k].


9.7. Esempi

275

9.7. EXAMPLES

293

tabreceive~ prev-real tabreceive~ prev-imag

*~

*~

*~

+~

+~ 1e-20

*~

*~

*~

+~

recall previous output amplitude whose phase we'll add to measured phase precession

normalize (divide by the magnitude). The 1e-20 is to prevent overflows.

q8_rsqrt~

Read two windows, one 1/4 length behind the other, of the input pd read-windows sound, with Hann window function

rfft~ Take FT of the window in back. Multiply its conjugate by the *~ *~ normalized previous output. Result has the magnitude of the input sound. -~

lrshift~ 1 lrshift~ -1

lrshift~ 1 If "lock" is on, add two neighboring complex amplitudes. The result will lrshift~ -1 tend toward the channel with the strongest amplitude. r lock

*~

*~

+~

+~

+~ 1e-15

*~

*~

*~

*~

-~

Normalize again, taking care to salt each channel with 1e-15 so that we get a unit *~ *~ complex number even if everything was zero. Now take FT of the forward window +~ and multiply it by the unit complex q8_rsqrt~ number from above. Magnitude will rfft~ be that of the forward window and phase will be previous output phase plus the phase difference between the *~ *~ two analysis windows, except that if +~ "lock" is on, they will be changed to agree better with the inter-channel phase relationships of the input. tabsend~ prev-imag

rifft~ *~

tabreceive~ $0-hann

*~

r window-size

outlet~

expr 2/(3*$f1)

tabsend~ prev-real 'set' message to block allows variable size

r window-size set $1 4 block~

Figure 9.18: Phase vocoderper for l’allungamento time stretching and Figura 9.18: Phase vocoder e lacontraction. contrazione del tempo.


276

Capitolo 9. Analisi e risintesi di Fourier

Altre tre applicazioni di analisi/risintesi di Fourier, non illustrate qui, sono fornite negli esempi Pd. In primo luogo, l’esempio I08.pvoc.reverb.pd mostra come creare un vocoder di fase il cui output ricircola come in un riverberatore, ad eccezione che i singoli canali sono sostituiti dall’input quando `e pi` u potente di quello che `e gi` a ricircolato. Il risultato `e un effetto di riverbero pi` u coerente rispetto a quello che pu` o essere fatto in modo classico utilizzando linee di ritardo. L’esempio I09.sheep.from.goats.pd mostra la tecnica (imperfetta) di separare i segnali con tono da quelli rumorosi, canale per canale, basata sulla coerenza di fase che ci si aspetta da una sinusoide su finestra di Hann. Se tre canali adiacenti sono circa π radianti fuori fase, vengono giudicati come appartenere ad un picco sinusoidale. I canali appartenenti a picchi sinusoidali vengono sostituiti con zero per estrarre la porzione rumorosa del segnale o tutti gli altri sono sostituiti con zero per dare la porzione sinusoidale. L’esempio I10.phase.bash.pd torna al campionatore di looping wavetable della Figura 2.7 e mostra come allineare le fasi del sample in modo che tutte le componenti del segnale abbiano una fase a zero nei punti 0, N, 2N e cos`ı via. In questo modo, due copie di un campionatore a loop, posizionate con una se` possibile parazione di N campioni, possono essere coerentemente incrociate. E realizzare una versione sintetica in tono del file sonoro originale utilizzando una dissolvenza a catena circolare.

Esercizi 1. Un segnale x[n] `e 1 per n = 0 e 0 altrimenti (un impulso). Qual `e la sua trasformata di Fourier (a N −punti) in funzione di k? 2. Supponendo inoltre che N sia un numero pari, qual `e la trasformata di Fourier se x[n] `e 1 a n = N/2 invece che a n = 0? 3. Per quali valori interi di k la trasformata di Fourier della funzione finestra di Hann N −punti `e diversa da zero? 4. Per analizzare con Fourier un tono periodico di 100 Hz (ad una frequenza di campionamento di 44100 Hertz), utilizzando una finestra di Hann, quale valore di N sarebbe necessario per risolvere completamente tutte le parziali del tono (nel senso di avere picchi non sovrapposti nello spettro)? 5. Supponiamo che una trasformata di Fourier a N −punti sia fatta su una sinusoide complessa di frequenza 2.5ω dove ω = 2π/N `e la frequenza fondamentale. Quale percentuale dell’energia di segnale si trova nel lobo principale e nei canali k = 2 e k = 3? Se il segnale viene ristretto a una finestra di Hann, quale percentuale dell’energia `e ora nel lobo principale (che sono adesso i canali da 1 a 4)?


Capitolo 10

Forme d’onda classiche Fino ad ora abbiamo praticato tre approcci per sintetizzare forme d’onda ripetitive: sintesi additiva (Capitolo 1), sintesi wavetable (Capitolo 2) e waveshaping (Capitoli 5 e 6). Questo capitolo introduce un quarto approccio, in cui le forme d’onda vengono costruite esplicitamente da segmenti di retta con estremi controllabili. Questo approccio `e, storicamente, tanto importante quanto gli altri, ed era dominante durante il periodo di sintesi analogica, nel periodo 19651985 circa. Per mancanza di un nome migliore, usiamo il termine forme d’onda classiche per indicare le forme d’onda composte da segmenti di retta. Queste includono, tra molte altre possibilit`a, le onde a dente di sega, triangolare e rettangolare rappresentate in Figura 10.1. Le caratteristiche salienti delle forme d’onda classiche sono sia i salti discontinui (variazioni di valore) sia gli angoli (variazioni di pendenza). Nella figura, le onde a dente di sega e rettangolare hanno salti (una volta per ciclo per la dente di sega e due volte per la rettangolare) e pendenza costante altrove (negativo per l’onda a dente di sega, zero per l’onda rettangolare). L’onda triangolare non presenta salti discontinui, ma la pendenza cambia in modo discontinuo due volte per ciclo. Per utilizzare efficacemente le forme d’onda classiche, `e utile capire come la forma dell’onda si rifletta nella sua serie di Fourier (per calcolarla, abbiamo bisogno del background dal Capitolo 9, ecco perch´e questo capitolo appare qui e non prima). Saranno necessarie anche strategie per sintetizzare digitalmente le forme d’onda classiche. Queste forme d’onda risultano molto pi` u suscettibili ai problemi di foldover rispetto a quelle che abbiamo trattato prima, per cui dovremo prestare particolare attenzione al suo controllo. In generale, la nostra strategia per la previsione e il controllo del foldover sar` a quella di prendere in considerazione innanzitutto quelle forme d’onda campionate il cui periodo `e un intero N . Poi, se vogliamo ottenere una forma d’onda di un periodo non integrale (chiamiamolo τ , per esempio), approssimiamo τ come un quoziente N/R di due interi. Almeno concettualmente, possiamo allora sintetizzare la forma d’onda desiderata con il periodo N e quindi prendere solo uno ogni R campione dell’output. Quest’ultima fase di sotto-campionamento `e quella in cui viene prodotto il foldover ed una sua attenta gestione ci aiuter`a a controllarlo. 277


278

Capitolo 10. Forme d’onda classiche

(a)

(b)

(c)

Figura10.1: 10.1:Classical Forme waveforms: d’onda classiche: dente (b) di sega, (b) triangolare Figure (a) the (a) sawtooth, the triangle, and (c) e (c) rettangolare, mostrate come funzione di una variabile continua (non the rectangle wave, shown as functions of a continuous variable (not sampled). campionata).

10.1

Simmetrie e serie di Fourier

Prima di effettuare un’analisi quantitativa della serie di Fourier delle forme d’onda classiche, ci soffermiamo a fare due osservazioni utili sulle simmetrie delle forme d’onda e sulle corrispondenti simmetrie nella serie di Fourier. In primo luogo, una serie di Fourier potrebbe consistere solo di armonici pari o dispari; ci`o si riflette in simmetrie che confrontano una forma d’onda con il suo spostamento di mezzo ciclo. In secondo luogo, la serie di Fourier pu`o contenere solo coefficienti a valori reali o puramente immaginari (corrispondenti alle funzioni coseno o seno). Ci` o si riflette nelle simmetrie confrontando la forma d’onda con la sua inversione nel tempo. In questa sezione assumiamo che la nostra forma d’onda abbia un periodo intero N e, inoltre, per semplicit` a, che N sia pari (se non lo `e, possiamo sopracampionare per un fattore di due). Sappiamo dal Capitolo 9 che qualsiasi forma d’onda (reale o complessa) X[n] pu` o essere scritta come una serie di Fourier (i cui coefficienti saranno indicati con A[k]): X[n] = A[0] + A[1]U n + · · · + A[N − 1]U (N −1)n o equivalentemente X[n] = A[0] + A[1](cos(ωn) + i sin(ωn)) + · · · +A[N − 1](cos(ω(N − 1)n) + i sin(ω(N − 1)n))


10.1. Simmetrie e serie di Fourier

279

dove ω = 2π/N `e la frequenza fondamentale della forma d’onda, e U = cos(ω) + i sin(ω) `e il numero complesso di modulo unitario il cui argomento `e ω. Per analizzare la prima simmetria ritardiamo il segnale X[n] di mezzo ciclo. Poich´e U N/2 = −1 otteniamo X[n + N/2] = A[0] − A[1]U n + A[2]U 2n ± · · · +A[N − 2]U (N −2)n − A[N − 1]U (N −1)n . In effetti, un ritardo di met`a ciclo cambia il segno di ogni altro termine della serie di Fourier. Combiniamo questa con la serie originale in due modi diversi. Sia X 0 met` a della somma delle due: X[n] + X[n + N/2] = A[0] + A[2]U 2n + · · · + A[N − 2]U (N −2)n X 0 [n] = 2 e X 00 met` a della differenza: X[n] − X[n + N/2] X 00 [n] = = A[1]U n + A[3]U 3n + · · · + A[N − 1]U (N −1)n . 2 Vediamo che X 0 consiste solo di armonici pari (DC compreso) e X 00 solo di quelli dispari. Inoltre, se X `e uguale a se stesso spostato di mezzo ciclo, cio`e se X[n] = X[n + N/2], allora (osservando le definizioni di X 0 e X 00 ) si ha X 0 [n] = X[n] e X 00 [n] = 0. Ci` o implica che, in questo caso, X[n] possiede solo armonici pari. Infatti, questo non dovrebbe sorprendere perch´e in questo caso X[n] dovr`a ripetersi ogni N/2 campioni, quindi la sua frequenza fondamentale `e doppia rispetto alla normale al periodo N . Allo stesso modo, se X[n] = −X[n + N/2], allora X pu`o avere solo armonici dispari. Questo ci permette di dividere facilmente qualsiasi forma d’onda desiderata nei suoi armonici pari e dispari (questo equivale all’utilizzo di un filtro a pettine per estrarre armonici pari o dispari; si veda il Capitolo 7). Per ottenere la seconda relazione di simmetria, confrontiamo X[n] con il suo inverso temporale, X[−n] (o, equivalentemente, poich´e X si ripete ogni N campioni, con X[N − n]). La serie di Fourier diventa X[−n] = A[0] + A[1](cos(ωn) − i sin(ωn)) + · · · +A[N − 1](cos(ω(N − 1)n) − i sin(ω(N − 1)n)) (poich´e la funzione coseno `e pari e la funzione seno `e dispari). Allo stesso modo di prima possiamo estrarre i coseni formando X 0 [n] come met`a della somma: X[n] + X[−n] = A[0] + A[1] cos(ωn) + · · · + A[N − 1] cos(ω(N − 1)n) 2 e X 00 [n] come met` a della differenza divisa per i: X 0 [n] =

X[n] − X[−n] = A[1] sin(ωn) + · · · + A[N − 1] sin(ω(N − 1)n). 2i Quindi, se X[n] soddisfa X[−n] = X[n] la serie di Fourier consiste solo di termini di coseno; se X[−n] = −X[n] allora `e costituita solo da termini di seno; e come prima possiamo decomporre qualsiasi X[n] (che si ripete ogni N campioni) come una somma delle due. X 0 [n] =


10.1. SYMMETRIES AND FOURIER SERIES

280

299

Capitolo 10. Forme d’onda classiche

(a)

(b)

(c)

(d)

Figura10.2: 10.2:Using Utilizzo di una relazione perand estrarre armonici pari Figure a symmetry relationdi tosimmetria extract even odd harmonics from dispari dawave: un’onda dente di sega: (a) l’onda dente di sega ae sawtooth (a) athe original sawtooth wave;a (b) shifted by originale; 1/2 cycle;(b) (c) spostata di mezzo ciclo; (c) la loro somma (un’altra onda a dente di sega al their sum (another sawtooth wave at twice the frequency); (d) their difference frequenza); (d) la loro differenza (un’onda quadra). (adoppio squaredella wave).

10.1.1

Onde a dente di sega e simmetria

Come esempio, applichiamo la simmetria di spostamento (armonici pari e dispari) ad un’onda a dente di sega. La Figura 10.2 (parte a) mostra l’onda a dente di sega originale e la parte (b) mostra il risultato dello spostamento di un mezzo ciclo. La somma delle due (parte c) scende in modo discontinuo ogni volta che una delle due copie lo fa e traccia un segmento di retta ogni volta che entrambe le componenti dell’onda a dente di sega lo fanno; quindi diventa a sua volta un’onda a dente di sega, di met`a del periodo originale (due volte la frequenza fondamentale). Sottrarre le due onde a dente di sega (parte d) d`a una forma d’onda con pendenza zero ad eccezione che nelle discontinuit`a. Le discontinuit` a provenienti dall’onda originale saltano nella stessa direzione (da negativa a positiva), ma quelle provenienti da quella spostata vengono invertite e saltano da positivo a negativo. Il risultato `e un’onda quadra, una particolare onda rettangolare in cui i due segmenti componenti hanno la stessa durata. Questa simmetria `e stata usata per ottenere un importante effetto nella


300 CHAPTER 10. CLASSICAL WAVEFORMS 10.2. Dissezione di forme d’onda classiche 281

(a) L

1

L

2

N

(b)

(c)

Figura 10.3: Dissezione di una forma d’onda: (a) forma d’onda originale con Figure 10.3: Dissecting a waveform: (a) the original waveform with two discondue discontinuit` a; (b e c) le due componenti a dente di sega. tinuities; (b and c) the two component sawtooth waves. progettazione di sintetizzatori analogici Buchla; invece di offrire un singolo generatore Dissecting a dente di sega, Buchla ha progettato un oscillatore che emette separa10.2 classical waveforms tamente le parti armoniche pari e dispari, in modo che il cross-fading tra le due permetta un controllo continuo sulle relative forze degli armonici pari e dispari Among the several nella forma d’ondaconclusions analogica. we can draw from the even/odd harmonic decomposition of the sawtooth wave (Figure 10.2), one is that a square wave can be decomposed into a linear combination of two sawtooth waves. We can carry this idea further, and show how composed’onda any classical waveform having only 10.2 Dissezione ditoforme classiche jumps (discontinuities in value) but no corners (discontinuities in slope) as a Traoflesawtooth diverse conclusioni che possiamo dalla decomposizione armonici sum waves of various phasestrarre and amplitudes. We then in develop the pari/dispari dell’ondahow a dente di sega (Figura 10.2), unacorners `e che un’onda idea further, showing to generate waveforms with (either quadra in addipu` oto,essere scomposta in una using combinazione di duewaveform onde a dente sega. tion or instead of, jumps) another lineare elementary we’lldicall the Possiamo portare ulteriormente avanti questa idea e mostrare come comporre parabolic wave. qualsiasi forma d’onda classica che abbia solo salti (discontinuit`a in valore), ma Suppose that a waveform of period has discontinuities different non angoli first (discontinuit` a in pendenza) comeNsomma di onde a denteatdijsega con points, L1fasi , . . . e, Lampiezze. on the cycle betweenulteriormente 0 and N , at which waveform j , all lying Quindi diverse sviluppiamo l’idea,the mostrando jumps values forme d1 , . . .d’onda , dj . Acon negative value d1 , for ainstance, mean comeby generare angoli (sia in of aggiunta salti o al would loro posto) that the waveform jumps from a higher to a lower value at the point L , and a 1 usando un’altra forma d’onda elementare che chiameremo onda parabolica. positive value of d would mean a jump from a lower to a higher value. 1 Supponiamo innanzitutto che una forma d’onda di periodo N abbia discontinuit` a in j punti diversi, , Lshows contenutiwaveform nel ciclo with tra 0two e Njumps: , nei 1 , . . .a) j , tutti For instance, Figure 10.3 L (part a classical la forma d’onda fa salti con valori d , . . . , d . Un valore negativo di d , show per 1 j 1 (Lquali , d ) = (0.3N, −0.3) and (L , d ) = (0.6N, 1.3). Parts (b) and (c) 1 1 2 2 esempio,waves, significa chewith la forma salta da unThe valore u alto ad un valore sawtooth each one ofd’onda the two jumps. sumpi` of the two sawtooth inferiore nel puntothe L1waveform e un valore d1 significa un saltoconstant da un valore waves reconstructs of positivo part (a),diexcept for a possible (DC) inferiore ad un valore superiore. offset. Per esempio, la Figura 10.3 (parte a) mostra una forma d’onda classica con due salti: (L1 , d1 ) = (0.3N, −0.3) e (L2 , d2 ) = (0.6N, 1.3). Le parti (b) e (c) mostrano onde a dente di sega, ognuna con uno dei due salti. La somma delle


282 Capitolo 10. Forme d’onda classiche 10.2. DISSECTING CLASSICAL WAVEFORMS 301

1/12 N (N/2, -1/24)

Figura 10.4: L’onda parabolica. Figure 10.4: The parabolic wave. due onde a dente di sega ricostruisce la forma d’onda della parte (a), ad eccezione The sawtooth wave with a jump of one unit at the point zero is given by di un possibile offset costante (DC). L’onda a dente di sega con s[n] un salto di − un’unit` = n/N 1/2 a nel punto zero `e data da

over the period 0 ≤ n ≤ N − 1,s[n] and=repeats for other values of n. A sawtooth n/N − 1/2 wave with a jump (L, d) is given by s′ [n] = ds[n − L]. The sum of all the nel periodo 0 ≤ n ≤ N − 1, e si ripete per gli altri valori di n. Un’onda a dente component sawtooth waves is: di sega con un salto (L, d) `e data da s0 [n] = ds[n − L]. La somma di tutte le = d`e1 s[n − L1 ] + · · · + dj s[n − Lj ] componenti a dente x[n] di sega The slopes of thex[n] segments of − the part = d1 s[n L1waveform ] + · · · + djofs[n − L(a) j ]. of the figure are all the same, equal to the sum of the slopes of the component sawtooth waves: Le pendenze dei segmenti della forma d’onda della parte (a) della figura sono d1 + · · · + d j tutte la stessa, uguale alla somma − delle pendenze delle componenti a dente di N sega: d + · ·· + d 1 j Square and rectangle waves have−horizontal line . segments (slope zero); for this N to happen in general the jumps must add to zero: d1 + · · · + dj = 0. Onde e rettangolari hanno segmenti orizzontali zero); per To quadrate decompose classical waveforms with corners we use(pendenza the parabolic wave, fare ci` o in genere i salti devono avere somma zero: d + · · · + d = 0. j which, over a single period from 0 to N , is equal to 1 Per decomporre le forme d’onda classiche 2con gli angoli usiamo l’onda para1 n 1 1 bolica che, in un solo periodo p[n]da=0 a( N ,−`e uguale ) − a 2 N 2 24 2 n 1 1 as shown in Figure 10.4. It is =a 1second-degree p[n] − −(quadratic) polynomial in the 2 N 2 24 variable n, arranged so that it reaches a maximum halfway through the cycle at ncome = N/2, the DC component (oruninpolinomio other words, the average value over mostrato in Figura 10.4. isSizero tratta quadratico (cio`e di secondo one cycle of the waveform is zero), and so that the slope changes discontinuously grado) nella variabile n, disposto in modo che raggiunga un massimo a met`a by −1/N del at the beginning of thelacycle. percorso ciclo a n = N/2, componente DC `e zero (in altri termini, il To construct a waveform any desired number corners they valore medio dell’onda su unwith ciclo `e pari a zero) e inofmodo che(suppose la pendenza are at the points M , . . . , M , with slope changes equal to c , . . . , c ), we sum up i l 1 l cambi discontinuamente di −1/N all’inizio del ciclo. the necessary parabolic waves: Per costruire una forma d’onda con un qualsiasi numero desiderato di angoli (supponiamo chex[n] siano MM ,M di pendenza uguali a 1 , . .] .− = nei −N punti c1 p[n − · · l·, −con N ccambi 1 l p[n − Ml ] c1 , . . . , cl ), sommiamo le necessarie onde paraboliche: An example is shown graphically in Figure 10.5. = −N c1 p[nline −M N clsegments p[n − Ml ].of curves), the n 2 1] − · · · − If the sum x[n]x[n] is to contain segments (not terms in the `esum must graficamente sum to zero. inFrom the10.5. expansion of x[n] above, this Un esempio mostrato Figura implies that c + · · · + c = 0. Sums obtained from existing 1 l Se la somma x[n] deve contenere segmenti di retta (non classical segmentiwaveforms di curve), 2 (as in the figure) will always satisfy this condition because the changes in sopra, slope, la somma degli n termini deve essere pari a zero. Dall’espansione di x[n] over a cycle, must all add to zero for the waveform to connect with itself. ci` o implica che c1 + · · · + cl = 0. Le somme ottenute dalle forme d’onda classiche esistenti (come nella figura) soddisfano sempre questa condizione perch´e le variazioni della pendenza, lungo un ciclo, devono avere tutte somma zero affinch´e la forma d’onda si riconnetta con se stessa.


10.3. d’onda elementari 283 302 Serie di Fourier delle forme CHAPTER 10. CLASSICAL WAVEFORMS

(a)

(b)

(c)

Figura 10.5: Decomposing Decomposizione di un’onda triangolare a) in due onde Figure 10.5: a triangle wave (part a) into (parte two parabolic waves (b paraboliche (b e c). and c).

10.3

Serie di series Fourier forme d’onda elemenFourier ofdelle the elementary waveforms tari In general, given a repeating waveform X[n], we can evaluate its Fourier series

coefficients directly the Fourier In generale,A[k] databyuna formaevaluating d’onda X[n] che si transform: ripete, possiamo valutare i coefficienti A[k] della sua serie di Fourier valutando direttamente la trasformata 1 A[k] = FT {X[n]}(k) di Fourier: N " 1 A[k] = 1 ! N FT {X[n]}(k) = X[0] + U −k X[1] + · · · + U −(N −1)k X[N − 1] N 1 −k +U X[1] + · · · parabolic + U −(N −1)k X[Nwill − 1]require pages of but doing this=directly sawtooth and waves N X[0]for algebra (somewhat less if we were willing resort to differential calculus). Instead, ma farlo direttamente per le onde paraboliche e le onde a dente di sega richiewe rely on properties of the Fourier transform to relate the transform of a signal derebbe pagine e pagine di algebra (un po’ meno se siamo disposti a ricorrere x[n] with its first difference, defined as x[n] − x[n − 1]. The first difference of the al calcolo differenziale). Invece, ci basiamo sulle propriet`a della trasformata di parabolic wave will turn out to be a sawtooth, and that of a sawtooth will be Fourier per correlare la trasformata di un segnale x[n] con la sua prima diffesimple enough to evaluate directly, and thus we’ll get the desired Fourier series. renza, definita come x[n] − x[n − 1]. La prima differenza dell’onda parabolica In general, to evaluate the strength of the kth harmonic, we’ll make the risulter` a essere un’onda a dente di sega, e quella di un’onda a dente di sega assumption that N is much larger than k, or equivalently, that k/N is negligible. sar` a abbastanza semplice da valutare direttamente e quindi otterremo la serie We start from the Time Shift Formula for Fourier Transforms (Page 267) di Fourier desiderata. setting the time shift to one sample: In generale, per valutare la forza del k−esimo armonico, faremo l’ipotesi che N sia molto pi` uFT grande k/N sia {x[n di − k, 1]}o=equivalente, [cos(kω) − iche sin(kω)] FTtrascurabile. {x[n]} Cominciamo dalla formula di spostamento temporale per le trasformate di ≈ (1 lo − iωk)FT {x[n]}temporale ad un campione: Fourier (pagina 252) impostando spostamento Here we’re using the assumption that, because N is much larger than k, kω = {x[n than − 1]}unity = [cos(kω) i sin(kω)]FT {x[n]} 2πk/N is much FT smaller and we−can make approximations: cos(kω) 1 , sin(kω) ≈ kω ≈ (1 −≈iωk)FT {x[n]}. Qui usiamo l’ipotesi che, poich´e N `e molto pi` u grande di k, kω = 2πk/N `e molto pi` u piccolo dell’unit`a e possiamo fare le approssimazioni cos(kω) ≈ 1, sin(kω) ≈ kω


284

Capitolo 10. Forme d’onda classiche

che sono buone a meno di un piccolo errore, nell’ordine di (k/N )2 . Ora usiamo questo risultato per valutare: FT {x[n] − x[n − 1]} ≈ iωkFT {x[n]}.

10.3.1

Onda a dente di sega

Innanzitutto applichiamo quanto detto all’onda a dente di sega s[n]. Per 0 ≤ n < N abbiamo: ( 1 n=0 1 . s[n] − s[n − 1] = − + N 0 altrimenti Ignorando l’offset costante di − N1 , questo d`a un impulso, zero ovunque tranne in un campione per ciclo. La somma nella trasformata di Fourier ha solo un termine e otteniamo: FT {s[n] − s[n − 1]}(k) = 1, k 6= 0, −N < k < N. Quindi applichiamo la formula della differenza all’indietro per ottenere: FT {s[n]}(k) ≈

1 −iN = iωk 2πk

valida per i valori interi di k, piccoli rispetto a N , ma con k 6= 0 (per ottenere la seconda forma dell’espressione abbiamo usato ω = 2π/N e 1/i = −i). Questa analisi non ci d` a la componente DC, FT {s[n]}(0), perch´e avremmo dovuto dividere per k = 0. Invece, possiamo valutare il termine DC direttamente come somma di tutti i punti della forma d’onda: `e circa zero per simmetria. Per ottenere una serie di Fourier in termini delle familiari funzioni di seno e coseno, a valori reali, combiniamo i termini corrispondenti per i valori negativi e positivi di k. Il primo armonico (k = ±1) `e: 1 N [FT

{s[n]}(1) · U n + FT {s[n]}(−1) · U −n ] ≈

−i 2π

[U n − U −n ]

=

sin(ωn) π

e, in maniera simile, il k−esimo armonico `e sin(kωn) kπ quindi l’intera serie di Fourier `e: s[n] ≈

1 sin(2ωn) sin(3ωn) sin(ωn) + + + ··· . π 2 3


10.3. Serie di Fourier delle forme d’onda elementari

10.3.2

285

Onda parabolica

La stessa analisi, con alcune differenze nel segno e nella normalizzazione, funziona per le onde paraboliche. Innanzitutto calcoliamo la differenza: ( Nn − 12 )

p[n] − p[n − 1] = =

N ) ( Nn − 2N

2n N2

2

2

2

1 −( n−1 N −2) 2

−2 n −( N − N2N ) 2

2

1 −N − N12 2

≈ −s[n]/N. Quindi (ancora per k 6= 0, piccolo rispetto a N ) otteniamo: −1 N

FT {p[n]}[k] ≈ ≈

−1 N

·

=

·

−iN 2πk

−iN 2πk

·

· F T {s[n]}[k]

−iN 2πk

N 4π 2 k2

e come prima abbiamo la serie di Fourier: 1 cos(2ωn) cos(3ωn) p[m] ≈ cos(ωn) + + + · · · . 2π 2 4 9

10.3.3

Onde triangolari e quadre simmetriche

Per vedere come ottenere la serie di Fourier per le forme d’onda classiche in generale, consideriamo prima l’onda quadra, x[n] = s[n] − s[n −

N ] 2

uguale a 1/2 per il primo mezzo ciclo (0 ≤ n < N/2 ) e −1/2 per il resto. Otteniamo la serie di Fourier sostituendo la serie di Fourier per s[n] due volte: h x[n] ≈ π1 sin(ωn) + sin(2ωn) + sin(3ωn) + ··· 2 3 − sin(ωn) + =

2 π

h

sin(2ωn) 2

sin(ωn) +

sin(3ωn) 3

sin(3ωn) 3

+

± ···

sin(5ωn) 5

L’onda triangolare simmetrica (Figura 10.6) data da x[n] = 8p[n] − 8p[n −

i

i + ··· .

N ] 2

fornisce, allo stesso modo, 8 cos(3ωn) cos(5ωn) x[n] ≈ 2 cos(ωn) + + + ··· . π 9 25


304 286

CHAPTER 10. CLASSICAL WAVEFORMS Capitolo 10. Forme d’onda classiche

(0,1)

N (N/2, -1)

Figura 10.6: Onda triangolare simmetrica, ottenuta sovrapponendo onde Figure 10.6: Symmetric triangle wave, obtained by superposing parabolic waves paraboliche con coppie (M, c) uguali a (0, 8) e (N/2, −8). with (M, c) pairs equal to (0, 8) and (N/2, −8).

10.3.4 10.3.2

Onda triangolare Parabolic wave generale (non-simmetrica)

Nella Figura 10.7 viene un’onda triangolare generale, non simmeThe same analysis, with visualizzata some differences in sign and normalization, works for trica. Qui abbiamo disposto il ciclo in modo che, in primo luogo, la componente parabolic waves. First we compute the difference: DC sia zero (in modo che i due angoli abbiano altezze uguali e opposte) e in se2 2 n del condo luogo, in modo che il punto medio pi` u1 corto passi attraverso (N − 12 )segmento − ( n−1 N − 2) p[n] − p[n − 1] = il punto (0, 0). 2 I due segmenti hanno pendenze pari a 1/M e −2/(N − 2M ), quindi la 2 n n N −2 2 ` decomposizione nelle componenti aN onde e data da: (N − 2N ) − (paraboliche N − 2N ) = 2 N2 2n (p[n 1 −M 1 ] − p[n + M ]) x[n] = MN − N 2 2− N + N 2 = 2M 2 (qui usiamo la periodicit` a di p[n] per sostituire p[n − (N − M )] con p[n + M ]). ≈ −s[n]/N. Il modo pi` u generale di trattare le combinazioni lineari di onde elementari So (again for e/o k ̸=dente 0, small compared to N )alla we serie get: di Fourier complessa, come (paraboliche di sega) `e tornare abbiamo fatto per trovare la serie per le onde elementari stesse. Ma in questo −1 −iN caso particolare possiamo usare ≈ un’identit` FT {p[n]}(k) · a trigonometrica · FT {s[n]}(k) per evitare il lavoN 2πk ro extra di conversione avanti e indietro. Innanzitutto sostituiamo la serie di Fourier a valori reali: −1 −iN −iN ≈ h · · N 2πk 2πk 2 N x(n) = 2π2 (M N −2M 2 ) cos(ω(n − M )) − cos(ω(n + M )) N = i 4π 2 k 2 cos(2ω(n−M ))−cos(2ω(n+M )) + + · · · . 4 and as before we get the Fourier series: ! " cos(2ωn) cos(3ωn) Ora usiamo l’identit` a, 1 p[n] ≈ cos(ωn) + + + · · · 2π 2 9 4 b−a a+b sin cos(a) − cos(b) = 2 sin 2 2 10.3.3 Square and symmetric triangle waves in che,toad esempio, Tomodo see how obtain Fourier series for classical waveforms in general, consider first the square wave, cos(ω(n − M )) − cos(ω(n + M )) = 2 N sin(2πM/N ) sin(ωn) x[n] = s[n] − s[n − ] 2 (anche qui abbiamo usato la definizione di ω = 2π/N ). Questa `e una semplificazione poich´e il primo termine seno non dipende da n; `e solo un termine di ampiezza. Applicare l’identit` a a tutti i termini dell’espansione per x[n] d`a: x[n] = a[1] sin(ωn) + a[2] sin(2ωn) + · · ·


10.3. FOURIER SERIES OF THE ELEMENTARY WAVEFORMS 10.4. Prevedere e controllare il foldover

305 287

(M, 1)

(N-M, -1)

Figura 10.7: Onda triangolare non-simmetrica, con vertici in (M, 1) e (N − M, −1). Figure 10.7: Non-symmetric triangle wave, with vertices at (M, 1) and (N − M, −1). dove le ampiezze delle componenti sono date da equal to 1/2 for the first half cycle (0 <= n < N/2) and −1/2 for the rest. We sin(2πkM/N ) 1 get the Fourier series by plugging in the Fourier · series 2for s[n]. twice: a[k] = 2 2 π (M/N − 2(M/N ) ) k ! 1 sin(2ωn) sin(3ωn) x[n] ≈ nonsin(ωn) + dai valori + di · · ·M e N , ma solo Si noti che il risultato dipende+separatamente π 2 3 dal loro rapporto, M/N (non sorprende perch´e la forma dell’onda dipende da " questo rapporto). Se guardiamosin(2ωn) ai piccoli valori di k: sin(3ωn) −sin(ωn) + − ± ··· 2 3 1 k< ! " 4M/N sin(5ωn) 2 sin(3ωn) = sin(ωn) + + + ··· π 3 l’argomento della funzione seno `e inferiore a π/25 e usando l’approssimazione sin(θ) θ troviamotriangle che a[k]wave scende come 1/k, come le parziali di un’onThe≈symmetric (Figure 10.6)proprio given by da a dente di sega. Ma per valori pi` u grandi di k il termine seno oscilla tra 1 e 2 N −1, in modo che le ampiezze irregolarmente x[n]scendano = 8p[n] − 8p[n − ] come 1/k . La Figura 10.8 mostra le forze delle parziali 2con M/N impostato a 0.03; qui, la nostra previsione `e che la dipendenza da 1/k dovrebbe estendersi a k ≈ similarly comes to 1/(4 · 0.03) ≈ 8.5, in accordo con la figura. ! " Un altro modo per8 capire perch´e cos(3ωn) le parziali debbano comportarsi come 1/k cos(5ωn) 2 x[n]di ≈ k e2 come cos(ωn) + + · · · il periodo di per i valori bassi 1/k +successivamente, `e confrontare π 9 25 una determinata parziale con la lunghezza del segmento corto, 2M . Per le parziali con numero inferiore a N/4M , il periodo `e almeno il doppio della lunghezza 10.3.4 General wave del segmento corto, e, (non-symmetric) a quella scala, la forma triangle d’onda `e quasi indistinguibile da un’onda a dente di sega. Per le parziali con numerazione superiore a N/2M ,i A general, non-symmetric triangle wave appears in Figure 10.7. Here we have due angoli dell’onda triangolare sono separati da almeno un periodo e a queste arranged the cycle so that, first, the DC component is zero (so that the two frequenze superiori i dueopposite angoli (ognuno conand dipendenza in frequenza 1/k 2 ) ven-of corners have equal and heights), second, so that the midpoint gono risoltisegment l’uno dall’altro. Nella the figura, l’accumulo the shorter goes through point (0, 0). alla parziale 17 si verifica alla lunghezza d’onda N/2M ≈ 1/17, alla quale i due angoli sono separati The two line segments have slopes equal to 1/M and −2/(N − 2M ), so da the un ciclo; poich´ e gli angoli sono opposti in segno, si annullano l’uno con l’altro. decomposition into component parabolic waves is given by:

10.4

2

Prevedere e Ncontrollare foldover x[n] = (p[n − M ] −ilp[n + M ]) 2

M N − 2M Ora passiamo alla situazione reale, in cui il periodo della forma d’onda non pu`o (here we’re using the periodicity of p[n] to replace p[n − (N − M )] by p[n + M ]).) essere considerato arbitrariamente lungo e con valore intero. Supponiamo (per avere qualcosa di definito) che vogliamo sintetizzare toni a 440 Hertz (La sopra il Do centrale) e che stiamo usando una frequenza di campionamento di 44100 Hertz, in modo che il periodo sia di circa 100.25 campioni. Teoricamente, data


288

Capitolo 10. Forme d’onda classiche

magnitude (dB) 0 -10 a/k

-20 -30

b/k 2

-40 -50

1

2

16 4 8 partial number (k)

32

Figura 10.8: Spettro di magnitudine di un’onda triangolare con M/N = 0.03. I 2 due di retta mostrano 1/k with e 1/kM/N a frequenze Figuresegmenti 10.8: Magnitude spectrumi comportamenti of a triangle wave = 0.03. basse The 2 e alte. two line segments show 1/k and 1/k behavior at low and high frequencies. una frequenza di campionamento molto elevata, ci aspetteremmo che la cinquantesima parziale abbia magnitudine 1/50 rispetto alla fondamentale e una frequenza di circa 20 kHz. Se campioniamo questa forma d’onda alla frequenza di campionamento di 44100, le parziali superiori a tale frequenza subiscono il foldover, come descritto nel paragrafo 3.1. La forza relativa delle parziali che hanno subito il foldover sar` a dell’ordine di −32 decibel – abbastanza udibile. Se la frequenza fondamentale viene aumentata ulteriormente, pi` u parziali, ancora pi` u forti, raggiungono la frequenza di Nyquist (met`a della frequenza di campionamento) e cominciano a subire il foldover. I problemi di foldover sono molto meno pronunciati per le forme d’onda con solo angoli (invece di salti) a causa del rapido calo (dropoff) delle parziali con frequenze pi` u elevate; per esempio, un’onda triangolare simmetrica a 440 Hertz avrebbe un dropoff doppio, o −64 decibel. In generale, tuttavia, le forme d’onda con discontinuit` a sono un punto di partenza migliore per la sintesi sottrattiva (la tecnica classica pi` u popolare). Nel caso si sperasse, `e bene sapere che il filtraggio sottrattivo non pu` o rimuovere lil foldover una volta che `e presente in un segnale audio.

10.4.1

Sovra-campionamento (Over-sampling)

Come prima linea di difesa contro il foldover, possiamo sintetizzare la forma d’onda ad una frequenza di campionamento molto maggiore, applicare poi un filtro passa-basso, la cui frequenza di taglio `e impostata sulla frequenza di Nyquist (per la frequenza di campionamento originale), quindi sotto-campionare. Ad esempio, nello scenario di cui sopra (frequenza di campionamento 44100,


10.4. Prevedere e controllare il foldover

289

tono di 440 Hz) potremmo generare l’onda a dente di sega ad una frequenza di campionamento di 16 · 44100 = 705600 Hertz. Dobbiamo solo preoccuparci di frequenze superiori a 705600 − 20000 = 685600 Hertz (che si ripiegano in frequenze sonore; il foldover a frequenze ultrasoniche normalmente non ci preoccupa), quindi la prima parziale problematica `e 685600/440 = 1558, la cui ampiezza `e −64dB rispetto a quella della fondamentale. Questa attenuazione si degrada di 6 dB per ogni ottava superiore rispetto alla fondamentale, in modo che a 10 kHz l’onda a dente di sega subisce solo una caduta 37 dB dalla fondamentale alla parziale pi` u alta che subisce il foldover. D’altra parte, aumentando la frequenza di campionamento per un ulteriore fattore di due riduce il foldover per la stessa quantit`a. Se noi vogliono realmente ottenere 60 decibel di rifiuto del foldover – fino a 10 kHz dalla fondamentale –dovremo sovra-campionare di un fattore di 256, ad una frequenza di campionamento di circa 11 milioni di Hertz.

10.4.2

Onde triangolari subdole

Per le frequenze fondamentali basse, il sovra-campionamento `e un modo semplice per ottenere una protezione adeguata dal foldover. Se vogliamo permettere frequenze pi` u alte, avremo bisogno di un approccio pi` u sofisticato. Una possibilit`a `e di sostituire le discontinuit`a con delle rampe, ovvero sostituire le componenti a dente di sega con onde triangolari, come trattato nel paragrafo 10.3.4, con valori di M/N abbastanza piccoli affinch´e il risultato suoni come un’onda a dente di sega, ma grandi abbastanza per controllare il foldover. Tornando alla Figura 10.8, supponiamo per esempio di imitare un’onda a dente di sega con un’onda triangolare con M uguale a due campioni, in modo che il primo accumulo cada sulla frequenza di Nyquist. Le parziali sopra il primo accumulo (la 17−esima parziale nella figura) subiranno il foldover; la peggiore di loro `e di circa 40 dB sotto la fondamentale. D’altra parte, le forze delle parziali cominciano a cadere pi` u velocemente di quelle di una vera onda a dente di sega a circa la met` a della frequenza di Nyquist. Questo `e accettabile in alcune situazioni, ma non in tutte. La strategia di utilizzare le onde triangolari pu`o essere combinata con il sovra-campionamento per migliorare ulteriormente la situazione. Ancora nel contesto della Figura 10.8, supponiamo di sovra-campionare di un fattore di 4 e impostare il primo accumulo alla frequenza di campionamento originale. Le parziali fino alla frequenza di Nyquist (parziale 8, alla frequenza fondamentale mostrata in figura) seguono abbastanza bene quelle della vera onda a dente di sega. Il foldover si trova solo alla parziale numero 48 ed `e 52 dB al di sotto della fondamentale. Questo comportamento complessivo vale per ogni frequenza fondamentale fino a circa un quarto della frequenza di campionamento (dopo di che M supera N/2). Impostare la frequenza di accumulo (notch frequency) alla frequenza di campionamento originale equivale a impostare la lunghezza 2M del segmento a un campione (alla frequenza di campionamento originale).

10.4.3

Transition splicing

Dal punto di vista sviluppato in questo capitolo, l’energia delle componenti spettrali delle onde classiche pu`o essere attribuita interamente ai loro salti e angoli. Naturalmente questo `e artificioso: nella realt`a, l’energia si emana dall’intera


310 290

CHAPTER 10. CLASSICAL WAVEFORMS Capitolo 10. Forme d’onda classiche

Figura 10.9: Un’onda quadra, limitata in banda a parziali 1, 3, 5, 7, 9 e 11. Figure 10.9: A square wave, band-limited to partials 1, 3, 5, 7, 9, and 11. Questa pu` o essere considerata approssimativamente come una serie di funzioni This can limitato be regarded approximately a series of band-limited step functions a passo a banda disposte da as estremo a estremo. arranged end to end. forma d’onda. La nostra derivazione dello spettro delle forme d’onda classiche sum corresponding to a square wave, using partials 1, 3, 5, 7, 9, and 11. The usa i salti e gli angoli come un dispositivo di contabilit`a, e questo `e possibile cutoff frequency can bed’onda taken`easdeterminata 12ω (if ω isdalle the loro fundamental perch´ e l’intera forma posizioni frequency). e grandezze. If we double the period of the square wave, to arrive at the same cutoff Usando ulteriormente questo stratagemma, il problema della realizzazione frequency, we would add twice as many Fourier partials, up to number 23, for di versioni a banda limitata di forme d’onda classiche pu`o essere affrontato instance. Extending process forever, wee would eventually the sono ideal realizzando versioni a this banda limitata dei salti degli angoli. Poich´esee i salti band-limited step function, twice per (arbitrarily long) period. la pi` u grave minaccia di foldover, ci concentreremo su essi, anche se l’approccio practicefunziona we can do quite well using theangoli. first two partials (one and quiIndescritto perfettamente anche only per gli threePer times the fundamental). (partina)banda, showstutto a two-partial approxcostruire una funzioneFigure a passo10.10 limitato quello che dobimation of a square wave. The cutoff frequency is four times the fundamental; biamo fare `e aggiungere le componenti di Fourier di un’onda quadra, quante soneifvogliamo, the period of the raccogliere waveform isla eight samples, thesucutoff is at thedei Nyquist e quindi funzione a passo uno qualsiasi salti. frequency. Part (b) of the figure shows how we could use this step function La Figura 10.9 mostra la somma parziale Fourier corrispondente ad un’onda toquadra synthesize, square of twice the period. the cutoff usandoapproximately, le parziali 1, 3,a 5, 7, 9 ewave 11. La frequenza di taglioIfpu` o essere frequency is the Nyquist frequency, the period of the waveform of part (b) is 16 presa come 12ω (se ω `e la frequenza fondamentale). samples. Each transition lasts 4 samples, because the band-limited square wave Se raddoppiamo il periodo dell’onda quadra, per arrivare alla stessa frequenhas a period of eight samples. za di taglio, aggiungeremo il doppio delle parziali di Fourier, fino alla numero 23, We can make a band-limited sawtoothper wave by adding thepotremmo four-sample-long ad esempio. Estendendo questo processo sempre, alla fine vedere transition to a ramp function so that the end of the resulting function meets la funzione a passo limitato in banda ideale, due volte per (un arbitrariamente smoothly with itself end to end, as shown in part (c) of the figure. There is one lungo) periodo. transition per period, so thefare period must bebene at least four samples; highest Nella pratica possiamo abbastanza usando solo le primethe due parfundamental frequency can synthesize way10.10 is half(parte the Nyquist frequency. ziali (uno e tre volte la we fondamentale). Lathis Figura a) mostra un’apFor this or lower frequency, the foldover products all turn out to prossimazione di fundamental un’onda quadra a due parziali. La frequenza di taglio `e quattro bevolte at least 60 dB quieter thansethe fundamental. la fondamentale; quindi il periodo della forma d’onda `e di otto campio10.11 shows how to generate sawtooth with a(b) spliced transini,Figure la frequenza di taglio `e alla frequenzaa di Nyquist.wave La parte della figura tion. The twopotremmo parameters are f , the fundamental and b, the band mostra come utilizzare questa funzione afrequency, passo per sintetizzare, approssimativamente, di as duef .volte periodo. la frequenza di limit, assumed to beun’onda at leastquadra as large We ilstart with Se a digital sawtooth taglio la frequenza Nyquist, il periodo forma della parte `e wave (a `ephasor) ranging from -0.5 to 0.5 indella value. The d’onda transition will take(b) place di 16 campioni. Ogni transizione dura 4 campioni, in quanto l’onda quadra at the middle of the cycle, when the phasor crosses 0. The wavetable is traversed in banda ha of untime, periodo otto campioni. inlimitata a constant amount 1/b,diregardless of f . The table lookup is taken to be non-wraparound, soonda thatainputs outsega of range output either -0.5 or 0.5. Possiamo fare una dente di limitata in banda sommando la transizione lunga campioni a una funzione di rampajumps in modo che-0.5 l’estremo At the end quattro of the cycle the phasor discontinuously from to 0.5, della si incontri senza problemi con se stessa, estremo con but thefunzione output risultante of the transition table jumps an equal and opposite amount, come mostrato nella parte the (c) portion della figura. e una transizione soestremo, the result is continuous. During of theC’` waveform in whichper the periodo, quindi il periodo deve essere almeno di quattro campioni; la frequenza fondamentale pi` u alta che possiamo sintetizzare in questo modo `e met`a della frequenza di Nyquist. Per questa frequenza fondamentale o per quelle pi` u


10.4. Prevedere e controllare il foldover

291

10.4. PREDICTING AND CONTROLLING FOLDOVER

311

(a)

(b)

(c)

Figura 10.10: Allungamento di un’onda quadra limitata in banda: (a) forma

Figure 10.10: Stretching a band-limited square wave: (a) the original waveform; d’onda originale; (b) dopo l’aggancio in segmenti orizzontali; (c) utilizzando la (b) after splicing in horizontal segments; (c) using the same step transition for stessa transizione di passo per un’onda a dente di sega. a sawtooth wave.


292

Capitolo 10. Forme d’onda classiche f 0.5 -0.5

b/f

0.5 -0.5 -0.5

0.5

OUT

Figura Diagramma a blocchi per la realizzazione un’onda a dente di Figure 10.11: Block diagram for making a sawtooth wavediwith a spliced transisega tion. con una spliced transition. basse, i prodotti di foldover risultano essere almeno 60 dB pi` u silenziosi della fondamentale. La Figura 10.11 mostra come generare un’onda a dente di sega con una spliced transition. I due parametri sono f , la frequenza fondamentale, e b, il limite di banda, supposto essere almeno grande quanto f . Iniziamo con un’onda a dente di sega (un phasor) che va da −0.5 a 0.5 in valore. La transizione avr` a luogo alla met` a del ciclo, quando il phasor attraversa lo 0. L wavetable `e attraversata in una quantit` a costante di tempo, 1/b, indipendentemente da f . La table lookup viene considerata senza l’operazione di wrap, in modo che gli inputs al di fuori del range diano in output −0.5 o 0.5. Alla fine del ciclo il phasor salta discontinuamente da −0.5 a 0.5, ma l’output della tabella di transizione salta di una quantit`a uguale e opposta, quindi il risultato `e continuo. Durante la porzione della forma d’onda in cui la tabella di transizione viene letta in uno o nell’altro estremo, l’output descrive un segmento di linea retta.

10.5

Esempi

Combinando onde a dente di sega L’esempio J01.even.odd.pd (Figura 10.12, parte a) mostra come combinare le onde a dente di sega in coppia per estrarre gli armonici pari e dispari. Le forme d’onda risultanti sono come mostrato nella Figura 10.3. L’esempio


10.5. Esempi

293

10.5. EXAMPLES

313

-- PHASES (percent) -0 phasor~ / 100

0

0

/ 100

/ 100

phasor~ sawtooth wave

-~

-~

-~

-~ 0.5 remove DC bias

wrap~

wrap~

wrap~

-~ 0.5

-~ 0.5

-~ 0.5

wrap~ -~ 0.5 +~

-~

1/2 cycle out of phase

AMPLITUDES (percent) 0 0 0

sum and difference

/ 100 (a)

*~

/ 100 *~

/ 100 *~

+~ +~ | (OUT)

(b)

Figura 10.12: 10.12: Combining Combinando onde a waves: dente di (a)and sommare e sottrarre onde Figure sawtooth (a)sega: adding subtracting sawtooth a dente di sega 1/2 ciclo fuori fase, per estrarre armonici pari e dispari; (b) waves 1/2 cycle out of phase, to extract even and odd harmonics; (b) combining combinare tre onde a dente di sega con ampiezze e fasi arbitrarie. three sawtooth waves with arbitrary amplitudes and phases. transition table is read at one or the other end-point, the output describes a straight line segment.

10.5

Examples

Combining sawtooth waves Example J01.even.odd.pd (Figure 10.12, part a) shows how to combine sawtooth waves in pairs to extract the even and odd harmonics. The resulting waveforms are as shown in Figure 10.3. Example J02.trapezoids.pd (part b of the figure) demonstrates combining three sawtooth waves at arbitrary phases and amplitudes; the resulting classic waveform has up to three jumps and no corners. The three line segments are horizontal as long as the three jumps add to zero; otherwise the segments are sloped to make up for the the unbalanced jumps so that the result repeats from one period to the next. Example J03.pulse.width.mod.pd (not shown) combines two sawtooth waves, of opposite sign, with slightly dierent frequencies so that the relative phase


314 294

CHAPTER 10. CLASSICAL WAVEFORMS Capitolo 10. Forme d’onda classiche

frequency

-- PHASES (percent) --

0

0

0

0

phasor~

/ 100

/ 100

/ 100

-~

-~

-~

wrap~

wrap~

wrap~

-~ 0.5

-~ 0.5

-~ 0.5

*~

*~

*~

*~ 0.5

*~ 0.5

*~ 0.5

-~ 0.0833

-~ 0.0833

-~ 0.0833

AMPLITUDES (percent) 0

0

0

/ 100

/ 100

/ 100

*~

*~

*~

+~ +~ | (OUT)

Figura 10.13: 10.13: Combining Combinazione di ondewaves paraboliche creare unawith forma d’onda Figure parabolic to makeper a waveform three corcon tre angoli. ners.

changes continuously. sumfigura) is a rectangle whose width J02.trapezoids.pd (parteTheir b della mostra la wave combinazione di trevaries onde in a time. This is known as pulse width modulation (“PWM”). dente di sega con fasi e ampiezze arbitrarie; la forma d’onda classica risultante Example J04.corners.pd (Figure 10.13) shows how to add parabolicfinch´ waves ha fino a tre salti e nessun angolo. I tre segmenti di retta sono orizzontali ei to make a combined waveform with three corners. Each parabolic wave is comtre salti hanno somma zero; altrimenti i segmenti sono inclinati per compensare puted a sawtooth wave from -0.5 toda0.5) by squaring it, multii salti from sbilanciati in modo che (ranging il risultato si ripeta un periodo all’altro. plying by 0.5, and subtracting the DC component of -1/12, or -0.08333. The L’esempio J03.pulse.width.mod.pd (non mostrato) combina due onde a dente patch combines three such parabolic waves with controllable amplitudes and di sega, di segno opposto, con frequenze leggermente diverse in modo che la phases. As long as the amplitudes sum to zero, the resulting waveform consists fase relativa cambi continuamente. La loro somma `e un’onda rettangolare la of line segments, whose corners are located according to the three phases and cui larghezza varia nel tempo. Questo `e noto come pulse width modulation have slope changes according to the three amplitudes. (“PWM”). L’esempio J04.corners.pd (Figura 10.13) mostra come sommare onde paStrategies band-limiting sawtooth raboliche per for creare una forma d’onda combinata waves con tre angoli. Ogni onda parabolica `e calcolata a partire da un’onda a dente di sega (che varia da −0.5 a Example J05.triangle.pd (Figure 10.14, part poi a) shows way infine to make 0.5), elevandola al quadrato, moltiplicandola per 0.5a esimple sottraendo la acomponente triangle wave, in which only the slope of the rising and falling segment are DC pari a −1/12, o −0.08333. La patch combina tre di tali onde paraboliche con ampiezze e fasi controllabili. Finch´e la somma delle ampiezze `e pari a zero, la forma d’onda risultante `e costituita da segmenti di retta, i cui angoli sono posizionati in base alle tre fasi e presentano variazioni di pendenza in base alle tre ampiezze.


10.5. Esempi frequency 0 phasor~

295

slopes up down 0

frequency

0

0

phasor~

/ 100 / 100

0

*~ -1 *~

*~

+~ 1 -~

*~ (a)

(b)

0

Duty cycle

/ 100 make the phasor cross zero at the desired point of the cycle.

*~ min~ | (OUT)

slope of rise segment

0

slope of decay segment

* -1 multiply by desired slope, negating so that the segment points downward

minimum of rise and decay segments min~ (makes a triangle wave) clip~ 0 1 | (OUT)

clip between 0 and 1 to make the sustain and silent regions.

Figura 10.14: Tecniche alternative per la realizzazione di forme d’onda con

Figure 10.14: Alternative techniques for making waveforms with corners: (a) a angoli:wave (a)asun’onda triangolare minimo di duea triangle segmenti triangle the minimum of two linecome segments; (b) clipping wavedi retta; (b) ritagliare un’onda triangolare per fare un “inviluppo”. to make an “envelope”.

Strategie per limitare in banda le onde a dente di sega L’esempio J05.triangle.pd (Figura 10.14, parte a) mostra un modo semplice per creare un’onda triangolare, in cui sono specificate solo le pendenze del segmento crescente e di quello decrescente. Un phasor fornisce la forma crescente (la sua ampiezza `e la pendenza), e lo stesso phasor, sottratto da uno, d`a la forma discendente. Il minimo delle due funzioni lineari segue il phasor crescente fino all’intersezione dei due e poi segue il phasor discendente fino a zero al termine del ciclo. Un’onda triangolare pu`o essere ritagliata sopra e sotto per creare un’onda trapezoidale, che pu` o essere utilizzata sia come impulso audio-frequenza o, alla frequenza fondamentale pi` u bassa, come un inviluppo ASR (Attacco, Sostegno, Rilascio) ripetuto. La patch J06.enveloping.pd (Figura 10.14 parte b) mostra questo. La stessa forma crescente viene utilizzata come nell’esempio precedente e la forma decrescente differisce solo in quanto la sua fase `e impostata in modo che cada a zero in un punto controllabile (non necessariamente alla fine del ciclo come prima). L’oggetto clip∼ impedisce l’aumento al di sopra di 1 (in modo che, se l’intersezione dei due segmenti `e superiore a uno, otteniamo un segmento orizzontale di “sustain”) e anche di scendere sotto lo zero, in modo che una volta che la forma discendente raggiunge lo zero, l’output `e zero per il resto del ciclo. L’esempio J07.oversampling.pd mostra come utilizzare la tecnica del sovracampionamento per ridurre il foldover quando si utilizza un oggetto phasor∼ come onda audio a dente di sega. Una sottopatch, eseguita a 16 volte la frequenza di campionamento di base, contiene l’oggetto phasor∼ e un filtro di Butterworth a tre poli e tre zeri per ridurre le ampiezze delle parziali al di sopra della frequenza di Nyquist della patch genitore (in esecuzione alla frequenza di campionamento originale) in modo che l’output non subisca foldover quan-


296

Capitolo 10. Forme d’onda classiche

do viene sotto-campionato all’oggetto outlet∼. L’esempio J08.classicsynth.pd mostra l’utilizzo di phasors sovra-campionati come generatori di segnali per fare un’imitazione di un sintetizzatore classico che fa sintesi sottrattiva. L’esempio J09.bandlimited.pd mostra come utilizzare la transition splicing come un modo alternativo per generare un’onda a dente di sega con foldover controllabile. Questa ha il vantaggio di essere pi` u diretta (e di solito meno costosa computazionalmente) rispetto al metodo di sovra-campionamento. D’altra parte, questa tecnica dipende dall’uso del reciproco della frequenza fondamentale come segnale audio in proprio (per controllare l’ampiezza del segnale di sweeping che legge la tabella di transizione) e, allo stesso modo della tecnica PAF del Capitolo 6, occorre prestare attenzione per evitare i clicks se la frequenza fondamentale cambia in modo discontinuo.

Esercizi 1. Un oggetto phasor∼ ha una frequenza di 441 Hertz (ad una frequenza di campionamento di 44100). Qual `e l’ampiezza della componente DC? Della fondamentale? Della parziale a 22050 Hertz (al di sopra della quale le parziali subiscono foldover)? 2. Un’onda quadra oscilla tra 1 e −1. Qual `e la sua ampiezza RMS? 3. Nel paragrafo 10.3 un’onda quadra `e stata presentata come una forma d’onda dispari la cui serie di Fourier consisteva di funzioni sinusoidali (e non cosinuodali). Se l’onda quadra `e avanzata di 1/8 di ciclo in fase, in modo che appaia come una funzione pari, che cosa diventa la sua serie di Fourier? 4. Un’onda rettangolare `e 1 per 1/4 di ciclo, zero per 3/4 di ciclo. Quali sono le forze dei suoi armonici a 0, 1, 2, 3 e 4 volte la fondamentale? 5. Quanto vale 1 + 1/9 + 1/25 + 1/49 + 1/81 + · · · ?


Indice analitico ∗ ∼ , 18 bang∼ , 272

noise∼ , 240 notein , 79 osc∼ , 16 outlet∼ , 98 outlet , 98 pack , 45

block∼ , 200 bp∼ , 240 catch∼ , 102 clip∼ , 131 cos∼ , 49 cpole∼ , 244 czero rev∼ , 244 czero∼ , 244 dac∼ , 18 dbtorms , 18 delay , 73

pipe , 73 poly , 108 q8 rsqrt∼ , 274 r∼ , 51 receive∼ , 51 receive , 21 rfft∼ , 269 rifft∼ , 270 rpole∼ , 244 rzero rev∼ , 244 rzero∼ , 244 r , 21 s∼ , 51 samphold∼ , 51

delread∼ , 196 delwrite∼ , 196 del , 73 div , 108 env∼ , 79 expr , 51 fft∼ , 269 fiddle∼ , 131 ftom , 21 hip∼ , 47, 240

select , 74 sel , 74 send∼ , 51 send , 21 snapshot∼ , 79

inlet∼ , 98 inlet , 98 line∼ , 19 line , 74 loadbang , 51

stripnote , 79 switch∼ , 200 s , 21 tabosc4∼ , 44 tabread4∼ , 45 tabreceive∼ , 269 tabsend∼ , 272 tabwrite4∼ , 45 throw∼ , 102 trigger , 82

lop∼ , 240 lrshift∼ , 274 makenote , 108 mod , 108 moses , 73 mtof , 21 297


298 t , 82 unpack , 102 untill , 162 vcf∼ , 241 vd∼ , 197 vline∼ , 76 wrap∼ , 51

Indice Analitico covarianza, 10 creation arguments, 15

DC, 115, 222 debouncing, 65 decibel, 4 delay composto, 70 in Pd, 73 semplice, 70 abstraction, 97 su flussi di controllo, 70 ADSR, generatore di inviluppo, 85 diagramma polo-zero, 220 aliasing, 56 dimensione della finestra, 194 ampiezza, 1, 2 dinamica, 5 complessa, 169 distorsione, 121 misure di, 2 dominio di picco, 3 del tempo, 170 RMS, 3 della frequenza, 170 analisi di Fourier, vedi Fourier, analisi Doppler, effetto, 189 di duty cycle, 38 angolo di rotazione, 180 argomento (di un numero complesso), eco, densit`a di, 183 166 envelope follower, 65, 235 armonici, 11 envelope generator, vedi generatore di inviluppo banco di voci, 94 equalizzazione, 213 banda di transizione, 211 estremi di banda, 116 banda passante, 210 evento, 65 battimento, 22 beating, vedi battimento fase iniziale, 1 Bessel, funzioni di, 137 Fast Fourier transform, vedi Trasforbox, 14 mata di Fourier veloce GUI, 15 feedback, 154 message, 14 filtro, 173, 209 number, 15 a pettine, 173 object, 14 ricircolante, 175 all-pass, 182, 233 campionamento, 30 composto, 217 esempi, 106 di Butterworth, 225 campione, 1 elementare carrier signal, vedi segnale portante non-ricircolante, 214 cents, 7 ricircolante, 217 Chebychev, polinomi di, 134 passa-alto, 210 classe, 15 passa-banda, 211 clipping, 25 passa-basso, 210 clipping function, vedi funzione di tapeaking, 213 glio shelving, 213 colorazione, 183 finestra, 3, 257 compander, 259 flusso di controllo, 59 coniugato complesso, 216 controllo, 57 numerico, 60


Indice Analitico in Pd, 70 foldover, 56 fondamentale, 11 forma polare (di un numero complesso), 166 forma rettangolare (di un numero complesso), 166 formante, 141 forme d’onda classiche, 277 formula di conversione nota/frequenza, 6 Fourier analisi di, 247 trasformata di, 248 formula di spostamento della fase, 252 formula di spostamento temporale, 252 su finestra, 257 veloce, 269 frequency domain, vedi dominio della frequenza frequenza angolare, 1 centrale, 141, 211 di campionamento, 1 modulante, 127 portante, 127, 142 risposta in, vedi risposta in frequenza funzione di taglio, 121 di trasferimento, 90, 120, 209 finestra, 254 finestra di Hann, 146, 254 gain, vedi guadagno gamma dinamica, 259 generatore di inviluppo, 9, 85 ADSR, 85 resettare, 92 generatore di transiente, 85 generatori unitari, 7 guadagno, 173 GUI box, vedi box hop size, 257 impulso, 172, 284 incapsulamento, 97

299 indice di modulazione, 127 di waveshaping, 121 individuazione degli eventi, 65 interferenza, 165 intermodulazione, 124 invarianza temporale, 170 inviluppo spettrale, 31, 115 kernel di Dirichlet, 250 larghezza di banda, 141, 211 magnitudine (di un numero complesso), 166 merging su flussi di controllo, 70 in Pd, 73 message box, vedi box messaggi, 15, 70 MIDI, 6 modulating signal, vedi segnale modulante modulazione ad anello, 116 di frequenza, 23, 126 modulo (di un numero complesso), 166 muting, 90 noise gate, 259 number box, vedi box numeri complessi, 166 object box, vedi box onda a dente di sega, 26, 277 parabolica, 281 quadra, 280 rettangolare, 277 triangolare, 277 oscillatore, 7 ottava, 6 pacchetto d’onda, 148 PAF (generatore di formante allineata in fase), 152 parte immaginaria di un numero complesso, 166 parte reale di un numero complesso, 166 parziali, 115 patch, 7, 14


300

Indice Analitico

sinusoide, 1 genitore, 97 sottopatch, 97 periodo, 11 spettro, 113 phase locking, 266 continuo, 115 pole-zero plot, vedi diagramma polodiscreto, 113 zero rumoroso, 115 polifonia, 94 stopband, 211 potenza media, 3 attenuazione della, 211 prima differenza, 283 switch-and-ramp, 92 pruning su flussi di controllo, 70 in Pd, 73 tags, 96 tasks, 95 qualit` a (“q�), 233 tempo di stabilizzazione, 232 tempo logico, 57 rete di ritardo tempo reale, 57 lineare, 170 Teorema del Limite Centrale, 125 stabile, 175 Teorema di Nyquist, 55 unitaria, 179 ricerca su tabelle, vedi wavetable loc- threshold detection, 65 timbre stamping, 261 kup timbre stretching, 35, 144 riflessione, 181 time domain, vedi dominio del tempo ripple, 210 toggle, 22 risincronizzazione di un flusso di contransition band, vedi banda di transitrollo, 70 zione in Pd, 74 risposta in frequenza, 173 valore assoluto (di un numero complesso), 166 sample, vedi campione vocoder, 261 sample number, 1 sample rate, vedi frequenza di campiowaveshaping, 120 namento wavetable lockup, 25 sampling, vedi campionamento non-interpolante, 26 segnale wavetables armonico, 113 formule di trasposizione momeninarmonico, 115 tanea, 31 modulante, 116 formule di trasposizione per looportante, 116 ping, 30 segnali audio digitali, 1 window function, vedi funzione finestra semitono, 6 window size, vedi dimensione della fisequenza temporale, 59 nestra serie di potenze, 125 settling time, vedi tempo di stabilizza- zero-crossing, 195 zione sidebands, vedi estremi di banda sidelobes, 148, 250 sintesi additiva, 11 esempi di, 102, 105 di Karplus-Strong, 200 granulare, 32 sottrattiva, 234, 288


Bibliografia [Bal03] Mark Ballora. Essentials of Music Technology. Prentice Hall, Upper Saddle River, New Jersey, 2003. [Ble01] Barry Blesser. An interdisciplinary synthesis of reverberation viewpoints. Journal of the Audio Engineering Society, 49(10):867–903, 2001. [Bou00] Richard Boulanger, editor. The Csound book. MIT Press, Cambridge, Massachusetts, 2000. [Cha80] Hal Chamberlin. Musical applications of microprocessors. Hayden, Rochelle Park, N.J., 1980. [Cho73] John Chowning. The synthesis of complex audio spectra by means of frequency modulation. Journal of the Audio Engineering Society, 21(7):526– 534, 1973. [Cho89] John Chowning. Frequency modulation synthesis of the singing voice. In Max V. Mathews and John R. Pierce, editors, Current Directions in Computer Music Research, pages 57–64. MIT Press, Cambridge, 1989. [DJ85] Charles Dodge and Thomas A. Jerse. Computer music: synthesis, composition, and performance. Schirmer, New York, 1985. [DL97] Mark Dolson and Jean Laroche. About this phasiness business. In Proceedings of the International Computer Music Conference, pages 55–58, Ann Arbor, 1997. International Computer Music Association. [GM77] John M. Grey and James A. Moorer. Perceptual evaluations of synthesized musical instrument tones. Journal of the Acoustical Society of America, 62:454–462, 1977. [Har87] William M. Hartmann. Digital waveform generation by fractional addressing. Journal of the Acoustical Society of America, 82:1883–1891, 1987. [KS83] Kevin Karplus and Alex Strong. Digital synthesis of plucked-string and drum timbres. Computer Music Journal, 7(2):43–55, 1983. [Leb77] Marc Lebrun. A derivation of the spectrum of FM with a complex modulating wave. Computer Music Journal, 1(4):51–52, 1977. 301


302

Bibliografia

[Leb79] Marc Lebrun. Digital waveshaping synthesis. Journal of the Audio Engineering Society, 27(4):250–266, 1979. [Mat69] Max V. Mathews. The Technology of Computer Music. MIT Press, Cambridge, Massachusetts, 1969. [Moo90] F. Richard Moore. Elements of Computer Music. Prentice Hall, Englewood Cliffs, second edition, 1990. [PB87] T. W. Parks and C.S. Burrus. Digital filter design. Wiley, New York, 1987. [Puc95a] Miller S. Puckette. Formant-based audio synthesis using nonlinear distortion. Journal of the Audio Engineering Society, 43(1):224–227, 1995. [Puc95b] Miller S. Puckette. Phase-locked vocoder. In IEEE ASSP Workshop on Applications of Signal Processing to Audio and Acoustics, 1995. [Puc01] Miller S. Puckette. Synthesizing sounds with specified, time-varying spectra. In Proceedings of the International Computer Music Conference, pages 361–364, Ann Arbor, 2001. International Computer Music Association. [Puc05] Miller S. Puckette. Phase bashing for sample-based formant synthesis. In Proceedings of the International Computer Music Conference, pages 733–736, Ann Arbor, 2005. International Computer Music Association. [Reg93] Phillip A. Regalia. Special filter design. In Sanjit K. Mitra and James F. Kaiser, editors, Handbook for digital signal processing, pages 907–978. Wiley, New York, 1993. [RM69] Jean-Claude Risset and Max V. Mathews. Analysis of musical instrument tones. Physics Today, 22:23–40, 1969. [RMW02] Thomas D. Rossing, F. Richard Moore, and Paul A. Wheeler. The Science of Sound. Addison Wesley, San Francisco, third edition, 2002. [Roa01] Curtis Roads. Microsound. MIT Press, Cambridge, Massachusetts, 2001. [Sch77] Bill Schottstaedt. Simulation of natural instrument tones using frequency modulation with a complex modulating wave. Computer Music Journal, 1(4):46–50, 1977. [Sl03] Julius Orion Smith III. Mathematics of the Discrete Fourier Transform (DFT), with Music and Audio Applications. W3K Publishing, Menlo Park, California, 2003. [Ste96] Kenneth Steiglitz. A Digital Signal Processing Primer. Addison-Wesley, Menlo Park, California, 1996. [Str85] John Strawn, editor. Digital Audio Signal Processing. William Kaufmann, Los Altos, California, 1985. [Str95] Allen Strange. Electronic music: systems, techniques, and controls . W. C. Brown, Dubuque, Iowa, 1995.


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.