Sei sulla pagina 1di 316

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 è 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.1 Misure di ampiezza . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Unità di ampiezza . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Controllare l’ampiezza . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Frequenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Sintetizzare una sinusoide . . . . . . . . . . . . . . . . . . . . . . 7
1.6 Segnali sovrapposti . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7 Segnali periodici . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.8 Informazioni sugli esempi software . . . . . . . . . . . . . . . . . 14
Introduzione rapida a Pd . . . . . . . . . . . . . . . . . . . . . . 14
Come trovare ed eseguire gli esempi . . . . . . . . . . . . . . . . 16
1.9 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Riscalatore costante di ampiezza . . . . . . . . . . . . . . . . . . 16
Controllo di ampiezza in decibel . . . . . . . . . . . . . . . . . . 18
Controllo di ampiezza, senza irregolarità, tramite un generatore
di inviluppo . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Triade maggiore . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Conversione tra frequenza e tono . . . . . . . . . . . . . . . . . . 21
Ancora sulla sintesi additiva . . . . . . . . . . . . . . . . . . . . . 22
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2 Wavetables e campionatori 25
2.1 L’oscillatore wavetable . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2 Campionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3 Enveloping samplers . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.4 Stretching del timbro . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.5 Interpolazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.6 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Oscillatore wavetable . . . . . . . . . . . . . . . . . . . . . . . . . 44
Ricerca su wavetable in generale . . . . . . . . . . . . . . . . . . 45
Utilizzo di una wavetable come campionatore . . . . . . . . . . . 47
Campionatori a loop . . . . . . . . . . . . . . . . . . . . . . . . . 49

i
ii Indice

Campionatore a loop con sovrapposizione . . . . . . . . . . . . . 51


Precessione automatica del punto di lettura . . . . . . . . . . . . 53
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

3 Calcoli audio e di controllo 55


3.1 Il teorema di campionamento . . . . . . . . . . . . . . . . . . . . 55
3.2 Controllo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.3 Flussi di controllo . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.4 Conversione da segnali audio a flussi numerici di controllo . . . . 63
3.5 Flussi di controllo nei diagrammi a blocchi . . . . . . . . . . . . . 64
3.6 Individuazione degli eventi . . . . . . . . . . . . . . . . . . . . . . 65
3.7 Segnali audio come controllo . . . . . . . . . . . . . . . . . . . . . 67
3.8 Operazioni sui flussi di controllo . . . . . . . . . . . . . . . . . . 69
3.9 Operazioni sui flussi di controllo in Pd . . . . . . . . . . . . . . . 70
3.10 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Campionamento e foldover . . . . . . . . . . . . . . . . . . . . . . 74
Convertire controlli in segnali . . . . . . . . . . . . . . . . . . . . 74
Lettore di wavetable non-looping . . . . . . . . . . . . . . . . . . 76
Da segnali a controlli . . . . . . . . . . . . . . . . . . . . . . . . . 78
Sequencer in stile analogico . . . . . . . . . . . . . . . . . . . . . 79
Sequencer in stile MIDI . . . . . . . . . . . . . . . . . . . . . . . 79
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

4 Automazione e gestione della voce 85


4.1 Generatori di inviluppo . . . . . . . . . . . . . . . . . . . . . . . 85
4.2 Forme di ampiezza lineari e curvilinee . . . . . . . . . . . . . . . 88
4.3 Cambiamenti di controllo continui e discontinui . . . . . . . . . . 90
4.3.1 Muting . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.3.2 Switch-and-ramp . . . . . . . . . . . . . . . . . . . . . . . 92
4.4 Polifonia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.5 Allocazione vocale . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.6 Tags vocali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.7 Incapsulamento in Pd . . . . . . . . . . . . . . . . . . . . . . . . 97
4.8 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Generatore di inviluppo ADSR . . . . . . . . . . . . . . . . . . . 99
Funzioni di trasferimento per il controllo di ampiezza . . . . . . . 100
Sintesi additiva: campana di Risset . . . . . . . . . . . . . . . . . 102
Sintesi additiva: controllo dell’inviluppo spettrale . . . . . . . . . 105
Sintesi polifonica: campionatore . . . . . . . . . . . . . . . . . . . 106
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

5 Modulazione 113
5.1 Tassonomia degli spettri . . . . . . . . . . . . . . . . . . . . . . . 113
5.2 Moltiplicazione di segnali audio . . . . . . . . . . . . . . . . . . . 116
5.3 Waveshaping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
5.4 Modulazione di frequenza e di fase . . . . . . . . . . . . . . . . . 126
5.5 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Modulazione ad anello e spettri . . . . . . . . . . . . . . . . . . . 129
Octave divider e formant adder . . . . . . . . . . . . . . . . . . . 129
Waveshaping e differenza di toni . . . . . . . . . . . . . . . . . . 131

ii
Indice iii

Waveshaping utilizzando i polinomi di Chebychev . . . . . . . . . 134


Waveshaping usando una funzione esponenziale . . . . . . . . . . 134
Waveshaping sinusoidale: parità e disparità . . . . . . . . . . . . 135
Modulazione di fase e FM . . . . . . . . . . . . . . . . . . . . . . 137
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

6 Progettare spettri 141


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

7 Spostamenti temporali e ritardi 165


7.1 Numeri complessi . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
7.1.1 Sinusoidi complesse . . . . . . . . . . . . . . . . . . . . . . 168
7.2 Spostamenti temporali e cambiamenti di fase . . . . . . . . . . . 169
7.3 Reti di ritardo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
7.4 Reti di ritardo ricircolanti . . . . . . . . . . . . . . . . . . . . . . 175
7.5 Conservazione della potenza e reti di ritardo complesse . . . . . . 179
7.6 Riverberazione artificiale . . . . . . . . . . . . . . . . . . . . . . . 182
7.6.1 Controllo dei riverberatori . . . . . . . . . . . . . . . . . . 185
7.7 Spostamenti variabili e frazionari . . . . . . . . . . . . . . . . . . 187
7.8 Fedeltà delle linee di ritardo interpolanti . . . . . . . . . . . . . . 189
7.9 Spostamento di tono (pitch shifting) . . . . . . . . . . . . . . . . 191
7.10 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Linea di ritardo fissa, non-interpolata . . . . . . . . . . . . . . . 196
Filtro a pettine ricircolante . . . . . . . . . . . . . . . . . . . . . 197
Linea di ritardo variabile . . . . . . . . . . . . . . . . . . . . . . . 197
Ordine di esecuzione e limiti inferiori sui tempi di ritardo . . . . 199
Ordine di esecuzione in linee di ritardo non-ricircolanti . . . . . . 202
Filtro a pettine non-ricircolante come octave doubler . . . . . . . 203
Filtro a pettine complesso variabile: shakers . . . . . . . . . . . . 203
Riverberatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Pitch shifter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

iii
iv Indice

8 Filtri 209
8.1 Tassonomia dei filtri . . . . . . . . . . . . . . . . . . . . . . . . . 210
8.1.1 Filtri passa-basso e passa-alto . . . . . . . . . . . . . . . . 210
8.1.2 Filtri passa-banda ed elimina-banda . . . . . . . . . . . . 211
8.1.3 Filtri di equalizzazione . . . . . . . . . . . . . . . . . . . . 213
8.2 Filtri elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
8.2.1 Filtro elementare non-ricircolante . . . . . . . . . . . . . . 214
8.2.2 Filtro non-ricircolante, seconda forma . . . . . . . . . . . 216
8.2.3 Filtro elementare ricircolante . . . . . . . . . . . . . . . . 217
8.2.4 Filtri composti . . . . . . . . . . . . . . . . . . . . . . . . 217
8.2.5 Outputs reali da filtri complessi . . . . . . . . . . . . . . . 218
8.2.6 Due filtri ricircolanti al prezzo di uno . . . . . . . . . . . 219
8.3 Progettazione dei filtri . . . . . . . . . . . . . . . . . . . . . . . . 220
8.3.1 Filtro passa-basso ad un polo . . . . . . . . . . . . . . . . 220
8.3.2 Filtro passa-alto ad un polo ed uno zero . . . . . . . . . . 221
8.3.3 Filtro shelving . . . . . . . . . . . . . . . . . . . . . . . . 222
8.3.4 Filtro passa-banda . . . . . . . . . . . . . . . . . . . . . . 223
8.3.5 Filtri peaking ed elimina-banda . . . . . . . . . . . . . . . 224
8.3.6 Filtri di Butterworth . . . . . . . . . . . . . . . . . . . . . 225
8.3.7 Ridimensionando il cerchio unitario con funzioni razionali 226
8.3.8 Filtro passa-banda di Butterworth . . . . . . . . . . . . . 229
8.3.9 Coefficienti temporalmente variabili . . . . . . . . . . . . 230
8.3.10 Risposte agli impulsi dei filtri ricircolanti . . . . . . . . . 231
8.3.11 Filtri all-pass . . . . . . . . . . . . . . . . . . . . . . . . . 233
8.4 Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
8.4.1 Sintesi sottrattiva . . . . . . . . . . . . . . . . . . . . . . 234
8.4.2 Envelope following . . . . . . . . . . . . . . . . . . . . . . 235
8.4.3 Modulazione a banda laterale singola . . . . . . . . . . . . 238
8.5 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Filtri prefabbricati passa-basso, -alto, -banda . . . . . . . . . . . 240
Filtro prefabbricato passa-banda variabile nel tempo . . . . . . . 241
Envelope followers . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Modulazione a banda laterale singola . . . . . . . . . . . . . . . . 243
Utilizzare filtri elementari direttamente: shelving e peaking . . . 243
Realizzazione e utilizzo di filtri all-pass . . . . . . . . . . . . . . . 246
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

9 Analisi e risintesi di Fourier 247


9.1 Analisi di Fourier di segnali periodici . . . . . . . . . . . . . . . . 247
9.1.1 Periodicità della trasformata di Fourier . . . . . . . . . . 248
9.1.2 Trasformata di Fourier come sintesi additiva . . . . . . . . 249
9.2 Proprietà delle trasformate di Fourier . . . . . . . . . . . . . . . 249
9.2.1 Trasformata di Fourier di DC . . . . . . . . . . . . . . . . 249
9.2.2 Spostamenti e cambiamenti di fase . . . . . . . . . . . . . 252
9.2.3 Trasformata di Fourier di una sinusoide . . . . . . . . . . 253
9.3 Analisi di Fourier di segnali non periodici . . . . . . . . . . . . . 254
9.4 Analisi di Fourier e ricostruzione di segnali audio . . . . . . . . . 257
9.4.1 Narrow-band companding . . . . . . . . . . . . . . . . . . 259
9.4.2 Timbre stamping (vocoder classico) . . . . . . . . . . . . 261
9.5 Fase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

iv
Indice v

9.5.1 Rapporti di fase tra i canali . . . . . . . . . . . . . . . . . 266


9.6 Phase bashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
9.7 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Analisi e risintesi di Fourier in Pd . . . . . . . . . . . . . . . . . 269
Companding a banda stretta: soppressione del rumore . . . . . . 271
Timbre stamp (“vocoder”) . . . . . . . . . . . . . . . . . . . . . . 272
Phase vocoder time bender . . . . . . . . . . . . . . . . . . . . . 274
Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

10 Forme d’onda classiche 277


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

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 Mathe-
matics 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 è 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ò 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ù per migliorarla). The Theory and Technique of Electronic Music è un libro
denso di informazioni e, ovviamente, la non perfetta conoscenza dell’inglese ne
rende la comprensione ancora più difficile.
Questo è 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ò 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 salvatag-
gio, 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 pre-
ziosi consigli durante la stesura di questa traduzione.
Per segnalare errori o imprecisioni, cosı̀ come per inviarmi commenti e os-
servazioni 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 è una fonte d’informazione completa


per la sintesi di timbri musicali ricchi e interessanti. La teoria è 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ù 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 collega-
mento tra gli oggetti. Il display grafico risultante è molto congeniale ai musicisti.
Un utente novizio può progettare un semplice strumento istantaneamente. Ed
egli può imparare rapidamente a progettare strumenti complessi. Può capire
come funzionano strumenti complessi guardando le loro immagini grafiche.
Il primo programma di compilazione grafica, Max, è stato scritto da Miller
Puckette nel 1988. Max gestiva solo segnali di controllo per la sintesi sonora
perché i computer disponibili all’epoca non erano abbastanza veloci per gestire
eventi sonori. Non appena sono stati disponibili computer più 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 è stato sviluppato da Puckette e Zicarelli presso l’IRCAM nel
periodo 1993-1994. Entrambi si sono trasferiti in California. Zicarelli commer-
cializza 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 è molto simile a Max/MSP.
Max e Pd permettono a quasi chiunque di sintetizzare, quasi immediata-
mente, timbriche poco interessanti. Fare timbri interessanti è molto più difficile
e richiede molte conoscenze aggiuntive. Il libro Teoria e Tecnica della Musica
Elettronica rappresenta quel corpo di conoscenza. La teoria è importante per
qualsiasi programma di sintesi. Teoria e Tecnica della Musica Elettronica forni-
sce numerosi esempi di come applicare la teoria utilizzando Pd. La trattazione
combinata di teoria e di esempi in Pd rende questo libro unicamente utile. Es-
so contiene anche esercizi per ogni capitolo, che lo rendono un libro di testo

ix
x Prefazione

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

x
Introduzione

Questo è un libro sull’utilizzo di tecniche elettroniche per registrare, sintetizzare,


elaborare e analizzare i suoni, una pratica che è 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à 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ó, è relativamente economico ed i risultati ottenuti sono facili da documentare
e ricreare. Per questi aspetti, almeno, il computer è lo strumento ideale per la
musica elettronica: è 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 tec-
nologia. Tuttavia, è importante fornire esempi di lavoro. Quindi ogni capitolo
inizia con la teoria (evitando qualsiasi riferimento all’implementazione) e ter-
mina con una serie di esempi realizzati in un pacchetto software attualmente
disponibile.
Il lettore ideale di questo libro è chiunque conosca e ami la musica elettronica
di qualsiasi genere, abbia un sacco di dimestichezza con i computer in genera-
le 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 pre-
confezionato per provare queste tecniche; invece, l’enfasi viene posta sull’ap-
prendere 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ò trovare
in [Str85, pp. 1-68].
Anche se il “livello” della matematica non è elevato, la matematica stessa è
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 insegna-
ta in Occidente; in particolare, la notazione musicale occidentale scritta non è
necessaria. Verranno usate alcune nozioni elementari della teoria della musica
occidentale, come la scala temperata, il sistema dei nomi delle note, e termi-
ni come “nota” e “accordo”. Inoltre, dovreste avere familiarità 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à di progettazione di Pd a chiunque
ne sia interessato.
Vorrei ringraziare alcune persone che hanno reso possibile scrivere questo li-
bro. Barry Vercoe è quasi interamente responsabile della mia educazione musica-
le. Mentre ho appreso la matematica da Wayne Holman, Samuel Greitzer, Mur-
ray 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 è 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ò variare su alcuni o tutti i numeri
interi. Un singolo numero della sequenza è chiamato sample o campione. Un
esempio di un segnale audio digitale è la Sinusoide:
x[n] = a cos(ωn + φ)
dove a è l’ampiezza, ω è la frequenza angolare e φ è la fase iniziale. La fase varia
in funzione del sample number n, ed è pari a a ωn + φ. La fase iniziale è la fase
al campione zero (n = 0).
La Figura 1.1 (parte a) mostra graficamente una sinusoide. L’asse orizzonta-
le 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 “cam-
pionata” del segnale. In alternativa, potremmo disegnarlo più semplicemente
come una curva continua (parte b). Il disegno superiore è la rappresentazione
più fedele della sinusoide (come segnale audio digitale), mentre quella inferiore
può essere considerata come una sua idealizzazione.
Le sinusoidi svolgono un ruolo chiave nell’elaborazione audio perché, tra-
slandone 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 opera-
zioni sulle sinusoidi. Le nostre orecchie utilizzano questa stessa particolare pro-
prietà 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 è il numero di
campioni in un secondo. Il tempo t è 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
ωR
f=

1
2 Capitolo 1. Sinusoidi, ampiezza e frequenza

x[n]
(a)
1

49 n
-1 0

x(n)
(b)
1

50
-1

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

dove f è misurata in Hertz (cioè, cicli al secondo) perché un ciclo è 2π radianti


e un secondo è 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à di misura.
Ovviamente supporremo che esista un’accuratezza numerica sufficiente affinché
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 soft-
wares più moderni per l’elaborazione dell’audio digitale utilizzano solitamente
una rappresentazione in virgola mobile (floating-point representation) per i se-
gnali. Ciò consente di utilizzare una qualsiasi unità sia più 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à fondamentale di un segnale audio digitale è la sua ampiezza. Sfor-
tunatamente, 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
totalità. È quindi utile avere delle misure di ampiezza per i segnali audio digitali
41.1. Misure di ampiezza 1. SINUSOIDS, AMPLITUDE AND FREQUENCY3
CHAPTER

(a)
peak
RMS

(b) peak

RMS

Figure
Figura 1.2:
1.2: Root mean RMS
Ampiezza squaree (RMS)
di piccoand peak amplitudes
di segnali of signals
a confronto. Per unacompared.
sinusoide

For
(parte a), l’ampiezza di picco è maggiore della RMS di un fattore parifactor
√ a sinusoid (part a), the peak amplitude is higher than RMS by a a 2.of
2.

in generale. È meglio parlare di ampiezza riferendosi ad una finestra, cioè un


range
when we fisso di campioni
consider del segnale.
complex-valued Ad esempio,
signals.) Neitherla the
finestra
peakdinor
unthe
segnale
RMSaudio
am-
x[n] di lunghezza N e che inizia al campione M è 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
less Le duethat.
than misure più frequenti di ampiezza sono l’ampiezza di picco, che è sem-
plicemente il più grande
Under reasonable campione (in
conditions—if the valore
window assoluto)
containsall’interno della periods
at least several finestra:
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
e l’ampiezza Figure 1.2mean
(root showssquare):
the peak and RMS amplitudes of two digital
audio signals. p
ARMS {x[n]} = P {x[n]}
dove P {x[n]} è 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
(in questathatultima
one signal’s amplitude
formula, i segni diis valore
greaterassoluto
than another’s
non sonobynecessari
a factor dal
of two
mo-
might
mento be chemore informative
stiamo lavorando than saying
su segnali it is greater
a valori reali, mabydiventeranno
30 millivolts. This is
importanti
true for any
in seguito measure
quando of amplitudesegnali
considereremo (RMSaor peak,neiforcomplessi).
valori instance). Né Tol’ampiezza
facilitate
comparisons, we often express
di picco né l’ampiezza RMS diamplitudes
un qualsiasi in segnale
logarithmic
possonounits callednegative,
essere decibels.e
Ifpossono
a is theessere
amplitude of a signal
esattamente zero (either
solo se peak or RMS),
il segnale stessothen weper
è zero canogni
define the
n nella
finestra.
L’ampiezza RMS di un segnale può essere uguale all’ampiezza di picco, ma
non può mai essere superiore; e può 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

ampli-
tude

0.1
0
-20 -10 0
decibels

Figure 1.3: The relationship between decibel and linear scales of amplitude.
Figura
The 1.3:amplitude
linear La relazione tra decibel
1 is assigned to 0e dB.
scala di ampiezza lineare. Il valore di
ampiezza lineare pari a 1 è assegnato al valore di 0 dB.

decibel (dB) level d as:


In condizioni ragionevoli –d = se 20
la ·finestra
log10 (a/acontiene
0)
almeno diversi periodi e
se la frequenza angolare è ben sotto al valore di un radiante per campione –
where a0 is adireference
l’ampiezza amplitude.
picco della sinusoideThis definition
di pagina is setaup
1 è circa so sua
e la that,ampiezza
if we increase
RMS
the √ signal
è circa √a power by a factor of ten (so that the amplitude increases by a factor
. La Figura 1.2 mostra le ampiezze di picco e RMS di due segnali
2
of
audio 10), the
digitali. logarithm will increase by 1/2, and so the value in decibels goes
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à di ampiezza
in Figure 1.3.
Still using a0 to denote the reference amplitude, a signal with linear ampli-
Spesso, due ampiezze sono meglio confrontate se si utilizza il loro rapporto
tude smaller
anziché thandifferenza.
la loro a0 will haveDire
a negative amplitude
che l’ampiezza diinundecibels:
segnale aè0 /10 gives -20
maggiore di
dB, a 0 /100 gives -40, and so on. A linear amplitude of zero
un altro per un fattore di due potrebbe essere più informativo che dire che is smaller than thatè
of any value
maggiore in dB,
di 30 so we give
millivolts. it avale
Questo dB level of −∞. misura di ampiezza (RMS o
per qualsiasi
In digital audio a convenient choice of reference,
di picco, ad esempio). Per facilitare i confronti, spesso assuming the hardware
esprimiamo has
le ampiezze
ainmaximum amplitude of one, is
unità logaritmiche denominate decibel. Se a è l’ampiezza (di picco o RMS)
di un segnale, allora possiamo
a0definire
= 10−5 il=livello d in decibel (dB) come:
0.00001

so that the maximum amplitude 20 · log10is


d = possible (a/a1000 ) dB, and 0 dB is likely to be
inaudibly quiet at any reasonable listening level. Conveniently enough, the
dove a0 èrange
dynamic un’ampiezza
of human dihearing—the
riferimento. Questa definizione
ratio between è posta inloud
a damagingly modo che,
sound
se aumentiamo
and an inaudiblylaquiet
potenza
one—is delabout
segnale
√100perdB.un fattore di dieci (in modo che
l’ampiezza
Amplitudeaumenti con un
is related fattore
in an di way
inexact 10), to
il logaritmo aumenterà
the perceived di of
loudness 1/2, quindi
a sound.
il valore
In in two
general, decibel salirà
signals with(additivamente)
the same peakdior10. RMS Unamplitude
aumento di ampiezza
won’t di un
necessarily
fattore di due corrisponde ad un aumento di circa 6.02 decibel;
have the same loudness at all. But amplifying a signal by 3 dB, say, will fairly raddoppiare
la potenza corrisponde ad un aumento di 3.01 dB. La relazione tra ampiezza
lineare e ampiezza in decibel è rappresentata in Figura 1.3.
Sempre usando a0 per indicare l’ampiezza di riferimento, un segnale con
ampiezza lineare minore di a0 avrà un’ampiezza negativa in decibel: a0 /10 dà
1.4. Frequenza 5

−20 dB, a0 /100 dà −40 e cosı̀ via. Un’ampiezza lineare pari a zero è 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, suppo-
nendo che l’hardware abbia un’ampiezza massima di uno, è
a0 = 10−5 = 0.00001
in modo che l’ampiezza massima possibile sia di 100 dB e che 0 dB sia un’am-
piezza probabilmente silenziosa a qualsiasi livello di ascolto ragionevole. Ab-
bastanza convenientemente, la gamma dinamica dell’udito umano – il rapporto
tra un suono dannoso e un rumore inaudibilmente silenzioso – è di circa 100 dB.
L’ampiezza è legata in modo inesatto alla percezione della rumorosità di
un suono. In generale, due segnali con la stessa ampiezza di picco o RMS non
hanno necessariamente la stessa intensità. Ma amplificando un segnale, diciamo
di 3 dB, sarà ragionevolmente affidabile farlo suonare ad uno “step” più forte.
Molto è stato fatto sulla presunta natura logaritmica dell’udito umano (e di altri
sensi) che può spiegare in parte il motivo per cui i decibels sono una scala utile
di ampiezza [RMW02, p. 99].
L’ampiezza è anche correlata, in modo inesatto, alla dinamica musicale. La
dinamica è 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 è l’intensità [RMW02, p. 110-111].

1.3 Controllare l’ampiezza


Molto probabilmente l’operazione più frequentemente utilizzata sui suoni elet-
tronici è quella di cambiare le loro ampiezze. Ad esempio, una semplice strategia
per sintetizzare i suoni è combinare sinusoidi, che possono essere generate uti-
lizzando 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, è 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à maggiore o minore a seconda del fattore y. Più in generale, è possibile
modificare l’ampiezza tramite un valore y[n] che varia campione per campione.
Se y[n] è 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à 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ù 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ò
essere descritto semplicemente come il cambiamento di ampiezza di uno di essi;
questo aspetto sarà considerato più 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
CHAPTER 1. SINUSOIDS, 1. Sinusoidi, ampiezza e frequenza
AND FREQUENCY

440

330

220

110

0
45 57 69

frequency pitch

Figure 1.4:
Figura 1.4: The relationship
La relazione between
tra nota MIDI“MIDI” pitch in
e frequenza and frequency
cicli in cycles
per secondo per
(Hertz).
second
Il range(Hertz). TheMIDI
di 24 valori span nell’asse
of 24 MIDI values on
orizzontale the horizontal
rappresenta axis represents
due ottave, rispetto
two quali
alle octaves, over whichaumenta
la frequenza the frequency increases
di un fattore by a factor pari
moltiplicativo of four.
a 4.

reliably make
descrizione it sound
delle about
relazioni onefrequenze
tra le “step” louder.
rispettoMuch has been
a quanto made
fornito dalleof loro
the
supposedlyIllogarithmic
differenze. rapporto dellenature of human
frequenze hearing
tra due toni (and other
musicali senses), which
determina may
l’intervallo
partially explain
musicale why decibels are such a useful scale of amplitude [RMW02, p.
tra di essi.
99].La scala musicale occidentale suddivide l’ottava (l’intervallo musicale as-
Amplitude
sociato ad un is also related
rapporto in an
di 2:1) ininexact
dodici way to musical
intervalli dynamic.
uguali, ciascunoDynamic
dei quali is
better thought of as a measure
corrisponde quindi ad un rapporto di 2 of effort than
1/12 of loudness or power. It ranges over
. Per ragioni storiche questo sotto-
nine values:
intervallo rest, ppp,semitono.
è chiamato pp, p, mp,Una mf, f, ff, fff.
scala These correlate
logaritmica in an even
conveniente per illooser
tono
(pitch) consiste semplicemente nel contare il numero semitoni da una110-111].
way with the amplitude of a signal than does loudness [RMW02, pp. nota di
riferimento – utilizzando le frazioni possiamo specificare note che non appaiono
nella scala occidentale. La scala logaritmica di tono più comunemente utiliz-
1.3 è laControlling
zata “MIDI” pitch, in cui Amplitude
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
1, sample by sample. But the m =sinusoid · loga2 constant
69 + 12has (f /440), nominal amplitude a, and
we would like to be able to vary that in time.
In general, to multiply the f =amplitude of a signal
440 · 2(m−69)/12 . x[n] by a factor y ≥ 0,
you can just multiply each sample by y, giving a new signal y · x[n]. Any
Il Do centrale,ofcorrispondente
measurement the RMS or peak alla nota MIDI m
amplitude of =x[n]
60, will
è pari
beagreater
f = 261.626
or lesscicli
by
al
thesecondo.
factor y. More generally, you can change the amplitude by an amount y[n]
Il MIDI
which variesstesso è unby
sample vecchio protocollo
sample. If y[n] hardware che, purtroppo,
is nonnegative and if it si è insinuato
varies slowly
in una grande
enough, quantitàofdithe
the amplitude software.
productNell’hardware,
y[n] · x[n] (in ail fixed
MIDIwindow
consentefromsoloMtoni
to
interi
M + Ncompresi
− 1) willtrabe 0that
e 127. Tuttavia,
of x[n], la scala
multiplied soggiacente
by the è ben
value of y[n] in definita
the window per
qualsiasi numero “MIDI”, anche negativo; ad esempio una “nota MIDI” di −4 è
una frequenza decente di vibrato. La scala del tono non può tuttavia descrivere
frequenze inferiori o uguali a zero cicli al secondo (per una chiara descrizione
del MIDI, delle sue capacità e delle sue limitazioni, vedere [Bal03, ch.6-8]).
81.5. Sintetizzare una sinusoide
CHAPTER 7
1. SINUSOIDS, AMPLITUDE AND FREQUENCY

FREQUENCY FREQUENCY

OUT y[n]

OUT

(a) (b)

Figure 1.5: Diagramma


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

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

8 Capitolo 1. Sinusoidi, ampiezza e frequenza

1 y[n]

(a)
n
0 50

-1

1 x[n]y[n]

(b)

-1

1
y[n]

(c)

-1

1
x[n]y[n]
(d)

-1

Figura 1.6:
Figure 1.6: Two
Dueamplitude
funzioni difunctions
ampiezza(parts
(partia, a,c) e il (parts
c), and risultato di moltiplicarle
b, d), the result of
per la sinusoide
multiplying thempura di Figura
by the 1.1 (parti
pure sinusoid b,d). 1.1.
of Figure

del prodotto è 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 è influenzata dalla
variazione di ampiezza da due diversi segnali di controllo y[n]. Il segnale di
controllo mostrato nella parte (a) presenta una discontinuità, che si ripresenta,
pertanto, nella sinusoide risultante, illustrata in (b). Le parti (c) e (d) mostrano
una possibilità di variazione, senza discontinuità, 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 11
1.5. Sintetizzare una sinusoide 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ò giustificarle. In-
If we fix ananzitutto,
window from M to Npure
le sinusoidi − 1i as
+ Msono usual,più
segnali wesensibili
can write agliout the parassitari
effetti mean
power of ditheunsum of two signals:
rapido cambiamento di ampiezza. Quindi, quando si desidera testare una
transizione di ampiezza,
P {x[n] + y[n]} se funziona
= P {x[n]} per +
+ P {y[n]} le 2sinusoidi
· COV{x[n],probabilmente
y[n]} funzionerà
anche per altri segnali. In secondo luogo, a seconda del segnale di cui si sta
where wecambiando
have introduced the covariance
l’ampiezza, il controllo of two signals:avrà bisogno di un tempo di
dell’ampiezza
“rampa” tra 0 e 30 millisecondi – 0 per i segnali più tolleranti (come il rumore
x[M ]y[M ] + · · · + x[M + N − 1]y[M + N − 1]
bianco) ey[n]}
COV{x[n], 30 per=i meno (come una sinusoide). Tutto questo dipende anche, in
modo complicato, dai livelli di ascolto e dal N contesto acustico.
The covariance may be positive, zero, or negative.
Opportune funzioni y[n] di controllo dell’ampiezza Over apossono
sufficiently esserelarge
ottenute
window, the covariance
usando of twodisinusoids
un generatore inviluppowith different
(envelope frequencies
generator). is negligible
La Figura 1.7 mostra
compareduna to the
rete mean
in cui power. Two signals
viene utilizzato which have
un generatore no covariance
di inviluppo are calledl’am-
per controllare
piezza
uncorrelated (thedi correlation
un oscillatore.
is theI covariance
generatori di inviluppo to
normalized variano ampiamente
lie between -1 andnella
costruzione
1). In general, for twodell’inviluppo
uncorrelated stesso, ma qui
signals, thecipower
concentreremo
of the sum sulistipo
thepiù
sumsemplice,
of
the powers:cioè quello che genera segmenti di retta, come mostrato nella Figura 1.6 (parte
c). Se viene specificato un segmento di retta che collega due valori di uscita a e
P {x[n] +N
b, su y[n]} = P {x[n]}
campioni a partire {y[n]},
+ P dal numerowhenever
di campione COV{x[n],
M , alloray[n]} = 0 è:
l’output
n−M
Put in terms of amplitude, this becomes:
y[n] = a + (b − a) , M ≤ n ≤ M + N − 1.
2 N 2 2
(ARMS {x[n] + y[n]}) = (ARMS {x[n]}) + (ARMS {y[n]}) .
L’output può avere un certo numero di segmenti come il precedente, coprendo,
This is thealla
familiar Pythagorean
fine, l’intera gammarelation. So numbers
dei sample uncorrelated signals can
n; i segmenti be thought
orizzontali, piatti,
of as vectors at right
possono essereangles to each
realizzati other; positively
impostando a = b. correlated ones as having
an acute angle Oltre a modificare
between them, leand
ampiezze dei suoni,
negatively il controllo
correlated dell’ampiezza
as having an obtusespesso
viene them.
angle between utilizzato, in particolar modo nelle applicazioni in tempo reale, sempli-
cemente if
For example, pertwo
attivare o disattivare
uncorrelated i suoni:
signals bothper disattivare
have basta semplicemente
RMS amplitude a, the

considerare una rampa verso lo zero. La maggior parte
sum will have RMS amplitude 2a. On the other hand if the two signals happen dei softwares di sintesi
forniscono anche modi per evitare che i moduli calcolino
to be equal—the most correlated possible—the sum will have amplitude 2a, i campioni, ma qui
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 voltage-
10 Capitolo 1. Sinusoidi, ampiezza e frequenza

controlled oscillators o VCO, e l’operazione di moltiplicazione veniva fatta usan-


do un voltage-controlled amplifier o VCA [Str95, pp.34-35] [Cha80, pp.84-89]. I
generatori di inviluppo sono descritti più 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ù 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:

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


COV{x[n], y[n]} = .
N
La covarianza può essere positiva, zero o negativa. Su una finestra sufficiente-
mente grande, la covarianza di due sinusoidi, con frequenze diverse, è trascu-
rabile rispetto alla potenza media. Due segnali che non hanno covarianza sono
chiamati non-correlati (la correlazione è la covarianza normalizzata affinché sia
un valore tra −1 e 1). In generale, per due segnali non-correlati, la potenza
della somma è 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 è 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à ampiezza RMS pari a 2a. D’altra parte, se i due segnali
sono uguali – il caso di maggiore correlazione – la somma avrà ampiezza pari a
2a, che è il massimo consentito dalla disuguaglianza triangolare.
1.8. Informazioni sugli esempi software 11

1.7 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ù piccolo τ , se esiste, per cui il segnale viene ripetuto è detto il periodo del
segnale. Nella trattazione sui periodi di segnali audio digitali, ci imbattiamo
subito nella difficoltà 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à supponendo che il segnale x[n] possa in qualche modo essere interpolato
tra i campioni in modo che sia ben definito se n è un intero o no.
Una sinusoide ha un periodo (in campioni) di 2π/ω dove ω è la frequenza
angolare. Più in generale, ogni somma di sinusoidi con frequenze kω, al variare
dell’intero k, si ripeterà dopo 2π/ω campioni. Tale somma è 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è che i segnali contengano solo un
numero finito di frequenze), possiamo rappresentare qualsiasi segnale periodico
come tale somma. Questa è 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 è 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 ter-
minologia occidentale) è quasi esattamente sette semitoni, 4: 3 (una quarta per-
fetta) è 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) è mostrata in Figura 1.8. I primi
tre grafici sono sinusoidi, le cui frequenze sono in rapporto 1:2:3. Il periodo
comune è 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 è una sinusoide, ma mantiene ancora la periodicità
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à 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ò.
Questo è un esempio di sintesi additiva; il termine, più in generale, può 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 Capitolo 1. Sinusoidi, ampiezza e frequenza

1.7. PERIODIC SIGNALS 13

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

14 CHAPTER 1. SINUSOIDS, AMPLITUDE AND FREQUENCY

FREQUENCY
(more)
3
2

OUT

Figure
Figura 1.9:
1.9: Using many
Possiamo oscillators
usare to synthesize
molti oscillatori a waveformuna
per sintetizzare withforma
desired har-
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 è necessario imparare almeno qualcosa su tale software. Pd è
un ambiente per realizzare rapidamente applicazioni per la computer music,
destinate principalmente alle performance live musicali. Pd può 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ù diffuso è certamente Csound [Bou00] di Barry Vercoe, che differisce da Pd
essendo di tipo text-based (e non GUI-based). Questo è un vantaggio in alcuni
aspetti e uno svantaggio in altri. Csound è più adatto di Pd per l’elaborazione in
batch e gestisce la polifonia molto meglio di Pd. D’altra parte, Pd ha una strut-
tura 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, è SuperCollider di
James McCartney, che è anche maggiormente text-based di Pd, ma come Pd è
esplicitamente progettata per l’utilizzo in tempo reale. SuperCollider ha potenti
costruzioni linguistiche che lo rendono uno strumento più 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 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 approssimati-
vamente alle caselle negli schemi a blocchi astratti mostrati in precedenza in
questo capitolo, ma in dettaglio sono piuttosto diversi, perché Pd è un ambiente
di implementazione, non un linguaggio di specificazione.
Una patch in Pd, come quella mostrata in Figura 1.10, è 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 è attivata (da un messaggio in ingresso o con
un dispositivo di puntamento). Il messaggio in questo caso è costituito
semplicemente dal numero “21”.
• una object box (casella di oggetto). Le object boxes hanno un bordo rettan-
golare; 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
16 sugli esempi
CHAPTER software
1. SINUSOIDS, 15
AMPLITUDE AND FREQUENCY

440 frequency
21 message box
osc~ sinusoidal oscillator
+ 13 object box
amplitude
0.1 0 (on/off)
34 number
(GUI) box *~ multiplier

dac~ output
(a) (b)

Figure 1.10: (a) three types of boxes in Pd (message, object, and GUI); (b) a
Figurapatch
simple 1.10: to
(a)output
tre tipi di caselle in Pd (messaggio, oggetto e GUI); (b) una
a sinusoid.
semplice patch che produce una sinusoide.

message or with a pointing device). The message in this case consists


simply
maggior of parte
the number “21”. in Pd, la maggioranza delle caselle sono di ti-
delle patches
po “oggetto”. La prima parola digitata in una object box specifica la sua
• an object
classe, chebox. Objectcaso
in questo boxes have“+”.
è solo a rectangular border;
Le ulteriore parolethey interpret
aggiuntive the
(sepa-
text
rate toda create objects
spazi) che when nella
appaiono you load a patch.
casella Object
si chiamano boxes arguments,
creation may hold
hundreds
e specificano of different classes dell’oggetto
lo stato iniziale of objects—including
quando viene oscillators,
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 par-
In 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 è fisso quando una patch
when it is created.
è in esecuzione, il contenuto di una number box (il testo) cambia in modo
da riflettere
• a number box.il valore
Number corrente
boxes contenuto nella casella.
are a particular type of È GUIinoltre
box. possibile
Others
utilizzare una casella numerica come controller
include push buttons and toggle switches; these will come up laterfacendo clic e trascinando
in the
su e giù oppure
examples. digitandobox
The number i valori
has ainpunched-card-shaped
essa. border, with a
nick out of its top right corner. Whereas the appearance of an object or
Nella
messageFigura box1.10 (parte
is fixed whena) laa casella
patch isdirunning,
messaggio, quando box’s
a number viene contents
cliccata,
invia (the
il messaggio “21” a una casella di oggetto che aggiunge
text) changes to reflect the current value held by the box. You can 13. I cavi che
collegano le caselle trasportano i dati da una casella all’altra;
also use a number box as a control by clicking and dragging up and down, le uscite delle
caselle
orsono sul fondo
by typing valuese gliin ingressi
it. in cima.
La Figura 1.10 (parte b) mostra una patch Pd che produce una sinusoide con
In Figure 1.10
frequenza (part a)controllabili.
e ampiezza the message Qui, box, iwhen clicked,
cavi di sends the
collegamento message
sono di due“21”
tipi;
to an object
i cavi sottili box
sonowhich
per iladds 13 to it.
trasporto di The lines sporadici
messaggi connectinge the boxes
quelli più carry
spessidata
(che
from one box
collegano to the next;
l’oscillatore, outputs of boxes
il moltiplicatore are ondithe
e l’oggetto bottom
uscita dac∼) andtrasportano
inputs on
top.
i segnali audio digitali. Poiché Pd è un programma in tempo reale, i segnali
Figure
audio 1.10 (part
scorrono in un b) shows
flusso a Pd patch
continuo. whichi messaggi
Di contro, makes a sinusoid
sporadiciwith con-
appaiono
trollable
in momenti frequency
specifici,andma amplitude. The connecting
forse imprevedibili, patch lines are of two types
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, è necessario scaricare, installare ed eseguire Pd. Le
istruzioni per farlo appaiono nella documentazione HTML online di Pd, che è
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ù 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ò anche scaricare un archivio della versione
HTML di questo libro per un accesso più 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 è 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 let-
tera (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ù 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 è una frequenza (eventualmente variabile nel tempo) in
Hertz. L’output è la sinusoide alla frequenza specificata. Se nulla è collegato
all’ingresso della frequenza, il creation argument (440 in questo esempio) viene
utilizzato come frequenza. L’output ha ampiezza di picco pari a 1. È possibile
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é qualsiasi ingresso che riceve un segnale audio
può 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 <-- click these

ON OFF

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:
Figure 1.11:The
Il contenuto delthe
contents of primo esempio
first Pd di patch
example patch:inA01.sinewave.pd.
Pd: A01.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 è 0.05), questa casella moltiplica un
segnale audio digitale (nell’ingresso sinistro) per quel numero; questo può 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 potreb-
be non essere effettivamente un convertitore digitale/analogico (DAC = Digi-
tal/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 è quello di inviare ai canali uno e due
dell’hardware audio; è possibile specificare numeri di canali alternativi (uno o
molti) utilizzando i creation arguments. Pd stesso può essere configurato per
utilizzare due o più 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à 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 è un terminatore tra i
messaggi (quindi il primo messaggio è vuoto), dopo di che la parola successiva
viene considerata come il nome del destinatario del messaggio che segue. Cosı̀
il messaggio, in questo esempio, è “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 è 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’è una nuova classe di oggetti:
dbtorms : conversione da Decibel ad ampiezza lineare. Il termine “RMS” è
improprio; doveva essere chiamato “dbtoamp”, in quanto converte veramente da
decibel a qualsiasi unità di ampiezza lineare, sia esso RMS, di picco o altro. Un
input di 100 dB è normalizzato ad un output di 1. Valori superiori a 100 sono
accettati (120 darà 10), ma valori inferiori o uguali a zero forniranno sempre zero
(un input pari a zero fornirebbe altrimenti un numero positivo piccolo). Questo
è un oggetto di controllo, cioè i numeri in entrata e in uscita sono messaggi, non
segnali. (Un oggetto corrispondente, dbtorms∼ , è quello relativo al segnale.
Tuttavia, come oggetto di segnale, questo è costoso in termini di CPU e spesso
troveremo modi alternativi per evitare di usarlo).
1.9. Esempi 19

osc~ 440 osc~ 440 osc~ 440

0 0.1 2000 <-- slow on osc~ 550


dbtorms 0.1 50 <-- fast on
+~
0.1 <-- instant on
0 osc~ 660
0 2000 <-- slow off
*~ 0 +~
0 50 <-- fast off
output~
dac~ 0 <-- instant off dB 0
line~ <--- ramp generator
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)
A03.line.pd; GliA05.output.subpatch.pd.
ingredienti attivi di tre patches: (a) A02.amplitude.pd; (b)
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 è stata impostata per un range da 0 a 80; questa è una protezione
per i diffusori e le orecchie, ed è saggio costruire tali limiti nelle proprie patches.
L’altra number box mostra l’output dell’oggetto dbtorms. È inutile modi-
ficare questa casella numerica, poiché la sua uscita non è collegata da nessuna
parte; è qui solo per visualizzare il suo ingresso. Le number boxes possono es-
sere utili come controllers, per visualizzare output numerici o per entrambe le
funzioni, anche se, se si utilizzano per entrambe, ci può essere qualche lavoro
aggiuntivo da fare.

Controllo di ampiezza, senza irregolarità, tramite un gene-


ratore di inviluppo
Come mostrato in Figura 1.6, un modo per apportare modifiche senza salti
all’ampiezza di un segnale, cioè senza clic, è quello di moltiplicarla per l’uscita
di un generatore di inviluppo come mostrato nel diagramma a blocchi in Figura
1.7. Questo può essere implementato in Pd utilizzando l’oggetto line∼:
line∼ : generatore di inviluppo. L’uscita è 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 de-
stinazione (ingresso sinistro) e i ritardi di tempo (ingresso destro). A causa di
una regola generale dei messaggi in Pd, è sufficiente una coppia di numeri, in-
viata all’ingresso sinistro, per specificare insieme un valore di destinazione e un
20 Capitolo 1. Sinusoidi, ampiezza e frequenza

tempo della rampa. Il tempo è in millisecondi (tenendo conto della frequenza


di campionamento) e il valore di destinazione è privo di unità, 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’am-
piezza di una sinusoide. La parte attiva è 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 mes-
saggio) 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 co-
stante 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 messag-
gio precedente non ha alcun effetto, poiché line∼ non avrà 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 è che, se line∼ ottiene un valore temporale pari a zero, il valore
di output viene immediatamente impostato sul nuovo valore e gli altri segmen-
ti 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ò specificare in modo indipendente i valori iniziali e finali di un segmento
nell’output di line∼.
Il trattamento dell’ingresso destro di line∼ è inusuale tra gli oggetti Pd
in quanto dimentica i vecchi valori; un messaggio con un singolo numero come
“0.1” è sempre equivalente alla coppia “0.1 0”. Quasi qualsiasi altro oggetto
conserverà il valore precedente per l’ingresso destro, anziché ripristinarlo a zero.
L’esempio A04.line2.pd mostra graficamente l’output dell’oggetto line∼.
Utilizzando le varie caselle di messaggio, è possibile ricreare gli effetti mostrati
nella Figura 1.6.

Triade maggiore
L’esempio A05.output.subpatch.pd, i cui ingredienti attivi sono mostrati in Fi-
gura 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ù bassa è
440, pari al La sopra al Do centrale, o MIDI 69. Gli altri sono rispettivamente
pari a circa quattro e sette semitoni più alti. Le tre sinusoidi hanno ampiezze
uguali.
Il controllo di ampiezza, in questo esempio, viene curato da un nuovo oggetto
chiamato output∼. Questo non è un oggetto incorporato di Pd, ma è una patch
di Pd contenuta nel file, “output.pd” (è possibile vedere l’interno di output∼
aprendo il menu delle proprietà 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 compor-
tamento migliore in generale, ma è appropriato per queste patches di esempio.
1.9. EXAMPLES
1.9. Esempi 23 21

r frequency r pitch

set $1 set $1
0 <−− set frequency 0 <−− set MIDI pitch

s frequency s pitch
ftom <−− convert frequency mtof <−− convert "MIDI" pitch
to "MIDI" pitch to frequency
s pitch 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 ob-


Il meccanismo
ject per l’incorporazione
(described below) or by a messagediboxunausing
patch di Pd come
redirection (the casella di oggetti
“;” feature
all’interno
discussed di un
in the altroexample,
earlier sarà discusso nel paragrafo
A01.sinewave.pd). The4.7.
argument (such as “fre-
quency” and “pitch” in this example) is the name to which messages are sent.
Multiple receive objects
Conversione may share the esame
tra frequenza tononame, in which case any message
sent to that name will go to all of them.
L’esempio
send , s :A06.frequency.pd
The send object, (Figura 1.13)
which may be mostra l’oggetto
abbreviated di directs
as “s”, Pd permes-
convertire
note MIDI in unità di
sages to receive objects. frequenza (mtof, significa “MIDI a frequenza”) e il suo
inverso ftom. Introduciamo anche altre due classi di oggetti, send e
Two new properties of number boxes are used here. Earlier we’ve used themreceive.
asmtof
controls or as: displays;
, ftom converte here,
la notathe MIDI
two number boxes each
nella relativa functioninasbase
frequenza both.
alle for-
Ifmule
a number box gets a number in its inlet, it not only displays the
di conversione (pagina 6). Gli ingressi e le uscite sono messaggi (esistono number
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 co-
be sent a “set” message, such as “set 55” for example. This would set the
me tempo macchina). L’output dell’oggetto ftom è −1500 se l’input è zero o
value of the number box to 55 (and display it) but not cause the output that
negativo;
would resultaltrettanto, se si “55”
from the simple mtof −1500,
dà amessage. In thiso case,
un valore
numbers piùcoming
basso, from
fornisce in
output zero.
the two receive objects are formatted (using message boxes) to read “set 55”
instead
receiveof just
, r “55”, andi so
: riceve on. (The
messaggi nonspecial word “$1”
localmente. is replaced
L’oggetto by the
receive, che può
incoming number.) con
essere abbreviato This“r”,
is done because
attende otherwise
messaggi we would
non-locali have anda
da inviare infinite
un oggetto
loop:
send frequency
(descrittowould changeo pitch
di seguito) da una which wouldbox
message change frequency
utilizzando and so on
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) è il nome a cui vengono inviati i
More additive
messaggi. synthesis
Più oggetti receive possono condividere lo stesso nome, nel qual
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 com-
quel nome.
bine several sinusoids together by summing. There are many other possible
sendto, organize
ways s : l’oggetto
collections che puòofessere
of sinusoids,
send, whichabbreviato con “s”,
we’ll show two. indirizza i
Example
A07.fusion.pd
messaggi agli(Figure
oggetti1.14) shows four oscillators, whose frequencies are tuned
receive.
in theAdesso
ratio 1:2:3:4, with relative
sono state amplitudes
utilizzate 1, 0.1,
due nuove 0.2, and 0.5.
proprietà delleThe amplitudes
number boxes. In
are set by multiplying the outputs of the oscillators (the *~
precedenza le abbiamo usate come controllers o come display; qui, objects below thecaselle
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ò 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é “55” e cosı̀ via (la parola speciale $1 è sostituita dal numero in
2422 CHAPTER 1. SINUSOIDS,
Capitolo AMPLITUDE AND FREQUENCY
1. Sinusoidi, ampiezza e frequenza

0 <-- choose a pitch


mtof

* 2 * 3 * 4 frequencies of harmonics

osc~ osc~ 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ò è stato fatto perché altrimenti avremmo avuto un ciclo infinito:
laThe second,cambierebbe
frequenza third, and lafourth
nota oscillator are turned
che cambierebbe on and off
la frequenza using
e cosı̀ via aper
toggle
switch.
sempre,This is a graphical
o almeno control,
fino a quando like the
qualcosa number
non andassebox introduced earlier. The
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
effectively sulla sintesi
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),
combinare the resultpiù
insieme fuses into atramite
sinusoidi single la tone,
loro heard
somma.atCi the pitch
sono moltiof altri
the modi
leftmost
oscillator.
possibili per organizzare insiemi di sinusoidi, di cui ne mostreremo due. L’esem- a
In effect this patch sums a four-term Fourier series to generate
complex, periodic waveform.
pio A07.fusion.pd (Figura 1.14) mostra quattro oscillatori, le cui frequenze sono
Examplenel
impostate A08.beating.pd
rapporto 1:2:3:4, (Figure 1.15) ampiezze
con relative shows another
1, 0.1, possibility,
0.2 e 0.5. Leinam- which
sixpiezze
oscillators are tuned moltiplicando
sono impostate into three pairs of neighbors,
le uscite for instance
degli oscillatori 330 and
(gli oggetti ∗∼ 330.2
Hertz.
sotto gliThese pairs slip into and out of phase with each other, so that the
oscillatori).
amplitude of the
Il secondo, sum
terzo changes
e quarto over time.
oscillatore Callede spenti
sono accesi beating, this phenomenon
utilizzando un inter- is
ruttore a pulsante (toggle).
frequently used for musical effects. Questo è un controller grafico, come le number boxes
introdotte in precedenza. Il toogle fornisce 1 e 0 alternativamente
Oscillators may be combined in other ways besides simply summing quando si fatheir
clic con il mouse. Questo valore viene moltiplicato per la somma
output, and a wide range of resulting sounds is available. Example A09.frequency.mod.pd del secondo,
terzo
(not e quarto
shown here) oscillatore, quindi frequency
demonstrates effettivamente accendendoli
modulation e spegnendoli.
synthesis, in which one
Anche quando tutti e quattro gli oscillatori vengono
oscillator controls another’s frequency. This will be more fully described combinati (con il toggle in
in posizione “1”), il risultato si fonde in un singolo tono, alla frequenza dell’o-
Chapter 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à, 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) è spesso utilizzato per effetti musicali.
1.9.
1.9. Esempi
EXAMPLES 23
25

osc~ 330 osc~ 440 osc~ 587


osc~ 330.2 osc~ 440.33 osc~ 587.25

+~ +~ +~

+~
+~

(OUT)

Figure 1.15:
Figura 1.15: Additive synthesis:
Sintesi additiva: seisix oscillators
oscillatori arrangeda into
impostati three
coppie perbeating pairs.
produrre tre
battimenti.
n = 10?
Gli oscillatori possono essere combinati in altri modi oltre a sommare sem-
2. Two sinusoids have periods of 20 and 30 samples, respectively. What is
plicemente i loro outputs e una vasta gamma di suoni risultanti è possibile.
the period of the sum of the two?
L’esempio A09.frequency.mod.pd (non presentato qui) mostra la sintesi di mo-
dulazione
3. If 0 di
dBfrequenza,
correspondsin cui
to anunamplitude
oscillatoreofcontrolla la frequenza
1, how many di un altro.
dB corresponds to
Questoamplitudes
sarà approfondito
of 1.5, 2,nel Capitolo
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
1. How sinusoide
many uncorrelated
(pagina 1)signals,
ha fasealliniziale
of equal
φ=amplitude, wouldangolare
0 e frequenza you haveω to
=
add to Qual
π/10. get a signal
è il suothat is 9 dBingreater
periodo in amplitude?
campioni? Qual è 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. èTwo sinusoids
il periodo play
della at middle
somma C (MIDI 60) and the neighboring C sharp
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 1.5, 2,is 3the interval between the seventh and the eighth har-
e 5?
monic of a periodic signal?
4. Due segnali non-correlati di ampiezza RMS 3 e 4 vengono sommati; qual
9. èIf l’ampiezza
an audio signal
RMS x[n], = 0, ..., N − 1 has peak amplitude 1, what is the
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 è 9 dB maggiore in ampiezza?
6. Qual è la frequenza angolare del Do centrale alla frequenza di campiona-
mento di 44100 campioni al secondo?
7. Due sinusoidi producono un Do centrale (MIDI 60) ed il suo vicino Do
Diesis (MIDI 61). Qual è 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 è
l’ampiezza RMS minima possibile? Qual è 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 è realmente una qualità 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ù tardi, possono essere letti
in qualsiasi ordine – avanti, indietro, avanti e indietro o totalmente a caso. Si
apre una gamma inesauribile di nuove possibilità.
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ù di lı̀, il modo predominante di memorizzare i suoni è
quello di considerarli come segnali audio digitali, che possono essere riprodotti
con maggiore libertà e facilità 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à e l’inversione. Altre tecniche,
come il waveshaping, sono proprie solo nell’era digitale.
Supponiamo di avere un segnale audio digitale memorizzato, che è solo una
sequenza di campioni (cioè numeri) x[n] per n = 0, . . . , N − 1, dove N è 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à 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 è definita. In questa situazione potremmo sce-
gliere 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
Capitolo ANDe SAMPLERS
2. Wavetables campionatori

IN

OUT

Figure
Figura 2.1:
2.1: Diagram
Diagrammafor per
wavetable lookup.lookup.
la wavetable The input is inè samples,
L’input ranging
in campioni, che
approximately from 0 to the wavetable’s
vanno approssimativamente size N , depending
da 0 alla lunghezza on the interpolation
N della wavetable, a seconda
scheme.
dello schema di interpolazione.

are
Quialways clipped;
adotteremo when we need
la convenzione chewraparound, we’ll introduce
i campioni fuori campo sono another
sempre signal
rita-
processing operation to do it for us.
gliati; quando avremo bisogno di riavvolgere, introdurremo un’altra operazione
The second complication
di elaborazione del segnale che is lo
that the
farà perinput
noi. values need not be integers; in
other words they might fall between the points of the wavetable. In general,
La seconda complicazione è che i valori di ingresso, y[n], potrebbero non es-
this 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ò, arrotondiamo al più grande intero
its full definition is:
inferiore al valore di ingresso. Si parlerà quindi di wavetable non-interpolante e

la sua definizione completa ⎨ è:
x[⌊y[n]⌋] if 0 ≤ y[n] < N − 1
z[n] =  x[0] if y[n] < 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
x[N − 1] se y[n] not exceeding
≥ 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ù 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], è ciò 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] è 0 ≤ y[n] < N . Questo range è 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à di misura, da −1 a 1. Vedremo più 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
end.LaInFigura 2.2 (parte
this example thea)sawtooth’s
mostra unarange wavetable
is frome il0risultato di utilizzare
to 40 (this is shown due in
diversi segnali di input come indici di ricerca in essa.
the vertical axis). The sawtooth wave thus scans the wavetable from La wavetable contiene
left to40
punti, che sono numerati da 0 a 39. In (b), viene utilizzata
right—from the beginning point 0 to the endpoint 39—and does so every time un’onda a dente
direpeats.
it sega come Oversegnale di points
the fifty input y[n].
shownUn’onda
in Figurea2.2 dente
(partdib)sega
the non è altro
sawtooth che
wave
una funzione a rampa ripetuta dall’inizio alla fine. In questo esempio il range
dell’onda a dente di sega è da 0 a 40 (che è 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

1 x[n]

(a)
0 40 n
−1

40 y[n]
0 (b)
50

1 z[n]

(c)

−1

40 y2[n]
0 (d)

1 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 Capitolo 2. Wavetables e campionatori
2.1. THE WAVETABLE OSCILLATOR 31

frequency
frequency
N
N

0
1
1

-1
-1

OUT
OUT
(a)
(b)

Figure
Figura2.3:
2.3: Block diagrams:
Diagrammi (a) for a(a)
a blocchi: wavetable
per un lookup oscillator;
oscillatore (b) with
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 è di venti campioni, cioè, in altri termini, la
frequenza (in cicli al secondo) è R/20.+ x[n]z[n]
(1 − x[n])y[n]
La parte (c) della Figura 2.2 mostra il risultato dell’applicazione della wa-
or, equivalently
vetable lookup,and usually
sulla tabellamore efficient
x[n], to calculate,
tramite il segnale y[n]. Poiché 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à di precessione costante, il risultato sarà
This computation is diagrammed in Figure d’onda
un nuovo segnale periodico la cui forma 2.4. deriva da x[n] e la cui frequenza
è determinata dall’onda a dente di sega y[n].
When using this technique to cross-fade between wavetable oscillators, it
might Lebeparti (d) e to
desirable (e)keep
mostrano un esempio
the phases in cui lapartials
of corresponding wavetable vieneacross
the same letta in mo-
do non uniforme; poiché il segnale di ingresso sale da 0
the wavetables, so that their amplitudes combine additively when they are a N e successivamente
ritorna On
mixed. a 0,the
vediamo che laifwavetable
other hand, apparirà prima
arbitrary wavetables are usedin avanti, poi congelata
(borrowed, for
al suo punto
instance, from afinale,
recordedquindi
sound)tornerà indietro.
there will La tabella
be a phasing effect viene
as the scansionata
different da
waveforms
sinistra a are mixed.
destra e poi, più rapidamente, da destra a sinistra. Come nell’esem-
pioThis scheme can
precedente be extended
il segnale in acontrolla
in input daisy chain to move along
la velocità a continuous
di precessione mentre le
path between
ampiezze a succession
dell’output z[n]ofsono
timbres.
quelleAlternatively,
della wavetableor inx[n].
combination with
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’on-
da fissata a qualsiasi frequenza desiderata, utilizzando il diagramma a blocchi
mostrato in Figura 2.3. Nel blocco superiore c’è un oscillatore – non l’oscilla-
tore 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 bloc-
co, 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-
2.1.
32 L’oscillatore wavetable
CHAPTER 2. WAVETABLES AND SAMPLERS 29

frequency

-1

OUT

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


Figura 2.4: Diagramma a blocchi per la dissolvenza incrociata tra due
wavetables.
2.2 Sampling
te b) aggiunge
“Sampling” un generatore
is nothing more thandirecording
inviluppo e un
a live moltiplicatore
signal per controllare
into a wavetable, and
l’ampiezza
then later playing it out again. (In commercial samplers the entire wavetable sinu-
di uscita nello stesso modo di quello mostrato per l’oscillatore
soidale in Figura
is usually called a1.7 (paginabut
“sample” 9). toSpesso
avoid siconfusion
utilizza we’ll
una wavetable
only use the conword
ampiezza
(RMS
“sample”o dihere
picco) pariaasingle
to mean 1, in number
modo che in an l’ampiezza finale sia solo determinata
audio signal.)
At its simplest,
dall’ampiezza a sampler isdisimply
del generatore a wavetable oscillator, as was shown in
inviluppo.
Figure
Gli 2.3. However,
oscillatori in the earlier
wavetable sonodiscussion we imagined
spesso utilizzati perplaying the oscillator
sintetizzare i suoni con
back atstatici
spettri a frequency high enough
specificati. A tal to be si
fine, perceived
calcolano as inizialmente
a pitch, at least
N 30 Hertz ordi una
campioni
so. In theforma
qualsiasi case ofd’onda
sampling, the frequency
di periodo is usuallyangolare
N (frequenza lower than
2π/N30 )Hertz, and
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
x[n]questo può essere
is a one-second fatto in at
recording, anticipo
an originalrispetto
sampleal processo di sintesi
rate of 44100, so that cheitinvece
potrebbe avvenire in tempo reale.
has 44100 points; and let y[n] in part (b) of the figure have a period of 22050
Mentre
samples. la sintesi
This additiva
corresponds to adiretta
frequencydi forme d’onda
of 2 Hertz. Butcomplesse,
what we hearcome mostrato
is not
nel Capitolo
a pitched sound1, at
è in linea di
2 cycles permassima infinitamente
second (that’s too slow toflessibile
hear as come
a pitch) tecnica
but per
produrre
rather, wetimbri variabili
hear the originalnelrecording
tempo, la x[n] sintesi
playedwavetable è moltoatmeno
back repeatedly doublecostosa
speed.
in We’ve
termini di just reinvented
calcolo, the sampler.
ma richiede un cambio di wavetables per poter cambiare
In general,
il timbro. Unaif we assume
tecnica the sample più
intermedia, rate flessibile
R of the recording is the same
e più costosa di una as the
semplice
output wavetable,
sintesi sample rate,ma if the wavetable
meno has eN meno
flessibile samples, and ifdella
costosa we index it with
sintesi a
additiva, è
sawtooth
quella wave ofmiscele,
di creare period Mche , thevariano
sample nel
is sped up ortra
tempo, slowed down bynumero
un ridotto a factordi of wave-
tables fisse. Se il numero di wavetables è 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à 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ù efficiente da calcolare,


y[n] + x[n](z[n] − y[n]).
Questo calcolo è illustrato nella Figura 2.4.
Quando si utilizza questa tecnica per mixare due oscillatori wavetable, po-
trebbe 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 arbitra-
rie (prese in prestito, ad esempio, da un suono registrato) ci sarà un effetto di
phasing in quanto le diverse forme d’onda sono mescolate.
Questo schema può 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, è 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 è che la registrazione di un segnale
dal vivo in una wavetable e poi riprodurlo di nuovo (nei campionatori commer-
ciali l’intera wavetable è solitamente chiamata “campione”, anziché 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 è semplicemente un oscillatore waveta-
ble, come è stato mostrato in Figura 2.3. Tuttavia, nella discussione precedente
abbiamo immaginato che l’oscillatore avesse una frequenza abbastanza alta, al-
meno 30 Hertz, per essere percepito come un tono. Nel caso del campionamento,
la frequenza è di solito inferiore a 30 Hertz, quindi il periodo, almeno 1/30 di se-
condo e forse molto di più, è 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 corrispon-
de ad una frequenza di 2 Hertz. Ma quello che sentiamo non è un suono, con
intonazione fissata, a 2 cicli al secondo (che è troppo lento per percepirlo co-
me un tono) ma piuttosto sentiamo la registrazione originale x[n] riprodotta
ripetutamente a velocità doppia. Abbiamo appena reinventato il campionatore.
In generale, se si assume che la frequenza di campionamento R della registra-
zione sia uguale alla velocità di campionamento di uscita, se la wavetable ha N
campioni e se la indicizziamo tramite un’onda a dente di sega di periodo M cam-
pioni, il sample viene accelerato o rallentato da un fattore pari a N/M , uguale
a N f /R se f è 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

   
N Nf
H = 12 log2 = 12 log2 .
M R
Di solito la trasposizione desiderata in semitoni (h) è nota e la formula deve
essere risolta per f o N :
2h/12 R
f= ,
N
2h/12 R
N= .
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ò
essere dipendente dal tempo e viene controllata dalla velocità 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 è ciò che la
formula ci dice, poiché
y[n] − y[n − 1] = 1.
D’altra parte, se y[n] = 2n, allora la wavetable è 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 è 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:
questo è noto come effetto “chipmunk”. Non solo sono state trasposte eventuali
periodicità (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ù forti
rispetto ad altre vicine. Anche tali intervalli di frequenza vengono trasposti, e
questo è percepito come un cambiamento nel timbro. Nel linguaggio che verrà
reso più preciso nel paragrafo 5.1, diciamo che l’inviluppo spettrale è trasposto
insieme al tono o ai toni.
Sia in questo che nel paragrafo precedente abbiamo considerato la possibi-
lità 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 trasposi-


zione (meno di quattro ottave ascendenti) darebbero origine ad una frequenza di
ripetizione inferiore a 30, e di solito molto più basso, e che può scendere ancora
di quanto vogliamo.
Il numero 30 è significativo per un altro motivo: è approssimativamente il
numero massimo di eventi separati che l’orecchio può 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à di distinguerli venga meno.
Esiste un continuum tra i campionatori e gli oscillatori wavetable, in quanto
la patch della Figura 2.3 può essere considerata come un campionatore (se la
frequenza di ripetizione è inferiore a circa 20 Hertz) o come un oscillatore wa-
vetable (se la frequenza è maggiore di circa 40 Hertz). È possibile muoversi in
maniera continua tra i due regimi. Inoltre, non è necessario eseguire un’intera
wavetable in un ciclo; con un po’ più di aritmetica possiamo scegliere dei sotto-
segmenti 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 è spesso chiamata sintesi granulare. Per maggiori informazioni sulle
sue possibilità si veda [Roa01].
La Figura 2.5 mostra come costruire un campionatore ciclico (looping sam-
pler) molto semplice. Nella figura, se la frequenza è f e la lunghezza del segmento
di campioni è s, il fattore di trasposizione di uscita è dato da t = f s/R, dove
R è la frequenza di campionamento a cui è 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 è poi modificato per selezionare un desiderato
segmento di campioni nella wavetable.
Può 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 quin-
di 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 sottra-
iamo 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à tra
l’inizio e la fine dei segmenti del wavetable; di questo ci occuperemo nel paragrafo
successivo.
Un ulteriore dettaglio è 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ù
semplice per evitare questo problema è quello di sincronizzare le variazioni dei
valori di s e l con la regolare discontinuità dell’onda a dente di sega; poiché tale
2.2. Campionamento 33

2.2. SAMPLING 35

frequency

0
optional - for
1/2
centered segments

segment size

segment location

-1

OUT

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

segnale salta discontinuamente, la trasposizione non è realmente definita e, se si


sta usando un inviluppo per nascondere la discontinuità, 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 applica-
zioni reali, dobbiamo affrontare la necessità 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à può suonare come un click o un botto a
seconda della wavetable.
Il modo più semplice per fare questa operazione, supponendo che continuere-
mo sempre ad eseguire completamente la wavetable dall’inizio alla fine, consiste
semplicemente nel prepararci in anticipo in modo che il volume cresca in ma-
niera regolare all’inizio e decresca in maniera regolare alla fine. Ciò può essere
fatto anche quando la wavetable viene campionata in tempo reale, moltiplican-
do il segnale di ingresso per un inviluppo a segmenti lineari e temporizzato per
corrispondere alla lunghezza della registrazione.
In molte situazioni, però, è 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à dell’in-
viluppo. Nel paragrafo 1.5 abbiamo già 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 di-
scontinuità, 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 cam-
pionamento 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 è rappresentata in Figura 2.6.
In situazioni in cui sia necessario ripetere un wavetable arbitrario, il modo più
semplice per eseguire continuamente il ciclo è quello di disporre che la modifica
dell’ampiezza sia sincronizzata con il ciclo, utilizzando una wavetable separata
(l’inviluppo). Questo può 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 è quello di
ottenere gli inputs delle due wavetables ciascuno nel proprio range appropriato.
In molte situazioni è desiderabile combinare due o più copie del campionatore
ciclico alla stessa frequenza e ad una relazione di fase specificata. Ciò può essere
fatto in modo che quando uno è alla fine del suo segmento, uno o più si trovano
al centro dello stesso segmento, in modo che l’aggregato produca continuamente
suono. Per ottenere ciò, abbiamo bisogno di un modo per generare due o più
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
Figura 2.6:
2.6: Differing
Differentienvelope
requisitirequirements
di inviluppofor
peroscillators
oscillatoriand samplers: (a) in
e campionatori: (a)
an oscillator,
in un the envelope
oscillatore, l’inviluppo canpuò
be essere
chosenscelto
to conform to any desired
per conformarsi timescale;
a qualsiasi scala
(b) when the
temporale wavetable(b)
desiderata; is aquando
recorded sound, it’sèup
la wavetable untosuono
you to get the envelope
registrato, sta a noi
to
farzero before
si che you hitsia
l’inviluppo thezero
endprima
of thedi
wavetable for the
raggiungere firstdella
la fine time.wavetable per la
prima volta.
wavetable sampler at the same frequency and at a specified phase relationship.
This maylabeprima.
fase con done soSe that when any
vogliamo particular
un’onda a denteone di
is at theche
sega endè,ofad
itsesempio,
segment, a
one or more others is in the middle of the same segment, so that
cicli davanti alla prima, aggiungiamo semplicemente il parametro a e prendiamo the aggregate
is continuously making sound. To accomplish this, we need a way to generate
quindi la parte frazionaria, che è 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,
2.4simplyStretching
we add the parameter dela andtimbro
then take the fractional part, which is the
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
può essere ulteriormentestretching
esteso in un modo complementare, a cui ci riferiremo
come timbre stretching per le ragioni che andremo a spiegare in questo paragrafo.
The wavetable
Ci sono oscillator
anche molti altriofmodi
Section 2.1, which
possibili we extended
per estendere in Section
la sintesi 2.2 tousan-
wavetable, en-
compass grabbinglawaveforms
do, ad esempio, modulazione fromdiarbitrary
frequenzawavetables such as recorded
e il waveshaping, sounds,
ma ne parleremo
may additionally
nei capitoli be extended in a complementary way, that we’ll refer to as
successivi.
timbre
L’idea centralefordel
stretching, reasons
timbrewe’ll develop èinquella
stretching this section. There are l’idea
di riconsiderare also many
di un
other
oscillatore wavetable con un meccanismo per la riproduzione di unafrequency
possible ways to extend wavetable synthesis, using for instance wavetable
modulation
memorizzatoand waveshaping,
(o una sua parte)but we’ll leave
dall’inizio alla them to later
fine. Non chapters.
c’è motivo per cui la fine
The central idea of timbre stretching is to reconsider the
di un ciclo debba coincidere con l’inizio di un altro. Invece, potremmo idea of the wavetable
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ù strettamente in modo che si sovrappongano. L’unico parametro
disponibile nel paragrafo 2.1 – la frequenza – è 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

size
N

location

1 1

-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

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
Figura between per
2.8: Una tecnica them.la The relative phase
generazione is controlled
di due by the
o più onde pa-
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 è 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 50

10 30

(b)

15 25

(c)
20 40 60

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


Figura 2.9:(b)Una
duty cycle; forma
at 50 d’onda
percent; (c) atviene riprodotta con un periodo di 20 campioni:
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
è 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 è R/20 se R è 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
è ancora di 20, la forma d’onda è compressa in metà, centrata, del periodo (10
campioni); o in altre parole, il duty cycle – la quantità 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 è zero.
Nella parte (c), la forma d’onda viene allungata a 40 campioni e, dal mo-
mento che viene ripetuta ogni 20 campioni, le forme d’onda si sovrappongono.
Il duty cycle è 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 ω è la frequenza angolare (pari a π/10 nell’esempio in quanto il periodo


è 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à periodo e sommiamo le due onde, otteniamo
esattamente la forma d’onda originale a frequenza doppia:
π
x100 [2n] = x50 [n] + x50 [n + ]
ω
dove ω è la frequenza angolare (e quindi π/ω è la metà 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%

ampli-
tude 100%

50%

1 2 3 4 5
partial number

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

We see that squeezing the waveform by a factor of 2 has the effect of stretch-
di 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
fattori che non possiamo ancora controllare. È sufficiente dire, per il momento,
by a factor of two squeezes the Fourier series by two. By the same sort of ar-
che se la forma d’onda si collega con continuità con l’asse orizzontale a entrambe
gument, in general it turns out that stretching the waveform by a factor of
le estremità, le parziali dispari agiscono globalmente come quelle pari. Per ren-
any positive number f squeezes the overtones, in frequency, by the reciprocal
dere questo fatto più 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.
in modo che, se le ampiezze della serie di Fourier di x200 sono The figure emphasizes the
indicate con
relationship between
c0 , c1 , . . . , si ha: the three spectra by drawing curves through each, which,
on inspection, turn out toc0be=the 2a0same
, c1 =curve,
2a2 , c2only
= 2a stretched
4 differently; as the
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 ge-
stretched by a factor of 100. Working backward, this would allow us to inter-
nerale 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 ap-
contour (the original one) with 99 new ones. Already in the figure the 50 per-
prossimativamente, e l’approssimazione è 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à (come vedremo più avanti, la forma d’onda
può 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 è 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à allungato per un fattore di 100. Lavorando all’indietro,
ciò 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à
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ù densamente; ed
il limite è lo spettro “reale” della forma d’onda.
Questo “vero” spettro è udibile solo con duty cycles adeguatamente bassi.
All’esempio con duty cycle al 200% manca effettivamente il picco nello spettro
ideale (continuo) perché il picco si trova al di sotto del primo armonico. In
generale, i duty cycles più alti mostrano la curva ideale alle risoluzioni più
basse.
Il timbre stretching è una tecnica estremamente potente per la generazione di
suoni con spettri sistematicamente variabili. In combinazione con le possibilità
di missaggio di forme d’onda (paragrafo 2.1) e di selezionare forme d’onda, va-
riabili infinitamente, dai campioni registrati (paragrafo 2.2), è 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 è abbastanza elevato da essere udibile come un
tono, il parametro “lunghezza” s può 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 è la differenza tra il risultato della ricerca sulla wavetable e il valore
“ideale” della funzione in quel punto. Lo studio più 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à dello schema di interpolazione e il periodo della sinu-
soide. In generale, più lungo è il periodo della sinusoide, più il risultato sarà
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 soddisfa-
re 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ò avere due com-
ponenti: in primo luogo, il segnale continuo (il risultato teorico della lettura
continua della wavetable nel tempo, come se il sample rate di output fosse in-
finito) potrebbe non essere una sinusoide pura; e, in secondo luogo, l’ampiezza
potrebbe essere sbagliata (è anche possibile ottenere errori di fase, ma solo per
mancanza di attenzione).
In questo trattamento considereremo solo metodi di interpolazione polino-
miali come arrotondamento, interpolazione lineare e interpolazione cubica. Que-
sti metodi riguardano la valutazione di polinomi (di grado zero, uno e tre, ri-
spettivamente) nei valori compresi tra due punti del wavetable. L’idea è 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ù vicini
della wavetable. Per l’interpolazione ad un punto (un polinomio di grado zero)
vuol dire prendere a0 uguale al più 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ù vicino a sinistra di x (che scriviamo come bxc) e quindi la
formula per l’interpolazione lineare è:

yINT (x) = y[x0 ] + (y[x0 + 1] − y[x0 ]) · (x − x0 )

che è un polinomio, come nella formula precedente, con

a0 = y[x0 ],

a1 = y[x0 + 1] − y[x0].

In generale, è possibile valutare esattamente un polinomio di grado n−1 tramite


una scelta di n punti qualsiasi purché 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 interpo-
lata e la sinusoide più adatta. Questo è 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é l’errore è la differenza tra una
2.5. INTERPOLATION 45

42 Capitolo 2. Wavetables e campionatori

original best fit


interpolated

error

Figure 2.11: Linear interpolation of a sinusoid: (upper graph) the original sinu-
Figura 2.11: Interpolazione lineare di una sinusoide: (grafico superiore) la sinu-
soid, the interpolated sinusoid, and the best sinusoidal fit back to the interpo-
soide 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 è 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 waveta-
ble diminuisce di 12 dB ogni volta che le dimensioni della tabella raddoppiano
(questa regola è utile solo per tabelle con 4 o più punti).
L’interpolazione a quattro punti (cubica) funziona in modo simile. La for-
mula di interpolazione è:
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 è la parte frazionaria dell’indice. Per le tabelle con 4 o più punti,
2.5. Interpolazione 43
46 CHAPTER 2. WAVETABLES AND SAMPLERS

period interpolation points


1 2 4
2 -1.2 -17.1 -20.2
3 -2.0 -11.9 -15.5
4 -4.2 -17.1 -24.8
8 -10.0 -29.6 -48.4
16 -15.9 -41.8 -72.5
32 -21.9 -53.8 -96.5
64 -27.9 -65.9 -120.6
128 -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
raddoppiando (cubic)diinterpolation
il numero punti sulla tabellaworks similarly.
si tende The interpolation
a migliorare l’errore RMS formula
is:
di 24 dB. La Tabella 2.1 mostra l’errore RMS calcolato per sinusoidi con vari
periodi e per interpolazione a 1, 2 e 4 punti yINT(una
(x) quantità
= leggermente diversa è
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[x ]
e fase, fornendo risultati leggermente 0più pessimisti (si veda anche [Har87]). 0
Il dominio−(fin+input
1)f (f − 2)/2 per
consentito · y[xla0 ricerca
+ 1] +su(ftabelle (f − 1)/6
+ 1)fdipende dal·numero
y[x0 + di 2]
punti di interpolazione. In generale, quando si utilizza l’interpolazione a k punti
inwhere f = xcon
una tabella −N x0 punti,
is thel’input
fractional part of
può variare theintervallo
su un index. di ForN tables
+ 1 − kwith 4 or
more points, doubling the number of points on the
punti. Se k = 1 (cioè non c’è alcuna interpolazione), il dominio è compreso table tends to improve the
RMS error by 24 dB. Table 2.1 shows the calculated
tra 0 e N (compreso l’estremo a 0 ma escludendo quello a N ) assumendo che RMS error for sinusoids at
i various
valori diperiods for 1,
input siano 2, and(come
troncati 4 pointvieneinterpolation.
effettuato in Pd (A per
slightly different
la ricerca non- quantity
interpolata).
is measuredIlin dominio
[Moo90, −1/2 a There,
è dap.164]. N − 1/2the se, invece,
errors arrotondiamo
in amplitudel’inputand phase are
alalso
numero
added intero più vicinoslightly
in, yielding anziché more
interpolare. In entrambi
pessimistic i casi
results. See il dominio si
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
funzione su unNdominio
points,dithe input may
lunghezza N − range over an interval
1. Per interpolazione of N +
a quattro 1 − k points.
punti,
If k = 1 (i.e., no interpolation at all), the domain is
non possiamo ottenere valori per gli inputs tra 0 e 1 (non avendo i due punti from 0 to N (including the
endpoint at 0 but excluding the one at N ) assuming input
richiesti a sinistra di tali inputs) e nemmeno possiamo per lo spazio tra gli ultimi values are truncated
(as punti
due is done
(N − for2 enon-interpolated
N − 1). Quindi intable questolookup in Pd). varia
caso il dominio The da domain
1aN− is2from -1/2
etohaN la −
lunghezza
1/2 if, N − 3.
instead, we round the input to the nearest integer instead of
Le forme d’onda
interpolating. periodiche
In either case, memorizzate
the domain nelle wavetables
stretches over a richiedono
length of un N points.
trattamento speciale alle estremità della tabella. Ad esempio,
For two-point interpolation, the input must lie between the first and last supponiamo
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 inputsx[n]between 0 and
= 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,
ends dobbiamo
the table. Forripetere
example,il primo puntowe
suppose (n = 0) alla
wish to fine della
store tabella,
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

tabosc4~ table10
|
(OUT)

Figura2.12:
Figure 2.12:AUn oscillatore
wavetable wavetable:
oscillator: B01.wavetables.pd.
B01.wavetables.pd.

For two-point interpolation,


Per l’interpolazione we needpunti,
a quattro N + 1ilpoints:
ciclo deve essere regolato per iniziare
al punto n = 1, poiché non è possibile ottenere correttamente valori interpolati
per inputs inferiori a x[n]
uno.=Secos(2πn/N
quindi un), ciclo
n = 0, . . . ,wavetable
della N è organizzato tra 1
a N , dobbiamo fornire punti aggiuntivi per 0 (copiati
In other words, we must repeat the first (n = 0) point at the end, da N ) e anche perthe
so that N +1
e N + 2, copiati da 1 e 2, per creare una tabella di
last segment from N − 1 to N reaches back to the beginning value. lunghezza N + 3. Per la
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
one. If, then, one cycle − 1)/Nis),arranged
the wavetable n = 0, . .from
.,N +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
the Esempi
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 oscillato-
2.6 Examples
re wavetable, che riproduce da una wavetable chiamata “table10”. Qui vengono
mostrate due nuovi oggetti primitivi di Pd. Il primo è il wavetable stesso, che
Wavetable
appare a destra oscillator
nella figura. Si può utilizzare il mouse sulla wavetable per cam-
biare la sua forma
Example B01.wavetables.pd,e sentire, conseguentemente,
shown il cambiamento
in Figure 2.12, implements di suono.
a wavetable os- Non
mostrata nella figura, ma utilizzata nella patch, è la funzione
cillator, which plays back from a wavetable named “table10”. Two new Pd di Pd per calcola-
re automaticamente
primitives are shown here.le wavetables
First is thecon specifiche
wavetable ampiezze
itself, which per le parziali,
appears at rightche è
inspesso preferibile
the figure. You cana disegnare
“mouse” on manualmente
the wavetablele forme
to change d’onda. È anche
its shape possibile
and hear
leggere
the sounde change
scrivereastabelle da Not
a result. file (testo
shown oinsuono) per but
the figure scambiare dati con
demonstrated in altri
programmi.
the L’altra
patch is Pd’s novità
facility è una classe calculating
for automatically di oggetti: wavetables with specified
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
data with other programs. (cubica). Nell’esempio,
other novelty is an object il nome
class: della tabella, “ta-
ble10”, è specificato come creation argument per l’oggetto tabosc4∼ (è anche
tabosc4 ∼passare
possibile : a wavetable oscillator.daThe
dinamicamente una“4” indicatesall’altra
wavetable that thisinviando
class uses 4-
messaggi
point (cubic) interpolation.
appropriati all’oggetto). In the example, the table’s name, “table10”, is
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à. 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 au-
dio. La patch B02.wavetable.FM.pd (non mostrata qui) utilizza una coppia di
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ù generale. L’esempio B03.tabread4.pd (Figura 2.13) mostra la tecnica di
timbre stretching discussa nel paragrafo 2.4. Questo è 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 fre-
quenza come input e legge automaticamente la forma d’onda ripetutamente,
tabread4∼, oggetto più 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), è 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à
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 og-
getto 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”, è 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 aggiungia-
mo 1, spostando in effetti l’intervallo a destra di un punto. Questo riscalamento
è 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ò, la moltiplicazione non è per una costante
128, ma per una quantità variabile controllata dal parametro “squeeze”. La
funzione dei quattro oggetti a destra della patch è 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ù elementi. I creation arguments stabili-
scono 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 spe-
cificati) aggiornano i valori degli argomenti dei messaggi e, se l’ingresso più a
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ù recente che lascia l’oggetto pack è “206 50”. L’effetto di ciò
46 Capitolo 2. Wavetables e campionatori

2.6. EXAMPLES 49

frequency squeeze
162 206
phase
generation --> phasor~ pack 0 50
range
adjustment --> *~ line~

+~ 1 +~ 128

tabread4~ waveform12

<--click to graph

tabwrite~ wave-out12

waveform12

wave-out12

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

sull’oggetto line∼ sotto è quello di fare una rampa a 206 in 50 millisecondi; in


generale l’output dell’oggetto line∼ è un segnale audio che segue con regola-
rità 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ù. Se il valore è maggiore di
128, l’effetto è che il phasor riscalato trascorre una parte del suo ciclo bloccato
alla fine della wavetable (che blocca il suo ingresso a 129). Il risultato è 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 è
allungato per un fattore di circa 1/2.
Per semplicità, questa patch è 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ò può essere evitato usando un metodo
leggermente più complicato: sottrarre 1/2 dal phasor∼, moltiplicarlo per 128 o
più, quindi aggiungere 65 anziché 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) è
controllato muovendo il mouse in una number box. Una riscalatura conveniente
per la number box è 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à; 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ù 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 è 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 rende-
re il suono più continuo, ma risultano essenziali per rendere il suono intelligibile.
Se l’indice nella ricerca viene cambiato semplicemente ogni volta che il mouse
si è 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à 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 Capitolo 2. Wavetables e campionatori
2.6. EXAMPLES 51

0 <-- read point, 0-100


* 441 convert to SAMPLES

pack 0 100

line~

tabread4~ sample-table

hip~ 5 high pass filter to cut DC


|
(OUT)

sample-table

--- 44103 samples ---

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

Campionatori a loop
Nella maggior parte delle situazioni, si ha necessità di un modo più automatiz-
zato 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ù 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, sviluppere-
mo un lettore automatico di samples, che, anche se solo uno dei molti possibili
approcci, è un potente lettore che viene spesso utilizzato.
Le patches B05.sampler.loop.pd e B06.sampler.loop.smooth.pd mostrano co-
me fare ciò: la prima nel modo più semplice possibile ed la seconda (rappre-
sentata 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à coseno
(a sinistra). Questi due vengono moltiplicati e il prodotto è filtrato da un passa-
alto prima di uscire in output. La lettura della wavetable è 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 è 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ò essere 0 poiché 1 è 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 è 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à 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 è abbastanza semplice: ag-
giungiamo il valore del “punto di lettura”, in campioni, all’indice della wavetable
e procediamo come prima. Per evitare le discontinuità nell’indice, “ammorbi-
diamo” il valore del punto di lettura usando gli oggetti pack e line∼, come
abbiamo fatto nel primo esempio di campionatore (Figura 2.14). Ciò 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 va-
riano nel tempo, la trasposizione è pari alla frequenza moltiplicata per la chunck
size (come sempre, utilizzando appropriate unità 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à la trasposizione momenta-
nea, spesso in modi chiaramente percepibili, come si può 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
phasor~ (hundredths of a phasor~ 0
second) -~ 0.5
0 chunk size
*~ 0.5
* 441 0
cos~
-~ 0.5 *~ * 441

*~ 0.5 +~ 1 samphold~
*~ read point
cos~ tabread4~ table18 0
+~ 1
*~ * 441
hip~ 5
pack 0 100
|
(OUT) line~

samphold~

+~
(a)
tabread4~ table20

*~

hip~ 5
|
(OUT)
(b)

Figure 2.15: (a) a looping sampler with a synchronized envelope


Figura 2.15: (a) un campionatore
(B06.sampler.loop.smooth.pd); a loopbutcon
(b) the same, withuna inviluppo
control for sincronizza-
read lo-
to (B06.sampler.loop.smooth.pd);
cation (B08.sampler.nodoppler.pd). (b) lo stesso, ma con un controllo per la
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à di sample-and-hold (questo nome risulterà 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’in-
gresso del lato destro (anche esso un segnale audio digitale, chiamato trigger)
causa il cambiamento del campione memorizzato con un nuovo, sempre prove-
niente dall’ingresso sinistro. L’unità acquisisce un nuovo campione ogni volta
che il valore numerico del trigger scende da un campione all’altro. Questo è
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 ag-
giornare i valori della chunk size e del punto di lettura, esattamente quando il
phasor riparte, in quello stesso momento l’inviluppo cosinosoidale è a zero in
modo che l’effetto delle modifiche istantanee non si senta. In questa situazione
possiamo applicare la formula di trasposizione più semplice per le Looping Wa-
vetables per mettere in relazione, la frequenza, la chunk size e la trasposizione.
Ciò è viene fatto nell’esempio B09.sampler.transpose.pd (non mostrato).

Campionatore a loop con sovrapposizione


Come descritto nel paragrafo 2.3, a volte è auspicabile utilizzare due o più cam-
pionatori a loop sovrapposti per produrre un suono ragionevolmente continuo
senza dover utilizzare inviluppi troppo rapidi alle estremità del loop. Ciò è par-
ticolarmente probabile in situazioni in cui il segmento in loop è 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. Que-
sto è 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ò 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ò avere più 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 dupli-
cato, utilizzando calcoli identici di “chunck-size-samples” (un flusso di messaggi)
52 Capitolo 2. Wavetables e campionatori

2.6. EXAMPLES 55

loadbang 0 <-- transposition

0 <-- transposition, r chunk-size r precession


(tenths of a halftone)
t b f t b f
expr pow(2, $f1/120)
r chunk-size expr (pow(2, $f1/120)-$f3)/$f2

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

+~ 0.5 s~ phase 0 <-- precession loadbang


(percent)
wrap~ * 0.01 chunk
10
size
s~ phase2 / 0.9 s precession
10 <-(msec)
(chunk size and read point phasor~ * 0.001
controls not shown) *~ 0.9 s chunk-size
r chunk-size-samples s~ read-pt
samphold~ r~ phase
r chunk-size
r~ phase
samphold~ r~ phase
*~ r~ read-pt r~ phase *~ r~ phase
+~ 1 r~ phase r~ phase
-~ 0.5 +~ r~ read-pt
+~ samphold~
*~ 0.5 *~ 44100 -~ 0.5
tabread4~ table22 +~ 1 *~ 0.5
cos~
*~ tabread4~ table23
cos~
+~ <- (second reader
*~
not shown)
hip~ 5 <- (second reader
+~
| not shown)
(OUT) hip~ 5
|
(OUT)
(a) (b)

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

e di “read-pt” (un segnale audio smussato come prima). Tuttavia, il segna-


le 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 lettu-
ra 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è che se la velocità
della precessione è ovunque vicina ad uno (cioè la velocità naturale di ascolto
della wavetable registrata), e se non c’è molta trasposizione, diventa preferibile
utilizzare i grani più grandi e abbassare di conseguenza la frequenza di ripeti-
zione (mantenendo costante il prodotto per avere la trasposizione desiderata).
Tuttavia, se è consentito ottenere grani di grandi dimensioni, non è più con-
veniente quantizzare i cambi di controllo sui punti di wraparounds della fase,
poiché 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 è molto più difficile
da cambiare a metà ciclo). Invece, utilizziamo la velocità (conosciuta) di pre-
cessione 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à), la frequen-
za scenderà 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ò 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 è 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 è dato da:

t = p + cf

e risolvendo per f si ha
t−p 2h/12 − p
f= =
c c
dove h è la trasposizione desiderata in semitoni. Questa è la formula usata
nell’oggetto expr.

Esercizi
1. Se un wavetable con 1000 campioni viene riprodotto alla trasposizione uni-
taria, 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 è trasposto il suono?
3. Sempre assumendo una wavetable di un secondo, se la riproduciamo pe-
riodicamente (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 wave-
table 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à di una wavetable contiene un ciclo di sinusoide di ampiezza


di picco uno. La seconda metà contiene zeri. Qual è 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 è 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 descri-
vere 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 è 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 è quella buona nell’ambito dei segnali audio digitali, mentre
quella che nasconde un “segreto” tra i campioni non lo è. Una funzione che è
“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,
introdurre il famoso Teorema di Nyquist. Ciò afferma (detto in maniera infor-
male) che se una funzione è una combinazione finita o addirittura infinita di
sinusoidi, nessuna delle cui frequenze angolari supera π, allora, almeno teorica-
mente, può 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 è la frequenza di campionamento. Il periodo corrispondente
è due campioni. La frequenza di Nyquist è la migliore che possiamo ottenere
nel senso che qualsiasi sinusoide reale di frequenza superiore è uguale, sugli
interi, a una la cui frequenza è inferiore a quella di Nyquist, ed è 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 CHAPTER 3. AUDIOCapitolo 3. Calcoli COMPUTATIONS
AND CONTROL audio e di controllo

7
0

Figure 3.1: Two real sinusoids, with angular frequencies π/2 and 3π/2, showing
Figura
that 3.1:
they Due sinusoidi
coincide reali,Acon
at integers. frequenze
digital audioangolari π/2 edistinguish
signal can’t 3π/2, che mostrano
between
che coincidono
the two. sui numeri interi. Un segnale audio digitale non può distinguere
tra le due.

reconstructed by the ideal interpolation process. For instance, a sinusoid with


ad esempio π + ω, può 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((w−−ω)n
=cos((π π)n−−φ)
φ)
for
perallogni
integers n. (If(se
n intero n weren’t
n non an integer
fosse the firstlastep
un intero, would
prima fail.) So a potrebbe
uguaglianza sinusoid
with frequency between π and 2π is equal, on the integers
essere falsa). Quindi una sinusoide con frequenza tra π e 2π è uguale, almeno at least, to one with
frequency between 0 and π; you simply can’t tell the
sugli interi, ad una con frequenza tra 0 e π; in parole povere non è possibiletwo apart. And since
any conversion
distinguere hardware
le due sinusoidi.should do thequalsiasi
E poiché “right” hardware
thing anddireconstruct
conversionethe lower-
dovrebbe
frequency
fare la cosa “giusta” e ricostruire la sinusoide a bassa frequenza, qualsiasicome
sinusoid, any higher-frequency one you try to synthesize will altra
out your speakers
sinusoide ad alta at the wrong
frequenza chefrequency—specifically,
si tenta di sintetizzare you willdagli
uscirà hear altoparlanti
the unique
frequency betweenerrata
a una frequenza 0 and– π in that the higher
particolare, frequency
si sentirà lands on
quell’unica when reduced
frequenza tra 0 e
in the above way. This phenomenon is called foldover,
π a cui la frequenza più alta si riduce tramite le precedenti formule. because the half-line
Questo
of frequencies
fenomeno fromil 0nome
prende to ∞diisfoldover,
folded back
perchéandla forth, in lengths
semiretta of π, onto
delle frequenze dathe
0a
interval from 0 to π. The word aliasing means the same
∞ viene ripiegata, avanti e indietro in segmenti di lunghezza π, sull’intervallo thing. Figure 3.1
shows
da 0 athat sinusoids
π. La parola of angular
aliasing frequencies
indica lo stessoπ/2 and 3π/2,
effetto. for instance,
La Figura can’t per
3.1 mostra, be
distinguished as digital audio signals.
esempio, che sinusoidi con frequenze angolari π/2 e 3π/2 non producono segnali
We digitali
audio conclude that when, for instance, we’re computing values of a Fourier
distinguibili.
seriesConcludiamo either
(Page 12), as a wavetable
che quando, ad esempio, or as a real-time
stiamo calcolandosignal, we had
i valori better
di una se-
leave out any sinusoid in the sum whose frequency exceeds
rie di Fourier (pagina 11), sia come wavetable che come segnale in tempo reale, π. But the picture in
general
sarebbeismeglio
not this simple, since
tralasciare, nella most
somma, techniques
qualsiasiother than laadditive
sinusoide synthesis
cui frequenza su-
don’t lead to neat, band-limited signals (ones whose components
peri π. Ma tuttociò, in generale, non è cosı̀ semplice, poiché la maggior stop at some
parte
limited frequency).
delle tecniche, tranne Forlaexample, a sawtooth
sintesi additiva, wave of frequency
non producono ω, of the
segnali chiari form
e limitati
put out by Pd’s phasor~ object but considered as a continuous
in banda (quelli le cui componenti si fermano ad una certa frequenza limitata). function f (t),
expands to:
Ad esempio, un’onda a dente di sega di frequenza ω, della forma prodotta dal-
l’oggetto phasor∼ in ! "
1 Pd,1 ma considerata come una
sin(2ωt) funzione continua
sin(3ωt) f (t), si
esprime come f (t) = − sin(ωt) + + + · · ·
2 π 2 3
 
1 1 sin(2ωt) sin(3ωt)
(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
è solo 40 dB più 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, forni-
scono parziali che possono diminuire in ampiezza più rapidamente di 1/n, come
nell’esempio dell’onda a dente di sega, e sono quindi più accettabili per lavorare
in digitale. In ogni caso, è sempre una buona idea tenere a mente la possibilità
di foldover, e addestrare le orecchie per riconoscerlo.
La prima linea di difesa contro il foldover è semplicemente quella di utilizzare
frequenze di campionamento elevate; è una buona pratica quella di utilizzare
sistematicamente la frequenza di campionamento più alta che sia facilmente
gestibile dal computer. La frequenza pratica più 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 è 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 è 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ò 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à il primo a riflettere il risultato del calcolo.
In un sistema non in tempo reale (come Csound nella sua forma classica),
ciò 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 tem-
po del successivo campione in output (audio) interessato, è 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 è quello di mantenere i calcoli indipendenti dal tempo
effettivo di esecuzione del computer, che può 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ò 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 CHAPTER 3. AUDIOCapitolo 3. Calcoli COMPUTATIONS
AND CONTROL audio e di controllo

audio output
(a) 0 1 2

. . . control
0 1 1 2 2 3 audio
logical time

(b) 0 1 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
size 3.2:sample;
of one Timeline(b) per
withilacalcolo audio
block size digitale
of four e di controllo: (a) con un
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
instantaneously. calcoloofaudio
As a result this, in tempo reale
electronic musico meno, ognuna con
computations, gli stessi
if done cor-
inputs, dovrebbero avere risultati identici.
rectly, are deterministic: two runs of the same real-time or non-real-time audio
La Figura each
computation, 3.2 (parte
havinga)themostra schematicamente
same inputs, should havecome il tempo
identical logico e i
results.
calcoli sui campioni siano allineati. I campioni audio vengono calcolati a in-
Figure 3.2 (part a) shows schematically how logical time and sample com-
tervalli 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 calco-
calculations 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 adopt-
uno certain
ing e cosı̀ via (qui si stanno
conventions about adottando alcune
labeling that couldconvenzioni
be chosen sull’etichettatura
differently. For
che potrebbero essere scelte in modo diverso. Ad esempio,
instance, there is no fundamental reason control should be pictured non c’è una ragione
as coming
fondamentale per cui i calcoli di controllo devono essere
“before” audio computation but it is easier to think that way.) rappresentati come se
arrivassero “prima” dei calcoli audio, ma è tuttavia più 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ù di un campione alla volta. Utilizzando la varia-
computation 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’è 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ò è 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
3.3. Flussi STREAMS
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
object medio
incurs di uneach
overhead campione.
time it isSecalled,
la dimensione del blocco
equal to perhaps è uno,
twenty questo
times the
significa
cost un overhead
of computing one del
sample2,000%; se è di Ifsessantaquattro
on average. (come
the block size is in Pd,
one, this per
means
default),
an overheadl’overhead è solo
of 2,000%; if itdiiscirca il 30%.(as in Pd by default), the overhead is
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 ester-
ne al calcolo
Control complessivo.
computations may Esempi
come from di calcoli di controllo
a variety generati
of sources, both internamente
internal and
includonotoil the
external sequencing (in cui i calcoli Examples
overall computation. di controlloofdevono avvenire
internally a tempi con-
engendered pre-
determinati)
trol computationso il rilevamento di caratteristiche
include sequencing (in whichdell’output in uscita (admust
control computations esempio,
take
per l’osservazione
place at pre-determined dei passaggi
times)sullo zero indetection
or feature un segnale). Quelli
of the generati
audio outputester-
(for
namente watching
instance, possono provenire da dispositivi
for zero crossings di inputExternally
in a signal). come i controllers
engendered MIDI,onesil
mouse
may e lafrom
come tastiera,
inputi devices
pacchettisuch di as
rete
MIDI e cosı̀ via. In ogni
controllers, caso, i and
the mouse calcoli di con-
keyboard,
trollo possono
network packets, verificarsi
and so on.a intervalli
In any irregolari,
case, control a differenza dei campioni
computations may occur audio
at
che corrispondono
irregular al ticchettio
intervals, unlike audio costante
samples which di un orologio
correspond di campionamento.
to a steadily ticking
sampleAvremmo
clock. bisogno di un modo per descrivere il flusso di informazioni tra i
calcoli
We di controllo
will need ae wayquelliofaudio, che baseremo
describing sulla nozione
how information flowsdi flusso
betweendi controllo
control
(control
and audiostream). Questo altro
computations, whichnon we èwill
chebasesemplicemente
on the notion unaofraccolta
a control di stream.
numeri
– eventualmente vuota – che si presentano come risultato
This is simply a collection of numbers—possibly empty—that appear as a re- di calcoli di controllo,
regolarmente
sult of controlocomputations,
irregolarmentewhetherdistanziati nel tempo
regularly logico. Il flusso
or irregularly spaced di in
controllo
logical
più semplice possibile non ha alcuna informazione
time. The simplest possible control stream has no information other than diversa rispetto a quello di
a time
una sequenza
sequence: temporale
......,,t[0],
t[0], t[1],
t[1], t[2],
t[2], .. .. ..
Anche se the
Although i valori
timedivalues
tempoare
sono preferibilmente
best given in units assegnati in their
of samples, unità values
di campioni,
aren’t
iquantized;
loro valorithey
nonmay
vengono quantizzati; essi possono essere numeri reali
be arbitrary real numbers. We do require them to be arbitrari.
sorted
Richiediamo,
in nondecreasingperò, che siano ordinati in ordine non decrescente:
order:

······ ≤
≤ t[0] ≤ t[1]
t[0] ≤ ≤ t[2]
t[1] ≤ ≤ ·. ·. ·.
t[2] ≤

Ciascun
Each itemelemento della sequenza
in the sequence prende
is called il nome di evento.
an event.
Control streams may be shown graphically asgraficamente
I flussi di controllo possono essere visualizzati come
in Figure 3.3. nella Figura
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
(è 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 è 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 è approssimativamente analogo a un “con-
troller MIDI”, i cui valori cambiano irregolarmente, ad esempio quando un con-
troller fisico viene spostato da un esecutore. Altre sorgenti di flusso di controllo
possono avere maggiori velocità di cambiamento e/o più precisione. D’altra par-
te, 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 spe-
cificati 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ù semplice e veloce possibile. Ogni campione
audio di uscita rispecchia semplicemente il valore più 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é dei due punti (4.75, 0) e (7.5, 1),
il più recente ha ancora valore 1.
La conversione più veloce possibile è più appropriata per i flussi di controllo
che non cambiano frequentemente rispetto alla dimensione del blocco. I suoi
vantaggi principali sono la semplicità di calcolo e la risposta più 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 è 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ù vicino.
Ogni nuovo valore del flusso di controllo al tempo t influenza i campioni di uscita
partendo dall’indice btc (il più grande intero che non supera t). Ciò equivale
ad utilizzare la conversione più veloce possibile con una dimensione di blocco
pari a 1; in altre parole, la conversione al campione più vicino nasconde l’effetto
della maggiore dimensione del blocco. Ciò è migliore rispetto alla conversione
più 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ù 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 16

. . .
0 4 8 12 16

(2, 1) (7.5, 1) (13, 1) (18.5, 1)

(4.75, 0) (10.25, 0) (15.75, 0)

b
0 1 2 3 4 8 12 16

. . .
0 4 8 12 16

c
0 1 2 3 4 8 12 16

. . .
0 4 8 12 16

Figure 3.4: Three ways to change a control stream into an audio signal: (a) as
Figura
fast 3.4: Tre(b)
as possible; modi per to
delayed convertire un sample;
the nearest flusso di(c)controllo in un segnale
with two-point interpo- audio:
lation
(a) il for
piùhigher delay accuracy.
velocemente possibile; (b) ritardato al campione più 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 è un intero
e f è la parte frazionaria del valore temporale (quindi 0 ≤ f < 1). Il primo
punto interessato, all’output audio, sarà il campione all’indice n. Ma invece di
impostare l’output su y come prima, lo impostiamo a

f x + (1 − f )y,

cioè 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 è
precedentemente più vicino a n. Nell’esempio mostrato, la transizione da 0 a 1
al tempo 2 dà
0 · x + 1 · y = 1,

mentre la transizione da 1 a 0 al tempo 4.75 dà:

0.75 · x + 0.25 · y = 0.75.

Questa tecnica fornisce una rappresentazione ancora più vicina del segnale di
controllo (almeno la parte di esso che si trova al di sotto della frequenza di
Nyquist) a scapito di più calcolo e un ritardo leggermente maggiore.
I flussi numerici di controllo possono anche essere convertiti in segnali au-
dio utilizzando funzioni di rampa per smussarne le discontinuità. Questo vie-
ne spesso applicato quando un flusso di controllo è 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 è 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ù 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’ordi-
ne 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 ri-
petutamente ogni pochi millisecondi, la variazione delle lunghezze del segmento
provocherà una aperiodicità udibile.
Per situazioni come queste, possiamo migliorare l’algoritmo di generazio-
ne 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
0 4 8 12

b
3 9 15

. . .

3 9 15

Figure
Figura 3.5:
3.5: Line segmentdel
Smussatura smoothing
flussi di ofcontrollo
numericnumerico
control streams:
tramite (a) aligned (a)
segmenti: to
block boundaries; (b) aligned to nearest sample.
allineato agli estremi del blocco; (b) allineato al campione più vicino.

For
Ad example, suppose we want
esempio, supponiamo to repeat aripetere
che vogliamo recordedunsound
suonoout of a wavetable
registrato su una
100 times per second, every 441 samples at the usual sample rate.
wavetable 100 volte al secondo, ogni 441 campioni alla frequenza di campiona- Rounding
errors
mento due to blocking
usuale. Gli erroriatdi64-sample boundaries
arrotondamento dovuticould detune the
alla creazione di playback
blocchi diby64
as much as a whole tone in pitch; and even rounding to one-sample
campioni potrebbero modificare l’intonazione di riproduzione anche di boundaries
un intero
could
tono; eintroduce variations up
anche arrotondando to about
a estremi di 0.2%,
un soloorcampione
three cents. This introdurre
potrebbe situation
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 Converting from audio signals to numeric


3.4 Conversione
control da segnali audio a flussi nume-
streams
rici di controllo
We sometimes need to convert in the other direction, from an audio signal to
aA sporadic
volte abbiamo
one. To bisogno di convertire
go in this direction,nell’altra
we somehow direzione:
provide daaun segnale
series audio
of logical
a uno (a
times sporadico. Per andare
time sequence), as wellinasquesta
an audio direzione, dobbiamo,
signal. For output we in qualche modo,
want a control
fornire una
stream serie dithe
combining tempi
timelogici (una with
sequence sequenza
valuestemporale)
taken from e un
thesegnale audio.
audio signal.
We
Comedo output
this when we want
vogliamo untoflusso
incorporate
di controllothe signal’s value as
che combina la part of a control
sequenza tempo-
computation.
rale con i valori presi dal segnale audio. Questo viene fatto quando vogliamo
incorporare
For example,il valore del segnale
we might come parte
be controlling di un calcolo
the amplitude of adisignal
controllo.
using a line~
Ad as
object esempio,
in Examplepossiamo controllare
A03.line.pd (Page l’ampiezza
21). Suppose di unwe segnale
wish to utilizzando
turn off the un
oggettoatline∼
sound a fixedcome
rate ofnell’esempio
speed instead A03.line.pd (pagina
of in a fixed amount19).ofSupponiamo di voler
time. For instance,
spegnere
we might ilwant
suono ad unathe
to re-use fissata frequenza
network di velocità
for another soundanziché
and wish rispetto
to mute adituna
as
quantitàasfissa
quickly di tempo.
possible Ad esempio,
without potremmo
audible artifacts; wevoler riutilizzare
probably la rete
can ramp it per
off un
in
altrotime
less suono e desideriamo
if the disattivarlo
current amplitude il più
is low velocemente
than possibile
if it is high. To dosenza
this weartefatti
must
udibili; aprobabilmente
confect message to thepossiamo
line~ objectspegnerlo conituna
to send rampa
to zero in anin amount
meno tempo of time se
l’ampiezza
we’ll calculateattuale
on the è bassa
basis ofpiuttosto
its current cheoutput
se è alta.
value.A This
questowillscopo dobbiamo
require, first of
confezionare
all, un messaggio
that we “sample” per object’s
the line~ l’oggettooutputline∼(an per mandarlo
audio signal) aintozero in una
a control
quantità di tempo che calcoleremo sulla base del suo valore corrente di output.
stream.
CiòThe
richiederà,
same issuesinnanzitutto,
of time delaydi “campionare”
and accuracyl’outputappear as dell’oggetto
for sporadic line∼
to audio(un
segnale audio)
conversion. e renderlo
Again un flusso
there will be a di controllo.
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à 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 CHAPTER 3. AUDIO AND CONTROL COMPUTATIONS
64 Capitolo 3. Calcoli audio e di controllo

trigger

signal snapshot

(a) (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ù recentemente
and use it to change the value of another one. As shown in Figure 3.2 (part
calcolato del segnale sarà 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ò influenzare un segnale è 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ò 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 precisio-
exactly 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 aggior-
to 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 è 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’è 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 è 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-to-
audio, nella maggior parte dei casi la soluzione più semplice è 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
control-to-signal controllo conversion
nei diagrammi a blocchi
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,
The signal come from
block converts esempi, la conversione
a numeric da controllo
control stream a segnale
to an audio signal.e
da segnale a controllo. I flussi di controllo sono rappresentati con puntini
The exact type of conversion isn’t specified at this level of detail; in the Pd (in
contrasto con i segnali audio che appaiono come frecce continue).
Il blocco signal converte un flusso numerico di controllo in un segnale au-
dio. Il tipo esatto di conversione non è ancora stato specificato a questo livel-
lo della trattazione; negli esempi in Pd la scelta dell’operatore di conversione
determinerà 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, è 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à di trasmissione di informazioni
dai segnali audio ai calcoli di controllo è la event detection (individuazione degli
eventi). In questa modalità le informazioni sul tempo vengono fornite dal segnale
audio. Ne è un esempio la threshold detection (individuazione della soglia), in
cui l’input è un segnale audio e l’output è una sequenza temporale. Esaminiamo
in dettaglio la threshold detection.
Una ragione tipica per utilizzare la threshold detection è quella di individuare
quando un qualche tipo di attività inizia e si arresta, come un esecutore che
suona uno strumento. Supponiamo di avere già una misura continua dell’attività
sotto forma di segnale audio (questo può essere fatto, ad esempio, utilizzando
un envelope follower). Quello che vogliamo è un coppia di sequenze temporali,
una che segna i tempi in cui l’attività inizia e l’altra che segna quando si arresta.
La Figura 3.7 (parte a) mostra una semplice realizzazione di questo princi-
pio. Supponiamo che l’input del segnale sia rappresentato in un grafico continuo.
Una linea orizzontale mostra il valore costante della soglia. La sequenza tempo-
rale 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ò può essere evitato sopprimendo
i rimbalzi (debouncing), che può essere fatto in almeno due semplici modi. In-
nanzitutto, come mostrato nella parte (b) della figura, possiamo impostare due
soglie: una più alta per la scelta degli onsets e una inferiore per i turnoffs. In
questo schema la regola è 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ù alta in figura, non viene segnato nessun onset
perché non c’è stato nessun turnoff dopo il precedente onset (all’inizio, agiamo
come se l’output più recente fosse un turnoff, in modo che il primo inizio venga
segnato).
Un secondo approccio per filtrare più onsets e turnoffs, mostrato nella parte
(c) della figura, è associare un periodo morto a ciascun onset. Questo altro non è
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 è 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 simul-
taneamente. Di solito è necessario adeguare manualmente i valori di soglia e/o
i tempi morti ad ogni situazione specifica in cui viene utilizzata il thresholding.
Il thresholding è 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 Capitolo 3. Calcoli audio e di controllo

70 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
two 3.7: Rilevamento
threshold di soglia: (a)
levels; (c) debounced senza
using soppressione
dead periods. dei rimbalzi; (b) sop-
primendo 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ù 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 è sopra o sotto una determinata soglia, o molte altre possibilità. 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ò essere utilizzato come alter-
nativa ai flussi di controllo che abbiamo già 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] è sta-
to 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ù generatori di inviluppo. Nella pra-
tica audio digitale, ottenere sequenze cicliche di valori predeterminati è sempli-
cemente 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 è quello di sin-
tetizzare un’altra onda a dente di sega che procede in sincronia con l’output
del phasor∼, ma quattro volte più veloce. Questo può 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 è facile ottenere una forma di inviluppo ripetuta, per esem-
pio 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 sinte-
tizzatore, è 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 agi-
sce 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

frequency 4

* 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ù 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 continua-
mente quel valore fino al punto successivo quando viene sostituito da un nuovo
valore, sempre ottenuto dal segnale all’ingresso primario.
Nell’audio digitale è spesso utile campionare un nuovo valore sui punti di
caduta del segnale di trigger, ovvero quando il valore corrente del segnale di
trigger è minore del suo valore precedente, come mostrato in Figura 3.9. Ciò
è 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 è stato precedentemente in-
trodotto 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à, ci sono quattro tipi di operazioni che possono essere
eseguite sui flussi di controllo per ottenere altri flussi di controllo. Queste ope-
razioni sui flusso di controllo non hanno operazioni corrispondenti sui segnali
audio. La loro esistenza spiega in gran parte perché è 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 è 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ò essere ritardato di una quantità costante, oppure in alternativa, è possibile
ritardare ogni evento separatamente tramite quantità 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 è il merging (unione): si pren-
dono 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ù 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 è 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
è 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 con-
trollo (la sorgente) contribuisce con dei valori che vengono messi sulla sequenza
temporale del secondo (il sync). Il valore assegnato all’output è sempre quello
più recente dal flusso sorgente. Si noti che qualsiasi evento proveniente dalla
sorgente può apparire più 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 es-
sere disambiguo è una domanda di progettazione, a cui diversi ambienti software
forniscono approcci diversi (in Pd è 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à 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ù 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 75

in 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
effect of 3.10: Operazione
a simple delay on adicontrol
delay su un flusso
stream; di controllo:
(c) effect (a) diagramma
of a compound delay. a
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 data

merge prune resync

(a)

(b)

1 -2 3 -4 (c)

1 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
3.9. Operazioni OPERATIONS IN PD
flussi di controllo in Pd 77
73

0 0
0
delay (a)
0 (b)

0 0 0 0

moses select (c) float (d)

0 0

Figure
Figura 3.12:
3.12: The four control
Le quattro operations
operazioni in di
sui flussi Pd:controllo
(a) delay; (b) (a)
in Pd: merging; (c)
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
Pd itI messaggi
is controlledche explicitly
non contengono dati compongono sequenze temporali. Per
by the user.)
visualizzare i messaggi senza dati, in Pd, viene usato il simbolo (arbitrario)
“bang”.
3.9I quattro
Control operations
tipi di operazioni sui flussi in Pd descritti nel paragrafo pre-
di controllo
cedente possono essere espressi in Pd come mostrato in Figura 3.12. I delays
So far we eseguiti
vengono have used Pd mostly
usando for processing
due oggetti di ritardo audio signals, although as early as
espliciti:
Figure 1.10 we have had to make the distinction between Pd’s notion of audio
del , and
signals delay : delaystreams:
of control semplice. thinè possibile
connections specificare il tempo
carry control di ritardo
streams tra-
and thick
mite creation argument o attraverso l’ingresso destro. Un
ones carry audio. Control streams in Pd appear as sequences of messages. The “bang” nell’ingresso
sinistro “aziona”
messages may contain il delay,
datache(most
poi emette
often,il one
“bang” dopo ilnumbers),
or more ritardo specificato
or not. in A
millisecondi. Il delay è semplice nel senso che l’invio
numeric control stream (Section 3.3) appears as a (thin) connection thatdi un bang in un delay già
carries
avviato resetta
numbers a un nuovo tempo di uscita, annullando il precedente.
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ù creation arguments, essi specificano una o più 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 messag-
explicit delay objects:
gi può essere memorizzato contemporaneamente in pipe e i messaggi possono
del , riordinati
essere delay : insimpleuscitadelay. You can
in funzione specify
dei vari tempithedidelay
ritardo time in aassegnati.
a loro creation
L’unione
argument di flussi
or via di controllo
the right inlet. A in Pd non
“bang” viene
in the lefteseguita
inlet setsda the
oggetti
delay,espliciti
which
ma da un meccanismo di connessione di Pd stesso.
then outputs “bang” after the specified delay in milliseconds. The delay Questo è mostrato nella
is
parte (b) della figura con number boxes come esempio.
simple in the sense that sending a bang to an already set delay resets it to aIn generale, ogni volta
che output
new viene fatto
time,più di una the
canceling connessione
previously adscheduled
un ingresso 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ù 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 arriva-
no 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ù di una entrata sincronizza tutti gli altri
ingressi a quello più 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ù 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 ripro-
duce una wavetable passando attraverso le frequenze da 500 a 1423. Il wavetable
è 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 è
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 è
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ò per un’onda a dente a sega (l’oggetto phasor∼). Per
le wavetables che contengono registrazioni audio, l’errore di interpolazione può
creare un foldover supplementare. I suoi effetti possono variare notevolmente;
il suono è 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 con-
vertire 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 è 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~ 1 2 0 2

osc~ 880
line~ vline~
*~ *~

output~ output~ output~ output~


dB 0 dB 0 dB 0 dB 0
mute mute mute mute

(b) (c)

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

Nell’esempio è 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 è 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à più 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 è 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ù 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é 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) è una frazione significativa della loro lunghezza.
Per queste situazioni è previsto un oggetto più preciso (e più 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 è limitata solo dal formato numerico a virgola mobile utilizzato
da Pd). Inoltre, possono essere specificati molti segmenti con un singolo blocco
audio; vline∼ può generare forme d’onda con periodi fino a due campioni (oltre
i quali si otterrà solo foldover).
L’oggetto vline∼ può essere utilizzato anche per la conversione dei flussi
numerici di controllo in flussi audio nelle modalità di “campione più vicino” e
“interpolazione a due punti”, come mostrato nella Figura 3.4 (parti b e c). Per
ottenere la conversione al campione più 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 è 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 è quella del campionamento. Fino ad ora i
nostri campionatori hanno evitato la questione utilizzando loop infiniti. Ciò
consente una ricca varietà 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 81

bang <-- play the sample

; cut the
cutoff 0 5 sound off

Wait for the


delay 5 cutoff to finish

; set the upper line~ to start


phase 1, 4.41e+08 1e+07; at the first sample and play
cutoff 1 forever (or until next trigger)
start new playback

<-- record
r phase

vline~ adc~ 1 del 3990


tabread4~ tab28 hip~ 5 0 10
0, 1 5
r cutoff line~
*~
*~ vline~
|
tabwrite~ tab28
(OUT)

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ù adatti come trigger rispet-
to ai segnali audio. L’esempio C05.sampler.oneshot.pd (Figura 3.14) mostra
un possibile modo per realizzare ciò. 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à si tratta solo un indice di ri-
cerca 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∼ è controllata da un secondo vline∼,
per evitare le discontinuità nell’output nel caso in cui un nuovo evento venga
avviato mentre il precedente evento è 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ò 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 è 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é stiamo utilizzando l’interpolazione a 4 punti. In secondo luogo, nella
stessa message box, la fase è 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 è 44.1
(in unità 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 zero
nelle due estremità e la parte inferiore destra della patch mostra come registrare
un tale tipo di wavetable (in questo caso quattro secondi). Qui è sufficiente (e
computazionalmente più economico) un oggetto line∼. Anche se la wavetable
deve essere almeno di 4 secondi affinché tutto funzioni, è possibile registrare
wavetables più brevi semplicemente attivando prima l’oggetto line∼. L’unica
cautela è 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é l’arrotondamento dei punti di arresto di quest’ultimo al confine del blocco
più vicino (tipicamente 1,45 msec) può rendere aperiodicità udibili nel suono se
la wavetable viene ripetuto più di 10 o 20 volte al secondo, e impedirebbe di
ottenere un suono piacevole e periodico a livelli più 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 se-


gnali 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ò fornisce


sempre il più recente campione audio calcolato (conversione più 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
“sbirciare” in un singolo campione; l’esempio C07.envelope.follower.pd (anch’es-
so 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ù piccoli danno un output
più 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 non-
interpolante 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 wa-
vetable. Questa viene utilizzata per controllare la dimensione dei grani in un
campionatore a loop (dal paragrafo 2.6). Qui la wavetable è 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à sample-
and-hold, un altro dispositivo utile per eseguire attività di controllo nel dominio
del segnale audio.

Sequencer in stile MIDI


L’esempio C10.monophonic.synth.pd (Figura 3.16) implementa un sintetizzato-
re monofonico ma in questo caso basato sulla controllabilità via MIDI. Qui i
compiti di generazione di inviluppo e di sequenze di note vengono gestiti utiliz-
zando flussi di controllo anziché 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 è diversa da zero. A diffe-
renza 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 adjust for reading


envelope sample
+~ 1

tabread4~ envelope

*~ multiply by audio-frequency sawtooth

*~ 128 adjust amplitude


cos~ and center for wavetable
+~ 129
+~ 1
tabread4~ sample
*~ multiply by raised-cosine smoothing function
|
envelope
(OUT)

sequence sample

Figura 3.15:
Figure Un sequencer
3.15: in stile sintetizzatore analogico.
An analog-synthesizer-style sequencer.
3.9. Esempi 81
3.10. EXAMPLES 85

notein

f - store pitch below


pit vel t b f
b - bang to recall velocity

float velocity stored here


note-on
filter sel 0 test for note on or off
stripnote off on
float recall pitch
pitch
mtof
/ 127 select test against latest
phasor~ note-on pitch
$1 100 0 1000
-~ 0.5
line~ envelope generator now controls
amplitude as well as grain size
cos~ +~ 0.5
+~ 1 *~
*~ *~ 2

*~ cos~ This replaces the tabread4~


| in the previous patch.
(OUT)

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è 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’am-
piezza (tramite l’oggetto line∼) è più difficile. Quando viene ricevuto un mes-
saggio di note-on, l’oggetto sel 0 emette la velocity dall’uscita destra (perché
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, è 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 nel-
l’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 è zero, il secondo passo è quello di richiamare la nota e
testarla (l’oggetto select) rispetto al valore di nota del note-in più recentemen-
te 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 digital-
mente 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 calco-


lando blocchi audio di 64 campioni. Un evento di controllo è previsto
che avvenga trascorso il tempo di esattamente un secondo, utilizzando lo
schema di aggiornamento più 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 rispet-


tivamente di 200 e 300 Hertz. Qual è 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 è la forma d’onda risultante dalla
somma e quali sono la sua ampiezza e la sua frequenza?

7. Qual è il livello relativo, in decibel, del terzo armonico (tre volte la fonda-
mentale) 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 è la forma d’onda
risultante?
9. Utilizzando le tecniche del paragrafo 3.7, disegnare un diagramma a bloc-
chi 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 threshol-
ding 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 è 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 dal-
l’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à
degli elementi singoli sono meglio dedotte da quelle del tutto.
Una ricca collezione di strumenti e di idee è 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 compor-
tamento 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ù giustamente, chiamato generatore di
transiente) fa si che un segnale audio cresca e decresca con regolarità, come per
controllare l’intensità 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) è il modo più 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ù semplice e perenne, è il generatore di inviluppo ADSR. “ADSR”
è un acronimo di “Attack, Decay, Sustain, Release” (Attacco, Decadimento,
Sostegno, Rilascio), i quattro segmenti di output del generatore ADSR. Il ge-
neratore 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
Capitolo 4. Automazione MANAGEMENT
della voce

trigger

Figure 4.1:
Figura 4.1: ADSR envelope
Diagramma as a block
a blocchi di undiagram, showing
inviluppo ADSR the trigger
, che input
mostra (a
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
highest value cinque
outputparametri
by the ADSRche controllano
generator). il generatore
Second and ADSR.third,Intheprimo luo-
attack
go, un parametro di livello imposta il valore di uscita
and decay parameters give the time duration of the attack and decay segments. alla fine del segmento
di attacco
Fourth, (normalmente
a sustain parameter l’output
gives thepiùlevel
altoofprodotto
the sustain dalsegment,
generatore as aADSR).
fractionIl
secondo e il terzo, i parametri di attacco e decadimento,
of the level parameter. Finally, the release parameter gives the duration of the danno la durata dei
segmenti di attacco
release segment. e decadimento.
These Il quartowith
five values, together parametro
the timing è quello
of thedi“on”sustain
and e
fornisce il livello
“off” triggers, deldetermines
fully segmento the di sustain,
output ofespresso
the ADSR come una frazione
generator. del para-
For example,
metro di livello.
the duration Infine,
of the sustainil parametro di rilascio
portion is equal to the fornisce la durata
time between “on”delandsegmento
“off”
di rilascio.
triggers, minus Questi cinque valori,
the durations of theinsieme
attack andalla decay
temporizzazione
segments. dei triggers di
“on” e “off”, determinano completamente l’output del generatore ADSR. Ad
esempio,
Figurela4.2 durata
graphs della
some porzione
possibledioutputs
sostegno è uguale
of an ADSRalenvelope
tempo compreso
generator.tra In i
part (a) “on”
triggers we assume that
e “off”, the “on”
meno and “off”
le durate triggers are
dei segmenti widely enough
di attacco separated
e di decadimento.
that the sustain segment is reached before the “off” trigger is received. Parts
(b) La
andFigura
(c) of 4.2 riporta
Figure 4.2 alcuni
show the possibili
resultoutputs
of following di unangeneratore
“on” trigger di inviluppo
quickly
ADSR. Nellaone:
by an “off” parte
(b)(a) supponiamo
during the decay che i triggers
segment, and“on”(c) eeven
“off” siano during
earlier, abbastanzathe
separati
attack. Thein modo ADSR chegenerator
il segmento di sostegno
reacts to thesevenga raggiunto
situations prima che
by canceling il trigger
whatever
remains
“off” sia of the attack
ricevuto. Le andpartidecay
(b) esegments
(c) dellaand continuing
figura straight
4.2 mostrano to the release
il risultato di un
segment.rapido
innesco Also, dianunADSR
“off” generator
dopo un “on”: may be (b)retriggered
durante il “on” segmentobefore di the release
decadimen-
segment
to is finished
e (c) ancor prima,or durante
even during the attack,
l’attacco. decay, or ADSR
Il generatore sustainreagisce
segments. Part
a queste
(d) of the annullando
situazioni figure shows a reattack
qualsiasi during
residuo dei the sustain
segmenti di segment,
attacco e and part (e),
di decadimen-
during
to the decay segment.
e proseguendo direttamente nel segmento di rilascio. Inoltre, un generatore
ADSR può essere retriggerizzato con un “on” prima che il segmento di rilascio
The classicoapplication
sia terminato addiritturaofdurantean ADSR envelopediisattacco,
i segmenti using a decadimento
voltage-control key-
o soste-
board or sequencer to make musical notes on a synthesizer.
gno. La parte (d) della figura mostra una ri-attivazione durante il segmento Depressing and re-di
leasing a key (for example) would generate
sostegno e la parte (e) durante il segmento di decadimento. “on” and “off” triggers. The ADSR
generator could then control the amplitude of synthesis so that “notes” would
start and stop withclassica
L’applicazione the keys.di un Ininviluppo
addition to ADSRamplitude,
è quellathedi ADSR
utilizzaregenerator
una ta-
stiera o un sequencer, voltage-control, per effettuare note musicali to
can (and often is) used to control timbre, which can then be made su evolve
un sin-
naturally overLathe
tetizzatore. course ofe each
pressione note. di un tasto (ad esempio) genererebbero
il rilascio
triggers “on” e “off”. Il generatore ADSR potrebbe allora controllare l’ampiez-
za della sintesi in modo che le “note” partirebbero e si fermerebbero in funzione
dei tasti. Oltre all’ampiezza, il generatore ADSR può essere (e spesso è) utiliz-
zato per controllare il timbro, che può 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
(a) release

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
(b), (c) 4.2:
withOutput dell’inviluppo
early “off” ADSR:
trigger; (d), (a) con triggers “on” e “off” separati;
(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 Capitolo 4. Automazione e gestione della voce

4.2 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 è la frequenza di campionamento. La scelta più 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à appena percepibile.
Un’altra possibilità sarebbe quella di considerare una rampa y[n] che cresce
in modo esponenziale, in modo che aumentasse a una velocità costante in dB. Per
far ciò dobbiamo fissare l’ampiezza iniziale in modo che sia inaudibile, diciamo
0 dB (se fissiamo a 100 dB l’equivalente dell’unità 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ù di lı̀.
Una progressione più 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, è la curva
quartica:
 n 4
y[n] = ,
N
dove N è il numero di campioni su cui fare il fade-in (nell’esempio precedente, è
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) (da dB a lineare),

f3 (x) = x4 (quartica).

La seconda funzione che converte da dB a lineare, è 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 trasferimen-
to, 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à 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

linear

ampli-
tude

decibels
quartic
0
0 1
units

Figure 4.3: Three amplitude transfer functions. The horizontal axis is in linear,
Figura 4.3:or Tre
logarithmic, funzioni
fourth-root didepending
units trasferimento di ampiezza. L’asse orizzontale è in
on the curve.
unità lineari, logaritmiche o radici quarte dell’unità, a seconda della curva.
94 CHAPTER 4. AUTOMATION AND VOICE MANAGEMENT

FREQUENCY

-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 è 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 imple-
mentazione; a seconda della funzione desiderata, questo può essere eseguito in
modo aritmetico o utilizzando la wavetable lookup.

4.3 Cambiamenti di controllo continui e discon-


tinui
Gli algoritmi di sintesi variano notevolmente nella loro capacità di trattare i
controlli che cambiano in modo discontinuo. Fino ad ora in questo capitolo
abbiamo assunto che i controlli debbano cambiare con continuità e che il ge-
neratore di inviluppo ADSR risulti idealmente adatto per tali controlli. Può
anche accadere che l’ampiezza massima di una nota sia inferiore al valore cor-
rente dell’ampiezza del suo predecessore (utilizzando lo stesso generatore) e che
l’inviluppo ADSR semplicemente si abbassi (anziché alzare) al nuovo valore per
un attacco.
Ciò non è necessariamente auspicabile, tuttavia, in situazioni in cui un gene-
ratore di inviluppo è responsabile di un aspetto del timbro: forse, per esempio,
non vogliamo che la nitidezza di una nota diventi più mite durante l’attacco,
ma piuttosto che salti a un valore molto più basso in modo che sia sempre in
grado di salire durante l’attacco.
Questa situazione può anche sorgere con gli inviluppi di intonazione (pitch
envelopes): può essere auspicabile scorrere l’intonazione da una nota alla suc-
cessiva oppure può 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 disconti-
nue 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à un artefatto udibi-
le, ma gli incrementi di fase (come intonazioni) possono saltare senza risultati
negativi.
In quei casi in cui una modifica di un parametro non può essere fatta con-
tinuamente per un motivo o per un altro, esistono almeno due strategie per
rendere la modifica più 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 successi-
vamente ripristinata. Può o non può 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 enve-
Figura 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 before-
l’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, discontin-


uously 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 after-
ward. 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 97

92 Capitolo 4. Automazione e gestione della voce

time

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

Per cambiare discontinuamente l’uscita del generatore ADSR, la resettiamo.


Questo è un’operazione diversa rispetto al triggering; il risultato è 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 appropria-
to, che passa a zero per preparare la discontinuità. La quantità di tempo che
ci possiamo permettere per il muting dovrebbe essere piccola (in modo da di-
sturbare il meno possibilesnapshot
il suono precedente), ma non cosı̀ piccola da causare
artefatti udibili in reset/
output. Un esempio di come lavora questo tipo di muting è
già 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 va-
riazione 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à), 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à 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 è un
OUT
altro motivo per mantenere il tempo di muting più basso possibile (inoltre, è una
brutta idea cercare di ridurre al minimo il ritardo omettendo condizionatamente
il periodo di rampa in discesa quando non è necessario: un ritardo costante è
molto migliore di uno
Figure 4.7: che diagram
Block varia, anche se èswitch-and-ramp
for the più piccolo in media).
technique.

4.3.2 Switch-and-ramp
Anche la tecnica switch-and-ramp cerca di eliminare le discontinuità derivanti
da cambiamenti di controllo discontinui, ma lo fa in modo diverso: sintetizzando
una discontinuità opposta che aggiungiamo per annullare l’originale. La Figura
4.6 mostra un esempio in cui un suono percussivo sintetico (una sinusoide in-
viluppata) inizia una nota a metà 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 è


spesso appropriato per i suoni percussivi. Il grafico inferiore della figura mostra
un segnale audio compensativo con una discontinuità opposta, che può essere
aggiunto alla parte superiore per rimuovere la discontinuità. I vantaggi di que-
sta tecnica rispetto al muting sono, da un lato, che non c’è 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 è più probabile che sia mascherato
dall’insorgenza del nuovo suono.
La Figura 4.7 mostra come la tecnica switch-and-ramp possa essere realiz-
zata con un diagramma a blocchi. La scatola contrassegnata con le virgolette
(“...”) può contenere qualsiasi algoritmo di sintesi che vogliamo interrompere
discontinuamente in modo che riparta da zero (come ad esempio la parte (a) del-
la 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à. La discontinuità è 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 sal-
tare. Questo è il proprio livello attuale (che potrebbe non essere zero) meno la
discontinuità (o equivalente, più l’ultimo valore di uscita della sintesi). I due
vengono sommati (dall’oggetto +∼ in basso), quindi viene eseguita un’istanta-
nea. 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à) è 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
4.4 Polifonia
instrument plays which note, so that the notes will connect to each other end-
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ù 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
If wequesti
happentermini,
to knowun pianoforte
the lengthèofuno thestrumento
tasks b andpolifonico, con 88of“voci”.
c at the outset task d,
Ogni voce del pianoforte è normalmente in grado di suonare
we may be able to make a better choice of which voice to steal. In this example esattamente una
nota. Non esiste mai il dubbio di quale voce usare per suonare
it might have been better to steal from c, so that d and b would be playing una nota di una
determinata
together at the end and not d alone. In some situations this information willpiù
altezza e nemmeno se si possano suonare contemporaneamente be
note alla stessa
available when the intonazione.
choice must be made, and in some (live keyboard input, for
example) it will not.musicali elettronici polifonici usano un approccio più flessi-
Molti strumenti
bile per la gestione delle voci. La maggior parte dei softwares di sintesi (come
Csound) utilizzano uno schema di allocazione vocale dinamica, per cui, in ef-
4.6 viene
fetti, Voice
creata unatags nuova voce per ogni nota nello spartito. In sistemi come
Max o Pd, orientati verso un uso interattivo in tempo reale, un banco di voci
viene
Suppose allocato
now in anticipo
that we’re eusing
il lavoro da eseguire
a voice bank to(suonare note as
play notes, o qualunque altra
in the example
cosa)
above,viene distribuito
but suppose thetra le voci
notes a, b,del banco.
c, and d all have the same pitch, and further-
more that all
Questo their other
è illustrato nel parameters
diagramma are dellaidentical. How
Figura 4.8, canciascuna
dove we design a control
delle diver-
stream so that, when any one note is turned off, we know which
se voci produce un segnale di uscita, che sono poi sommati per ottenere l’output one it is?
totale del banco di voci. Spesso le singole voci richiedono più uscite separate;
per esempio, possono richiedere diversi canali in modo che possano essere spa-
zializzate 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 è desiderabile
compiti (tasks) (ad esempio
b le note da suonare). Ad esempio, un musicista che
suona una tastiera non può 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
controllo
voice non1... deve preoccuparsi
.. del dettaglio 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.
Figure 4.10:Supponiamo chevoice
A polyphonic il banco di voci
allocation abbia solo
algorithm, due voci
showing e cerchiamo
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à d, oppure
togliere la voce di entrambi i compiti b o c. In pratica la scelta migliore è di
toglierne uno. In questo esempio particolare, abbiamo scelto di togliere la voce
del compito più 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:
Figura 4.10: Un
A polyphonic voice allocation
algoritmo polifonico algorithm,
di allocazione showing
vocale, voice stealing.
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à.

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 è?
Questa domanda non sorge se la sorgente di controllo è una tastiera Clavier
perché è impossibile riprodurre più 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
è solo il più semplice esempio di un problema più 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ù tags
al messaggio che inizia una nota (o, in generale, un’attività). Un tag è una
qualsiasi raccolta di dati con i quali possiamo identificare più tardi l’attività,
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 end-time pitch ...
1 3 60 ...
2 8 62 ...
4 6 64 ...
5 8 65 ...
4.7. Incapsulamento in Pd 97

In questa rappresentazione non abbiamo bisogno di tags perché ogni messag-


gio (ogni riga di testo) contiene tutte le informazioni necessarie per specificare
l’intera attività (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à 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 tag action parameters
1 a start 60 . . .
2 b start 62 . . .
3 a end
4 c start 64 . . .
5 d start 65 . . .
6 c end
8 b end
8 d end
Qui ogni nota è stata suddivisa in due eventi distinti per avviarla e termi-
narla. Le etichette a, . . . , d vengono utilizzate come tags; sappiamo quale inizio
va con quale fine poiché i loro tags sono gli stessi. Si noti che il tag non è
necessariamente correlato alla voce che verrà 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ò essere utilizzato (oltre alla nota) come tag.
Nel software musicale in tempo reale è spesso necessario passare avanti e
indietro tra la rappresentazione evento-per-attività e quella contrassegnata dai
tags vista prima, poiché la prima rappresentazione è più adatta per l’archivia-
zione e l’editing grafico, mentre la seconda è più 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ù 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 sot-
topatch one-off. I contenuti della sottopatch vengono salvati come parte della
parent patch, in un unico file. Se si utilizzano più copie di una sottopatch,
è possibile modificarle individualmente. D’altra parte, è possibile richiamare
un’abstraction digitando nella casella il nome di una patch Pd (senza l’esten-
sione “.pd”) salvata in un file. In questa situazione Pd leggerà quel file nella
4.8. EXAMPLES 103
98 Capitolo 4. Automazione e gestione della voce

(a) (b)

inlet
8
plusminus 5 + $1 − $1
13 3 outlet outlet

Figura 4.11:
Figure 4.11: Pd’s
Meccanismo di mechanism:
abstraction abstraction in
(a) Pd: (a) invocare
invoking l’abstrac-
the abstraction,
tion plusminus
plusminus with 5 con 5 come argument;
as a creation creation (b)
argument; (b) of
the contents il the
contenuto del file
file, “plusmi-
nus.pd”.
“plusminus.pd”.

inlets and outlets


sottopatch. of themodo,
In questo plusminus object. al
le modifiche Thefiletwo
si “$1” arguments
propagano (to the
ovunque si sia
and - objects)
+caricato are replaced by 5 (the creation argument of the plusminus
come abstraction.
object).
Una sottopatch (sia one-off che abstraction) può avere entrate e uscite che
We have
appaiono already
nella seenrelativa
casella one abstraction
nella patchin the examples:
genitore. the output~
Questo object
viene specificato
introduced in Figure 1.10 (Page 16). That example also shows that an abstrac-
utilizzando i seguenti oggetti:
tion may display controls as part of its box on the parent patch; see the Pd
documentation
inlet , inlet∼ for a: description of this
crea le entrate perfeature.
la object box contenente la sottopatch.
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
Pd fornisce un meccanismo (Figure 4.12) shows
di passaggio how the line~
di argomenti objectdamay
in modo poter
be used to generate an ADSR envelope to control a synthesis
parametrizzare diverse chiamate di un’abstraction. Se in una casella patch (only the
di oggetto
ADSR
digitateenvelope is shown
“$1”, viene in the figure).
interpretato come “ilTheprimo
“attack” button,
creation when pressed,
argument nella mia
has
casella sulla patch genitore” e allo stesso modo per $2 e cosı̀ via. Il object
two effects. The first (leftmost in the figure) is to set the line~ 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
milliseconds (thedirelease
abstraction, che utilizza
time). Also, in case entrate,
the delay uscite
200 eobject
parametrizzazione,
happens to
è mostrato in Figura 4.11. Nella parte (a), una patch invoca
be set at the moment the “release” button is pressed, a “stop” plusminus in una
message is sent
casella di oggetto, con un creation argument pari a 5. Il numero
to it. This prevents the ADSR generator from launching its decay segment after 8 viene inviato
all’oggettoitsplusminus
launching e in uscita otteniamo la somma e la differenza di 8 e 5.
release segment.
L’oggetto plusminus
In Example D02.adsr.pd non(Figure
è definito dawe
4.13) Pd,encapsulate
ma è piuttosto definitogenerator
the ADSR dalla patch
che risiede nel file denominato “plusminus.pd”. Questa patch è 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à visto un’abstraction negli esempi: l’oggetto output∼ introdot-
to in Figura 1.10 (pagina 15). Questo esempio mostra anche che un’abstrac-
tion può mostrare i controlli come parte della sua casella sulla patch genitore;
104 4.8. Esempi
CHAPTER 4. AUTOMATION AND VOICE MANAGEMENT 99

attack release

stop
10 200 del 200
1 2500 0 500

(IN)
| line~
*~
|
(OUT)

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

si consiglia di vedere la trigger


documentazione di Pd per una descrizione di questa
funzionalità.
adsr 1 100 200 50 300

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

Figure 4.12:100Using a line~ object to generate


Capitolo 4. Automazione
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 è realizzata come mostrato nella Figura 4.14 (è possibile
inlets.
aprire questa sottopatch facendo clic sull’oggetto adsr nella patch). Gli unici
In this example the five
oggetti di creation arguments
segnale sono line∼(1, 100, 200, 50,
e outlet∼. andoggetti
I tre 300) specify
pack corrispondono
the peak level, attack
ai tre oggetti di messaggio della precedente Figura 4.12.ofDa
time, decay time, sustain level (as a percentage peak
sinistra a destra,
level), and release
gestiscono i segmenti di attacco, di decadimento e di rilascio. the
time. There are six control inlets: the first to trigger
ADSR generator, and the othersdito
Il segmento update
attacco vathe
ad unvalues of specificato
target the five parameters.
da $1 (il primo creation
The output of theargument
abstraction is an audio signal.
dell’abstraction) in $2 millisecondi; questi valori possono essere so-
This abstraction is realized
vrascritti as shown
inviando numeri inalleFigure
entrate4.14.
“peak (You can
level” open this Il segmento di
e “attack”.
subpatch by clicking on the
rilascio adsrma
è simile, object in the patch.)
più semplice, poichéThe only èsignal
il target sempre objects
zero. La parte com-
are line~ and outlet~.
plicata èThe three pack
il segmento objects correspond
di decadimento, che deve to essere
the three messagedopo un ritardo
disinserito
objects from the pari al tempo
earlier Figure di attacco
4.12. From(l’oggetto del $2).
left to right, theyIltake
livello di of
care sostegno
the è calcolato
attack, decay, andtramite
releaseilsegments.
livello di picco e la percentuale di sostegno (moltiplicando i due e
dividendo
The attack segment goesperto100).
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ò 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’am-
piezza, per la quale i segmenti esponenziali o curvilinei quartici forniscono spes-
so risultati sonori più 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, uti-
lizzando, per un confronto, forme lineari e quartiche.
Poiché la conversione da decibel in unità di ampiezza lineare è un’opera-
zione 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 test for negative trigger
moses
inlet
t b b if so, zero the output
release
sel 0
if zero t b ... do this anyway
cancel stop peak
decay
level attack decay sustain
inlet inlet inlet inlet
ATTACK:
optionally
f $1
jump DECAY
0 release
to zero pack 0 $2 del $2
inlet
f $4 * $1
... then * 0.01 pack 0 $3 pack 0 $5
recall peak level RELEASE: ramp
and pack with back to zero
line~
attack time
outlet~

106 CHAPTER 4. Inside


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

LINEAR QUARTIC

r freq r freq r amp

line~ unpack unpack


r amp
osc~ sqrt sqrt
line~
*~ sqrt sqrt
| line~ line~
(OUT)
*~ *~

*~ *~
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 over-
written 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. Fur-
thermore, 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 è


richiesta nessuna ricerca su tabella; abbiamo semplicemente elevato al quadrato
il segnale di uscita dell’oggetto line∼ due volte in successione. Per compensa-
re 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 varia-
no 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 de-
stinazione (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 è 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 sempli-
ce 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, è utile anche per creare banchi di voci. Qui
usiamo le abstractions per organizzare banchi di oscillatori per la sintesi addi-
tiva. Ci sono molti modi possibili per organizzare banchi di oscillatori oltre a
quelli indicati qui.
L’organizzazione più semplice e più diretta delle sinusoidi è quella di formare
parziali da aggiungere ad una nota. Il risultato è monofonico, nel senso che la
patch suonerà solo una nota alla volta, che tuttavia sarà costituita da più sinu-
soidi 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 moltipli-
cato 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à 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è 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 103

108 CHAPTER 4. AUTOMATION AND VOICE MANAGEMENT

partial 1 1 0.56 0
partial 0.67 0.9 0.56 1 0 pitch

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
partial 1.67 0.35 1.7 0 0 of a second
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 <-- click to play
partial 1.33 0.075 4.07 0
s trigger

catch~ sum
|
(OUT)

Figure 4.16: A Pd realization of Jean-Claude Risset’s bell instrument. The bell


Figura
sound is4.16:
madeRealizzazione
by summingin11Pd di uno strumento
sinusoids, each madeaby
campana di the
a copy of Jean-Claude
partial
Risset. Il suono
abstraction. della campana viene realizzato sommando 11 sinusoidi, ciascuna
ottenuta da una copia dell’abstraction partial.
104 Capitolo 4. Automazione e gestione della voce

$1 amplitude;
trigger $2 relative duration;
arguments:
r trigger $3 relative frequency;
$4 detune

t b b ATTACK
relative
frequency del 5 DECAY float $1
float $3 relative
float $2 * 0.1
r frequency duration
sqrt
times global r duration
*
frequency * sqrt
actual duration
+ $4 plus detune
0 $1 $1 5
osc~ attack time
line~
*~ 5 msec
*~ quartic amplitude
throw~ sum 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 è spartana: le number boxes controllano la fre-


quenza “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 specifica-
no:
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ù velocemente di altre, sotto il controllo generale della patch
principale.
3. frequenza relativa. Come per la durata relativa, questa controlla la fre-
quenza 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 105
4.8. EXAMPLES 111

50 loadbang send bangs to "poll-table"


s pitch metro 30 needed by the abstraction
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 general-
d dove f è la frequenza globale (dall’oggetto r frequency), p è la frequenza
ized in many ways: the envelope may be made to vary in time either as a result
relativa della parziale e d è 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
Sintesi the envelopes,
additiva: controllo to name a few possibilities.
dell’inviluppo spettrale
L’esempio successivo, D08.table.spectrum.pd (Figura 4.18), mostra un’applica-
Polyphonic synthesis:
zione molto diversa sampler
della sintesi additiva rispetto alla precedente. Qui le sinu-
soidimove
We sononowgestite
to andall’abstraction
example using spectrum-partial mostrataasindescribed
dynamic voice allocation Figura 4.19.
in
Ogni parziale calcola la propria frequenza come nella patch precedente.
Section 4.5. In the additive synthesis examples shown previously, each voice Ogni
is
parziale
used for acalcola anche la propria
fixed purpose. ampiezza
In the present periodicamente
example, we allocate(quando vieneaattiva-
voices from bank
ta needed
as dall’oggetto r notes
to play poll-table), utilizzando
in a control stream. un oggetto tabread4. Il contenuto
della tabella (che ha un range nominale
Example D11.sampler.poly.pd (Figure 4.20) di 50shows
dB) viene convertitosampler,
the polyphonic in unità
lineari e utilizzato come controllo di ampiezza nel modo usuale.
which uses the abstraction sampvoice (whose interior is shown in Figure 4.21).
TheUn esempiofor
techniques simile,
alteringD09.shepard.tone.pd (non in figura),
the pitch and other parameters crea unsampler
in a one-shot tono di
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 è 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
The vertical scale is dB from 1 to 50,
0 + 50 but we want true zero when
dbtorms the table value is 0 or less.
pack 0 30
osc~
line~
*~
throw~ sum−bus

Figura4.19:
Figure 4.19:The
L’abstraction abstraction utilizzata
spectrum-partial
spectrum-partial in Figura
used in Figure 4.18. 4.18.

sentire solo uno scorrere continuo e non salti. Il risultato è un famoso repertorio
uditivo, un tono indefinito ascendente o discendente.
La tecnica per sintetizzare uno specifico inviluppo spettrale può essere gene-
ralizzata in molti modi: l’inviluppo può 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à.

Sintesi polifonica: campionatore


Ci spostiamo ora ad un esempio che usa l’allocazione dinamica delle voci co-
me 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 polifo-
nico, che utilizza l’abstraction sampvoice (il cui interno è 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 107

114 CHAPTER 4. AUTOMATION AND VOICE MANAGEMENT

r note
unpack 0 0 0 0 0 0 0

t b f

counter to f + 1
generate tags
mod 1e+06

supply later makenote 64


note-off
allocate voice poly 8 1

get rid of stripnote


note-off
pack 0 0 0 0 0 0 0 0
route to a voice depending
on voice number from poly route 1 2 3 4 5 6 7 8

sampvoice
one "sampvoice"
sampvoice
abstraction
sampvoice
for each
voice, each sampvoice
adding its sampvoice
own output
to a sum (left sampvoice
inlets and sampvoice
outlets)
sampvoice
|
(OUT)

Figure
Figura 4.20:
4.20: A
Unpolyphonic sampler
campionatore demonstrating
polifonico voice
che mostra allocationdella
l’allocazione and use
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ù esplicito dei busses throw∼/catch∼ ed è preferibile
quando l’apparenza visiva non è un problema.
Il lavoro principale della patch, tuttavia, è 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à 7 e −2 mod 10 dà 8. Esiste
anche un oggetto di divisione intera denominato div ; dividendo 17 per 10
tramite div dà 1, e −2 diviso 10 dà −1.
poly : allineatore polifonico di voci. I creation arguments indicano il numero di
voci nel banco e un indicatore (1 se è necessaria togliere una voce, 0 altrimenti).
L’entrata a sinistra serve per il tag numerico e quella a destra è 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ò essere la nota e il flag start/stop può 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à MIDI), ampiezza 90 dB, durata di un secondo, dalla wavetable denomi-
nato “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é in realtà 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” è 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 utiliz-
zato 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 no-
ta (precedentemente non c’erano parametri). Questo viene fatto usando i sei
oggetti f, più l’ingresso destro dell’oggetto delay più a destra. Questi valori
vengono utilizzati dopo il ritardo di 5 msec. Ciò 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 gene-
razione dell’indice della wavetable, ottiene i suoi ordini di marcia (e contem-
poraneamente il numero della wavetable è 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 av-
viamento, quindi scende all’indice finale con un tempo appropriato per ottenere
la trasposizione necessaria. L’indice di partenza, in campioni, è proprio 44,1
volte la posizione di partenza in millisecondi, più uno per consentire l’interpola-
zione 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à diecimila secondi (questo è
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à suonata. L’indice di fine è l’indice di partenza più 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ù o meno a seconda del fattore di trasposizione. Questo fattore di trasposizione
è 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à è 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

bang inlet store parameters first in


delay for floats below until muted
mute to delay 5
unpack 0 0 0 0 0 0 0
take effect
t b b b

f delay for
f f f f delay note end
mtof * 44.1 f
/ 261.62 + 1
starting
* 4.41e+08 read
point
+
ending
read pack 0 0 0 0 0
point
attack decay
mute and
unmute 0 5 1 5 $3, $4 1e+07 $5 0, $1 $2 0 $1

wavetable
index
vline~ makefilename sample%d vline~ unpack
set $1 select mute dbtorms
wavetable
sqrt
tabread4~ sample1
sqrt
*~ amplitude
line~ envelope
*~
*~
add to inlet~ *~
summing +~
bus
outlet~

Figura4.21:
Figure 4.21: The
L’abstraction abstractionutilizzata
sampvoicesampvoice nel polyphonic
used in the campionatore polifonico
sampler of di
Figura4.20.
Figure 4.20.
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à dell’attacco, assumendo l’output lineare? E con la quarta
potenza?
3. Quale funzione di trasferimento di tipo esponenziale (cioè quale scelta di
n per la funzione f (x) = xn ) dobbiamo usare se si desidera che il valore a
metà percorso sia −12 decibel?
4. Supponiamo che si desideri fare una dissolvenza incrociata tra due segnali,
cioè 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à una perdita di 3 decibel a metà 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 è 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 modu-
lazione: 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 verti-
calmente o orizzontalmente. La modulazione è 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 è distri-
buita rispetto alle frequenze (possono essere date molte definizioni più precise
di quelle che noi svilupperemo qui, ma che richiederebbero un background più
matematico).
La parte (a) della figura mostra lo spettro di un segnale armonico, che è
un segnale periodico la cui frequenza fondamentale è 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ò essere considerato sinusoidale,

a0 = a0 cos(0 · ωn),

la cui frequenza è zero).


In un segnale armonico, la potenza mostrata nello spettro è concentrata su un
sottoinsieme discreto dell’asse delle frequenze (un insieme discreto è 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
è 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
Figura 5.1:
5.1: A taxonomy
Una of timbres.
tassonomia TheL’inviluppo
di timbri. spectral envelope describes
spettrale descrivethe
la shape
forma
of thespettro.
dello spectrum. The sound
Il suono may discretamente
può essere be discretely or continuously distributed
o continuamente distribuito in
in
frequency;
frequenza; ifsediscretely, it may
discretamente, be essere
può harmonic or inharmonic.
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 è 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è 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é la frequenza angolare ω è diversa da zero.
Ma per una componente di frequenza zero, per cui ω = φ = 0, l’ampiezza è data
da a – senza dover dividere per due (le componenti con frequenza zero sono
spesso chiamate componenti DC; “DC” è storicamente un acronimo di “corrente
diretta”). Queste convenzioni per le ampiezze degli spettri semplificheranno
l’aspetto matematico più avanti in questo capitolo; una ragione più profonda
diventerà evidente nel Capitolo 7.
La parte (c) della figura mostra una terza possibilità: lo spettro potrebbe
non essere concentrato in un insieme discreto di frequenze, ma potrebbe essere
distribuito tra tutte le frequenze possibili. Questo può 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ò essere specifi-
cato intenzionalmente; in quel caso, è solitamente chiaro come fare uno spettro
conforme ad esso. Per uno spettro discreto, ad esempio, potremmo semplice-
mente leggere, dall’inviluppo spettrale, l’ampiezza desiderata di ogni parziale e
quindi ricrearlo.
A volte il suono di una nota può essere determinato dal suo spettro. Per gli
spettri discreti, il tono è codificato principalmente nelle frequenze delle parziali.
I segnali armonici hanno un tono determinato dalla loro frequenza fondamenta-
le; per quelli inarmonici, il tono può essere chiaro, ambiguo o assente in totale,
secondo regole complesse e incomplete. Uno spettro rumoroso può anche pos-
sedere un tono percepibile se l’inviluppo spettrale contiene uno o più picchi
vicini. In generale, la rumorosità e il timbro di un suono dipendono maggior-
mente dal suo inviluppo spettrale rispetto alle frequenze nello spettro, anche se
la distinzione tra spettri continui e discreti può 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à statiche, non considerando se cam-
biano 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 è 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à timbrica


chiamata “rugosità” è talvolta pensata come un riflesso di cambiamenti rapidi
dell’inviluppo spettrale nel tempo. La descrizione semplificata qui sviluppata
è comunque utile nelle discussioni su come costruire spettri discreti o continui
per un’ampia varietà 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 molti-
plicati con segnali lentamente variabili (utilizzati, ad esempio, come inviluppi di
ampiezza). Per una comprensione completa dell’algebra dei segnali audio dob-
biamo 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 è la formula del prodotto dei coseni:

1 
cos(a) cos(b) = cos(a + b) + cos(a − b) .
2
Per capire perché 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 moltiplichia-
mo 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 è la somma delle due frequenze originali e una è la loro differenza (se
accade che la differenza α−β sia negativa, è sufficiente permutare le due sinusoidi
originali e la differenza sarà poi positiva). Queste due nuove componenti sono
chiamate sidebands (estremi di banda).
Ciò ci dà una tecnica per spostare le frequenze delle componenti di un suo-
no, che prende il nome di modulazione ad anello, e che viene mostrata nella sua
forma più 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 termi-
ne “modulazione ad anello” viene spesso usato in modo più 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 mol-
tiplicando una sinusoide (modulante), di frequenza angolare α e ampiezza di
5.2.
5.2. MULTIPLYING
Moltiplicazione diAUDIO
segnali SIGNALS
audio 123
117

IN
1

-1
OUT

Figura5.2:
Figure 5.2: Block
Diagramma a blocchi
diagram for ring per modulazione
modulating ad anello
an input signalcon un asegnale
with di
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
(persimplicity
semplicitàthe phase di
i termini terms
fase are
sonoomitted.)
omessi). Each partparte
Ciascuna of thedella
figure shows
figura both
mostra
the
sia modulation
il segnale disignal and the che
modulazione result in the same
il risultato nellospectrum. The modulating
stesso spettro. Il segnale
signal appears
modulante as a single
appare come unafrequency,
singolaα,frequenza,
at amplitude a. The product
α, all’ampiezza a. Ilinprodotto
general
has two component
in generale frequencies,
ha due frequenze pereach at an amplitude
le componenti, ognuna ofad
a/2.
un’ampiezza di a/2.
Parts (a) (a)
Le parti ande (b) of thefigura
(b) della figuremostrano
show “general” cases where
i casi “generali” in cuiα αand
e ββsono
are
nonzero
non nulle and differenttra
e diverse from
loro.each
Le other.
frequenze Thedelle
component frequencies
componenti of sono
in uscita the output
α+β
are
e αα−+β.β and − β. In
Nellaαparte (b),part
dato (b),
chesince
α −α β−<β0,<otteniamo
0, we get unaa negative frequency
componente con
component. Since cosine
frequenza negativa. is an
Poiché even function,
il coseno we havepari, abbiamo che
è una funzione

α)n),
cos((α − β)n) = cos((β − α)n)

quindi
so la componente
the negative componentnegativa è esattamente
is exactly equivalentequivalente
to one at athequella con frequency
positive frequenza
positiva β − α, con la stessa
β − α, at the same amplitude. ampiezza.
Nel
In thecaso speciale
special casedove α =α β,
where = laβ, seconda banda
the second laterale (differenza)
(difference) sideband hasha zero
una
frequenza pari a zero. In questo caso la fase sarà significativa quindi
frequency. In this case phase will be significant so we rewrite the product with riscriviamo
il prodotto
explicit con replacing
phases, fasi esplicite,
β 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é 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 è 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
Infine, la (d)(d)
parte shows a carrier
mostra signal modulante
un segnale whose frequency is zero. Itsè value
la cui frequenza is
zero. Il
the constant a (not 2a; zero frequency is a special case). Here we
suo valore è la costante a (non 2a, la frequenza zero è un caso speciale). Quiget only one
sideband,
abbiamo soloof amplitude
una banda a/2 as usual.
laterale, di ampiezza a/2 come al solito.
We can useusare
Possiamo the distributive rule for multiplication
la legge distributiva to find out
per la moltiplicazione perwhat happens
scoprire cosa
when
succedewe quando
multiplymoltiplichiamo
signals together which
segnali consistciascuno
insieme, of more dei
than oneè partial
quali each.
costituiti da
più 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
CHAPTER 5. Modulazione
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:
Figure 5.3: Sidebands
Bande laterali derivanti
arising dalla moltiplicazione
from multiplying two sinusoidsdi due sinusoidi α
of frequency di
frequenze
and β: (a)α ewith
β: (a)
α > conβ α>> 0;
β> (b)0; with
(b) con
β >β> α αsointhat
modo chelower
the la banda laterale
sideband is
inferiore sia
reflected aboutriflessa
the frispetto l’asse
= 0 axis; (c)fwith
= 0; α(c)
= con α =which
β, for β, perthecuiamplitude
l’ampiezzaofdella
the
banda laterale sideband
zero-frequency a frequenza zero dipende
depends dalle fasi
on the phases delletwo
of the duesinusoids;
sinusoidi;(d)(d)with
con
α = 0.
5.2. Moltiplicazione di segnali audio 119

5.2. MULTIPLYING AUDIO SIGNALS 125

amplitude

(a)

frequency

(b)

(c)

Figure
Figura 5.4:
5.4: Result of ring
Risultato dellamodulation
modulazioneofad
a complex
anello di signal by a complesso
un segnale pure sinusoid:
per
(a) the original signal’s spectrum and spectral envelope; (b) modulated
una sinusoide pura: (a) lo spettro del segnale originale e l’inviluppo spettra-by a
relatively low modulating
le; (b) modulato frequency modulante
da una frequenza (1/3 of therelativamente
fundamental);bassa
(c) modulated
(1/3 della
by a higher frequency, 10/3 of the fundamental.
fondamentale); (c) modulato da una frequenza più 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 è 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 è 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 sinusoi-
de) è inferiore alla frequenza fondamentale del segnale complesso. In questo caso
lo spostamento è pari a una distanza relativamente piccola, in modo che il ripie-
gamento dello spettro, alla fine, colloca i due alveoli quasi uno sopra all’altro.
Il risultato è un inviluppo spettrale approssimativamente uguale all’originale
(anche se alto metà) e uno spettro due volte più denso.
Un caso particolare, non mostrato, è quello di utilizzare una frequenza por-
tante pari alla metà 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 è 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 par-
ziali 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ù alta della frequenza fondamentale del segnale complesso. Qui l’effetto
di ripiegamento è chiaramente molto più visibile (solo una parziale, quella più a
sinistra, deve essere riflessa per rendere la sua frequenza positiva). L’inviluppo
spettrale è ora spostato molto rispetto all’originale; questo spostamento è spesso
un effetto molto più udibile rispetto che alla sola ricollocazione delle parziali.
Come ulteriore caso particolare, la frequenza portante può essere un mul-
tiplo della fondamentale del segnale complesso periodico; allora le parziali si
posizionano tutte su altre parziali della stessa fondamentale, e l’unico effetto è
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 è mostrato in Fi-
gura 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’am-
piezza del segnale in entrata. Poiché 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 am-
precede 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
the un modo semplice
affect the peroutput
creare waveform.
una famigliaThe di timbri in continuo
clipping function mutamen-
passes its
input to the output unchanged as long as it stays in the interval Per
to, semplicemente variando il livello di input della trasformazione. questo-
between
0.3 and +0.3. So when the input does not exceed 0.3 in absolute value,parte
motivo, è consuetudine includere un controllo di ampiezza principale come the
dell’operazione
output is the same di waveshaping,
as the input. come mostrato
But when nel diagramma
the input grows pasta theblocchi.
limits, the
L’ampiezza
output della forma
stays within; and asd’onda in entrataofè the
the amplitude chiamata
signal indice
increasesdi waveshaping.
the effect of
this clipping action is progressively more severe. In the figure, the piccole
In molte situazioni un indice piccolo porta a distorsioni relativamente input is(ina
decaying sinusoid. The output evolves from a nearly square waveform timbro
modo che l’output somigli molto all’input) e un indice più grande dà un at the
più distorto
beginning to ea più
purericco.
sinusoid at the end. This effect will be well known to anyone
whoLa hasFigura
played5.6 anmostra un esempio
instrument through familiare di waveshaping,
an overdriven amplifier. inThecuilouder
f () è una
the
input, the more distorted will be the output. For this reason, waveshapingco-
funzione di taglio (clipping function). Questo esempio mostra chiaramente is
me l’ampiezza
also sometimesdell’input – l’indice – possa influenzare la forma d’onda di uscita.
called distortion.
La Figure
funzione 5.7dishows
taglio apassa
muchil suo
simpleringresso
and all’uscita
easier to invariato finché rimane
analyse situation, nel-
in which
l’intervallo tra −0.3 e +0.3. Perció,
the transfer function simply squares the input: quando l’input non supera 0.3 in valore
assoluto, l’output è uguale all’input. Ma quando l’input supera questi limiti,
l’output vi resterà all’interno; all’aumentare f (x) = x2 dell’ampiezza del segnale, l’effetto
di questa azione di taglio sarà progressivamente più drastica. Nella figura, l’in-
For a sinusoidal input,
put è 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à ben
we
notogeta chiunque abbia suonato uno strumento attraverso un amplificatore con
overdrive. Quanto più fforte a2
(x[n])è = l’ingresso, più l’uscita
(1 + cos(2ωn sarà distorta. Per questa
+ 2φ))
ragione, il waveshaping viene a volte 2 chiamato anche distorsione.
If the
Laamplitude
Figura 5.7amostraequals una
one,situazione
this just amounts
molto piùtosemplice
ring modulating
e facile dathe sinusoid
analizzare,
by a sinusoid
in cui la funzione of the same frequency,
di trasferimento whose
calcola result we described
semplicemente il quadrato in dell’input:
the previ-
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
Figura 5.6:
5.6: Clipping
Esempio di aswaveshaping
an example con
of waveshaping: (a) the
taglio: (a) l’input, input,
una a decaying
sinusoide che de-
sinusoid; (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
tra −0.3-0.3 and (c)
e +0.3; +0.3; (c) the result.
il risultato.
5.3. Waveshaping 123

5.3. WAVESHAPING 129

1
(a)

-1

(b)
-1 1

1
(c)

2
Figure
Figura5.7:
5.7:Waveshaping
Waveshaping using a quadratic
usando transferdifunction
una funzione f (x) = xquadratica
trasferimento : (a) the
input; (b) the transfer function; (c) the result, sounding at twice the
f (x) = x2 : (a) l’input; (b) la funzione di trasferimento; (c) il risultato, original
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

a2
f (x[n]) = (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
f (x[n]) = (1 + cos(2ωn + 2φ)).
2
Se l’ampiezza a è uguale a 1, ciò 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 è una sinusoide DC (a
frequenza nulla) più 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à, ometteremo i termini di fase iniziale. Sia quindi

x[n] = a cos(αn) + b cos(βn)

e applicandovi f () si ottiene
a2
f (x[n]) = 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 separa-
tamente le due sinusoidi. Il terzo termine è 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ù dominante al-


l’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 è una funzione lineare del suo
segnale di ingresso, il waveshaping è 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ù complessi, a volte
molto più ricchi da un punto di vista sonoro, ma, d’altra parte, più difficili da
capire o prevedere.
In generale, possiamo dimostrare che un input periodico, non importa quanto
complesso sia, avrà lo stesso periodo dopo il waveshaping: se il periodo è τ 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ò 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ù 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à dopo un periodo di τ :

f (x + y)[n + τ ] = f (x + y)[n].

Questo è stato sperimentato da ogni chitarrista elettrico che ha impostato l’am-


plificatore su overdrive e ha suonato insieme le corde Si e Mi Cantino: il pro-
dotto 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ù esplicita dell’effetto di waveshaping su
un segnale in entrata, è 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] è 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é i termini della serie sono successivamente moltiplicati per potenze su-
periori dell’indice a, un valore piccolo di a enfatizzerà i primi termini più
pesantemente e un valore più alto sottolineerà quelli superiori.
Gli spettri dei singoli termini possono essere trovati applicando ripetutamen-
te la formula del prodotto del coseno:

1 = cos(0)

x[n] = cos(ωn)

1 1
x2 [n] = 2 + 2 cos(2ωn)

1 2 1
x3 [n] = 4 cos(−ωn) + 4 cos(ωn) + 4 cos(3ωn)

1 3 3 1
x4 [n] = 8 cos(−2ωn) + 8 cos(0) + 8 cos(2ωn) + 8 cos(4ωn)

1 4 6 4 1
x5 [n] = 16 cos(−3ωn) + 16 cos(−ωn) + 16 cos(ωn) + 16 cos(3ωn) + 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à, implica che la k−esima
riga può essere approssimata da una curva gaussiana la cui deviazione standard
(una misura di larghezza) è 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é 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 in-
terferiranno in modo distruttivo; questo darà origine ad un’evoluzione spettrale
più 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à un’ottava superiore rispetto
alla sinusoide in entrata. Se nell’espansione di f (x) ci sono solo potenze dispari,
l’output conterrà solo parziali dispari. Anche se f non può essere espressa
esattamente come una serie di potenze (ad esempio, la funzione di clipping
della Figura 5.3), è ancora vero che se f è una funzione pari, cioè se

f (−x) = f (x)

si otterranno solo armonici pari e se f è 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 è 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ò continuare e costruire
qualsiasi spettro statico desiderato (l’esempio E05.chebychev.pd dimostra que-
sto). Generare famiglie di spettri tramite il waveshaping di una sinusoide di
ampiezza variabile risulta essere più complesso, anche se sono stati trovati di-
versi 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 per-
cepiamo 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 possibi-
lità [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] è leggermente
diversa.
5.4. Modulazione
5.4. FREQUENCY di AND
frequenza e di MODULATION
PHASE fase 127
133

(a) (b)

modulation modulation
frequency frequency

1 1

-1 -1

index of
index of
modulation
modulation
carrier
1 frequency

carrier N
frequency
1

-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 Lathetecnica
expression reduces
FM, nella sua to the più
forma unmodified,
semplice, carrier sinusoid;
è mostrata as a 5.8
in Figura increases
(parte
the waveform becomes more complex.
a). Una sinusoide modulata in frequenza è quella la cui frequenza varia sinu-
To analyseadthe
soidalmente resulting
una frequenzaspectrum
angolare weωcan rewrite ad
m rispetto theuna
signal as,
frequenza centrale
ωc , in modo che le frequenze istantanee varino tra (1 − r)ωc e (1 + r)ωc , dove
x[n] la
il parametro ωm controlla cos(ωc n) ∗dicos(a
= frequenza cos(ωmen))
variazione r controlla la profondità
della variazione. I parametri ωc , ωm e r sono chiamati rispettivamente frequenza
portante, frequenza modulante e indice
− sin(ω di modulazione.
c n) ∗ sin(a cos(ωm n))
È consuetudine utilizzare una formulazione più semplice e sostanzialmente
We can consider the result as a sum of two waveshaping generators, each oper-
equivalente in cui è la fase della sinusoide portante, anziché 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à un risultato equivalente poiché
ring modulated with a sinusoid of frequency ωc . The waveshaping function f is
la frequenza istantanea è il tasso di variazione della fase e poiché la velocità
given by f (x) = cos(x) for the first term and by f (x) = sin(x) for the second.
di cambiamento di una sinusoide è ancora un’altra sinusoide). La formulazione
Returning to Figure 5.4, we can predict what the spectrum will look like.
della modulazione di fase è mostrata nella parte (b) della figura.
Possiamo analizzare il risultato della modulazione di fase come segue, sup-
ponendo 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ò quindi essere scritto come

x[n] = cos(a cos(ωm n) + ωc n).

Il parametro a, che sostituisce il parametro precedente r, è analogamente chia-


mato indice di modulazione; questo controlla anche l’entità della variazione di
frequenza rispetto alla frequenza portante ωc . Se a = 0, non c’è alcuna variazio-
ne di frequenza e l’espressione si riduce alla sinusoide portante non modificata;
all’aumentare di a la forma d’onda diventa più 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 wave-


shaping, 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 è 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à 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 è moltiplicato per una sinusoide alla frequenza portante. Quindi, ci
sarà uno spettro centrato sulla frequenza portante ωc , con bande laterali ai
multipli sia pari che dispari della frequenza di modulazione ωm , prodotti rispet-
tivamente 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’è
un sopramultiplo comune dei due periodi, il prodotto risultante si ripeterà a
quel periodo più 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é ω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 è possibile trovare un comune sottomultiplo ω, o se gli


unici sottomultipli sono inferiori a qualsiasi tono discernibile, allora il risultato
sarà inarmonico.
Molto di più sulla tecnica FM si può trovare nei libri di testo [Moo90, p.
316], [DJ85, pp.115-139], [Bou00] e nella letteratura di ricerca. Alcune delle
possibilità 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 è 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 tog-
gles. Quando sono accesi, l’inviluppo spettrale ha un picco al DC (perché il
segnale costante è due volte più 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 colle-
gandoli tutti alla stessa entrata dell’oggetto ∗ ∼). Il valore della “fondamentale”
in alto viene calcolato per allinearsi bene all’analisi spettrale, il cui risultato è
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 è 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è periodico) tramite una sinusoide, un caso
speciale interessante è quello di impostare l’oscillatore portante a metà della fre-
quenza fondamentale abbassando cosı̀ il suono risultante di un’ottava con solo
una deformazione relativamente piccola dell’inviluppo spettrale. Un altro caso è
quello di modulare con una sinusoide ad un multiplo della frequenza fondamen-
tale, che sposta, in effetti, l’inviluppo spettrale senza cambiare la frequenza fon-
damentale del risultato. Questo è 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 6 7
-- partial number --

(b)

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

(Figura 5.10). Il segnale che processiamo qui è una registrazione di una voce
che parla.
Le sottopatches pd looper e pd delay nascondono i dettagli. Il primo è un
campionatore a loop del tipo descritto nel Capitolo 2. Il secondo è un ritardo
di 1024 campioni, che utilizza oggetti che introdurremo più 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ò 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 è in note MIDI, viene riportato con il
valore zero se non vi è 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, di-
mostrando la non-linearità 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 è stato mostrato graficamente in Figura 5.6.
Finché l’ampiezza della somma delle sinusoidi è inferiore al 50 percento, la
somma non può 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à 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 è quindi la fondamentale del tono risultante. Visto in un altro
modo, il più breve periodo comune delle due sinusoidi è di 1/75 secondi (cioè
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ò essere variata. Se viene
spostata leggermente da 225, si ottiene un battimento. Altri valori fornisco-
no 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 6 7
-- partial number --

(b)

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

138 CHAPTER 5. MODULATION

osc~ 300

loadbang

225
225 <-- frequency of second tone
osc~
loadbang
+~
50
*~ amplitude of sum
50 <-- before clipping

clip~ -1 1 / 100
|
(OUT)

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, demon-
strating/the
100nonlinearity of the process. Two sinusoids (300 and 225 Hertz, or
a ratio of 4 to 03) 50
pack are summed and then clipped, using a new object class:
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
As 129as the amplitude of the sum of sinusoids is less than 50 percent, the
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 distor-
50 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
Figure (whichChebychev
5.12: Using is four periods of the 300
polynomials Hertz, tone and
as waveshaping three functions.
transfer periods of
Figura
the 2255.12:
HertzUtilizzo deithe
tone), so polinomi di Chebychev
result repeats come
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 wave-
shaping 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 fun-


zioni 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] è un indice opportuno che può variare in funzione del sample number
n. Quando accade che a valga uno, l’output è 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 è uno). Ma il vero aspetto inte-
ressante del waveshaping – cioè che cambiando semplicemente l’indice possiamo
produrre spettri che si evolvono in modi interessanti ma controllabili – non è
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ù alto darà, nell’espansione, un peso relativo mag-


giore ai termini di potenze più elevati; come abbiamo visto visto in precedenza,
se l’indice di modulazione è 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 di-
versi per controllare il risultato in modo prevedibile in funzione dell’indice a.
Per scegliere l’esempio più semplice possibile, supponiamo che vogliamo che f0
sia il termine più grande per 0 < a < 1, per poi essere quindi superato dal
termine più rapidamente crescente af1 for 1 < a < 2, che è 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ò 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


1
fk = .
1 · 2 · 3···k
Questi sono i coefficienti della serie di potenze per la funzione f (x) = ex , dove
e ≈ 2.7 è la costante di Eulero.
Prima di utilizzare ex come funzione di trasferimento è consigliabile pianifi-
care 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à ea , che si verifica ogni volta che la fase è zero. Una scelta
semplice e naturale è semplicemente quella di dividere per ea in modo da ridurre
il picco a uno, cioè:

ea cos(ωn)
f (a cos(ωn)) = = ea cos(ωn)−1 .
ea
Questo è 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 wave-
shaping, decresce l’energia presente nella fondamentale; l’energia viene sempre
di più diffusa sulle parziali.

Waveshaping sinusoidale: parità e disparità


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

a=0 0

0.25

a=4 0

0.25

a=16 0
0 1 2 3 4 5 6 7
−− partial number −−

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

5.5. Esempi 137

(frequency)
|
(index)
osc~
|
*~
symmetry
+~ 0.1 0.1 mixed
cos~ 0 even
| odd
0.25
(OUT)

Figura 5.14: Utilizzo di un offset additivo su una funzione di trasferimento


Figure
coseno 5.14: Using an additive
per modificare offsettra
la simmetria to pari
a cosine transfer
e dispari. function
Senza to alter the
compensazione la
symmetry
simmetria è pari. Per la simmetria dispari, viene aggiunto un quartoFor
between even and odd. With no offset the symmetry is even. odd
di ciclo
symmetry, a quarter
alla fase. Gli offsets cycle is added
più piccoli to the
danno unaphase. Smaller
miscela di parioffsets give a mixture
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(φ)
quindi il risultato è un mix tra gli armonici pari e dispari,
modulation con φ che controlla
modulation
frequency frequency descritta in
le relative ampiezze. Ciò è mostrato nella patch E07.evenodd.pd,
Figura 5.14. | |
osc~ osc~
carrier
Modulazione di modulationfase e FM frequency modulation
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 è
suddiviso osc~ cos~
nelle sue componenti di ricerca di fase e di coseno. Il segnale è della
forma | |
(OUT) x[n] = cos(ωc n + a (OUT)
cos(ωm n))
dove ωc è la frequenza (b)
(a) portante, ωm è la frequenza di modulazione, e a è l’indice
di modulazione – tutto in unità 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 + π)+

3π 3π
+J3 (a) cos((ωc + 3ωm )n + 2 ) + J3 (a) cos((ωc − 3ωm )n + 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 modulation
frequency frequency
| |
osc~ osc~
carrier
modulation frequency modulation
index | index
carrier |
| phasor~
frequency
*~ *~
|
+~ +~

osc~ cos~
| |
(OUT) (OUT)
(a) (b)

Figure
Figura5.15:
5.15: Pd patches
Patches for:per:
in Pd (a) (a)
frequency modulation;
modulazione (b) phase
di frequenza; modulation.
(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 di-
pendono 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ò 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 è la metà 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 è quella di effettuare
la modulazione di fase nello spettro della modulazione di fase stessa. Esisto-
no quindi due indici di modulazione (li chiamano a e b) e due frequenze di
modulazione (ωm e ωp ) e la forma d’onda è:

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 + + b cos(ωp n)).
2
Questo è 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
0 2 4 6 8 10 12 14

0.25

a=0.38 0
0 2 4 6 8 10 12 14

0.25

a=0.84 0
0 2 4 6 8 10 12 14
−− partial number −−

Figure
Figura5.16:
5.16: Spectra
Spettri from
dalla phase modulation
modulazione di faseata three different
tre diversi indices.
indici. The
Gli indici
indices are come
sono dati given multipli
as multiples
di 2πofradianti.
2π radians.

L’esempio E10.complex.FM.pd (non mostrato qui) illustra questo procedi-


mento 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 è diventata un importante ambito
industriale.

Esercizi
1. Un suono ha fondamentale 440. Come potrebbe essere modulato ad anel-
lo 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 è 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 stru-


mento FM a due operatori per ottenere frequenze di 618, 1000 e 2618
Hertz? (Questa è 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 è circa 0.707) vengono moltiplicate. Qual è
l’ampiezza RMS del prodotto?
5. Supponiamo di voler rendere una FM ancora più complicata modulando
l’oscillatore modulante, come in:

cos(ωc n + a cos(ωm n + b cos(ωp n)))

Come, qualitativamente parlando, lo spettro differirà da quello del sem-


plice esempio a due modulatori (paragrafo 5.5)?

6. Una sinusoide a frequenza ω è modulata ad anello da un’altra sinusoide


esattamente alla stessa frequenza. A quali differenze di fase scomparirà la
componente DC del risultato?
Capitolo 6

Progettare spettri

Come suggerito all’inizio del capitolo precedente, un modo potente per sinte-
tizzare i suoni musicali è quello di specificare – e quindi realizzare – specifiche
traiettorie di tono (o, più in generale, di frequenze di parziali), insieme a traiet-
torie 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ò potrebbe essere quello di imitare una corda piz-
zicata costruendo un suono con parziali armonicamente distanziate in cui l’invi-
luppo spettrale parte molto ricco ma poi decade in maniera esponenziale con le
frequenze più alte che decadono più 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ù complicato è 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 registra-
ti (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ù noto per farlo è 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 grossola-
namente 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 è sull’asse
f = 0 (o vicino ad esso), facciamo finta che scenda a sinistra allo stesso tasso
con cui (nella realtà) scende a destra.
Supponiamo che vogliamo generare un suono armonico con un determinato
insieme di formanti. Indipendentemente dalla frequenza fondamentale deside-
rata, vogliamo che lo spettro abbia picchi con frequenze centrali, ampiezze e
larghezze di banda prescritte. Tornando agli spettri di modulazione di fase mo-
strati nella Figura 5.16, vediamo che, almeno a piccoli indici di modulazione,

141
148
142 CHAPTER 6. DESIGNER
Capitolo SPECTRA
6. Progettare spettri

(f , a )
1 1

b
1
(f , a )
2 2

b
ampli- 2
tude

frequency

Figure
Figura6.1:
6.1:AUna
spectral envelope
inviluppo showing
spettrale chethe frequencies,
mostra amplitudes,
le frequenze, and band-
le ampiezze e le
widths of two
larghezze formants.
di banda di due formanti.

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

6.1 Carrier/modulator
6.1 Modello carrier/modulator
model
In precedenza
Earlier we saw abbiamo
how to use visto come
ring usare la to
modulation modulazione
modify thead anello per
spectrum of modifi-
a peri-
care lo spettro di un segnale periodico, collocando picchi spettrali
odic signal, placing spectral peaks in specified locations (see Figure 5.4, in posizioni
Page
specifiche
125). To do(vedere
so we Figura
need to5.4,be Pagina
able to119). Per fare
generate ciò bisogna
periodic signals essere
whose in grado
spectra
di generare
have maximasegnali
at DC periodici
and fall offi cui spettri abbiano
monotonically with massimi
increasing al frequency.
DC e scendanoIf we
monotonicamente al crescere della frequenza. Se possiamo
can make a signal with a formant at frequency zero—and no other fare un segnale con
formants
besides that one—we can use ring modulation to displace the formant to any–
una formante alla frequenza zero – e nessun altra formante oltre a questa
possiamo
desired usare la modulazione
harmonic. ad anello per
If we use waveshaping spostare the
to generate la formante su qualsiasi
initial formant, the
armonico desiderato. Se usiamo il
ring modulation product will be of the formwaveshaping per generare la formante iniziale,
il prodotto della modulazione ad anello sarà della forma
x[n] = cos(ωc n)f (a cos(ωm n))
x[n] = cos(ωc n)f (a cos(ωm n))
where
dove ωωcc (la
(thefrequenza
carrier frequency)
portante) is
è set to the formant
impostata center frequency
sulla frequenza (a ·
and ffor-
centrale della
cos(ω
mante n)) is a signal with fundamental frequency determined
m e f (a cos(ωm n)) è un segnale con frequenza fondamentale m by ω , produced
determinata
da ωm , prodotto usando una funzione di waveshaping f e un indice a. Que-
sto secondo termine è il segnale che vogliamo dare a una formante sul DC con
una larghezza di banda controllabile. Un diagramma a blocchi per sintetizzare
questo segnale è mostrato in Figura 6.2.
6.1. Modello carrier/modulator 143

6.1. CARRIER/MODULATOR MODEL 149

modulation
frequency

-1
index of
modulation

1
carrier
frequency

-1 1

-1
OUT

Figura 6.2:
Figure 6.2: Waveshaping modulato
Ring modulated ad anello per for
waveshaping la generazione di formanti.
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

stretch index

1 1

-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ò essere inserita nello stesso
schema. L’output della wavetable inviluppata, per un ciclo, è:

x(φ) = T (cφ) · W (aφ),

dove φ, la fase, soddisfa −π ≤ φ ≤ π. Qui T è una funzione memorizzata in


una wavetable, W è 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à significativa è 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 è il ruolo che è
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ù generale che è
quello di calcolare funzioni della forma

x[n] = c(ωn)ma (ωn)


6.2. Treni di impulsi 145

dove c è una funzione periodica che descrive il segnale portante, e ma è una


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

6.2 Treni di impulsi


I treni di impulsi possono essere generati utilizzando il waveshaping o la stret-
ched wavetable. La formulazione tramite waveshaping è più 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 è 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 è concentrata
sul DC. All’aumentare di a, l’energia si diffonde tra gli armonici progressiva-
mente più alti rispetto alla fondamentale ω. A seconda della funzione f , questa
diffusione può essere ordinata o disordinata. Una diffusione ordinata può es-
sere 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 ri-
sultati che si comportano bene, semplici e prevedibili. Dopo aver adeguatamente
normalizzato, abbiamo ottenuto gli spettri mostrati in Figura 5.13. Una legge-
ra riscrittura del modulatore di waveshaping per questa scelta di f (e tenendo
conto della ri-normalizzazione) dà:
ω 2
ma [n] = ea·(cos(ωn)−1)) = e−[b sin 2]

dove b2 = 2a in modo che b sia proporzionale alla larghezza di banda. Questo


può 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 di-
stribuzione 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 è la distribuzione di Cauchy (ancora non normaliz-


zata):
1
h(x) =
1 + x2
che dà 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 (conta-
ta in picchi, cioè in unità di ω) è approssimativamente proporzionale all’indice b
e l’ampiezza del termine DC (l’apice dello spettro) è approssimativamente pro-
porzionale a 1/(1 + b). Per entrambe le funzioni di waveshaping (g o h), se b è
maggiore di circa 2, la waveshape (forma dell’onda) di ma (ωn) è circa una scan-
sione (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ò essere fatto tramite una
stretched wavetable:
Ma (φ) = W (aφ),
dove −π ≤ φ ≤ π è 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 è
1
W (φ) = (cos(φ) + 1)
2
che viene illustrata nella parte (a) di Figura 6.4. Questa è noto come la funzione
finestra di Hann; verrà ripresa nel Capitolo 9.
Realizzando questa come una forma d’onda ripetuta, otteniamo una succes-
sione di copie (opportunamente campionate) della funzione W , il cui duty cycle
è 1/a (parti (b) e (c) della figura). Se non si desidera che le copie si sovrapponga-
no l’indice a deve essere almeno 1. Se si desidera consentire la sovrapposizione,
la strategia più semplice è 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ù complessi da utilizzare con i modula-
tori che abbiamo visto finora, è istruttivo vedere che cosa ci dà, 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 è due in entrambi i casi. Nella parte (a) Ma è 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
Figura6.4:
6.4: Pulse width modulation
Modulazione using
di larghezza the von Hann
dell’impulso usandowindow function:
la funzione (a)
finestra
the function
di Hann: (a)Wla(φ)funzione
= (1 + Wcos(φ))/2;
(φ) = (1(b) the function
+ cos(φ))/2; (b)aslaafunzione
waveform, repeated
come forma
atd’onda,
a dutyripetuta
cycle ofcon100% (modulation
duty index(indice
cycle del 100% a = 1);di(c) the waveform
modulazione a = at
1);a(c)
50% la
forma
duty
154 d’onda
cycle (a =con2). duty cycle del 50% (a = 2).
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 è 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 è forte) cambia la
larghezza di banda. Si noti che la funzione allungata della finestra di Hann è
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à della quale si vedono i cosiddetti sidelobes: picchi
extra spuri ad ampiezza più 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ù forti su entrambi i lati sono circa 32 dB più 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ù
lontano che il primo dalla frequenza centrale, è di circa venti decibel più in
basso. L’effetto di questi sidelobes è spesso udibile come un leggero rumore nel
suono.

La forma di questa formante può essere fatta arbitrariamente “grassa” (cioè


con larghezza di banda molto larga), ma c’è un limite per quanto sia invece pos-
sibile farla sottile, in quanto il duty cycle della forma d’onda non può superare
il 100%. A questo duty cycle massimo la forza della formante scende a zero alla
distanza di due armonici dal picco centrale. Se è 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 è due in entrambi i casi (lo stesso per la
finestra di Hann della parte (a)) e la larghezza di banda è paragonabile a quella
dell’esempio di Hann. In questi esempi non ci sono sidelobes e, inoltre, l’indice
di modulazione può essere lasciato scendere fino a zero, fornendo una sinusoide
pura; non esiste alcun limite inferiore sulla larghezza di banda. D’altra parte,
poiché la forma d’onda non raggiunge lo zero alle estremità di un ciclo, questo
tipo di treno di impulsi non può essere usato per creare una finestra su una
wavetable arbitraria, come potrebbe invece fare il treno di impulsi Hann.
L’esempio di Cauchy è particolarmente utile per la progettazione di spettri,
in quanto la forma della formante è un triangolo isoscele perfetto, quando viene
rappresentato in decibel. D’altra parte, l’esempio gaussiano raccoglie più energia
verso la formante e scende più velocemente alle code, e cosı̀ ha un suono più
pulito e offre una migliore protezione contro il foldover.
6.3. Modulazione ad anello mobile 149

6.2. PULSE TRAINS 155

Hann
100

80

60

40

20

Gaussian
100

80

60

40

20

Cauchy
100

80

60

40

amplitude
20
(dB)

0 2 4 6 ...
partial number

Figura 6.6: Spettri di tre treni di impulsi modulati ad anello: (a) la funzione
Figure
di 6.6:di Spectra
finestra of three
Hann, con ring-modulated
duty cycle pulse trains: (a)
del 50% (corrispondente theindice
ad un von Hann
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 Capitolo 6. Progettare spettri
6.3. MOVABLE RING MODULATION 157

Figure 6.7:
Figura 6.7: Waveform for a wavetable-based
Forma d’onda per un segnale carrier signal
portante tunedsutowavetable,
basato 1.5 times
the fundamental.
sintonizzato a 1.5 Two
volte periods are shown.Sono mostrati due periodi.
la fondamentale.

the left hand


6.3 side would hold aad
Modulazione sinusoid (placedmobile
anello symmetrically so that the phase
is zero at the center of the wavetable). The right-hand-side wavetable would
hold a Hannadesso
Ritorniamo or other al appropriate
segnale portante,window function.
cercando deiIfmodi
we desire the fundamental
per renderlo più con-
frequency to be ω, the formant center frequency
trollabile. Ci piacerebbe soprattutto poter scorrere continuamente to be ω c , and the bandwidth to
l’energia
be ω b
spettrale, we set the “stretch” parameter to the center frequency
su e giù in frequenza. Usare semplicemente una rampa sulla frequenza quotient defined
as ωc /ω, and the
dell’oscillatore index of
portante nonmodulation to the scopo,
va bene a questo bandwidth quotient,
in quanto ωb /ω. non sa-
gli spettri
The output signal is simply a sample of a cosine wave
ranno armonici, tranne quando la portante è un multiplo intero della frequenza at the desired center
frequency,
fondamentale. repeated at the (unrelated in general) desired period, and windowed
to take out the discontinuities at period boundaries.
Nell’approccio con la stretched wavetable, possiamo riuscirci semplicemen-
Although we aren’t able to derive this result yet (we will need Fourier anal-
te 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à poiché la wavetable stessa
zero at the center of the waveform (i.e., the components are all cosines if we con-
viene letta periodicamente alla frequenza fondamentale. Invece, la sinusoide è
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, sintoniz-
the 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 cancella-
Il segnale non ha una discontinuità 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à nella pendenza, che, se non viene rimossa ap-
residual signal.)
plicando un adeguato segnale di modulazione, comporterebbe delle componenti
This method leads to an interesting generalization, which is to take a se-
molto udibili ad alte frequenze.
quence of recorded wavetables, align all their component phases to those of
Utilizzando
cosines, and usequesta
them inidea possiamo
place fare una
of the cosine descrizione
function completa
as the carrier di come
signal. The
utilizzare il diagramma a blocchi della Figura 6.3 per
phase alignment is necessary to allow coherent cross-fading between samples produrre una forman-so
te
thatdesiderata.
the spectral La envelope
wavetablecan lookup
change sulsmoothly.
lato sinistro produrrebbe
If, for example, we unausesinusoide
succes-
(posizionata
sive snippetssimmetricamente
of a vocal sampleinas modo chewe
input, la fase
get asiastrikingly
zero al centro dellavocoder;
effective waveta-
ble). La wavetable
see Section 9.6. sul lato destro produrrebbe una Hann o un’altra appropriata
funzione
Anotherfinestra. Se vogliamo
technique for makingche la frequenza
carrier signals fondamentale
that can besia slidω,continuously
la frequenza
centrale della formante
up and down in frequency while sia ω c e la larghezza di banda
maintaining a fundamental sia ω , dobbiamo
b frequency is imposta-
simply
re il parametro “stretch” alla frequenza centrale
to cross-fade between harmonics. The carrier signal is then: quoziente definita come ωc /ω e
l’indice di modulazione alla larghezza di banda quoziente, ωb /ω.
c(φ) =èc(ωn)
Il segnale di uscita = p cos(kωn)
semplicemente un + q cos((k
sample di +un’onda
1)ωn) cosinoidale alla
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à agli estremi del
periodo. (k + q) ∗ ω = ωc
Benché non possiamo ancora trarre questo risultato (avremo bisogno dell’a-
nalisi di Fourier), si scoprirà che, nel lobo principale della formante, le fasi sono
tutte zero al centro della forma d’onda (cioè, le componenti sono tutte coseni
se consideriamo che la fase sia zero al centro della forma d’onda). Ciò significa
6.3. Modulazione ad anello mobile 151

che possiamo utilizzare qualsiasi numero di queste formanti per costruire uno
spettro più complesso e le ampiezze delle parziali si combinano tramite somma
(i sidelobes non si comportano cosı̀ bene: sono alternativamente di segno con-
trario 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è a prendere
una sequenza di wavetables registrate, allineare tutte le fasi delle loro compo-
nenti a quelle dei coseni e utilizzarle al posto della funzione coseno come segnale
portante. L’allineamento delle fasi è necessario per consentire una dissolvenza
incrociata coerente tra i samples in modo che l’inviluppo spettrale possa cam-
biare 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 con-
tinuamente su e giù in frequenza pur mantenendo una frequenza fondamentale,
è semplicemente quella di usare una dissolvenza incrociata tra gli armonici. Il
segnale portante è quindi:
c(φ) = c(ωn) = p cos(kωn) + q cos((k + 1)ωn)
dove p + q = 1 e k è 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é il modu-
latore agirà su essi coerentemente in fase). Per fare ciò, basta semplicemente
scegliere k e q come la parte intera e la parte frazionaria, rispettivamente, della
frequenza centrale quoziente ωc /ω.
Il modo più semplice di realizzare un’interfaccia di controllo per questa tec-
nica 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 ram-
pe. 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 è un cambiamento continuo nella frequenza cen-
trale. Tuttavia, è necessario un maggior lavoro se sono necessari cambiamenti
discontinui nella frequenza centrale. Questa non è una cosa irragionevole da
desiderare, essendo analoga a cambiare la frequenza di un oscillatore in modo
discontinuo.
C’è un ottimo modo per fare questo. Il trucco per l’aggiornamento di k
e q è quello di osservare che c(φ) = 1 ogni volta che φ è un multiplo di 2π,
indipendentemente dalla scelta di k, p e q finché p + q = 1. Quindi possiamo
fare cambiamenti discontinui in k, p e q una volta per periodo (proprio quando
la fase è un multiplo di 2π), senza creare discontinuità 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ò consente di aggiungere glissandi (udibili come dittonghi) alla tecnica origi-
nale 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 è og-
getto di un brevetto del 1994 di proprietà dell’IRCAM). La formula combinata

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ò essere sia la funzione di waveshaping gaussiana o quella


di Cauchy, ω è la frequenza fondamentale, a è 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 modulato-
re. Il blocco per la generazione di fase emette un segnale a dente di sega alla
frequenza fondamentale. Il modulatore è 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à della frequenza fondamentale, cioè
sin( ω2 ), e ciò richiederebbe di utilizzare un phasor con frequenza metà di quella
fondamentale. Tuttavia, poiché la funzione di waveshaping è pari, possiamo
sostituire con il valore assoluto della sinusoide:
ω

sin( )
2
che si ripete alla frequenza ω (il primo mezzo ciclo è 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 è questa
sinusoide rettificata che passiamo alla funzione di waveshaping.
Anche se la funzione wavetable è rappresentata da valori sia negativi che po-
sitivi (con range da −10 a 10), in realtà stiamo utilizzando solo la parte positiva
per la ricerca, da 0 a b, che è 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 ta-
bella dovrebbe estendersi abbastanza sulla coda della funzione di waveshaping
in modo che l’effetto del taglio non sia udibile.
Il segnale portante è una somma pesata di due coseni, le cui frequenze sono
aumentate per moltiplicazione (rispettivamente per k e k + 1) e subiscono suc-
cessivamente un’operazione di wrapping. In questo modo tutte le fasi di ricerca
sono controllate dallo stesso oscillatore a dente di sega.
Le quantità 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à p, non mostrata in figura, è
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

modulator carrier

k k+1

WRAP WRAP
0 1

0 1 0 1

p q
-10 10

OUT

Figura 6.8:6.8:
Figure Diagramma a blocchi del
The PAF generator as ageneratore PAF.
block diagram.
154 Capitolo 6. Progettare spettri
6.4. PHASE-ALIGNED FORMANT (PAF) GENERATOR 161

center
frequency
bandwidth
fundamental
frequency fundamental
frequency

phase
phase
trigger
trigger
S/H
S/H

WRAP
b

Figure 6.9: Calculation of the time-varying parameters a (the waveshaping in-


Figura 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.
nel paragrafo However, if using
precedente, the PAF k,
le quantità to generate formants
p, e q dovrebbero
with
cambiare solo nei punti di wraparound della fase, cioè a periodi di 2π/ω. +Poiché
specified peak amplitudes, the output should be multiplied by 1 b (or
even, if necessary, a better approximation of the correction
il calcolo di k, p e q dipende dal valore del parametro ω, ne consegue che ω factor, whose exact
value
stessadepends
deve essereon the waveshaping
aggiornata function).
solo quando This
la fase amplitude
è un multiplocorrection should
di 2π; altrimenti
be ramped, not sampled-and-held.
una modifica di ω potrebbe inviare la frequenza centrale (k + q)ω ad un valore
Since
errato perthe
unaexpansion
frazione of the waveshaping
(comunque (modulator)
molto udibile) signal consists
di un periodo. of alltutti
In effetti, co-
sine termsdei
i calcoli (i.e., since they
parametri all have
devono initial
essere phase zero),con
sincronizzati as dola the
fasetwo components
dell’oscillatore
of the carrier, it follows from the cosine product formula that the components
originale.
of theUna result
voltaarecheallsicosines as well. This
ha il controllo della means that any number
fase dell’oscillatore, of PAF gen-
l’aggiornamento
erators,
della suaiffrequenza
they are made to sharedithe
è un esempio same oscillator
feedback, for phase
che in generale generation,
significa will
ri-utilizzare
all be in phase
l’output and combining
di qualsiasi processo them come gives
uno deithesuoi
suminputs.
of the individual
Quando sispectra.
elaborano So
we can make
segnali audioadigitali
multiple-formant
a una frequenzaversion di as campionamento
shown in Figure fissa 6.10. (come stiamo
Figure non
facendo), 6.12 èshows a possibleavere
mai possibile output of a pair
l’output of formants
corrente generated
del processo come thisinput,
way;
the firstnel
poiché formant
momento is centered
in cui ne halfway
avremmobetweenbisogno,partials 3 and 4,ancora
non l’abbiamo and the second
calcolato.
at partial che
Il meglio 12, possiamo
with lowersperareamplitude and bandwidth.
è utilizzare il precedente Thecampione
Cauchy waveshaping
in output –
function
in effetti,was used, whichun
aggiungendo makes linearly
campione di sloped
ritardo. spectra
Negli(viewed
ambienti in con
dB).strutture
The two
superpose
a blocchi (comeadditively,
Max,soPdthat the spectral
e Csound) envelopediventa
la situazione curves piùsmoothly from one
complicata, ma
formant
aspettiamo to the other. The
a discuterne finolower formant capitolo
al prossimo also adds (e to its own reflection
semplicemente about
eliminiamo
the vertical axis,
il problema negli so that it
esempi appears
alla fine di slightly
questo).curved upward there.
L’ampiezza
The del picco
PAF generator cancentrale
be alterednelloif desired
spettro to delmake
generatore
inharmonicPAF spectra
è di circaby
1/(1 +the
sliding b); partials
in altreupward
parole, orè downward
vicino all’unità quando To
in frequency. l’indice
do this,b èadd
piùa piccolo
second
di uno, etodiminuisce
oscillator the phase of inversamente
both carrieral crescere
cosines, butdinot b. toPer
the valori
phase di b minori
of the modula- di
circa 10, l’intensità dell’output non varia notevolmente, poiché 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, k2,
b1 p1, q1 b2 p2, q2

modulator 1 carrier 1 modulator 2 carrier 2

OUT

Figure 6.10:
Figura 6.10: Block diagram
Diagramma for making
a blocchi a spectrumuno
per realizzare with two formants
spettro con due using the
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é l’espansione del segnale (modulatore) di waveshaping è costituita da
termini che sono tutti coseni (vale a dire, poiché 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ò
significa che qualunque numero di generatori PAF, se condividono lo stesso oscil-
latore 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 è centrata a metà tra i parziali 3 e 4 e la
seconda è al parziale 12, con minore ampiezza e minore larghezza di banda.
È stata utilizzata la funzione di waveshaping di Cauchy, che produce spettri
linearmente inclinati (visualizzati in dB). Le due formanti si sovrappongono
6.5. EXAMPLES 163
156 Capitolo 6. Progettare spettri

.
100

80
ampli-
tude 60
(dB)
40

20

0 2 4 6 ...
partial number

Figura 6.11:
Figure Spettro
6.11: ottenuto
Spectrum fromdaaun generatore PAF
two-formant PAF agenerator.
due formanti..

tionadditivamente, in modo che


portion of the diagram, l’inviluppo
nor to spettrale
the controlling curvi
phase of regolarmente da una
the sample-and-hold
formante
units. It turnsall’altra.
out thatLa theformante inferiore aggiunge
sample-and-hold strategy anche la propria
for smooth riflessione
parameter up-
sull’asse verticale, in modo che l’inviluppo spettrale appaia
dates still works; and furthermore, multiple PAF generators sharing the same leggermente curvo
verso
phase l’alto. portion will still be in phase with each other.
generation
This technique PAF
Il generatore può essere modificato,
for superposing spectra doesse desiderato,
not workper as fare spettri inar-
predictably for
monici facendo scorrere le parziali verso l’alto o verso il basso
phase modulation as it does for the PAF generator; the partials of the phase in frequenza. Per
fare questo,
modulation aggiungiamo
output un secondo
have complicated oscillatore
phase alla fase
relationships anddithey
entrambi i coseni
seem difficult
portanti, ma non alla fase della parte di modulazione del diagramma, né alla fase
to combine coherently. In general, phase modulation will give more complicated
di controllo dell’unità di sample-and-hold. Risulta che la strategia di sample-
patterns 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.
6.5bile,Questa tecnica per la sovrapposizione di spettri non funziona, come prevedi-
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 sem-
Wavetable pulse
brano difficili train coerentemente. In generale, la modulazione di fase
da combinare
darà schemi
Example più complicati
F01.pulse.pd (Figure di evoluzione
6.13) generates spettrale, mentre il pulse
a variable-width PAF ètrain
più using
facile
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
shown. F01.pulse.pd
The graph in part (Figura
(b) shows6.12)
thegenera
result un treno di impulsi
of clipping a larghezza
the sawtooth wave
variabile usando stretched wavetable lookup. La Figura 6.13 mostra due pro-
back 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ù semplice possibile, ponendo l’impulso a fase π anziché a fase zero;
negli esempi successivi questo sarà 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:
Figure 6.12: Example
L’esempio della
patch patch F01.pulse.pd,
F01.pulse.pd, che sintetizza
which synthesizes a pulseun treno
train di
using
impulsi utilizzando
stretched wavetable la stretched wavetable lookup.
lookup.
166 CHAPTER 6. DESIGNER SPECTRA

158 Capitolo 6. Progettare spettri

phase
(a)
0.5

-0.5

clipped

(b) 0.5

-0.5

output
1

(c)

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

RING MODULATED PULSE TRAINS

0 <-- bandwidth
pd pulse-train pulse train
generator from before

0 <-- 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
modulation Estratto dall’esempio
a stretched wavetableF05.ring.modulation.pd
pulse generator che combina la
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 è 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ù alto è il moltiplicatore, più rapidamente la forma d’onda sale e più 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 è 0 e l’output è 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 è divisa per il moltiplicatore; quindi è 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 è 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 wa-
veshaping. Saltando all’esempio F05.ring.modulation.pd (Figura 6.14), mostria-
mo il modo più semplice di combinare il generatore di impulsi con un oscillatore
modulante ad anello per fare una formante. Il treno di impulsi dell’esempio
precedente è contenuto nella sottopatch pd pulse-train. Questo viene mol-
tiplicato per un oscillatore la cui frequenza è regolata come un multiplo della
frequenza fondamentale. Se il multiplo è 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 è come prima, ma adesso il segnale portante è una sinusoide rotta.
Poiché la sua fase è la fase fondamentale moltiplicata per la frequenza centrale
quoziente, l’incremento di fase campione-a-campione è lo stesso di una sinusoide
alla frequenza centrale. Tuttavia, quando la fase è 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ò 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 por-
tante che fa una dissolvenza incrociata tra gli armonici per creare frequenze
centrali variabili con continuità. La frequenza centrale quoziente appare come
160 Capitolo 6. Progettare spettri
168 CHAPTER 6. DESIGNER SPECTRA

center
(frequency) frequency
|
(as multiple of
phasor~ 100
fundamental)
-~ 0.5 |
*~
bandwidth
(as multiple of magnified
fundamental) phase signal
|
*~
clip~ -0.5 0.5
cos~ raised
+~ 1 cosine
pulse
*~ 0.5
cos~
*~ carrier
|
(OUT)

Figure
Figura 6.16:
6.15: Using stretched
Utilizzo di unawavetable
sintesi disynthesis
stretchedtowavetable
make a formant with mov-
per formare una
able center frequency.
formante con frequenza centrale mobile.

center frequency
output dell’oggetto line∼. Questo èto
(relative separato nella sua parte frazionaria (uti-
fundamental)
fundamental
lizzando l’oggetto wrap∼)| e la sua parte intera (sottraendo la parte frazionaria
frequency Questi due
dall’originale). line~
valori sono etichettati con q e k per uniformarsi alla
|
trattazione del paragrafo 6.3.
phasor~ wrap~ the fractional part "q"
La fase – un onda a dente di sega alla frequenza fondamentale – viene molti-
plicata sia per k che per k-~+ 1 (quest’ultimo
subtract to get the l’onda
aggiungendo integer part
a dente "k"
di sega
originaria al precedente) e vengono presi i coseni di entrambi; essi sono quindi a
k e k + 1 volte la *~
frequenza+~fondamentale
multiply e nonphase
hannobydiscontinuità
k and k+1nei punti di
wraparound dellacos~ fase. I cos~
seguentisynthesize
oggetti della patch calcolano la"c1"
two partials somma pesata
and "c2"
pc1 + qc2 , dove c1 , c2 sono le due sinusoidi e p = 1 − q, tramite un’espressione
equivalente, c1 +q(c2 −c1-~ ). Questo c2 ci-dàc1
il segnale portante, a frequenza mobile,
richiesto.
L’esempio F09.declickit.pd *~ (non q *mostrato
(c2 - c1) qui) mostra come, aggiungendo
un oggetto samphold∼ dopo +~ q * c2 + (1-q) *controlla
l’oggetto line∼ che la frequenza centra-
c1
le, è possibile evitare discontinuità
| nel segnale di uscita anche se la frequenza
centrale desiderata cambia
(OUT)in modo discontinuo. Nell’esempio la frequenza cen-
trale 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 scompa-
iono quando
Figure viene aggiunto
6.17: Cross-fading l’oggetto
between to make(uno
samphold∼
sinusoids svantaggio
movable center di applicare
frequencies.
il sample-and-hold alla frequenza quoziente è che, per frequenze fondamentali
molto basse, le modifiche possono essere percepite come passi discreti. Quindi,
in situazioni in cui la frequenza fondamentale è bassa e la frequenza centrale
non deve cambiare molto rapidamente, può essere meglio ignorare la parte di
+~ 1 cosine
pulse
*~ 0.5
cos~
*~ carrier
|
(OUT)

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)
fundamental |
frequency line~
|
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

*~ q * (c2 - c1)
+~ q * c2 + (1-q) * c1
|
(OUT)

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

sample-and-hold).
I due esempi successivi mostrano l’utilizzo di una portante fatta con oscilla-
tori in dissolvenza incrociata come parte della tecnica classica di modulazione
di fase a due operatori. Lo stesso oscillatore modulante viene aggiunto separa-
tamente alle fasi dei due coseni. Gli spettri risultanti possono essere fatti per
muoversi su e giù 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ò mai evitare di ottenere le cancellazioni
di fase dove si sovrappongono.

Il generatore PAF
L’esempio F12.paf.pd (Figura 6.17) è una realizzazione del generatore PAF de-
scritto nel paragrafo 6.4. Gli ingressi di controllo specificano la frequenza fonda-
mentale, la frequenza centrale e la larghezza di banda, tutte in unità “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 wave-
shaper. 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∼) è 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
*~ pack 0 50
phasor~ C.F. relative line~
to fundamental
divide by
*~ fundamental
*~ 0.5
samphold~
-~ 0.25
-~ wrap~ cos~ *~ 25
*~ +~ *~ range for table
cos~ cos~
offset to middle
+~ 100
-~ of table
tabread4~ bell-curve
+~ *~
waveshaper
*~ ring mod
|
(OUT)

Figura 6.17:
Figure Algoritmo
6.18: di sintesi performant
The phase-aligned la formante
(PAF)allineata in fase
synthesis (PAF).
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à positiva del ciclo definito dall’oggetto cos∼.
L’ampiezza della mezza sinusoide viene quindi regolata da un indice di mo-
dulazione (che è 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à), 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 è trascurabilmente piccola.
La Figura 6.18 mostra come viene preparata la wavetable Gaussiana. È
necessario un nuovo oggetto di controllo:
untill : quando l’ingresso “start” a sinistra riceve un bang, emette bang se-
quenziali (senza intervalli di tempo tra essi) in modo iterativo, finché l’entrata
“stop” a destra non riceve un bang. Il messaggio “bang” di arresto deve prove-
6.5. EXAMPLES
6.5. Esempi 163 171

t b b bell-curve
0
until
f + 1

sel 199 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à
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,
1”, ognuno thealimenta
dei quali outlet will sendMa
l’altro. “bang”
poichémessages forever, freezing
l’uscita dell’oggetto “+ 1”’outva any
other object which could break the loop.
all’entrata destra di “f”, il suo risultato (uno più grande) uscirà da “f” solo
la As used here,
prossima voltaacheloopriceve
drivenun bybang an dauntiluntil.object counts
Quindi from
ogni bang 0 to
da199,
until inclu-
sive. The loop
incrementa count di
il valore is uno.
maintained by the “f” and “+ 1” objects, each of which
feedsL’ordine
the other. in cuiBut since
viene the “+
avviato 1” object’s
il loop outputl’oggetto
è importante: goes to “t thebright inlet of
b” supe-
the
riore“f”, its result (one
(abbreviazione pergreater)
“trigger will
bangonly bang”) emerge
deve from
primathe “f” the
inviare nextzero
il valore time it
isad “f”, cosı̀
banged inizializzandolo,
by “until”. So each e poi
bang impostare
from “until”l’oggetto until ad the
increments inviare bangs,
value by one.
incrementando
The order inil which valore,thefinoloop
a quando
is startednon si ferma. Per
matters: the arrestarlo
upper “t quando il
b b” object
valore raggiunge 199, un oggetto select controlla il valore
(short for “trigger bang bang”) must first send zero to the “f”, thus initializing e, quando vede la
it,corrispondenza,
and then set the mandauntilun bang
object all’entrata
sending “stop”bangs,dell’oggetto
incrementing until.the value, until
Nel frattempo, per ogni numero da 0 a 199
stopped. To stop it when the value reaches 199, a select object che esce dall’oggetto “f”, creiamo
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
exprMeanwhile, for every
regola l’indice che vanumber
da −4from a 4 (in0 toprecedenza
199 that comesvariavaoutda of
0 the “f”edobject,
a 199) il
we create an ordered pair
secondo calcola la funzione gaussiana.of messages to the tabwrite object. First, at right,
goes In thequesta
indexpatch
itself,non
from 0 to 199.
abbiamo Then for
affrontato the left inlet,
completamente la the first expr
questione object
dell’ag-
adjusts the index
giornamento dellatofrequenza
range from -4 to quoziente
centrale 4 (it previously ranged
nei momenti from 0 to 199)
appropriati. Ogni and
the second
volta one evaluates
che viene modificatathe Gaussianportante,
la frequenza function.lo step sample-and-hold ritar-
daIn this patch we
correttamente have not fully
l’aggiornamento deladdressed
quoziente. the Ma issue of updating
se invece, the center
o in aggiunta, la
frequency quotient atcambia
stessa fondamentale the appropriate
bruscamente, times.
allora,Whenever the carrier
per una frazione di un frequency
periodo, is
la frequenza
changed dell’oggetto phasor∼
the sample-and-hold stepe il quoziente
properly non sono
delays the sincronizzati.
update of thePdquotient.
non
consente all’output di samphold∼ la retroazione nell’input
But if, instead or in addition, the fundamental itself changes abruptly, then for di phasor∼ senza
a l’inclusione
fraction ofdia un ritardo
period theesplicito
phasor~ (vedere
object’s il capitolo
frequencysuccessivo)
and thee quotient
non esisteareun out
modo semplice per modificare la patch per risolvere
of sync. Pd does not allow the samphold~ output to be connected back into thequesto problema.
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 altret-
tanto per il quoziente larghezza di banda/fondamentale sul lato destro della
patch. Nello scenario corrente, tuttavia, non c’è 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 tra-
duce anche nell’utilizzo di molto meno tempo della CPU rispetto alla patch in
figura, e rappresenta la soluzione più pratica in generale – finché non si desidera
sperimentare la creazione di abbellimenti o altre modifiche all’algoritmo. Ta-
li abbellimenti potrebbero includere: aggiungere uno spostamento inarmonico
verso l’alto o verso il basso nelle parziali; permettere di passare ad aggiorna-
menti della frequenza centrale in modo continuo o sample-and-hold; aggiungere
controlli separati di guadagno per parziali pari e dispari; introdurre grani mo-
dulando irregolarmente la fase; permettere miscele di due o più funzioni di wa-
veshaping; o fare attacchi percussivi più nitidi allineando la fase dell’oscillatore
con la temporizzazione di un generatore di inviluppo di ampiezza.
Un dettaglio finale sull’ampiezza è necessario: poiché l’ampiezza della par-
ziale più forte diminuisce approssimativamente come 1/(1 + b) dove b è l’indice
di modulazione, è auspicabile a volte (ma non sempre) correggere l’ampiezza
in output moltiplicando per 1 + b. Questa è solo un’opzione se b è aggiornato
senza salti (come in questo esempio), ma non quando viene aggiornato tramite
sample-and-hold. Una situazione in cui ciò è appropriato è quando si vuole si-
mulare 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, è possibile anche creare formanti
utilizzando la tecnica delle stretched wavetables, come dimostrato nell’esempio
F14.wave.packet.pd (non mostrato qui). La tecnica è sostanzialmente quella
vista nell’esempio B10.sampler.overlap.pd (descritta nel paragrafo 2.6), con una
ricerca su coseno invece di quella più generale su wavetable, ma con l’aggiunta di
un controllo per impostare il duty cycle degli inviluppi di ampiezza. Le unità di
misura sono regolate per essere compatibili con quelle dell’esempio precedente.

Esercizi
1. Un treno a impulsi è costituito da finestre di Hann (coseni), da estremo a
estremo, senza alcun gap tra essi. Qual è 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ù 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é la musica dura molto
più di un secondo). Ora il suono è 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ò essere percepita
in almeno quattro modi diversi:

Canoni: combinando due copie di un segnale con un intervallo di tempo suffi-


ciente 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 è una melodia, l’intervallo di tempo può
essere paragonabile alla lunghezza di una o più note.

Echi: a spostamenti temporali tra circa 30 millisecondi e circa un secondo, la


copia successiva del segnale può suonare come un’eco del precedente. Un
eco può ridurre l’intelligibilità del segnale (soprattutto se si tratta di un
parlato), ma di solito non cambierà la “forma” globale delle melodie o
delle frasi.

Filtraggio: a spostamenti temporali sotto i 30 millisecondi, le copie sono trop-


po vicine nel tempo per essere percepite separatamente, e l’effetto domi-
nante è che alcune frequenze sono esaltate e altre sono soppresse. Questo
modifica l’inviluppo spettrale del suono.

Qualità della stanza alterata: se la seconda copia viene riprodotta ad un


volume più basso della prima, e soprattutto se aggiungiamo più copie ritar-
date ad ampiezze ridotte, il risultato può 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ò


combinare due o più di questi effetti.
Matematicamente, l’effetto di uno spostamento temporale su un segnale può
essere descritto come un cambio di fase in ciascuna delle componenti sinusoidali
del segnale. Lo spostamento di fase di ciascuna componente è diverso a seconda
della sua frequenza (nonché della quantità 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ù
complicate e avremo bisogno di strumenti matematici più 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é 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 e b sono chiamate rispettivamente la parte
reale e la parte immaginaria di Z, scritte come:
a = re(Z),

b = im(Z).

Se Z è un numero complesso, il suo modulo (o valore assoluto o magnitudine),


indicato con |Z|, è proprio la distanza, nel piano, del punto (a, b) dall’origine:
p
|Z| = (a2 + b2 )

ed il suo argomento, indicato con ∠(Z), è 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ò essere scritto in termini delle sue parti reale e im-
maginaria, 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 167
176 CHAPTER 7. TIME SHIFTS AND DELAYS

b
Z=a+bi
|Z|

arg(Z)
a

Figure
Figura7.1:
7.1: A
Unnumber,
numero,Z,Z,innel
thepiano
complex plane. Gli
complesso. Theassi
axessono
are per
for la
theparte
real reale
part
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
two or morerettangolari e polari sono intercambiabili; le equazioni sopra mostrano
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
phaseIl motivo
change principale
of each of per the cui utilizziamo
signal’s i numeri
sinusoidal complessiThe
components. nella musica
phase elet-
shift of
tronica è perché magicamente automatizzano i calcoli trigonometrici.
each component is different depending on its frequency (as well as on the amount Dobbiamo
spesso
of time sommare
shift). Inangoli
the rest perofparlare del cambiamento
this chapter we will often di fase di unsuperpositions
consider segnale audio
all’avanzare del tempo (o quando subisce uno spostamento
of sinusoids at different phases. Heretofore we have been content to use temporale, come in
real-
questo capitolo). Si scopre che, se si moltiplicano due numeri complessi,
valued sinusoids in our analyses, but in this and later chapters the formulas will l’argo-
mento del
become moreprodotto è la somma
complicated and wedegli
willargomenti
need more deipowerful
due fattori. Per vedere tools
mathematical come
questo accada, moltiplichiamo due numeri Z 1 e Z 2 , scritti
to manage them. In a preliminary section of this chapter we will develop thein forma polare:
additional background needed.
Z1 = r1 · [cos(θ1 ) + i sin(θ1 )]

7.1 Complex numbers


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

Complex numbers are written as:


ottenendo:

Z1 Z2 = r1 r2 · [cos(θ Z 1= a + bi
) cos(θ 2 ) − sin(θ1 ) sin(θ2 )+

where a and b are real numbers
+i(sin(θ and2 )i+=cos(θ
1 ) cos(θ −1. (In2 ))].
1 ) sin(θ this book we’ll use the
upper case Roman letters such as Z to denote complex numbers. Real numbers
appear as lower
Qui il segno casedavanti
meno Romanaor Greek
sin(θ letters, except for integer bounds, usually
1 ) sin(θ2 ) deriva dalla moltiplicazione di i per
written as M
se stesso, cheorvale
N .)−1.
Since a complex number
Nell’espressione soprahas two realpossiamo
descritta components, we use
utilizzare le
aformule
Cartesian plane (in
di somma deiplace of ae number
coseni dei seni line) to graph
e quindi it, as shown in Figure 7.1.
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à dei numeri complessi per sommare e sot-
trarre 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 Capitolo 7. Spostamenti temporali e ritardi
178 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:
sequence Le potenze
multiplied by a di un numero
constant A. complesso Z con |Z| = 1, e la stessa
sequenza moltiplicata per una costante A.

7.1.1
7.1.1 Complex
Sinusoidi sinusoids
complesse
Recall the formula
Richiamiamo for a (real-valued)
la formula sinusoid
di una sinusoide fromreali)
(a valori Page di
1: pagina 1:

x[n]
x[n] =
=aa cos(ωn
cos(ωn +
+ φ)
φ).

Questa
This is aè sequence
una sequenza di coseni
of cosines di angoli
of angles (chiamati
(called phases)fasi) che increase
which aumentano aritme-
arithmeti-
ticamente
cally with the con sample
il sample number
number n.n.The
I coseni sono
cosines aretutti moltiplicati
all adjusted per factor
by the il fattore
a.
a. Possiamo
We ora riscrivere
can now rewrite this asquesta formula
the real part ofcome la parte
a much reale
simpler and dieasier
una sequenza
to manip-di
numeri
ulate complessi
sequence molto piùnumbers,
of complex semplici by
e più manipolabili,
using utilizzando
the properties of theirlearguments
proprietà
dei loro
and argomenti e dei loro moduli.
magnitudes.
Supponiamo
Suppose thatche un numero
a complex complesso
number Z abbia modulo
Z happens to have unitario
magnitude(cioèone
modulo
and
1) e argomento
argument ω, initmodo
ω, so that can bechewritten
possa essere
as: scritto come

Z=
Z = cos(ω)
cos(ω) +
+ ii sin(ω)
sin(ω).

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 =
Z = cos(nω)
cos(nω) +
+ ii sin(nω)
sin(nω).
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è di raggio 1), che
Figure 7.2 shows graphically how the powersè l’insieme
of Z di tuttiaround
wrap i numeri
thecomplessi di
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, AZ, AZ 2 , . . .

I moduli sono tutti a e l’argomento del termine n−esimo è nω + φ, quindi la


sequenza è uguale a

AZ n = a · [cos(nω + φ) + i sin(nω + φ)]

e la parte reale è 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 è
proprio il suo argomento ω.
La Figura 7.2 mostra anche la sequenza A, AZ, AZ 2 , . . . ; in effetti questa è 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ò chiarire manipolazioni che altrimenti potrebbero sembrare immo-
tivate. 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 è quindi


uguale a:
X[n] + Y [n] = (A + B)Z n
che è una sinusoide la cui ampiezza è uguale a |A + B| e la cui fase è uguale a
∠(A + B). Questo è chiaramente un modo molto più semplice per manipolare
le ampiezze e le fasi anziché utilizzando le proprietà dei seni e dei coseni. Alla
fine, ovviamente, prenderemo la parte reale del risultato; questo, solitamente,
può essere fatto alla fine di tutte le operazioni che stiamo facendo.

7.2 Spostamenti temporali e cambiamenti di fa-


se
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 è positivo, allora Y è una copia ritardata di X. Se d è negativo,
Y anticipa X; questo può essere fatto per un suono registrato ma non è pratico
come operazione in tempo reale.
170 Capitolo 7. Spostamenti temporali e ritardi

Lo spostamento temporale è un’operazione lineare (considerata come fun-


zione 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à che, se si sposta, tempo-
ralmente, una sinusoide di frequenza ω, il risultato è 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à, chia-
mata 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 è semplice:
cambia solo la fase. Se usiamo una sinusoide complessa, l’effetto è ancora più
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,
è la stessa cosa che moltiplicare per Z −d – è solo un cambiamento di ampiezza
per un particolare numero complesso. Poiché |Z| = 1 per una sinusoide, la
variazione dell’ampiezza non cambia il modulo della sinusoide, solo la sua fase.
La variazione di fase è uguale a −dω, dove ω = ∠(Z) è la frequenza angolare
della sinusoide. Questo è esattamente quello che ci si dovrebbe aspettare poiché
la sinusoide avanza di ω radianti per campione ed ha un offset (cioè, è ritardata)
di d campioni.

7.3 Reti di ritardo


Se consideriamo i nostri campioni audio digitali X[n] in corrispondenza di mo-
menti successivi nel tempo, allora lo spostamento temporale di d campioni del
segnale corrisponde ad un ritardo (delay) di d/R unità di tempo, dove R è la fre-
quenza di campionamento. La Figura 7.3 mostra un esempio di una rete lineare
di ritardo (linear delay network): un insieme di unità di ritardo, eventualmente
con operazioni di riscalatura di ampiezza, combinate usando somme e sottra-
zioni. L’output è una funzione lineare dell’input, nel senso che dare in input la
somma di due segnali è 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 pen-
sarle 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 sposta-
menti 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

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
in182
this example) and graph the CHAPTER 7. TIME
input and output SHIFTS AND
as functions of theDELAYS
sample
number n. This particular delay network adds the input to a delayed copy of
itself.
A frequently
input
used test function is an impulse, which is a pulse lasting only
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


d ω. We already know that the output
is another complex sinusoid with the same frequency, that is,

HZ N
Figura 7.4:
Figure 7.4: The
La visualizzazione
time domain viewnel dominio del tempo
of the delay networkdella
of rete di ritardo
Figure di
7.3. The
for some7.3.
Figura complex number H (which we wante to find). So we write the output
output is theL’output è lainput
sum of the sommaanddell’input della
its time shifted sua
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 fre-
quency ω. 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 è 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 è l’impulso, che è una pulsazione
della durata di solo un campione. L’utilità di ciò è che, se conosciamo l’output
della rete per un impulso, possiamo trovare l’output per qualsiasi altro segnale
audio digitale – perché qualsiasi segnale x[n] è una somma di impulsi, uno
di altezza x[0], il successivo che si verifica un campione più tardi e che ha
l’altezza x[1], e cosı̀ via. Più tardi, quando le reti diventeranno più 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à che l’output è un’altra


sinusoide complessa con la stessa frequenza, cioè,

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à
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 è ottenuta, graficamente, facendo un parallelo-
gramma, con spigoli all’origine e ai due punti di cui si fa la somma, e il cui
quarto spigolo è la somma H.
Come mostra la figura, il risultato può essere compreso simmetrizzandolo
sull’asse reale: invece di 1 e Z −d , è più facile sommare le quantità Z d/2 e
Z −d/2 , perché sono simmetriche rispetto all’asse (orizzontale) reale (in senso
stretto, non abbiamo definito correttamente le quantità Z d/2 e Z −d/2 ; stiamo
usando queste espressioni per indicare numeri complessi di modulo unitario i cui
7.3. Reti
7.3. DELAYdi ritardo
NETWORKS 173
183

d/2
Z

d/2
HZ
real 1
Z -d/2

H
imaginary -d
Z

Figure 7.5: Analysis, in the complex plane, of the frequency-domain behavior of


Figura
the delay7.5: Analisi,
network nel piano
of Figure 7.3.complesso,
The complexdel comportamento
number Z encodes nelthe
dominio della
frequency
frequenza della rete di ritardo di Figura 7.3. Il numero − complesso Z codifica la
of the input. The delay line output is the input times Z d. The total (complex)
frequenza
gain is H. Wedell’input. L’output della
find the magnitude and linea di ritardo
argument è l’input
of H by moltiplicato
symmetrizing per
the sum,
−d
Z . Il guadagno totale (complesso) è H. Troviamo
rotating it by d/2 times the angular frequency of the input. il modulo e l’argomento
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à di quelli di Z d e Z −d , in modo che il loro elevamento al
quadrato dia = (cos(ωd/2)
Z d e Z −d .)+Riscriviamo
i sin(ωd/2))il+guadagno
(cos(ωd/2) − i sin(ωd/2))
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
gives the termine
magnitude è uno output: di fase di −dω/2. Il secondo termine è più
spostamento
of the
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)
ω, and is graphed in Figure+ i sin(ωd/2)) (cos(ωd/2) − i sin(ωd/2))
7.6. The +frequency-dependent gain of a delay
network (that is, the gain as a function of frequency) is called the network’s
frequency response. = 2 cos(ωd/2).
Since the network has greater gain at some frequencies than at others, it may
Questa
be quantità,
considered as a afilter
valori
thatreali,
can può essere
be used positiva ocertain
to separate negativa; il suo valore
components of a
assoluto dà il modulo dell’output:
sound from others. Because of the shape of this particular gain expression as
a function of ω, this kind of delay |H| = network is called a (non-recirculating) comb
2|cos(ωd/2)|.
filter.
La The output
quantità |H|of prende
the network
il nome is di
a sum of two(gain)
guadagno sinusoids
dellaofrete
equal di amplitude,
ritardo alla
and whose angolare
frequenza phases differ
ω ed by ωd. The resulting
è rappresentata frequency
in Figura response agrees
7.6. Il guadagno, with
dipendente
common sense: if(cioè
dalla frequenza the angular
il guadagno frequency ω is set
in funzione so that
della an integer
frequenza), number
di una rete ofdi
periods
ritardo fit into dilsamples,
prende nome di i.e., if ω isinafrequenza
risposta multiple of 2π/d,
della the output of the delay
rete.
is exactly the same as the original signal, and so
Poiché la rete ha un guadagno maggiore ad alcune frequenze the two combine to make
rispetto an
ad altre,
output with twice the original amplitude. On the other hand, if
può essere considerato come un filtro che può essere utilizzato per separare, in for example we
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 CHAPTER 7. TIME SHIFTS AND DELAYS
174 Capitolo 7. Spostamenti temporali e ritardi

gain
2

2 4
d 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
periodic della rete
(or nearly è una incoming
periodic) somma disignal,due sinusoidi di uguale ampiezza
whose fundamental frequency e le
is
ω radians per sample, we can tune the comb filter so that the peaks in con
cui fasi differiscono di ωd. La risposta in frequenza risultante è in accordo the
il buon
gain aresenso:
aligned se at la frequenza angolare
even harmonics andω theè impostata
odd onesinfall modo where che the
un numero
gain is
zero. To do this we choose d = π/ω, i.e., set the delay time to exactly di
intero di periodi stia esattamente in d campioni, cioè se ω è un multiplo one2π/d,
half
l’output
period of del
theritardo
incoming è esattamente
signal. In thisuguale
way we al segnale
get a new originale,
signal whose e quindi i due si
harmonics
combinano
are 2ω, 4ω, 6ω, per .dare
. ., and un output
so it nowcon has
ampiezza
a newdue volte quellafrequency
fundamental originale.atD’altra
twice
the original one. Except for a factor of two, the amplitudes of thesia
parte, se per esempio noi prendiamo ω = π/d in modo che il ritardo la metà
remaining
del periodo,still
harmonics allora
follow l’output del ritardo
the spectral è fuoriof
envelope fase
thee annulla
original esattamente
sound. So we l’input.
have
a tool now for raising the pitch of an incoming sound by an octave without
Questaitsparticolare
changing spectral envelope.rete di ritardo ha un’interessante
This octave doubler is the applicazione:
reverse of the se octave
abbia-
mo un segnale in entrata
divider introduced back in Chapter 5. periodico (o quasi periodico), la cui frequenza fonda-
mentale
The timeè ω and
radianti per campione,
frequency domains offerpossiamo sintonizzareways
complementary il filtro a pettine
of looking in
at the
modo che i picchi nel guadagno siano allineati agli
same delay network. When the delays inside the network are smaller than thearmonici pari mentre quelli
dispari
ear’s si trovino
ability to resolve doveevents
il guadagno è zero.than
in time—less Perabout
fare ciò sceglieremo d = π/ω,
20 milliseconds—the time
domain picture becomes less relevant to our understanding ofdel
cioè, impostiamo il tempo di ritardo a esattamente metà theperiodo del se-
delay network,
gnaleweinturn
and ingresso.
mostlyIn to questo modo otterremopicture.
the frequency-domain un nuovo Onsegnale
the other i cui armonici
hand, when
sono 2ω, 4ω, 6ω, . . . e quindi adesso ha una nuova frequenza
delays are greater than about 50 msec, the peaks and valleys of plots showing fondamentale pari
a due volte quella originale. Fatta eccezione per un fattore
gain versus frequency (such as that of Figure 7.6) crowd so closely together that di due, le ampiezze
dei frequency-domain
the restanti armonici seguono ancoraless
view becomes l’inviluppo
important. spettrale
Both are delnonetheless
suono originale.
valid
Quindi abbiamo uno strumento
over the entire range of possible delay times. per aumentare di un’ottava il tono di un suono
in ingresso senza cambiare il suo inviluppo spettrale. Questo octave doubler è
l’opposto dell’octave divider introdotto nel Capitolo 5.
7.4 Recirculating delay networks
I domini del tempo e della frequenza offrono modalità complementari per
It is sometimes
esaminare desirable
una stessa toritardo.
rete di connectQuando
the outputs of all’interno
i ritardi one or more delays
della in a
rete sono
network back intorispetto
a tempi inferiori their own
alla or each others’
capacità inputs.diInstead
dell’orecchio of getting
distinguere onenel
gli eventi or
several
tempo echos
– meno of di
thecirca
original sound as in –thelaexample
20 millisecondi above, wenel
rappresentazione candominio
potentially
del
get
tempoan diventa
infinite meno
number of echos,
rilevante each
per la one comprensione
nostra feeding back della
into rete
the di
network
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
7.4. di ritardo ricircolanti
RECIRCULATING DELAY NETWORKS 175
185

IN

OUT

Figure
Figura 7.7:
7.7: Block diagram
Diagramma for a recirculating
a blocchi per un filtro comb filter.
a pettine Here d is the
ricircolante. Qui delay
d è il
time in samples and g is the feedback coefficient.
tempo di ritardo in campioni e g è il coefficiente di feedback.

The simplest example of a recirculating network is the recirculating comb


7.4 whose
filter Reti blockdi ritardo
diagram is shownricircolanti
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
A voltenow èthe delay line’s
auspicabile output le
collegare is also
uscitefeddiback
uno to its input;
o più ritardi, theindelay’s
una rete,input is
nuo-
the sum of the original input and the delay’s output. The
vamente al proprio ingresso o a quelli degli altri. Invece di ottenere uno o più output is multiplied
by
echia del
number
suonog originale
before feeding it back into its
come nell’esempio input. possiamo potenzialmente
precedente,
The time domain behavior of the recirculating
ottenere un numero infinito di echi, ciascuno di essi comb chefilter is shown
ritorna nellainrete
Figure
per
7.8. Here we consider
generarne ancora altri. the effect of sending an impulse into the network. We
get back the original impulse, plus a series of echos, each in turn d samples
L’esempio più semplice di una rete ricircolante è 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 è 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 è 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 è la somma dell’input originale e dell’output
Ifdelweritardo.
chose aL’output
gain greater than one
del ritardo (or moltiplicato
viene less than -1), pereach echo would
un numero have di
g prima a
larger magnitude than
ritornare al suo ingresso. the previous one. Instead of falling exponentially as they
do in the figure, they would grow exponentially. A recirculating network whose
output Il comportamento
eventually fallsnel dominio
toward zerodel tempo
after del filtro
its input a pettine
terminates ricircolante
is called stable;è
mostrato in Figura 7.8. Qui consideriamo
one whose output grows without bound is called unstable. l’effetto di inviare un impulso nella
rete. Otteniamo l’impulso originale, più una serie di echi,
We can also analyse the recirculating comb filter in the frequency domain. ognuno d campioni
doposituation
The il precedente, e moltiplicato
is now quite ogni volta
hard to analyze usingper realilsinusoids,
guadagnoand g. soInwegenerale,
get the
quando si ha un impulso come input, l’output di una rete
first big payoff for having introduced complex numbers, which greatly simplify di ritardo è chiamato
risposta
the all’impulso della rete.
analysis.
Si as
If, notibefore,
che abbiamo
we feedscelto un guadagno
the input with theg signal,
che è inferiore a 1 in valore assoluto.
Se avessimo scelto un guadagno maggiore di 1 (o minore di −1), ogni eco avrebbe
un modulo maggiore rispetto al precedente. X[n] = Z n Invece di calare esponenzialmente
come fanno nella figura, crescerebbero esponenzialmente. Una rete ricircolante
il cui|Z|
with = 1, we
output can write
scende a zerothe dopooutput as
che l’input è finito si dice stabile; una rete il
cui output cresce senza limiti è 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 è 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
Capitolo 7. TIME SHIFTS
7. Spostamenti AND DELAYS
temporali e ritardi

input

output

Figura
Figure 7.8: Analisi nel dominio
7.8: Time-domain analysisdelof tempo del filtro acomb
the recirculating pettine ricircolante,
filter, using an
utilizzando un impulso
impulse as input. come input.

Se,the
Here come prima,
terms in thel’input della from
sum come rete èthe
il segnale,
series of discrete echos. It follows that
the amplitude of the output is:
X[n] = Z n
2
+ gZ −d +
H = 1 l’output
con |Z| = 1, possiamo scrivere (gZ −d ) + · · ·
come
This is a geometricYseries; we+can
[n] = (1 sum
gZ −d + git2 Zusing
−2d the standard technique. First
+ · · · )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 =è:gZ −d + (gZ −d ) + (gZ −d ) + · · ·
che l’ampiezza dell’output

H =1+
and subtract from the original gZ −d +to
equation (gZ −d 2
) + ···
give:

H − gZ −dsommarla
Questa è una serie geometrica; possiamo H =1 usando la tecnica standard.
Innanzitutto moltiplichiamo entrambi i lati per gZ −d per avere
Then solve for H:
gZ −d H = gZ −d 1 2 + (gZ −d )3 + · · ·
−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 −dtoH 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
line is the output Yper
[n],Hand
si ha:
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ù veloce (ma meno intuitivo) per ottenere lo stesso risultato
è quello di esaminare la rete
Y [n]ricircolante
= X[n] + Y stessa per−dprodurre un’equazione per
[n] · gZ
H, nel modo seguente. Chiamiamo X[n] l’input e Y [n] l’output. Il segnale che
entra nella linea di ritardo è 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, è 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 è equivalente all’equazione trovata precedentemente per H.
Ora vorremmo fare un grafico della risposta in frequenza (il guadagno in fun-
zione 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:
1
|H| =
|1 − gZ −d |
dove abbiamo usato la proprietà moltiplicativa dei moduli per concludere che il
modulo di un inverso (complesso) è l’inverso di un modulo (reale). La Figura 7.9
mostra la situazione graficamente. Il guadagno |H| è 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ò essere utilizzata per analizzare come la risposta in frequen-
za |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ò raggiungere è quando
Z −d = 1.
Ciò 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
1
|H| = .
1−g
La prossima importante domanda riguarda la larghezza di banda dei picchi
nella risposta in frequenza. Quindi vorremmo trovare sinusoidi W n , con fre-
quenza ∠(W ), che danno origine ad un valore di |H| che è, 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é 2:1 è un rapporto di circa 3 decibel).
Facciamo ciò imponendo che la parte immaginaria di gW −d sia approssima-
tivamente 1 − g o il suo opposto negativo, ottenendo un triangolo nei punti 1,
1 − g e gW −d che è quasi un triangolo rettangolo isoscele (qui supponiamo che g
sia almeno 2/3 o quasi, altrimenti questa approssimazione √ non è molto buona).
L’ipotenusa di un triangolo rettangolo isoscele è sempre 2 volte il cateto, e
quindi il guadagno scende per quel fattore rispetto al suo massimo.
Ora facciamo un’altra approssimazione, cioè 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 è
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

real 1

real −d 1
gW
−d −d
gW 1−gW
−d
−d 1−gW
gZ
−d
gZ

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|
Figure 7.9: dei filtri ainpettine
Diagram ricircolanti
the complex planea for
treapproximating
diverse frequenze: 0, e gligain
the output ar-
arguments of two unit complex numbers W and Z; W is chosen to give a gain
|H|
gomenti
of thedi recirculating
due numeri complessi
comb filtersunitari W edifferent
at three Z; W viene scelto per
frequencies: 0, avere un
and the
about 3 dB below the peak.
guadagno di
arguments of circa 3 dBcomplex
two unit al di sotto del picco.
numbers W and Z; W is chosen to give a gain
about 3 dB below the peak.

gain
5
gain
5

2 4
2d 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 non-
Figure 7.10: Frequency response of the recirculating comb filter with g = 0.8.
Figura 7.10: comb
recirculating Risposta in frequenza del filtro a pettine ricircolante con g = 0.8.
filter.
The peak gain is 1/(1 − g) = 5. Peaks are much narrower than for the non-
Il guadagno di picco è 1/(1 − g) = 5. I picchi sono molto più 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ù 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ù vicini tra loro per valori più grandi del ritardo d. D’altra
parte, un ritardo di d = 1 (il più 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 è praticamente un filtro passa-
basso. 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ù complicate diventa più difficile caratterizzare i risultati, o progettare
la rete per avere proprietà specifiche e desiderate. Un altro punto di vista
può 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 è che se una qualsiasi rete di ritardo, con uno
o più inputs e outputs, è 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 è 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à
uguale alla potenza dell’ingresso, quindi il guadagno, opportunamente definito,
è 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’è un solo
segnale (chiamiamolo x[n]), la potenza media è data da:
 
P (x[n]) = |x[0]|2 + |x[1]|2 + · · · + |x[N − 1]|2 /N

dove N è 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 è altro che la somma delle potenze dei segnali individuali:

P (x1 [n], . . . , xr [n]) = P (x1 [n]) + · · · + P (xr [n])

dove r è il numero di segnali da combinare.


Si scopre che una vasta gamma di interessanti reti di ritardo ha la proprietà
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
Capitolo 7. TIME SHIFTS
7. Spostamenti AND DELAYS
temporali e ritardi

IN

d d d d
1 2 3 4

OUT

Figure 7.11:
Figura 7.11: First fundamental
Primo building
fondamentale blockdifor
blocco unitary delay
costruzione pernetworks: delay
reti di ritardo
lines in parallel.
unitarie: linee di ritardo in parallelo.

To start with, wefamiglia


Una seconda can putdiany number of delays
trasformazioni in parallel,della
di conservazione as shown
potenza in Figure
è com-
7.11. da
posta Whatever
rotazionithe total power
e riflessioni dei of the inputs,
segnali x1 [n], . .the
. , xtotal power of the outputs
r [n], considerandoli, in ogni
has to nequal
punto it. come le r coordinate di un punto nello spazio r−dimensionale.
fissato,
A second ofamily
La rotazione of power-preserving
la riflessione deve essere una transformations
che lascia l’origine is composed
(0, . . . 0)offissata.
rota-
tions and
Per ognireflections of the n,
sample number signals x1 [n], ...totale
il contributo , xr [n],
allaconsidering
potenza media them, delat each
segnale
èfixed time point an, as the r coordinates of a point in r-dimensional space. The
proporzionale
rotation or reflection must be one |x1 |2that
+ · ·leaves |2 . origin (0, . . . , 0) fixed.
· + |xrthe
QuestaFor each sample
è proprio la number
distanzan,pitagorica
the total contribution
del punto (xto the average signal power
1 , . . . , xr ) dall’origine. Sic-
is proportional to
come le rotazioni e le riflessioni sono 2 trasformazioni 2 che preservano le distanze,
la distanza dall’origine prima |x 1| +
della · · · + |xr |
trasformazione deve essere uguale alla di-
stanza
This is dall’origine dopo. Quindi
just the Pythagorean la potenza
distance totale
from the di un
origin to insieme
the point di (x
segnali
1 , . . . , deve
xr ).
essere preservata
Since rotations perreflections
and rotazione.are distance-preserving transformations, the dis-
La from
tance Figurathe7.12 mostra
origin unatransforming
before matrice di rotazione
must equal chethe
opera su duefrom
distance segnali.
the
Nella
origin parte (a) la So
afterward. trasformazione
the total power è mostrata esplicitamente.
of a collection of signals Se
must i segnali
must be di
ingresso
preservedsono x1 [n] e x2 [n], gli outputs sono:
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 θ. Consideratos = sin(θ)come un punto sul piano cartesiano,
il punto (y1 , y2 ) è proprio il punto (x1 , x2 ) ruotato in senso antiorario di un
for an angle
angolo pari a of θ. rotation θ. Considered
I due punti sono quindi as allapoints
stessaondistanza
the Cartesian plane, the
dall’origine:
point (y1 , y2 ) is just the point (x1 , x2 ) rotated counter-clockwise by the angle θ.
2
The two points are thus at|ythe 1| + |y2 |2distance
same = |x1 |2 from 2
+ |x2 |the origin:
e quindi i due segnali di uscita2 hanno2 la stessa
|y1 | + |y2 | = |x1 | +potenza
2
|x2 |
2 totale dei due segnali di
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
della potenza eAND COMPLEX
reti di DELAY NETWORKS 191
ritardo complesse 181

(a) (b)
IN

IN

c -s s c
c -s

s c

OUT
OUT

Figura 7.12: Second


Figure Secondofundamental
fondamentalebuilding
blocco block
per la for
costruzione di retinetworks:
unitary delay di ritar-
do unitarie:
rotating rotazione
two digital di signals.
audio due segnali
Part audio digitali.
(a) shows La parte (a) explicitly;
the transformation mostra la
trasformazione
(b) shows it as ainmatrix
modo esplicito;
operation.(b) la mostra in termini matriciali.

dovesoZthe
and è un
twonumero complesso
output signals havecon modulo
the same unitario
total power ase argomento θ. signals.
the two input Poiché
|Z| For
= 1,ansegue che |X| description
alternative = |Y |. of rotation in two dimensions, consider com-
plexSenumbers
eseguiamo X una
= xrotazione
1 + x2 i and Y =
su una y1 +diy2segnali
coppia i. Thee above
poi ne transformation
invertiamo uno
amounts to setting
(ma non l’altro), il risultato è una riflessione. Anche la riflessione conserva la
potenza totale del segnale, in quanto Y possiamo
= XZ 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ò consente di semplificare i calcoli,
come mostrato in Figura 7.13 y2 [n](parte a), −perché
= sx1 [n] cx2 [n] ciascun segnale deve essere
moltiplicato per la sola quantità c = s.
A special
! andeffettuare
useful rotation matrix is obtained by setting θ = π/4, so that
È possibile rotazioni o riflessioni più complicate di più 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 suc-
cessione ad una collezione di segnali audio, provocherà una risposta piatta in
frequenza, in quanto ogni singola operazione fa questo. Ciò ci permette già di
generare un’infinità di reti di ritardo a risposta piatta, ma finora, nessuna di
192 CHAPTER 7. TIME SHIFTS AND DELAYS
182 Capitolo 7. Spostamenti temporali e ritardi

(a) (b)
IN
IN

R R
1 2

R
3
a a
R
4

OUT OUT

Figure 7.13: Details about rotation (and reflection) matrix! operations: (a) ro-
Figuraby
tation 7.13:
the Dettagli
angle θ =sulle π/4,operazioni
so that a matriciali
= cos(θ) =disin(θ) rotazione
= (e 1/2riflessione):
≈ 0.7071;
p (b) (a)
rotazione di un angolo di θ = π/4, cosicché
combining two-dimensional rotations to make higher-dimensional ones. a = cos(θ) = sin(θ) = 1/2 ≈
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
we è ricircolante.
the special angle Unaπ/4,
terzaalloperazione,
the input signalsmostrata willincontribute
Figura 7.14, consente
equally di
to each
effettuare
of the outputs. reti ricircolanti che danno ancora risposte piatte in frequenza.
La parte (a) della figura mostra il layout generale. La trasformazione R è
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 è 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ù 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ù 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
d campioni sull’outputpowerWpreserving,
, il risultatothe è iltotal
ben noto inputall-pass
power filter.
(the power of the
Con qualche
signals x 1 , . . . x k plus that of the signals w 1 , . .
manipolazione e ponendo c = cos(θ) possiamo dimostrare che è equivalente. w j ) must equal the output power
(the power of the signals y 1 , . . . y k plus w 1 , . . . w j ),
alla rete mostrata nella parte (b) della figura. I filtri all-pass hanno molte and subtracting all the w from
the equality, we find that the total input and output
applicazioni, alcune delle quali verrano viste più avanti in questo libro. power are equal.
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 è 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 183
193

(a) (b)
IN
x1 xk

...
...

R
wj w d c
1
...
d1 ... dj

c
y y
1 k
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
can show diitriflessioni sonore
is equivalent to sulle pareti e shown
the network su altriin oggetti
part (b)cheofdefiniscono
the figure.loAll-pass
spazio.
Imitare questo processo utilizzando reti di ritardo ricircolanti
filters have many applications, some of which we will visit later in this book. e discrete è una
grande semplificazione. Tuttavia, modellare la riverberazione utilizzando linee
di ritardo ricircolanti può, con molto lavoro, essere fatto per dare buoni risultati.
7.6L’ideaArtificial
centrale è quella reverberation
di idealizzare qualsiasi stanza (o altro spazio riverbe-
rante) come una collezione di linee di ritardo parallele che modellano la memoria
Artificialall’interno
dell’aria reverberation dellaisstanza.
widely usedAd ognito improve
punto sullethe pareti
sound della
of recordings,
stanza molti but
has a wide
percorsi range
lineari of other musical
terminano, ciascuno applications [DJ85, pp.289-340].
dei quali trasporta il suono a quel Reverbera-
punto;
iltion in real,
suono alloranatural spaces
si riflette in arises
molti from
altri apercorsi,
complicatedognuno pattern of originato
di essi sound reflections
in quel
off the ewalls
punto, and other
che conduce objects thatad
eventualmente define the punto
un altro space. suItunis muro.
a great oversim-
plification
Anche se toilimitate
muro (ethis process
l’aria using recirculating,
che abbiamo attraversato discrete
per arrivaredelayallanetworks.
parete)
Nonetheless,
assorbe un po’modeling
del suono, reverberation
una parte della usingpotenza
recirculating
incidente delay lines can,
è riflessa versowithun
muchmuro.
altro work, Sebe lamade to yield
maggior partegood results. ricircola, la stanza riverbera per un
dell’energia
tempo Thelungo;
central se idea
tuttaisl’energia
to idealize anyla room
lo fa, (or otherdura
riverberazione reverberant
per sempre. space) Seasa
a collection
qualsiasi of parallel
frequenza delayriflettono
le pareti lines that piùmodels
energiathe memory
rispetto of thericevuta,
a quella air inside il
the room.
suono verràAt each instabilmente;
ripreso point on the walls questo of non
the accade
room, manymai instraight-line
ambienti reali paths
(la
terminate, eachdell’energia
conservazione carrying sound to that point;
lo impedisce), the sound
ma può succederetheninreflects into many
un riverberatore
other paths,
artificiale eachèone
se non statooriginating
progettato at correttamente.
that point, and leading eventually to some
otherPerpoint
fare onun ariverberatore
wall. artificiale usando una rete di ritardo, dobbiamo
Although
soddisfare the wall (and the
simultaneamente air richieste
a due we passedconcorrenti.
through to Innanzitutto,
get to the wall) le absorbs
linee di
some ofdevono
ritardo the sound,esseresome portion of
abbastanza the incident
lunghe powerlaiscolorazione
per impedire reflected and makes it
nell’output
to another
come wall.delIf filtraggio
risultato most of the energy (anche
a pettine recirculates, the room
se passiamo al reverberates
di là del semplice for a
long time;
filtro if alldel
a pettine of paragrafo
it does, the 7.4,reverberation
la risposta inlasts forever.tende
frequenza If atad any frequency
avere picchi
ethe walls
valli la reflect more energy
cui distanza overall than they
varia inversamente receive,
al tempo the sound
totale will feed
di ritardo). back
D’altra
parte, non dovremmo ascoltare singoli echi; la densità 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
9
R3

d3 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 è dare al percorso di
feedback una risposta piatta in frequenza e un guadagno leggermente inferiore
a uno; questo può essere fatto usando le matrici di rotazione.
Idealmente questo è tutto ciò che dobbiamo fare, ma in realtà 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à di eco al di sotto di ciò che vorremmo, e
quindi potremmo utilizzare più linee di ritardo all’ingresso della rete ricircolante
per aumentare la densità.
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 è 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’ispessimen-


to 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 rota-
zione. 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 è 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 è ricircolato t/d volte, perdendo 20 log10 (g) decibel ogni volta, quindi il
guadagno totale, in decibel, è:

t
20 log10 (g).
d
La misura usuale del tempo di riverberazione (RT) è il tempo a cui il guadagno
scende di sessanta decibel:

20 RT
d log10 (g) = −60,

−3d
RT = log10 (g) .

Se g vale uno, questa formula dà ∞, poiché il logaritmo di uno è zero.


Il quadro illustrato in precedenza è la base di molti riverberatori moderni.
Sono state proposte molte estensioni di questo schema. Il passo successivo più
importante sarebbe quello di introdurre filtri nel percorso di ricircolo in modo
che le frequenze alte possano essere fatte decadere più rapidamente di quelle
basse; questo è 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 com-
porta delle scelte molto complicate sui tempi di ritardo, guadagni e coefficienti
di filtraggio. Sono state pubblicate montagne di letteratura su questo argo-
mento; Barry Blesser ha pubblicato una buon saggio [Ble01]. Molto altro si sa
sulla progettazione di riverberatori e sul tuning che non è ancora stato pubbli-
cato; progettazioni precise vengono spesso tenute segrete per motivi commer-
ciali. 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 registra-
zione o nella ripresa sonora per addolcire il suono complessivo. Tuttavia, e più
interessante, la riverberazione può essere usata come fonte sonora in proprio. Il
caso speciale di riverberazione infinita è utile per catturare i suoni dal vivo e
estenderli nel tempo.
Per fare questo lavoro, in pratica, è necessario aprire l’ingresso del riverbe-
ratore 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à e diventerà rapidamente
una massa indecifrabile. Per “riverberare infinitamente” una nota di uno stru-
mento dal vivo, è meglio aspettare dopo la parte di attacco della nota e quindi
7.7. VARIABLE AND FRACTIONAL SHIFTS 197

186 Capitolo 7. Spostamenti temporali e ritardi

IN (a)

reverb
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-
la nota. È possibile costruire accordi da uno strumento monofonico aprendo
ripetutamente l’ingresso in momenti diversi in cui il tono è stabile.

La Figura 7.16 mostra come ciò possa essere fatto in pratica. I due con-
trolli più 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 ag-
giungere altri suoni ad un già 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 riverbe-
ratore impostando il guadagno di feedback ad un valore inferiore a uno (come al
momento t3 ). Più riduciamo il guadagno di feedback, più velocemente l’output
decadrà.
7.7. Spostamenti variabili e frazionari 187

7.7 Spostamenti variabili e frazionari


Come tutte le tecniche di sintesi o di elaborazione audio, le reti di ritardo di-
ventano molto più 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, va-
riandoli 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é per valori frazionari di d un’espressione come x[n − d] non è
determinata se x[n] è definito solo per valori interi di n. Per fare ritardi frazio-
nari dovremo introdurre un adeguato schema di interpolazione. E se vogliamo
variare d con regolarità nel tempo, saltare semplicemente da un numero intero
al successivo non darà 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 è possibile fare una rampa, su un controllo
di ampiezza, tra due valori con un tempo superiore a 30 millisecondi senza pro-
blemi, modificare un ritardo di un solo campione su un centinaio comporta un
notevole cambiamento nel tono – anzi, spesso si varierà un ritardo deliberata-
mente 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ò 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ò essere utilizzato per
qualsiasi ritardo di almeno un campione. I ritardi di meno di un campione non
possono essere calcolati in questo modo perché abbiamo bisogno di due punti di
ingresso recenti almeno come il ritardo desiderato. Questi erano disponibili nel-
l’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 utilizzan-
do schemi di interpolazione di ordine superiore. Tuttavia, esiste un compromesso
tra la qualità e l’efficienza computazionale. Inoltre, se passiamo a schemi di in-
terpolazione 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 inde-
siderati – che derivano dalla modifica delle linee di ritardo. In generale, una
modifica discontinua del tempo di ritardo darà luogo a una modifica disconti-
nua del segnale di uscita, poiché è effettivamente interrotto in un punto e fatto
saltare ad un altro. Se l’ingresso è una sinusoide, il risultato è un cambiamento
di fase discontinuo.
Se si desidera modificare occasionalmente la linea di ritardo tra tempi di ri-
tardo fissati (ad esempio, all’inizio delle note musicali), allora è possibile utilizza-
7.7. VARIABLE AND FRACTIONAL SHIFTS 199

188 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
previous7.17:
time.Una
Thelinea di ritardo
output samplesa can’t
lunghezza variabile,
be newer than theil cui output
input è l’input
samples, nor
rispetto a qualche
older than tempo
the length D ofprecedente. I campioni
the delay line. di output
The slope non possono essere
of the input/output curve
più recenti
controls thedei campioni transposition
momentary di input, né of
piùthe
vecchi della lunghezza D della linea
output.
di ritardo. La pendenza della curva di input/output controlla la transizione
momentanea dell’output.

re le tecniche di gestione delle discontinuità 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 interpo-
lato) 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à n−d[n], dove d[n] è il ritar-
do (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 è:

z[n] = x[y[n]]
7.8. Fedeltà 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 è esattamente la formula per la waveta-
ble lookup (pagina 25). Possiamo utilizzare tutte le proprietà 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 momen-
tanee per wavetables per calcolare la trasposizione t[n] dell’output. Ciò 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 è 1 e il suono emerge dalla


linea di ritardo alla stessa velocità in cui è entrato. Ma se il tempo di ritardo
aumenta in funzione di n, il suono risultante è trasposto verso il basso e se d[n]
diminuisce, verso l’alto.
Questo è chiamato effetto Doppler, e si verifica anche in natura. L’aria che
il suono attraversa può essere considerata come una linea di ritardo. Cambiare
la lunghezza della linea di ritardo corrisponde a spostare l’ascoltatore più vicino
o più 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 sposta-
mento di tono all’inizio, ma poi quando la pendenza del percorso diminuisce,
il tono scenderà per un intervallo di tempo prima di tornare al tono originale
(quando la pendenza torna a uno). Il tempo di ritardo può essere manipolato
per dare una qualsiasi trasposizione desiderata, ma maggiore è la trasposizione,
tanto meno possiamo mantenerla prima di arrivare sulla parte inferiore o su
quella superiore della regione diagonale.

7.8 Fedeltà delle linee di ritardo interpolanti


Poiché stiamo in effetti facendo una ricerca su wavetable, le linee di ritardo
variabili introducono distorsioni ai segnali su cui operano. Inoltre, un problema
più sottile può sopraggiungere anche quando la linea di ritardo non cambia in
lunghezza: la risposta in frequenza, in situazioni reali, non è 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 risulta-
ti 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 sepa-


ratamente ciò 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è per frequenze inferiori a
1/16 della frequenza di Nyquist), la distorsione è di 96 dB o migliore – improba-
bile 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ù alte la qualità 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ù 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é la situazione peggiore nella tabella è 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 è più 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 è quasi
piatta fino a metà della frequenza di Nyquist, ma successivamente scende rapida-
mente. Supponiamo (per scegliere il caso peggiore) che il ritardo sia impostato
a metà tra due interi, ad esempio 1.5. L’interpolazione cubica dà:
−x[0] + 9x[1] + 9x[2] − x[3]
x[1.5] = .
8
Ora, sia x[n] una sinusoide (a valori reali) di ampiezza unitaria con frequenza
angolare ω, la cui fase è zero a 1.5:
x[n] = cos(ω · (n − 1.5))
e calcoliamo x[1.5] utilizzando la formula sopra:
9 cos(ω/2) − cos(3ω/2)
x[1.5] = .
4
Questo è il valore di picco della sinusoide che esce fuori dalla linea di ritardo e
poiché l’ampiezza di picco in entrata valeva 1, ciò mostra la risposta in frequenza
della linea di ritardo. Questo è illustrato nella Figura 7.18. A metà della
frequenza di Nyquist (ω = π/2) il guadagno è di circa −1 dB, che è un calo
appena percettibile dell’ampiezza. Alla frequenza di Nyquist stessa, tuttavia, il
guadagno è zero.
Come per i risultati della distorsione, la risposta in frequenza migliora radi-
calmente 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

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à tra due interi. Il guadagno DC è 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 è quello di modificare
il tono
and di un x[1.5]
compute suono using
in entrata utilizzando
the above formula:l’effetto Doppler. Può essere deside-
rabile modificare il tono in modo variabile (casualmente o periodicamente, ad
esempio), oppure mantenere un intervallo 9 cos(ω/2)musicale
− cos(3ω/2)di trasposizione per un certo
periodo di tempo. x[1.5] =
4
Ritornando alla Figura 7.17, vediamo che con una singola linea di ritardo
This is the
variabile peak value
possiamo of the sinusoid
mantenere qualsiasi that comes back
spostamento out of the
desiderato delay
di tono perline,
un
and since the
intervallo peak di
limitato amplitude
tempo, ma goingse in was one,
vogliamo this shows
sostenere una the frequency re-
trasposizione fis-
sponse
sa, allaoffine
thearriveremo
delay line.sempre
This isalgraphed
di fuori in Figure
dalla 7.18.diagonale
striscia At half dei
the tempi
Nyquist di
frequency (ω = π/2) the
ritardo ammissibili. gainscenario
Nello is aboutpiù
-1 dB, which varieremo
semplice, is a barelysemplicemente
perceptible drop la
in amplitude. verso
trasposizione At thel’alto
Nyquist frequency
e verso il bassoitself,
in modohowever, the gainnella
da rimanere is zero.
striscia.
As with funziona,
Questo the resultsadfor distortion,
esempio, the frequency
se vogliamo response
applicare improves
un vibrato radically
ad un suono
with
comeamostrato
doublinginofFigura
sample7.19.rate.Qui
If we run our delay
la funzione at a èsample rate of 88200
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 è il ritardo medio, a è l’ampiezza della variazione del ritardo medio


7.9 Pitch
e ω è una shifting
frequenza angolare. La trasposizione momentanea (pagina 189) è
approssimativamente
A favorite use of variable delay t = 1lines
+ aωiscos(ωnto alter the pitch of an incoming sound
− π/2).
using the Doppler effect. It may be desirable to alter the pitch variably (ran-
Questaorvaria
domly in valore for
periodically, 1 − aω e 1or+else
traexample), aω. to maintain a fixed musical interval
Supponiamo,over
of transposition d’altra parte,of che
a length time. vogliamo mantenere una trasposizione co-
stante su un intervallo
Returning to Figure di tempo
7.17, we seepiùthat
lungo.
withIna questo caso non
single variable possiamo
delay line weman-
can
tenere per
maintain anysempre
desiredlapitch
trasposizione,
shift for a ma è comunque
limited interval ofpossibile
time, butmantenerla su
if we wish to
intervalli
sustain fissatitransposition
a fixed di tempo interrotti
we will da alwaysmodifiche discontinue,
eventually comethe
land outside mostrato in
diagonal
Figura
strip of 7.20. Il tempo
admissible di times.
delay ritardo In è l’output di unascenario,
the simplest opportunawe funzione
simply varya dente
the
di sega normalizzata
transposition up and edown
l’output
so asdella linea diinritardo
to remain variabile viene inviluppata,
the strip.
come mostrato in figura, per evitare le discontinuità.
Questo viene eseguito come mostrato in Figura 7.21. L’output del gene-
ratore a dente di sega è utilizzato in due modi. Innanzitutto è regolato per
funzionare tra i limiti d0 e d0 + s, e questa dente di sega modificata controlla
192 Capitolo 7. Spostamenti temporali e ritardi

input
time

output time

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

input
time

output time

Figure
Figura 7.20: Funzioni
Piecewisedilinear delay
ritardo functions
lineari a tratti to
permaintain
mantenerea constant transpo-
una trasposizione
sition (except
costante at the points
(ad eccezione of discontinuity).
dei punti The Gli
di discontinuità). outputs are subiscono
outputs enveloped unas
suggested by thesuggerito
inviluppo come bars above each
dalle point,
barre toogni
sopra smooth theper
punto, output at the
smussare pointsnei
l’uscita of
discontinuity in delay 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

IN
0

s
N
d
delay 0
time
1

0
0 N

OUT

Figure
Figura 7.21: Using
Utilizzoa variable delaydiline
di una linea as avariabile
ritardo pitch shifter.
come The
pitchsawtooth wave
shifter. L’on-
creates a smoothly
da a dente di sega increasing or decreasing
crea un tempo delay
di ritardo chetime. The output
aumenta of the senza
o diminuisce delay
line is enveloped
irregolarità. to avoid
L’output delladiscontinuities.
linea di ritardoAnother copy of
è inviluppato perthe same disconti-
evitare diagram
should run 180 degrees
nuità. Un’altra (π radians)
copia dello out of phase
stesso diagramma withessere
deve this one.
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 suf-


ficiente 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 è generalmente proposto come
un ulteriore controllo in un pitch shifter poiché è essenzialmente gratuito. La
quantità s è talvolta chiamata dimensione della finestra (window size) e corri-
sponde approssimativamente alla lunghezza del campione in un campionatore
ciclico (paragrafo 2.2).
L’output dell’onda a dente di sega è anche utilizzato per inviluppare l’output
stesso esattamente come nel caso del campionatore wavetable di Figura 2.7
(pagina 36). L’inviluppo è zero nei punti in cui l’onda a dente di sega si riavvolge
e, in mezzo, aumenta senza irregolarità fino ad un valore massimo di 1 (per
guadagno unitario).
Se la frequenza dell’onda a dente di sega è f (in cicli al secondo), il suo valore
spazia da 0 a 1 ogni R/f campioni (dove R è la frequenza di campionamento).
La differenza tra valori successivi è dunque f /R. Se denotiamo con x[n] l’output
dell’oscillatore a dente di sega, allora
f
x[n + 1] − x[n] =
R
(ad eccezione dei punti di wraparound). Se regoliamo l’intervallo di uscita del-
l’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 traspo-
sizione momentanea (pagina 189) è quindi:
sf
t=1− .
R
Per completare la progettazione del pitch shifter dobbiamo aggiungere un’altra
copia, ma metà fuori fase. Ciò dà origine ad uno schema di lettura del ritardo
come mostrato in Figura 7.22.
Il pitch shifter può trasportare sia in maniera ascendente (usando le fre-
quenze negative per l’onda a dente di sega, come nella figura) o in maniera
discendente, utilizzando quelle positive. Lo spostamento di tono è di solito
controllato cambiando f e mantenendo s fisso. Per ottenere un intervallo di
trasposizione desiderato t, poniamo
(t − 1)R
f= .
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ò essere modificata a piacimento, anche in maniera
discontinua, è necessario modificare s con maggiore attenzione. Una possibile
7.10. Esempi 195

input
time

output time

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

soluzione è quella di disattivare l’output mentre si cambia s in modo discontinuo;


in alternativa, s può essere variata, in maniera continua, con delle rampe, ma
questo provoca effetti Doppler difficili da controllare.

Una buona scelta per l’inviluppo è un mezzo ciclo di sinusoide. Se suppo-


niamo, 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à somma
pari ad una costante (poiché la somma dei quadrati dei due inviluppi è 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 è 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 “zero-
crossing”) e saltare in maniera discontinuità ad un altro. Utilizzare una sola
linea di ritardo ha il vantaggio che l’uscita del segnale suona più “presente”.
Uno svantaggio è che, poiché il tempo di ritardo è in funzione del valore del
segnale di ingresso, l’output non è più una funzione lineare dell’input, pertanto
gli inputs non periodici possono dare origine ad artefatti quali la differenza di
tono.
208
196 CHAPTER
Capitolo 7. TIME SHIFTS
7. Spostamenti AND DELAYS
temporali e ritardi

loadbang
metro 1000
tabplay~ G01-tab
input signal

write to delay line


delwrite~ delay1 1000

0 <-- delay time


(msec)
delread~ delay1
+~ read from delay line
|
(OUT)

Figure 7.23: Example patch G01.delay.pd, showing a noninterpolating delay


Figura
with 7.23:timePatch
a delay dell’esempio
controlled G01.delay.pd, che mostra un ritardo
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
average Esempi
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
Linea
of squaresdiofritardo fissa, non-interpolata
the two envelopes is one).
Many variations exist on this pitch shifting algorithm. One classic variant
L’esempio
uses a singleG01.delay.pd
delay line, with(Figura 7.23) applica
no enveloping at all.unaIn linea di ritardo
this situation semplice
it is ad
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
delwrite∼ stays continuous.
: definisce e scrive suFor example,
una linea dione couldIlfind
ritardo. a point
primo whereargu-
creation the
output signal passes through zero (a “zero crossing”) and jump
ment fornisce il nome della linea di ritardo (e due linee di ritardo non possono discontinuously
to another one.
condividere Using
lo stesso only one
nome). delay line
Il secondo has the
creation advantage
argument è la that the signal
lunghezza della
output
linea di ritardo in millisecondi. L’ingresso riceve un segnale audio e lotime
sounds more “present”. A disadvantage is that, since the delay is
scrive
acontinuamente
function of input signal value, the
nella linea di ritardo. output is no longer a linear function of the
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 ri-
tardo. Il primo creation argument fornisce il nome della linea di ritardo (che
7.10 Examples
dovrebbe coincidere con il nome del corrispondente oggetto delwrite∼; questo
è il modo in cui Pd sa quale delwrite∼ associare all’oggetto delread∼). Il
secondo creation
Fixed, argument (opzionale)
noninterpolating delay fornisce
line il tempo di ritardo in millise-
condi. Questo non può essere negativo e non può neanche superare la lunghezza
della lineaG01.delay.pd
Example di ritardo specificata
(Figure 7.23)nell’oggetto simple delayI line
applies adelwrite∼. numerito an in entra-
input
ta (messaggi)
signal. Two new possono
objectsessere utilizzati per modificare dinamicamente il tempo
are needed:
didelwrite~
ritardo. Tuttavia,
: define andciò comporterà unaline.
write to a delay modifica discontinua
The first creation dell’output,
argument gives che
dovrebbe pertanto essere disattivato quando il tempo di ritardo
the name of the delay line (and two delay lines may not share the same name). cambia.
L’esempio accoppia semplicemente un oggetto delwrite∼ con un oggetto
delread∼ per fare un ritardo semplice non-interpolante. Il segnale di ingresso
è 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 è più prominente e, soprattutto,
7.10. Esempi
210 CHAPTER 7. TIME SHIFTS AND DELAYS 197

0 <-- pitch

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
|
(OUT) delwrite~ G02-del 2000 write to delay line

Figure 7.24: Recirculating delay (still noninterpolating).


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

0 <-- pitch
si sente un eco discreto. Non c’è alcuna protezione di disattivazione per l’output
mtof
del ritardo,0 quindi
<-- i timbre
clicks sono possibili quando cambia il tempo di ritardo.
* 0.5
* 0.01 0 <-- cycle frequency (hundredths)
Filtro
osc~ a pettine ricircolante
pack 0 100 / 100
0
L’esempio G02.delay.loop.pd (Figura 7.24)<-- cycle
mostra comedepth (msec)
effettuare una rete di
line~ osc~ 0
ritardo ricircolante. Il ritardo è nuovamente ottenuto utilizzando una coppia
pack 0 100
*~ L’output
delwrite∼/delread∼. +~ 1 dell’oggetto delread∼ è moltiplicato per un
line~
guadagno
cos~ di feedback di 0.7 e poi inviato all’oggetto delwrite∼. Un input
*~
(fornito dal phasor∼ e dagli oggetti ad esso associati) viene aggiunto all’ingresso
0 <-- feedback
hip~
di 10
delwrite∼; questa somma diventa l’output della rete. Questo è il filtro a
+~ 1.46
pettine * 0.01 (hundredths)
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
stessi. line~ tra gli oggetti delwrite∼
Il feedback della rete si verifica implicitamente
hip~ 5
e| delread∼.
*~
(OUT)
clip~ -1 1
Linea di ritardo variabile
delwrite~ G03-del 1000
L’esempio seguente, G03.delay.variable.pd (Figura 7.25), è un altro filtro a petti-
ne ricircolante, questa volta ottenuto utilizzando una linea di ritardo a lunghezza
variabile. Qui7.25:
Figure vieneThe
introdotto un interpolating,
flanger: an nuovo oggetto: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 è
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 è specificato da un segnale audio in entrata. La linea
di ritardo viene letta utilizzando l’interpolazione (cubica) a quattro punti; il
ritardo minimo ottenibile è un campione.
signal 0 <-- delay time
delread~ G02-del 160 read from delay line
*~ 0.7 feedback gain
+~ add the original and the delayed signal
|
(OUT) delwrite~ G02-del 2000 write to delay line

198 Capitolo 7. Spostamenti temporali e ritardi


Figure 7.24: Recirculating delay (still noninterpolating).

0 <-- pitch
mtof
0 <-- timbre
* 0.5
* 0.01 0 <-- cycle frequency (hundredths)
osc~
pack 0 100 / 100
0 <-- cycle depth (msec)
line~ osc~ 0
pack 0 100
*~
+~ 1
line~
cos~
*~
0 <-- feedback
hip~ 10
+~ 1.46
* 0.01 (hundredths)
clip~ -0.2 0.2
vd~ G03-del
pack 0 100
+~
line~
hip~ 5
| *~
(OUT)
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 è 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’è un controllo a destra per impostare il guadagno di
feedback; qui, in contrasto con l’esempio precedente, è 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 è 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ù due volte la “depth” (profondità). La ragione di questo tempo
di ritardo minimo sarà ripresa nella spiegazione del prossimo esempio.
I filtri a pettine con tempi di ritardo variabili sono a volte chiamati flan-
gers. Quando il tempo di ritardo cambia, i picchi della risposta in frequenza si
muovono in su e in giù 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
The 7.26: may
objects Ordinebe di esecuzione
executed di oggetti
in either the tilde
orderin“a-b-c-d”
Pd: (a), or
una“a-c-b-d”.
rete aciclica.
In
Gli oggetti possono essere eseguiti nell’ordine “a-b-c-d” o “a-c-b-d”.
part (b), there is a cycle, and there is thus no compatible linear orderingNellaofparte
the
(b), c’è because
objects un ciclo, e quindi
each non need
one would c’è un ordinamento
to be run before lineare compatibile degli
the other.
oggetti perché ognuno avrebbe bisogno di essere eseguito prima dell’altro.

details.)
Ordine di effect
To see the esecuzione e limiti
of the order inferiori
of computation on asui tempi di ritardo
delwrite~/delread~ pair,
we can write explicitly the input and output signals in the two possible
Quando si utilizzano ritardi (cosı̀ come altri oggetti di tilde, in Pd, di condivi-orders,
with
sionethe minimum
di stato), possible
l’ordine delay.
in cui If the write
le operazioni di operation
scrittura ecomes first,
lettura sonoat eseguite
a block
starting at sample number N , the operation can be written as:
può influenzare l’esito del calcolo. Anche se gli oggetti tilde in una patch pos-
sono avere una topologia x[N ], . complessa
. . , x[N + Bdi−connessioni
1] −→ delwrite~ audio, in realtà Pd li esegue
tutti in ordine sequenziale, uno dopo l’altro, per calcolare ogni blocco di output
audio. BQuesto
where ordinesize
is the block lineare
(as inèSection
garantito3.2).perHaving
essere put
compatibile con le intercon-
those particular samples
nessioni
into audio,line,
the delay nel senso che non
a following viene eseguito
delread~ is ablealcunto read calcolo di unvalues
the same oggetto tilde
out:
finché non sono stati calcolati tutti gli inputs, per quel blocco stesso.
La Figura 7.26 mostra delread~ due −→ esempix[Ndi], .topologie B − 1]
. . , x[N +degli oggetti tilde e la loro
interpretazione in una sequenza di calcolo. Nella parte (a) ci sono quattro
On the
oggetti other
tilde e, hand,
a causasuppose
delle the object comes
delread~l’oggetto
connessioni, a∼ before the delwrite~.
deve produrre il suo
Then the samples x[N ], . . . , x[N + B − 1] have
output prima che si possa eseguire sia b∼ o c∼; ed entrambi questi, not yet been stored in the adelay
loro
line,
volta,sovengono
the mostutilizzati
recent samples
nel calcolo that may
di d∼. be read
Quindibelong to the ordini
i possibili previous 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).
HereLatheparteminimum
(b) delladelay
figura we mostra
can possibly
un ciclo obtain is thetilde.
di oggetti block Questa
size B. reteSo nonthe
minimum
può esseredelay is eitherin0 un
organizzata or B, depending
ordine sequenziale on the order in which
compatibile, the sia
poiché delread~
a∼ che
and delwrite~objects
b∼ richiedono che l’outputare sorted
dell’altrointosia
a sequence
calcolato of execution.
prima. In generale, un ordine
Looking di
sequenziale back at the
oggetti tildepatches of Figures
è possibile se e solo7.24seandnon7.25, which
ci sono cicliboth feature
in qualsiasi
recirculating
punto della rete delays,
deglithe delread~
oggetti tilde eordelle
vd~loroobject must be placed
interconnessioni earlier in
di segnale the
audio.
sequence
Pd segnala than
unthe quando object.
delwrite~
errore appare This
un taleis true of (si
ciclo anynotidesign
cheinlawhich a delay’s
situazione per
output is fed back di
le interconnessioni into its input.
controllo tra The minimum
oggetti possible delay
è più complicata is B samples.
e flessibile, si veda
For a (typical) sample
la documentazione di Pd rate perofi dettagli).
44100 Hertz and block size of 64 samples, this
comes
Pertovedere
1.45 milliseconds.
l’effetto dell’ordineThis might not sound
di calcolo su unaatcoppia
first like a very important
delwrite∼/read∼,
restriction. But if esplicitamente
possiamo scrivere you are trying itosegnali tune adirecirculating
ingresso e dicomb uscitafilter to a possibili
nei due specific
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ò essere scritta
come:
x[N ], . . . , x[N + B − 1] −→ delwrite∼
200 Capitolo 7. Spostamenti temporali e ritardi

dove B è la dimensione del blocco (come nel paragrafo 3.2). Avendo inserito
questi particolari campioni nella linea di ritardo, un delread∼ successivo è 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ò i campioni più 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 è la dimensione B del blocco. Quin-
di il ritardo minimo è 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 posizio-
nati 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 è B campioni. Per una frequenza di campionamento (tipica)
di 44100 Hertz e una dimensione del blocco di 64 campioni, si ha un ritardo mi-
nimo 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ù alto possibile
che si può ottenere è solo di circa 690 Hertz. Per ottenere ritardi ricircolanti
più brevi è 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ò 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 resti-
tuito alla patch principale. La parte (b) mostra il contenuto della sottopatch,
che invia gli impulsi in una rete di ritardo ricircolante. L’oggetto block∼ speci-
fica che, in questa sottopatch, il calcolo del segnale utilizza una dimensione del
blocco (B) di solo un campione. Quindi il ritardo minimo raggiungibile è 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 Karplus-
Strong, ed è stata descritta in un loro lavoro [KS83], anche se l’idea sembra
essere più 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 incoming delay
pulses time
metro 500
inlet~ inlet
random 60
del 1 delread~ G04-del
+ 30
1 0 +~ *~ 0.99
mtof
vline~ expr 1000/$f1 delwrite~ G04-del 1000
pd delay-writer
outlet~ block~ 1
|
(OUT) set block size

Figure 7.27: A patch using block size control to lower the loop delay below the
Figura 64
normal 7.27: Una patch
samples: (a) theche utilizza
main patch;il(b)
controllo della dimensione
the “delay-writer” delwith
subpatch blocco
a per
abbassare
block~ il ritardo
object del ciclo al delay
and a recirculating di sotto dei normali 64 campioni: (a) la patch
network.
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
recirculating CHAPTER
delays you must increase 7. TIME
the sample rate orSHIFTS
decreaseAND DELAYS
the block
size.

Example G04.control.blocksize.pd (Figure 7.27) shows how the block size


delay in
can be controlled in Pd using a new object: 45 samples
(a) (b)
switch~ : Set the local block size of the patch /window
pd ,pulse
block~ 44.1 the object

sits in. Block sizes are normally powers of two. The switch~ pack
object, 0in 30
addition,
can be used delwrite~ G05−d1
to turn audio 1000 within the window on and off, using
computation
control messages. Additional creation arguments can set theline~ local sample rate
and specifyvd~ G05−d1computations (demonstrated in Chapter 9).
overlapping
pd pulse
In +~
part (a) of the figure (the main patch), a rectangular pulse is sent to the
pd delay-writer subpatch, whose output pd delay−writer
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
Figura
to make 7.28: Using
Utilizzo
a pitch subpatches
calledtoKarplus-Strong
di sottopatches
is sometimes ensure that delay
per assicurare chelines are diwritten
le linee
synthesis, having de-before
ritardo
been siano
they are
scritte read
prima in
di non-recirculating
essere lette in retinetworks: (a) the
non-ricircolanti: delwrite~
(a) gli
scribed in a paper by them [KS83], although the idea seems to be older. It and
oggetti vd~ objects
delwrite∼
might
e vd∼up
shows be executed
potrebbero
for example in either
essere
in Paul the “right”
eseguiti
Lansky’s or the
in 1979
ordine “wrong”
“giusto”
piece, oorder; (b)
on athe
“errato”;
Six Fantasies delwrite~
(b)
Poem l’oggetto
by
object
delwrite∼
Thomas isCampion.
inside the pd delay-writer
è all’interno della sottopatch subpatch and the vd~e l’oggetto
pd delay-writer object is vd∼ insideè
the pd delay-reader
all’interno one. pd
della sottopatch Because of the audio
delay-reader. connection
A causa between theaudio
della connessione two
subpatches, the order ofl’ordine
tra le due sottopatches, execution of the read/write
di esecuzione pair is
della coppia di forced to be the
lettura/scrittura
correct one.a essere quello corretto.
è 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
estimate fiddle~ delay
+ as one window (in msec)
delread~ G06-del pack 0 20
line~
vd~ G06-del
+~
|
(OUT)

Figure 7.29: An “octave doubler” uses pitch information (obtained using a


Figura 7.29:
fiddle~ Unto“octave
object) tune a doubler” utilizza
comb filter le informazioni
to remove di tono in
the odd harmonics (ottenute
an in-
usando un oggetto
coming sound. fiddle∼) per sintonizzare un filtro a pettine per rimuovere
gli armonici dispari in un suono in entrata.

In this example, the “right” and the “wrong” way to make the comb filter
Ordine
have audiblydi different
esecuzione results.inForlinee
delays diless
ritardo
than 64non-ricircolanti
samples, the right hand
side of the patch (using subpatches) gives the correct result, but the left hand
Nellecan’t
side reti di ritardodelays
produce non-ricircolanti,
below the 64 dovrebbe
sample essere
block possibile
size. posizionare, nella
sequenza, l’operazione di scrittura nella linea di ritardo prima di quella che la
legge. Non è quindi previsto un limite inferiore della lunghezza della linea di
Non-recirculating
ritardo (ad eccezione di ciò comb
che è filter
impostoas octave
dallo schemadoubler
di interpolazione, vedere
il paragrafo 7.7). In linguaggi come Csound,
In example G06.octave.doubler.pd (Figure 7.29) we revisit la sequenza di calcolo del generatore
the idea of pitch-
unitario è (in gran parte) esplicita, quindi è facile da specificare.
based octave shifting introduced earlier in E03.octave.divider.pd. There, Negli ambienti
know-
di patching grafici, tuttavia, l’ordine è implicito ed è
ing the periodicity of an incoming sound allowed us to tune a ring modulator necessario adottare un
altro approccio per assicurare che, ad esempio, un oggetto
to introduce subharmonics. Here we realize the octave doubler described in delwrite∼ venga
calcolato7.3.
Section prima
Usingdela corrispondente oggetto delread∼.
variable, non-recirculating comb filter Unwemodo
takeper
out realizzare
odd har-
ciò è mostrato nell’esempio G05.execution.order.pd (Figura
monics, leaving only the even ones, which sound an octave higher. As before, 7.28).
the Nella
spectralparte (a) della
envelope figura,
of the soundle isconnessioni nella patch
roughly preserved nonoperation,
by the determinano so wein
quale ordine le due operazioni di ritardo appaiano nella
can avoid the “chipmunk” effect we would have got by using speed change to sequenza di calcolo de-
gli the
do oggetti tilde; l’oggetto delwrite∼ potrebbe essere calcolato prima o dopo
transposition.
l’oggetto vd∼. Se vogliamo
The comb filtering is doneassicurarci
by combining che l’operazione di scrittura
two delayed copies of thesiincoming
verifichi
prima dell’operazione di lettura, possiamo procedere come
signal (from the pd looper subpatch at top). The fixed one (delread~) is set nella parte (b) della
to
figura e mettere le due operazioni in sottopatches, collegandole
the window size of the pitch following algorithm. Whereas in the earlier example tramite segnali
audio in modo che la prima sottopatch debba essere calcolata prima della se-
conda (il calcolo audio nelle sottopatches è 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’è in una sottopatch
si verifica prima di tutto quello che c’è 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à il risultato corretto, ma
il lato sinistro non può 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 sposta-
mento di ottave, basato sul tono, che è stata introdotta precedentemente nell’e-
sempio E03.octave.divider.pd. In quel caso, conoscere la periodicità di un suono
in entrata ci ha permesso di sintonizzare un modulatore ad anello per introdur-
re sub-armonici. Qui realizziamo l’octave doubler descritto nel paragrafo 7.3.
Utilizzando un filtro a pettine variabile e non-ricircolante, rimuoviamo gli armo-
nici dispari, lasciando solo quelli pari, che suoneranno ad un’ottava superiore.
Come prima, l’inviluppo spettrale del suono è preservato approssimativamente
dall’operazione, in modo da evitare l’effetto “chipmunk” che avremmo ottenuto
utilizzando il cambio di velocità per effettuare la trasposizione.
Il filtraggio a pettine è fatto combinando due copie ritardate del segna-
le in entrata (dalla sottopatch pd looper in cima). Quella fissa (delread∼)
è impostata sulla dimensione della finestra dell’algoritmo di tracciamento del
tono. Mentre nell’esempio precedente questo è stato nascosto in un’altra sot-
topatch, possiamo adesso mostrarlo esplicitamente. Il ritardo in millisecondi è
stimato essere pari alla finestra di analisi, di 2048 campioni, utilizzata dall’og-
getto fiddle∼; in millisecondi questo diventa pari a 1000 · 2048/R dove R è la
frequenza di campionamento.
Il ritardo variabile è lo stesso, più 1/2 del periodo misurato del suono in
entrata, o 1000/(2f ) millisecondi dove f è 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é la differenza tra i due ritardi è 1/(2f ), le frequenze di risonanza del
filtro a pettine risultante sono 2f, 4f, 6f, . . . ; la risposta in frequenza (paragrafo
7.3) è 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à
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


on/off
(msec)
0 0
phasor~ 80 metro
* 4
delwrite~ G07-del 30 f + 1

*~ line~ mod 4
t f b
delread~ G07-del 30
random 1000
*~ line~
expr 2 * $f1/1000 - 0.7
delread~ G07-del 17
pack 0 0 200
*~ line~
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 non-
ricircolante 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” è 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à 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 continuamen-
te 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 è calcolata
7.10. Esempi 205

creando un numero casuale e normalizzandolo affinché 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’è 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 mo-
dulanti con un contenuto di frequenza più controllabile, ad esempio utilizzando
i filtri (l’argomento del Capitolo 8).

Riverberatore
L’esempio G08.reverb.pd (Figura 7.31) mostra un semplice riverberatore arti-
ficiale, 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 ro-
tazione, 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 assor-
bita nel guadagno di feedback, che quindi non può 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 rotazio-
ne e lasciando nuovamente la ri-normalizzazione a più tardi). Un canale viene
quindi ritardato. I tempi di ritardo sono definiti per crescere approssimativa-
mente in maniera esponenziale; questo assicura uno schema di echi regolare e
diffuso.
Sono possibili molte estensioni di questa idea delle quali ne citeremo solo
alcune. È naturale, innanzitutto, mettere filtri passa-basso alla fine delle linee
di ritardo, per imitare il decadimento, tipicamente più veloce, delle frequenze
alte rispetto a quelle basse. È anche comune utilizzare più di quattro ritardi
ricircolanti; un riverberatore nella distribuzione Pd ne usa sedici. Infine è 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à 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ù 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,


reverb-echo echo-del2 8.45346 which also increase echo
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~
Do a power-conserving
Tap outputs here.
+~ 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
/ 200 time.
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:
Figura 7.31:AnUn
artificial reverberator.
riverberatore artificiale.
220 7.10. Esempi CHAPTER 7. TIME SHIFTS AND
207DELAYS

220 CHAPTER 7. TIME SHIFTS AND DELAYS

inlet~ inlet~
inlet~ inlet~

+~ -~
+~ -~
delwrite~ $1 $2
delwrite~ $1 $2
delread~ $1 $2
delread~ $1 $2
outlet~
outlet~ outlet~
outlet~

Figure 7.32: The echo generator used in the reverberator.


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

r transpose
7 <-- transposition r window
r transpose (halftones)
80 <--window
7 * 0.05776
<-- transposition r window (msec)
exp
(halftones) max 1
80 <--window
* 0.05776 speed
1.4982 (msec)
change max 1
exp - 1
* 0.001
speed t b f
1.4982* -1 delay
change
(msec)
- 1 tape head* 0.001
/ rotation freq r delay
t b f pack 0 200
* -1 -6.228 +~ 0.5 0 delay
line~ (msec)
phasor~
tape head wrap~ max 1.5
/ rotation freq r delay
pack 0 200
-6.228-~ 0.5 +~*~ 0.5 -~pack
0.5 0
*~
200
line~
0
*~ 0.5 +~ line~
*~ 0.5 +~
phasor~ wrap~ max 1.5
cos~ vd~ G09-del
cos~ vd~ G09-del
*~ pack 0 200
-~ 0.5 *~ -~*~0.5 *~
+~ line~
*~ 0.5| +~
(OUT) *~ 0.5 +~
cos~ vd~ G09-del
cos~ vd~ G09-del
Figure
Figura 7.33:
7.33: Un A pitch
pitch shifter
shifter conusing two variabili
due taps variableintaps
unainto
lineaa di
delay line.
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” è 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 è 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 è 44100, quale frequenza corrisponderebbe al ritardo
intero più vicino?
4. Supponiamo di fare una variazione del filtro a pettine non-ricircolante in
modo che il segnale ritardato venga sottratto dall’originale anziché essere
sommato. Qual è 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 è necessario che sia grande la variazione di ritardo? Come
cambierebbe se si volesse che la stessa profondità 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 è l’ampiezza e la fase iniziale della
somma di X e Y ?
7. Qual è 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 ω, è 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ò 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à più importanti di una rete di ritardo diventano la
sua risposta in frequenza e la sua risposta di fase. Una rete di ritardo che è
progettata appositamente per la sua risposta in frequenza o di fase è 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 quali-
tativa della risposta in frequenza del filtro. La risposta in frequenza può variare
nel tempo e, a seconda della progettazione del filtro, è possibile utilizzare uno
o più 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ò ci dà una funzione complessa H(ω), che viene
chiamata funzione di trasferimento del filtro.
La risposta in frequenza è il guadagno in funzione della frequenza ω. È
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 è utile conoscere anche la risposta di fase del filtro, pari a ∠(H(ω)).
Per una frequenza fissata ω, la fase dell’output del filtro sarà ∠(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ò avere ci suggerisce un’ampia varietà di processi di pro-
gettazione dei filtri. In alcune applicazioni un filtro deve seguire esattamente
una risposta in frequenza prescritta, in altri è importante minimizzare i tempi
di calcolo, in altri la risposta di fase è 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
Figura 8.1:
8.1: Representations
Rappresentazioniofdia un
filter: (a) (a)
filtro: in ainblock diagram; (b)
un diagramma a graph (b)
a blocchi; of
its frequency response.
un grafico della sua risposta in frequenza.

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

8.1.1 Filtri passa-basso


Low-pass e passa-alto
and high-pass filters
Lo scopo
By far thedimost
gran frequent
lunga piùpurpose
frequente forper l’utilizzo
using a filterdiisun filtro è quello
extracting eitherditheestrarre
low-
una porzione
frequency a bassa
or the frequenza portion
high-frequency o ad alta frequenza
of an di unattenuating
audio signal, segnale audio, atte-
the rest.
nuando
This il resto. Ciò siusing
is accomplished ottiene utilizzando
a low-pass un filtro filter.
or high-pass passa-basso (low-pass filter)
o unIdeally,
filtro passa-alto
a low-pass (high-pass
or high-pass filter).
filter would have a frequency response of one
up toIdealmente,
(or down to) un afiltro passa-basso
specified o passa-alto
cutoff frequency anddovrebbe
zero past avereit; butunasuchrisposta
filters
in frequenza
cannot in su in
be realized (opractice.
in giù) fino a unawefrequenza
Instead, try to finddirealizable
taglio (cutoff frequency)
approximations
specificata,
to this ideale response.
zero passataThequesta;
more designma tali filtriand
effort noncomputation
possono essere timerealizzati
we put
in pratica.
into Invece,wecerchiamo
it, the closer can get. di trovare approssimazioni realizzabili di questa
risposta
Figureideale. Maggiore
8.2 shows è lo sforzoresponse
the frequency di progettazione
of a low-passe il tempo
filter. di calcolo che
Frequency is
abbiamointo
divided messo in esso,
three bands, tanto più ci
labeled onpossiamo avvicinare.
the horizontal axis. The passband is the
La Figura
region (frequency 8.2 mostra
band) wherela risposta in frequenza
the filter should pass di units filtro
inputpassa-basso.
through to its La
frequenza
output withè suddivisa
unit gain.inFor treabande,
low-pass etichettate
filter (as sull’asse
shown), orizzontale.
the passbandLareaches banda
passante
from è la regione
a frequency (banda
of zero up todia frequenza)
certain frequencyin cui limit.
il filtroFordeve lasciar passare
a high-pass filter,
con passband
the guadagnowould unitario il suo
appear oninput verso la sua
the right-hand uscita.
side of the Per
graph unandfiltro passa-basso
would extend
(comethe
from mostrato),
frequencylalimit banda up passante
to the highestva dalla frequenza
frequency zero fino
possible. Anyadrealizable
una cer-
ta frequenza
filter’s passband limite.
will bePeronly
un approximately
filtro passa-alto, flat;la the
banda passante
deviation from apparirà
flatnesssulis
lato destro
called del grafico
the ripple, and iseoften
si estenderà
specifieddalla frequenza
by giving limite
the ratio fino alla
between themassima
highest
frequenza possibile. Ogni banda passante realizzabile del filtro sarà solo ap-
prossimativamente piatta (flat); la deviazione dalla piattezza è 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:
Figure 8.2: Terminology
Terminologiaforperdescribing
descriverethe la risposta
frequencyin response
frequenzaofdei filtri passa-
low-pass and
basso e passa-alto.
high-pass filters. TheL’asse orizzontale
horizontal axis isèfrequency
la frequenza
andethe l’asse verticale
vertical axis èisilgain.
gua-
Adagno. Viene
low-pass visualizzato
filter is shown; aun filtro passa-basso;
high-pass filter has theunsame
filtrofeatures
passa-alto ha le stesse
switched from
caratteristiche
right to left. commutate da destra a sinistra.

La stopband (fascia di arresto) di un filtro passa-basso o passa-alto è la


banda di frequenza in cui il filtro non trasmette il suo input. L’attenuazione
della stopband è la differenza, in decibel, tra il guadagno più basso nella banda
passante e il guadagno più alto nella stopband. Idealmente questo sarebbe
infinito; più sarà alto, migliore sarà il filtro.
Infine, un filtro realizzabile, la cui risposta in frequenza è sempre una fun-
zione continua della frequenza, deve avere una banda di frequenza su cui il gua-
dagno scende dal guadagno della banda passante al guadagno della stopband;
questa si chiama banda di transizione (transition band). Più sottile questa banda
può essere fatta, più il filtro sarà 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ù semplice per la de-
scrizione 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à del
212 Capitolo 8. Filtri
226 CHAPTER 8. FILTERS

ripple

stopband
attenuation

passband
stopband

stopband transition
bands

Figure
Figura 8.3:
8.3: Terminology
Terminologiaforperdescribing
descriverethe
la frequency
risposta inresponse
frequenza of dei
band-pass and
filtri passa-
stop-band filters. The horizontal axis is frequency and the vertical axis
banda ed elimina-banda. L’asse orizzontale è la frequenza e l’asse verticale è is gain.
A
il band-pass
guadagno. filter is shown;
Viene a stop-band
visualizzato filter
un filtro would haveun
passa-banda; a contiguous stopband
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
bandwidthnot to transmit its input. The stopband attenuation
is the difference, 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
A band-pass filter admits frequency
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
Figura 8.4:
rejecting 8.4: AUna
simplified
frequencies within
vista view of a band-pass
the band
semplificata and letting
di un filter,
filtro showing
through bandwidth
frequencies
passa-banda, and
che outside
mostra it.
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
Figura8.5:
8.5:AUn
shelving filter, showing
filtro shelving, low and
che mostra il high frequency
guadagno gain,
a bassa and crossover
e alta frequenza
frequency.
e la frequenza di crossover.

guadagno di potenza del picco (vale a dire, il guadagno è entro 3 decibel del
suo massimo). La larghezza di banda è la larghezza, in unità di frequenza, della
banda passante. La frequenza centrale è il punto di massimo guadagno, che è
approssimativamente il punto medio della banda passante.
bandwidth
8.1.3 Filtri di equalizzazione
in-band
In alcune applicazioni, come l’equalizzazione,
gain l’obiettivo non è quello di passare
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
out-of-band l’estremità bassa o alta della gamma delle frequenze. Al di
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
frequenza possonocenter frequency
essere regolati indipendentemente.
In secondo luogo, un peaking filter (filtro di picco, Figura 8.6) è in grado di
aumentare o attenuare i segnali entro un intervallo di frequenze. La frequenza
Figure
centrale8.6:
e laAlarghezza
peaking filter, with(che
di banda controllable center frequency,
insieme controllano bandwidth,
l’intervallo and
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 rego-
lare le estremità 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
Figura8.6:
8.6:A Un
peaking
filtrofilter, with con
peaking, controllable
frequenzacenter frequency,
centrale, bandwidth,
larghezza ande
di banda
in-band and
guadagni out-of-band
in-banda gains. controllabili.
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ù simili a pettini; il
secondo picco scende fino alla frequenza di campionamento, 2π radianti, quando
d = 1. Poiché solo le frequenze tra 0 e la frequenza di Nyquist (π radianti) sono
udibili c’è, in effetti, solo un picco quando d = 1.
Nei filtri a pettine mostrati nel Capitolo 7, i picchi sono situati a DC (fre-
quenza 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ò essere generalizzato per produrre il disegno
mostrato in Figura 8.7. Questo è 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 è
ω = arg(Z). Il campione n−esimo dell’input è Z n e quello dell’output è
(1 − QZ −1 )Z n
quindi la funzione di trasferimento è
H(Z) = 1 − QZ −1 .
Questo può 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 215
8.2. ELEMENTARY FILTERS 229

IN

d=1

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 non-
guadagno complesso Q. Questo è 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
function (whichimaginary
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
Z and non-recirculating. Here
we will be interested in the special case where the delay is only one sample in
length. In this situation, the frequency responses
Q
shown inZ-Q
Figures 7.6 and 7.10
no longer look like combs; the second r peak recedes all the way to the sample
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
real 1 are situated at DC (zero
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 non-
Figura 8.8: Diagramma per il calcolo
(1 − QZ della)Zrisposta in frequenza del filtro ele-
recirculating elementary filter (Figure 8.7). The frequency response is given
mentare non-ricircolante (Figura 8.7). La risposta in frequenza è 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
opposite deloffiltro
point the ècircle.
la distanza dal8.9
Figure punto Q al
shows punto
the Z nelfunction
transfer piano complesso.
for three
Possiamo vedere questo
different values of r = |Q|. analiticamente perché

|1 − QZ −1 | = |Z||1 − QZ −1 | = |Q − Z|.
8.2.2 Non-recirculating filter, second form
Graficamente, il numero QZ −1 è 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 | è 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é la frequenzaAdell’input
= a + bi = spazia da 0 a+2π,
r · (cos(α) il punto Z si muove in senso
i sin(α))
orario attorno al cerchio unitario. Al punto in cui ω = α, la distanza è al
is any complex
minimo, pari a number,
1 − r. Ilits complexsiconjugate
massimo is defined
verifica quando Z èas:
al punto opposto del
cerchio. La Figura 8.9Amostra
= a − bi = r · (cos(α) − i sin(α)) per tre diversi valori
la funzione di trasferimento
di r = |Q|.
Graphically this reflects points of the complex plane up and down across the
real
8.2.2 axis. Filtro
The transfer function of the new
non-ricircolante, filter is forma
seconda
A volte abbiamo bisogno di una H(Z)variante, Z −1
= Q −mostrata in Figura 8.10, del filtro di
cui sopra chiamata filtro elementare non-ricircolante,
This gives rise to the same frequency response as before seconda
since forma. Invece di
moltiplicare l’output di ritardo per Q, moltiplichiamo il segnale diretto per il
coniugato complesso Q.|QSe − Z −1 | = |Q − Z −1 | = |Q − Z|
−1
Here we use the fact that
A =Za= +Z ib =, rfor any unit
· (cos(α) + icomplex
sin(α)) number Z, as can be
verified by writing out ZZ in either polar or rectangular form.
Although
è un the two forms
numero complesso, of coniugato
il suo the elementary non-recirculating
complesso filter have the
è definito come:
same frequency response, their phase responses are different; this will occasion-
a − ib form.
A =second
ally lead us to prefer the = r · (cos(α) − i sin(α)).

Graficamente corrisponde a riflettere i punti del piano complesso in su e in giù


attraverso l’asse reale. La funzione di trasferimento del nuovo filtro è

H(Z) = Q − Z −1 .
232 8.2. Filtri elementari CHAPTER 8. 217FILTERS

IN

Q d=1

OUT

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

Ciò provoca la stessa risposta in frequenza di prima poiché


8.2.3 Elementary |Q
recirculating filter
− Z −1 | = |Q − Z −1 | = |Q − Z|.
The elementary
Qui usiamorecirculating
il fatto che Z = filter
Z −1 , is
perthe recirculating
qualsiasi comb filter
numero complesso of Z,
unitario Figure 7.7
with a complex-valued feedback gain P as shown in Figure 8.11 (part a). By
che si può verificare scrivendo ZZ in forma polare o rettangolare.
Sebbene leasdue
the same analysis forme del
before, filtro elementare
feeding this network non-ricircolante
a sinusoidhannowhosela stes-
nth sample
sa risposta in frequenza, le loro risposte di fase sono diverse; ciò ci porterà,
is Z n gives an output of:
occasionalmente, a preferire la seconda forma.
1
−1
Zn
8.2.3 Filtro elementare1 ricircolante − PZ
so the transfer function ricircolante
Il filtro elementare is è il filtro a pettine ricircolante di Figura 7.7
con un guadagno di feedback P a valori complessi come mostrato in Figura
8.11 (parte a). Con la stessaH(Z)
analisi=
1
di prima, introducendo in questa rete una
sinusoide il cui n−esimo campione è Z n1si−ha Z −1
P un output di
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 è
The transfer function is thus just the inverse of that of the non-recirculating
1
filter (first form). If you put the H(Z)two = in series
1 − P Z −1
. with P = Q, the output the-
oretically equals the input. (This analysis only demonstrates it for sinusoidal
Il filtro ricircolante è stabile quando |P | < 1; quando, invece, |P | > 1 l’output
inputs; that
cresce it follows for other
esponenzialmente quandosignals as well
il campione canricircola.
ritardato be verified by working out
the impulseLaresponse
funzione dioftrasferimento
the combined network).
è quindi esattamente l’inverso di quella del
filtro non-ricircolante (prima forma). Se mettiamo i due in serie con P = Q,
l’output è teoricamente uguale all’input (questa analisi mostra ciò solo per gli
8.2.4 Compound
input sinusoidali; chefilters
si applichi anche ad altri segnali può 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 Filtrifilter by putting several elementary ones in series. If the
composti
parameters
Possiamo utilizzare i filtri ricircolantiones
of the non-recirculating (of the first
e non-ricircolanti, quitype) are per
sviluppati, Q1crea-
, . . . , Qj and
those of rethe
un recirculating ones areinPserie
filtro composto mettendo 1 , . . .più
, Pfiltri
k , then putting
elementari. Se them all indiseries, in
i parametri
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 233
Capitolo 8. Filtri

IN
|P|=0.75

0.5
OUT

d=1

0
P

0 frequency 2

(a) (b)

Figura 8.11: Il filtro elementare ricircolante: (a) diagramma a blocchi; (b)


Figure 8.11:
risposta The elementary recirculating filter: (a) block diagram; (b) fre-
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à:
−1
8.2.5 Real outputs from
(1 − Qcomplex
1Z − Qj Z −1 )
) · · · (1filters
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
La risposta in frequenza del filtro composto risultante è il prodotto a transferdifunction as
quelle dei
above will give a complex-valued output. However, we can construct
filtri elementari (si potrebbe anche combinare filtri elementari sommando i loro filters with
non-real-valued
outputs o facendo, coefficients
con essi,which nonetheless
reti più complicate; givemareal-valued outputs,
per la maggior parteso degli
that
the analysis that we carry out using complex numbers can
scopi la configurazione in serie è quella più semplice da utilizzare). be used to predict,
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
the complex Outputs
conjugatereali da filtri complessi
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-
sto con una funzione H(Z) di trasferimento
= (1 − QZ −1 come
) · (1sopra
− QZdarà
−1 un output complesso.
)
Tuttavia, possiamo costruire filtri con coefficienti a valori non reali che tuttavia
which has the
forniscono property
outputs that: reale, in modo che l’analisi che realizziamo usan-
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ò associando ad ogni
filtroifelementare
Now we put any(con il coefficiente
real-valued P o Q) un altro che ha come coefficiente il
sinusoid:
coniugato complesso P o Q. n n n
Ad esempio, mettereXnin=serie 2 re(AZ ) = AZ
due filtri + AZ
non-ricircolanti, con coefficienti Q e
Q,get
we fornisce
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à che


H(Z) = H(Z).
8.2. Filtri elementari 219

Ora, se vi introduciamo una sinusoide valori reali:


n
Xn = 2re(AZ n ) = AZ n + AZ

otteniamo
n
A · H(Z) · Z n + A · H(Z) · Z
che, analizzandola, risulta un’altra sinusoide reale. Qui stiamo utilizzando due
proprietà dei coniugati complessi. Innanzitutto, possiamo sommarli e moltipli-
carli 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 è 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, è 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, è possibile evitare l’elabora-
zione 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
h i
a[n] = re 1−P1Z −1 AZ n + 1−P1Z −1 AZ −n
h i
1 n 1
= re 1−P Z −1 AZ + 1−P Z −1
AZ n
h i
2−2re(P )Z −1
= re (1−P Z −1 )(1−P Z −1 )
AZ n
h −1 i
1−re(P )Z −1 1−re(P )Z −n
= re (1−P Z −1 )(1−P Z −1 )
AZ n + −1 −1 AZ
(1−P Z )(1−P Z )

(nel secondo passaggio abbiamo usato il fatto che si può 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:

im(P )Z −1
Him (Z) = .
(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ò essere ripetuta per un qual-
siasi numero di iterazioni in serie finché 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 è 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 non-
ricircolanti può 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 è 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 cia-
scuno 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 è chiamata, senza troppa immaginazione, diagramma
polo-zero (pole-zero plot).
Quando Z è vicino ad uno zero, la risposta in frequenza tende a diminuire
e quando è vicino ad un polo, la risposta in frequenza tende ad aumentare.
L’effetto di un polo o di uno zero è più pronunciato, e anche più locale, se è
vicino al cerchio unitario su cui Z è 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ò 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ù ampiamente utilizzati nella musica elettronica. La teoria della progettazione
dei filtri digitali è vasta e qui daremo solo un’introduzione. Un trattamento più
approfondito è disponibile online, grazie a Julius Smith, su ccrma.stanford.edu.
Si può vedere anche [Ste96] per un’introduzione al filtraggio dal punto di vista
più 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 è
236 CHAPTER 8. FILTERS
8.3. Progettazione dei filtri 221

half-power
point

0 2

(b)
(a)

Figura 8.12: One-pole


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

8.3.1
che One-pole
un filtro a pettinelow-pass
ricircolante filter
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ù vicino al punto p. Qui il guadagno è
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
at 1a −
di p verso of
frequency l’alto
zero,o corresponding
verso il √bassotodall’asse
the pointrealeon the (orizzontale),
circle closestlatodistanza
the
aumenta di un fattore di circa 2 e quindi
point p. The gain there is 1/(1 − p). Assuming p is close to one,ci aspettiamo che ilif punto
we move di ametà
potenza
distance venga
of 1 − pottenuto
units upad or una
down frequenza angolare di circa 1 − p.
√ from the real (horizontal) axis, the distance
Questo calcolo è spesso
increases by a factor of about 2, and fatto in senso
so weinverso:
expect the se half-power
vogliamo che pointil to
punto
di metà potenza si trovi ad una
occur at an angular frequency of about 1 − p. determinata frequenza angolare ω, poniamo
p =This 1 −calculation
ω. Questa is approssimazione
often made in reverse: funzionaif webene
wish solo se il valore
the half-power pointdi ω è
ben
to liesotto
at a π/2,
givencome
angular spesso accadeω,inwepratica.
frequency set p = Si 1− è ω.
soliti
Thisnormalizzare
approximation il filtro
passa-basso
only works well a unifpolo, moltiplicandolo
the value of ω is well per underil fattore it often 1is−inp practice.
π/2, ascostante per ottenere
It isguadagno
un customarydito1 normalize
alla frequenza the one-pole low-pass filter,
zero; frequenze multiplying
non-nulle avranno it by the un
quindi
constant factor
guadagno 1 − ap uno.
inferiore in order to give a gain of 1 at zero frequency; nonzero
frequencies
La risposta will then get a gainè less
in frequenza than one. in Figura 8.12 (parte b). Le fre-
rappresentata
quenzeThe udibili
frequency response is
raggiungono graphed
solo la metà in del
Figure 8.12il(part
grafico; b). The
lato destro audible
della curva di
frequencies
risposta only reachsitotrova
in frequenza the middle of thedella
al di sopra graph; the right-hand
frequenza di Nyquist sideπ.
of the
frequency
Il filtroresponse
passa-basso curve all polo
a un lies above
vienethe Nyquist
spesso frequency
utilizzato π.
per cercare andamenti in
segnali rumorosi. Ad esempio, se si utilizza un controller fisico e signals.
The one-pole low-pass filter is often used to seek trends in noisy For
ci si preoccupa
instance, if you use a physical controller and only care
solo di modifiche nell’ordine di 1/10 di secondo, è possibile regolare i valori about changes on the con
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à potenza è 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
è udibile ma, poiché specifica la potenza elettrica che viene inviata agli altopar-
lanti, la sua presenza riduce il livello di volume che è possibile raggiungere senza
222 Capitolo 8. Filtri
8.3. DESIGNING FILTERS 237

(b)
(a)

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

distorsioni.
8.3.2 Un altro nome
One-pole, per una
one-zero componente
high-pass di segnale costante è “DC”, che
filter
significa “direct current”.
Un modo
Sometimes an semplice
audio signale pratico
carriesper
an rimuovere
unwanted la componente
constant offset, di
orfrequenza
in other zero
da un segnale audio è quello di utilizzare un filtro passa-basso
words, a zero-frequency component. For example, the waveshaping spectra ad un polo
of per
estrarla e quindi sottrarre il risultato dal segnale originale.
Section 5.3 almost always contain a constant component. This is inaudible, La funzione di
trasferimento
but, risultante
since it specifies è 1 meno
electrical power la funzione
that di your
is sent to trasferimento delpresence
speakers, its filtro passa-
basso: the level of loudness you can reach without distortion. Another name
reduces
for a constant signal component 1−p 1 − Z −1
H(Z) = 1is−“DC”, meaning = p “direct current”.
.
1 − pZ −1 1 − pZ −1
An easy and practical way to remove the zero-frequency component from an
Il fattore
audio −to
signal1 is p nel
use numeratore della funzione
a one-pole low-pass di trasferimento
filter to extract it, and thenpassa-basso
subtract è il
fattore
the di from
result normalizzazione necessario
the signal. The in modo
resulting chefunction
transfer il guadagno
is onesia 1 a frequenza
minus the
zero. function of the low-pass filter:
transfer
Esaminando il lato destro dell’equazione (confrontandolo con la formula ge-
nerale dei filtri composti), vediamo
1 −che
p c’è ancora un polo nel numero reale p,
1 − Z −1
e adesso c’è anche H(Z)
uno zero −
= 1 (one-zero) =
nel p
punto
1 − pZ −1 1 − pZ −1 Il diagramma polo-zero è
1.
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
p,8.3.3
and thereFiltro
is now shelving
also a zero at the point 1. The pole-zero plot is shown in
Figure 8.13 (part a),
Generalizzando il filtro and the frequency
ad un polo e response
uno zeroin(one-pole
part (b). one-zero)
(Henceforth, wesopra,
visto
will only plot frequency responses to the Nyquist frequency π; in
supponiamo di mettere lo zero in un punto q, un numero reale vicino, ma in- the previous
example
feriore, we
a 1.plotted it all
Il polo, al the wayp,upè to
punto inthe sample rate,
posizione simile2π.)
e può essere maggiore o
minore di q, cioè rispettivamente a destra o a sinistra, ma con entrambi q e p
all’interno del cerchio unitario. Questa situazione è 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à un
guadagno maggiore o minore di uno a seconda di chi, tra p e q sia più vicino
8.3. Progettazione dei filtri 223
238 CHAPTER 8. FILTERS

imaginary

1-d

q p real

0 d

(b)
(a)

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

8.3.3 Shelving
al cerchio. filter
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
similarly situated,i parametri
and mightdibeuneither
filtrogreater
shelving, data
than una than
or less frequenza
q, i.e.,ditotransi-
the
zione desiderata ω (in unità angolari) e un guadagno per
right or left, respectively, but with both q and p within the unit circle. la bassa frequenzaThis g,
innanzitutto
situation scegliamo una
is diagrammed distanza
in Figure media d, come mostrato in figura, dal polo
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
è 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
√ √
hand, Quindi mettiamo
the filter will haveil polo
a gainingreater
p = 1or − less
d/ thang e lo
onezero in q = on
depending 1− d g.of Il
which
pguadagno a frequenza
or q is closer zero This
to the circle. è allora
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
ωcome desiderato.
(in angular units)Ad andesempio, in figura,
low-frequency gaindg,è first
0.25 we
radianti
chooseean g average
è 2. distance
d, as pictured in the figure, from the pole and the zero to the edge of the circle.
For
8.3.4 small Filtro
values ofpassa-banda
d, the region of influence is about d radians, so simply set
d = ω to get the desired transition frequency.
Partendo dai the
tre pole
tipi di √ √ poli e zeri a
Then put atfiltri
p = 1mostrati
− d/ g in andprecedenza,
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 passa-
banda, elimina-band e peaking. In primo luogo sviluppiamo il filtro passa-
banda. 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
Capitolo 8. 239
Filtri

P
1

P
2
0

(b)
(a)

Figure 8.15:
Figura 8.15: Two-pole band-pass filter:
Filtro passa-banda a due(a) pole-zero
poli: diagram; (b)
(a) diagramma frequency
polo-zero; (b)
response.
risposta in frequenza.

at zero
suo polofrequency is then
si trova, per valori piccoli di β, approssimativamente su p = 1 − β. Ora
1−q
ruotiamo questo valore di ω radianti nel = piano
g complesso, cioè 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
Per Band-pass
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
and zeros, we now transform − operate
= (1to on −
β)(cos(ω) i sin ω)).
bands located off the real axis.
IlThe low-pass, polo-zero
diagramma high-pass,risultante
and shelving filters will
è mostrato in then become
Figura 8.15. band-pass, stop-
band,
Il picco è approssimativamente (non esattamente) allafilter.
and peaking filters. First we develop the band-pass Suppose
frequenza we
centrale
want a center frequency at ω radians and a bandwidth of β. We
desiderata ω, e la risposta in frequenza scende di 3 decibel a circa β radianti altake the low-
pass
di filter
sopra e alwith cutoff
di sotto di frequency β; èitsauspicabile
essa. Spesso pole is located, for small
normalizzare values
il filtro perofavere
β,
roughly at p = 1 − β. Now rotate this value by ω radians in the complex
un guadagno di picco vicino all’unità; questo viene fatto moltiplicando l’input o plane,
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
Per a real-valued
alcune output,
applicazioni this must aggiungere
è auspicabile be paired with
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
The resulting peaking
pole-zero plot ised elimina-banda
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 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 225
240 CHAPTER 8. FILTERS

(b)
(a)

Figure 8.16:
Figura 8.16: Un
A peaking
filtro difilter:
picco:(a)(a)
pole-zero diagram;
diagramma (b) frequency
polo-zero; response.
(b) risposta in fre-
Here the filter is set to attenuate by 6 decibels at the center frequency.
quenza. Qui il filtro è 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β ∗il(βguadagno
+ 2ω) è zero sulla frequenza centrale.
Questo è 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
In the con way,
un polo reale e filter
a peaking uno zero reale può
is obtained essere
from configurato
a shelving filtercome un filtro
by rotating
shelving,
the pole and the zero, and by providing a conjugate pole and zero, as shown inun
come un filtro passa-alto (mettendo lo zero nel punto 1) o come
filtro
Figure passa-basso
8.16. If the(mettendo lo zero
desired center in −1).isLe
frequency ω, risposte in frequenza
and the radii di questi
of the pole and
filtri
zero sono
(as forabbastanza
the shelving smussate;
filter) areinpaltre parole,
and q, then wele regioni
place the di the
transizione
upper polesono
ampie.
and zeroSpesso
at è auspicabile ottenere un filtro più nitido, sia shelving, passa-
basso o passa-alto, in cui le due P1 =bande siano
p · (cos ω + più
i sinpiatte
ω) e separate da una regione
di transizione più ristretta.
Q1 = q · (cos ω + i sin ω)
Una procedura presa in prestito dal mondo dei filtraggio analogico trasforma
As a reali,
filtri specialadcase, placing
un polo thezero
e uno zero nei
on corrispondenti
the unit circle gives a stop-band
filtri di filter;
Butterworth, che
in this regioni
hanno case thedigain at the center
transizione frequency
più strette. is zero.
Questa This is èanalogous
procedura descrittatochiara-
the
one-pole,
mente one-zero
ed in maniera high-pass
elegantefilter above. capitolo di [Ste96]. Il modo di ottenerli
nell’ultimo
richiede un background matematico maggiore di quello che abbiamo sviluppato
qui
8.3.6e noi semplicemente
Butterworth mostreremo
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 è 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, α è 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 è semplicemente il punto in cui il cerchio interseca
la circonferenza unitaria, corrispondente a α = π/2. Questo dà 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 ra-


zionali
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à superiore; ma se vogliamo preservare l’alta qualità del
filtro di Butterworth dobbiamo essere molto più attenti di prima nella proget-
tazione 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 è adattata da [PB87, pp. 201-206] (sono grato a Julius
Smith per questa indicazione). In [PB87] la trasformazione è effettuata in tempo
continuo, ma qui abbiamo adattato il metodo per operare in tempo discreto, al
fine di rendere la trattazione più contenuta.
L’idea è quella di iniziare con qualsiasi filtro con una funzione di trasferi-
mento come prima:
(1 − Q1 Z −1 ) · · · (1 − Qj Z −1 )
H(Z) =
(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 /8
r=1
r=2 r=0.5
= /8
= - /8
= 3 /8
= -3 /8
= /8
= - /8

= -3 /8

Figure 8.17: Replacing


Figura a real-valued
Sostituzione di un polo pole
o unoorzero
zeroreale
(shown as a solid
(mostrato dot)unwith
come an
punto
array of four of them (circles) as for a Butterworth filter. In this example
nero) con un array di quattro punti (cerchi) come per un filtro di Butterworth. we
getquesto
In four new polesotteniamo
esempio or zeros asquattro
shown,nuovi
lyingpoli
along thecome
o zeri circlemostrato,
where r = 0.5.
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
low-pass
(b)
(a) 0
(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) fre-
Figure 8.18: Butterworth low-pass filter with three poles and three zeros: (a)
Figura
quency
pole-zero8.18:
plot.Filtro
responses Thefor passa-basso
fourare
poles filters di for
with
chosen Butterworth
the conconfiguration,
same frequency
a cutoff pole tre βpoli e tre(b)
= π/4; zeri:
with (a) dia-
fre-different
gramma
placements polo-zero.
of zeros
quency responses I poli
(but
for four sono
leaving
filters scelti
the
with per fixed).
thepoles
same una
pole frequenza
configuration, di with
The low-pass taglio
filterβresults
= π/4;from
different (b)
setting
risposte
placementsβin=of πzeros
for (but
frequenza theper zeros;
leaving thepoles
quattro
the two shelving
filtrifixed).
con la The filters
stessa
low-passcorrespond
configurazione
filter resultstofrom
β =
di 3π/10
poli, con
and β=
diverse
setting 2π/10,
= π for and
βcollocazioni finally
the degli
zeros; zerithe
the (ma
twohigh-pass
lasciando
shelving filter iscorrespond
i poli
filters obtained
fissati). tosetting
Il βfiltro βpassa-basso
= 3π/10 = 0. The
high-pass
corrisponde filter
and β = 2π/10, ad andis normalized
impostare
finally the for unitglifilter
β =high-pass
π per gain
zeri;isatiobtained
the filtri
due Nyquist frequency,
shelving
setting 0. Theand the
β = corrispondono
high-pass
aothers forfilter
β = 3π/10 unite is normalized
βgain
= at DC.e for
2π/10 unitil gain
infine filtroatpassa-alto
the Nyquist frequency,
viene ottenuto andimpostando
the
βothers
= 0. forIl unit
filtrogain at DC. viene normalizzato per avere guadagno unitario alla
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 ω) è 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 fun-
zione razionale significa che può essere scritta come un quoziente di due polinomi
(ad esempio, la funzione di trasferimento H è una funzione razionale). Richie-
dere che R mandi punti del cerchio unitario su altri punti del cerchio unitario
corrisponde alla condizione che |R(Z)| = 1 ogni volta che |Z| = 1. È possibile
verificare facilmente che qualsiasi funzione della forma

An Z n + An−1 Z n−1 + · · · + A0
R(Z) = U ·
A0 Z n + A1 Z n−1 + · · · + An

(dove |U | = 1) ha questa proprietà. 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 sem-
plicemente 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 ω è 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, è


uguale ad H sul punto da cui R si è 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

1 · Z2 + 0 · Z + 0
R(Z) = −Z 2 = − .
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 è

1 − Z −2 (1 − Z −1 )(1 + Z −1 )
J(Z) = −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 è più alto) diventano punti di maggiore
guadagno per il nuovo filtro.
8.3. Progettazione dei filtri
244 229
CHAPTER 8. FILTERS

(a) (b)

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

8.3.8
and applyFiltro passa-banda di Butterworth
the function
Possiamo applicare la trasformazione R(Z) −Z02· Z
1 · Z=2 + per+ convertire
0 il filtro di
2
R(Z)
Butterworth in un filtro = −Z =
passa-banda di −
alta qualità con frequenza centrale π/2.
0 · Z 2 + 0 · Z per
È quindi possibile applicare un’ulteriore trasformazione + 1spostare la frequen-
za centrale su qualsiasi
Geometrically, valore
this choice of Rdesiderato
stretchesωthe tra unit
0 e π.circle
La trasformazione sarà its
uniformly to twice
della forma
circumference and wraps it around itself The points 1 and −1 are both
aZ twice.
+b
sent to the point −1, and theS(Z) = i and −i are sent to the point 1. The
points
bZ + a
resulting transfer function is
dove a e b sono numeri reali e non entrambi possono essere uguali a zero. Questo
è un caso particolare della 1− Z −2 generale (1
forma − Z −1
fornita sopra Z −1
per
)(1 + le funzioni
) razionali
J(Z) =
che preservano il cerchio unitario.
−2
= Si ha √
S(1) =−11 e √ =−1−1 e le metà
S(−1)
1 + gZ (1 − i gZ )(1 + i gZ )
superiore e inferiore del cerchio unitario vengono trasformate simmetricamente
(se Z
The va su Wplots
pole-zero , allora
of ZH va su JWare
and ). L’effetto
shown inqualitativo dellaFrom
Figure 8.19. trasformazione
a low-passSfilter
è 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,
(where the originaldata unagain
filter’s frequenza centrale
is highest) desiderata
become pointsω,ofvogliamo
highest scegliere
gain for the
S in modo che:
new filter.
S(cos(ω) + i sin(ω)) = i.
2
Se consideriamo
8.3.8 R = −Z come
Butterworth prima, e siafilter
band-pass H la funzione di trasferimento per
un filtro passa-basso di Butterworth, allora il filtro combinato, con funzione di
We can applyH(R(S(Z))),
trasferimento the transformation R(Z)
sarà un filtro = −Z 2 to
passa-banda conconvert thecentrale
frequenza Butterworth
ω.
filter into a per
Risolvendo high-quality
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
π ω π ω
value ω between 0 andaπ. = The − ), b = sin( will
cos( transformation − be ). of the form,
4 2 4 2
La nuova funzione di trasferimento, aZ + b avrà 2n poli e 2n zeri (se n è
H(R(S(Z))),
S(Z) =
il grado del filtro di Butterworth H). bZ +a
230
246 CHAPTER 8.Capitolo
FILTERS8. Filtri

3 3

(a) (b)

Figure 8.20:
Figura Butterworth
8.20: band-pass di
Filtro passa-banda filter: (a) pole-zero
Butterworth: (a)diagram; (b) frequency
diagramma polo-zero; (b)
response.
risposta in frequenza. La frequenza centrale è π/4. La larghezza dionbanda
The center frequency is π/4. The bandwidth depends both centerdipen-
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
gain is la funzione
close to one. di trasferimento
For example, suppose we è una
havebuona cosa, ma
a one-pole è ancora
low-pass filtermeglio
with gain 0.99 (for a cutoff frequency of 0.01 radians, or 70 Hertz at the usualessere
conoscere le posizioni di tutti i poli e gli zeri del nuovo filtro, che dobbiamo
in grado
sample di To
rate). calcolare usando
normalize filtri
this for elementari.
unit DC gain we Semultiply
Z è un bypolo della
0.01. funzione di
Suppose
trasferimento
now we wish to J(Z)double=theH(R(S(Z))),
cutoff frequency cioè by
se changing
J(Z) = the ∞ allora R(S(Z))
gain slightly to deve
essere
0.98. un ispolo
This finediexcept
H. Lothatstesso
the vale per gli zeri.
normalizing factorPer trovaredoubles.
suddenly un polo oIf uno
we zero
di J, poniamo
multiply R(S(Z))
the filter’s output =by Wthe, dove W è unfactor,
normalizing polo the
o uno zero will
output di H e risolviamo
suddenly,
although
rispettoperhaps only momentarily,
a Z. Questo dà: jump by a factor of two.
The trick is to normalize at the input h of the i2 filter, not the output. Figure 8.21
aZ+b

(part a) shows a complex recirculatingbZ+a = Wfeedback gain P , normalized
filter, with
at the input by 1 − |P | so that the peak gain is one. Part (b) shows the wrong

way to do it, multiplying at the output. aZ+b
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
Z = ±a √ −W −b
∓b if−W
all the coefficients. One possible approach, such +aa filter is required to change
rapidly, is to normalize each input separately as if it were acting alone, then
(qui a e b the
multiplying sono definiti
output, comebysopra
finally, e abbiamo
whatever further usato il fatto
correction che a2 + b2 = 1).
is needed.
Nella figura 8.20 è 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
Nella low-pass filtersdiand one filtri
alcuni complex one-pole
ricorsivi, resonant
cambiare filter. All del
i coefficienti are filtro
ele- può
mentary recirculating filters as introduced in Section 8.2.3. Each is normalized
inserire energia nel sistema. Un analogo fisico è 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, è
possibile inserire una quantità imprevedibile di energia nel sistema. La stessa
cosa può accadere quando si cambiano i coefficienti in un filtro ricircolante
risonante.
8.3. Progettazione
8.3. DESIGNING dei filtri
FILTERS 231
247

IN
IN
1-|P|

1-|P|
OUT d=1
OUT
d=1

P
P

(a - right) (b - wrong)

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

I filtri
to have semplici
unit maximum ad un polo e uno zero usati qui non hanno questa difficoltà;
gain.
se ilInguadagno
the case of a low-passo filter,
di feedback di feed-forward
the impulse viene modificato
response regolarmente
gets longer (and lower)(nel
senso di un inviluppo di ampiezza) anche l’output si
as the pole gets closer to one. Suppose the pole is at a point 1 − 1/n (so thatcomporterà in modo rego-
lare.cutoff
the Ma una sottigliezza
frequency is 1/n si radians).
presenta quando si cerca di factor
The normalizing normalizzare l’output
is also 1/n. di
After
un filtro ricorsivo quando il guadagno
n points, the output diminishes by a factor of di feedback è vicino a uno. Ad esempio,
supponiamo di avere un filtro passa-basso a un polo con guadagno 0.99 (per una
frequenza di taglio di 0.01 radianti, ! o 70 "n
1 Hertz 1 all’usuale frequenza di campio-
namento). Per normalizzarlo per il guadagno 1 − ≈ unitario di DC, moltiplichiamo
n e
per 0.01. Supponiamo ora di voler raddoppiare la frequenza di taglio cambian-
do leggermente
where e is Euler’silconstant,
guadagnoabout a 0.98.
2.718.Questo va bene,
The filter can be tranne
said to che il fattore
have di
a settling
normalizzazione improvvisamente raddoppia. Se si moltiplica
time of n samples. In the figure, n = 5 for part (a) and n = 10 for part (b). l’output del filtro
pergeneral,
In il fattore thedisettling
normalizzazione, l’output is
time (in samples) improvvisamente,
approximately one anche oversethe
forse solo
cutoff
temporaneamente,
frequency (in angular units).salta di un fattore di due.
Il trucco
The è quello
situation getsdimore
normalizzare
interesting l’input
when delwefiltro,
lookl’output. La Figura
at a resonant 8.21
one-pole
(parte a) mostra un filtro ricircolante complesso, con guadagno
filter, that is, one whose pole lies off the real axis. In part (c) of the figure, the di feedback P,
normalizzato all’input da 1 − |P | in modo che il guadagno
pole P has absolute value 0.9 (as in part b), but its argument is set to 2π/10 di picco sia uno. La
parte (b)We
radians. mostra
get theil modo
samesbagliato
settling timeper farlo,
as in moltiplicando
part (b), but the all’output.
output rings at
the Le cose diventano
resonant frequencypiù complicate
(and quandoofdiversi
so at a period 10 samples filtri elementari ricircolanti
in this example).
vengono messi in serie, poiché il fattore di normalizzazione corretto è, in gene-
A 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 è richiesto
the filter decays to strength 1/e? If the pole of a resonant filter has magnitude
che tale filtro cambi rapidamente, è quello di normalizzare ciascun input sepa-
1 − 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 è 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
Figure 8.22: La risposta
8.22: The impulse all’impulso
response of di tre elementary
three filtri elementari ricircolanti
recirculating (a un
(one-pole)
polo), normalizzati per guadagno di picco 1: (a) passa-basso con P =
filters, normalized for peak gain 1: (a) low-pass with P = 0.8; (b) low-pass with 0.8; (b)
passa-basso con P = 0.9; (c) passa-banda (mostrata solo la parte
P = 0.9; (c) band-pass (only the real part shown), with |P | = 0.9 and a centerreale), con
|P | = 0.9 e of
frequency una frequenza centrale di 2π/10.
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 è normalizzato per avere guadagno massimo unitario.
Nel caso di un filtro passa-basso, la risposta all’impulso diventa più lunga
(e più 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 è 1/n. Dopo n punti, l’output diminuisce di un
fattore pari a
 n
1 1
1− ≈
n e

dove e è la costante di Eulero, pari a circa 2.718. Si può 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) è di circa l’inverso della frequenza di taglio (in unità angolari).
8.3. Progettazione dei filtri 233

La situazione diventa più interessante se si guarda un filtro risonante a un


polo, cioè un filtro il cui polo è 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 è
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 è: 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) è di circa 1/n e vediamo qui che il tempo di stabiliz-
zazione è di circa n . La frequenza di risonanza (chiamiamola ω) è l’argomento
del polo e il periodo in campioni della risonanza è 2π/ω. Il numero di periodi
che compongono il tempo di stabilizzazione è quindi
n 1 ω q
= =
2π/ω 2π b 2π
dove q è la qualità 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ò 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à 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ù 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 è stato immesso attraverso un filtro a uno zero, reale
o complesso, l’effetto può essere invertito applicando sequenzialmente un filtro
a un polo, e viceversa.
Il secondo fatto è 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 ricir-
colante 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 è costante.
Per trovare la funzione di trasferimento, scegliamo lo stesso numero com-
plesso P , con |P | < 1, come coefficiente per entrambi i filtri elementari e
moltiplichiamo le loro funzioni di trasferimento:
P − Z −1
H(Z) = .
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 CHAPTER 8. FILTERS
234 Capitolo 8. Filtri

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
campione. pole is located at zero, the filter reduces to a one-sample delay.
the

per quattrosample
crossovers, scelte p, a valori
rate reali, del
converters, andcoefficiente.
DC removalA(which
frequenze
we pari
have aalready
0, π e
2π, lain risposta
used di fase è proprio
earlier chapters). quella we’ll
Here, though, di unberitardo di unwith
concerned campione; ma per
the specifically
le frequenze
musical tra questi valori, la risposta di fase è piegata verso l’alto o verso il
applications.
basso a seconda del coefficiente.
I coefficienti complessi forniscono curve di risposta di fase simili, ma le fre-
quenze alle quali attraversano la linea diagonale nella figura vengono spostate
a secondaSubtractive
8.4.1 dell’argomento synthesis
del coefficiente P .

Subtractive synthesis is the technique of using filters to shape the spectral en-
8.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à utilizzato nei capitoli precedenti). Qui, però, ci preoccuperemo
The
delle filter mayspecificatamente
applicazioni be constant or musicali.
time-varying. Already in wide use by the
mid 1950s, subtractive synthesis boomed with the introduction of the voltage-
controlled filter (VCF), which became widely available in the mid 1960s with
8.4.1
the Sintesi
appearance sottrattiva
of modular synthesizers. A typical VCF has two inputs: one for
the sound to filter, and one
La sintesi sottrattiva è la tecnica to vary the center
di usare or modellare
filtri per cutoff frequency of the
l’inviluppo filter.
spettrale
di un suono, use
A popular formando
of a VCF un isaltro suono,the
to control checenter
normalmente
frequencyconserva le qualità
of a resonant filter
del suono
from the sameoriginale,
ADSRcome il tono,
generator thatla rugosità,
controls thela rumorosità
amplitude; oa la granularità.
possible block
L’inviluppo
diagram spettrale
is shown del suono
in Figure 8.25.risultante è il prodotto dell’inviluppo
In this configuration, spettrale
the louder portion of a
del suono
note originale
(loudness con controlled
roughly la risposta by in frequenza del filtro.
the multiplier at theLa Figura may
bottom) 8.24 mostra
also be
una possibile
made to soundconfigurazione
brighter, usingdithe sorgente, filtro the
filter, than e risultato.
quieter parts; this can mimic
the Il filtro può
spectral essereofcostante
evolution strings oro variabile nel tempo.over
brass instruments Già
theinlife
largo
of auso
note.dalla
metà degli anni ‘50, la sintesi sottrattiva è emersa con l’introduzione del filtro
controllato dalla tensione (VCF, da voltage-controlled filter), che è diventato
ampiamente disponibile alla metà degli anni ‘60 con la comparsa dei sintetiz-
zatori 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
Figura 8.24:
8.24: Subtractive synthesis:
Sintesi sottrattiva: (a)(a) spectrum
spettro of input
del suono sound; (b)
in ingresso; (b)filter fre-
risposta
quency response;
in frequenza (c) spectrum
del filtro; of output
(c) spettro sound.
del suono in uscita.

Un uso popolare di un VCF è quello di controllare la frequenza centrale di


un filtro risonante tramite lo stesso generatore ADSR che controlla l’ampiez-
za; un possibile diagramma a blocchi viene mostrato in Figura 8.25. In questa
configurazione, la parte più forte di una nota (la rumorosità controllata ap-
prossimativamente dal moltiplicatore in basso) può anche essere resa più nitida,
usando il filtro, rispetto alle parti più silenziose; questo può 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 è 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é la maggior parte dei segnali audio passa attraverso lo zero molte volte al
secondo, non è 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ò 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 è 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]) è 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 a2 fare una media mobile del quadrato
2
di un segnale audio utilizzando x[n] =il diagramma
(cos(2αn)di+ Figura
1) 8.26. L’output è una
2
media variabile nel tempo della potenza istantanea x[n]2 e la struttura del filtro
and so if thecontrolla,
passa-basso low-passtrafilter effectively
l’altro, il tempostops the component
di stabilizzazione of media
della frequency 2α
mobile.
we will
Per get
una out approximately
maggiore the constant
comprensione a2 /2, whichdiisun
nella progettazione indeed
filtro the average
passa-basso
power.
adatto per un envelope follower, lo analizziamo dal punto di vista degli spettri
The situation
di segnale. Se, perforesempio,
a signalviwith severaluna
inseriamo components
sinusoide is similar.
a valori Suppose the
reali
input signal is now,
x[n] = x[n] = a · cos(αn)
a · cos(αn) + b · cos(βn)
whose spectrum
il risultato is plotted
di elevare in Figure
al quadrato è: 8.27 (part a). (We have omitted the two
phase terms but they will have no effect on the outcome.) Squaring the signal
produces the spectrum shown 2in part a2 (b) (see Section 5.2).) We can get the
2 2x[n] = (cos(2αn) + 1)
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 fre-
partials, and also all the difference tones, we end up with a stable output that
quenza 2α otterremo approssimativamente la costante a2 /2, che è 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 è simile. Supponiamo
of as signals with dense spectra. In this situation there will be difference frequen-
che 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 è 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
CHAPTER 8. Filtri
8. FILTERS

amplitude

(a) b/2
a/2

frequency

2 2
a +b
2
(b)

0 2 + 2
-

Figure
Figura8.27:
8.27:Envelope
Envelopefollowing
followingfrom
dal the spectral
punto point
di vista of view:(a)
spettrale: (a)un
ansegnale
incoming
in
signal with two components; (b) the result of squaring it.
entrata con due componenti; (b) il risultato dell’elevamento al quadrato.

wedelwill always
segnale get fluctuations
produce lo spettroinindicato
the output, but they
in parte will
(b) (si decrease
veda proportion-
il paragrafo 5.2).
ally as the ottenere
Possiamo filter’s passband
il valore isfisso
narrowed.
desiderato (a2 + b2 )/2 semplicemente filtran-
do Although
tutte le altrea narrower passband
componenti; will always
idealmente give a sarà
il risultato cleaner
un output, whether
segnale costante
for discrete
(DC). or continuous
Finché filtriamo tuttispectra, the filter’s
le parziali settling
e tutti i toni time will lengthen
di differenza, propor-
finiremo con
tionally
un’output as the passband
stabile is narrowed.
che calcola There lais potenza
correttamente thus a tradeoff
media. between getting
a quick
Gli response
envelope and a smooth
followers possono result.
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
interamenteSingle Sidebandotterremo
sarà impossibile; Modulation 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 sig-
Sebbene
nal with two unanew banda passante
components più sum
at the stretta
andfornisca sempre
difference unoriginal
of the output più puli-
frequen-
to, sia per gli spettri discreti che per quelli continui, il tempo
cies. If we carry out the same operation with complex sinusoids, we get only one di stabilizzazione
del filtro si prolungherà proporzionalmente in funzione di quanto la banda pas-
new resultant frequency; this is one result of the greater mathematical simplicity
sante venga ridotta. C’è quindi un compromesso tra una risposta rapida e un
of complex sinusoids as compared to real ones. If we multiply a complex sinu-
risultato 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
8.4.3original frequencies.
Modulazione a banda laterale singola
In general, since complex sinusoids have simpler properties than real ones,
itCome abbiamo
is often usefulvistoto benel Capitolo
able to convert5, moltiplicando insieme due
from real sinusoids sinusoidiones.
to complex reali,In
si
ottiene
other un segnale
words, from thecon real
due nuove
sinusoid:componenti date dalla somma e dalla differenza
delle frequenze originali. Se eseguiamo la stessa operazione con sinuosoidi com-
plesse, otteniamo solamente una nuova
x[n] = a frequenza
· cos(ωn) risultante; questo è il risultato
della maggiore semplicità matematica delle sinusoidi complesse rispetto a quel-
le reali. Se moltiplichiamo una sinusoide complessa 1, Z, Z 2 , . . . con un’altra,
1, W, W 2 , . . . il risultato è 1, W Z, (W Z)2 , . . . , che è un’altra sinusoide complessa
la cui frequenza, ∠(ZW ), è la somma delle due frequenze originali.
8.5. Esempi 239

In generale, poiché le sinusoidi complesse hanno proprietà più semplici di


quelle reali, spesso è 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 sovrapposizio-
ni 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] è proprio la metà 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à superiore del cerchio
unitario complesso) dai valori negativi (da −π a 0 o, equivalentemente, da π a
2π – la metà inferiore del cerchio unitario).
Si può progettare un tale filtro progettando un filtro passa-basso con fre-
quenza di taglio π/2 e quindi, eseguire una rotazione di π/2 radianti utilizzando
la tecnica del paragrafo 8.3.4. Tuttavia, risulta più 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] è l’output del primo filtro e b[n] è l’output
del secondo. Ogni componente sinusoidale complessa di x[n] (chiamiamola Z n )
verrà trasformata in
(
2H1 (Z) 0 < ∠(Z) < π
H1 (Z) + iH2 (Z) ≈ .
0 altrimenti

Avendo iniziato con un segnale a valori reali, la cui energia è suddivisa equa-
mente nelle frequenza positive e negative, otteniamo, alla fine, un segnale, a
valori complessi, con solo frequenze positive.
256 CHAPTER 8. FILTERS
240 Capitolo 8. Filtri

sinusoidal
osc~ 220
noise~ white noise, test signal
test signal +~ 1 add "DC"

0 <-- cutoff 0
lop~ low-pass filter hip~ 5 high-pass filter
| |
(OUT) (OUT)

(a) (b)

Figura 8.28: Utilizzo di filtri prefabbricati in Pd: (a) un filtro passa-basso,


con rumore
Figure 8.28: bianco
Using in ingresso come
prefabricated test;in(b)
filters Pd:utilizzo di un filtro
(a) a low-pass passa-alto
filter, per
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
in Pd, diH01.low-pass.pd,
facile utilizzo, per H02.high-pass.pd, andche
sviluppare esempi H03.band-pass.pd (Figure 8.28)
mostrano le applicazioni del
show Pd’s built-in filters, which implement filter designs described in Sections
paragrafo precedente. Quindi mostreremo alcune applicazioni più sofisticate che
8.3.1, 8.3.2 filtri
richiedono and appositamente
8.3.4. Two of the patches also use a noise generator we have
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
Filtri
the rightprefabbricati passa-basso,
inlet takes control messages to set-alto, -banda
the cutoff frequency of the filter.
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~,
8.3.1, normalized
8.3.2 to have
e 8.3.4. Due delleapatches
gain of utilizzano
one at theanche
Nyquist
un frequency.
generatore di rumore
: resonant
bp~non
che abbiamofilter. The
ancora middle inlet
presentato. takes control
Avremo bisognomessages to set
di quattro theoggetti
nuovi center
Pd:
frequency, and the right inlet to set “q”.
noise~: : filtro
lop∼ whitepassa-basso
noise generator.
a un polo.EachL’ingresso
sample issinistro
an independent
riceve un pseudo-
segnale
random number, uniformly distributed from -1 to 1.
da filtrare e l’ingresso destro accetta i messaggi di controllo per impostare la
The first
frequenza di three
taglioexample
del filtro.patches demonstrate
Il filtro theseinthree
è normalizzato modofilters
che il(see Figure
guadagno
8.28). The lop~ and bp~
sia uno alla frequenza 0. objects are demonstrated with noise as input; hip~ as
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
Prefabricated per avere un guadagno di uno alla
band-pass frequenza di Nyquist.
filter
bp∼ : filtro band-pass
Time-varying risonante. filtering,
L’ingressoas centrale accetta
often used i messaggi
in classical di controllo
subtractive per
synthesis
impostare la frequenza centrale e l’ingresso destro quelli per impostare
(Section 8.4.1), can be done using the vcf~ object, introduced here: “q”.
vcf~ : a :“voltage
noise∼ controlled”
generatore band-pass
di rumore bianco.filter,
Ognisimilar to bp~,
campione butnumero
è un with a quasi-
signal
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, è usato per rimuovere la componente DC (frequenza zero) di un
segnale.
8.5. EXAMPLES
8.5. Esempi 257
241

0 pitch
mtof
sawtooth
phasor~ oscillator
0 sweep speed
phasor~ LFO for sweep
0 sweep depth
*~
0 base center frequency
+~ add base to sweep
tabread4~ mtof convert to Hz.

0 Q (selectivity)
vcf~
|
(OUT)

Figure
Figura 8.29:
8.29: The vcf~
Il filtro band-passvcf∼,
passa-banda filter, con
withlaits
suacenter frequency
frequenza controlled
centrale by
controllata
an audio signal (as compared to bp~ which takes only control messages
da un segnale audio (rispetto a bp∼ che accetta solo messaggi di controllo per to set
its center frequency.
impostare la frequenza centrale).

inlet to control center frequency. Both bp~ and vcf~ are one-pole resonant filters
Filtro
as prefabbricato
developed in Section 8.3.4; passa-banda
bp~ outputs only variabile
the real nel
part tempo
of the resulting
signal, while vcf~ outputs the real and imaginary parts separately.
Il filtraggio
Examplepassa-banda variabile(Figure
H04.filter.sweep.pd nel tempo,
8.29)come utilizzato using
demonstrates spessothenella sintesi
vcf~ ob-
sottrattiva classica (paragrafo 8.4.1), può essere eseguito utilizzando
ject for a simple and characteristic subtractive synthesis task. A phasor~ object l’oggetto
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∼
for : un filtro
this purpose willpassa-banda
be developed “voltage-controlled”,
in Chapter 10.) The simile
seconda bp∼, ma con
phasor~ un
object
entrata di segnale per controllare la frequenza centrale.
(labeled “LFO for sweep”) controls the time-varying center frequency. AfterSia bp∼ che vcf∼ sono
filtri risonanti
adjusting to setadthe
un depth
polo, come
and adescritto
base centernel paragrafo
frequency8.3.4; bp∼
(given in emette solo la
MIDI units),
parte reale del segnale risultante, mentre vcf∼ emette
the result is converted into Hertz (using the tabread4~ object) and passed separatamente la parte
to
reale e quella immaginaria.
vcf~ to set its center frequency. Another example of using a vcf~ object for
L’esempio
subtractive H04.filter.sweep.pd
synthesis is demonstrated (Figura 8.29) mostra
in example l’utilizzo dell’oggetto
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 è
Envelope followers
una pratica particolarmente buona poiché non stiamo controllando la possibilità
di foldover:
Example nel Capitolo 10 verrà shows
H06.envelope.follower.pd sviluppato, per and
a simple questo scopo, un generatore
self-explanatory realiza-
a dente
tion di sega
of the migliore).
envelope Il secondo
follower described oggetto phasor∼
in Section (denominato
8.4.2. “LFO ap-
An interesting for
sweep”) controlla
plication la frequenza
of envelope following centrale
is shownche invaria
Examplenel tempo. Dopo alcune regola-
H07.measure.spectrum.pd
zioni per8.30,
(Figure impostare
part a).la profondità
A famous belle una frequenza
sample centrale
is looped as di basesound.
a test (data inRather
unità
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 è mostrato nell’esempio
H05.filter.floyd.pd.
258
242 CHAPTER 8. FILTERS
Capitolo 8. Filtri

r $0-loopf phasor~ 100


signal to analyze
phasor~
*~ r $0-totsamps 0 test frequency
+~ 1 phasor~

tabread4~ $0-array +~ 0.25


signal to analyze cos~ cos~ modulate
to DC
0 test frequency

0 Q *~ *~ 0 responsiveness
bp~
lop~ lop~ low-pass filter
bp~
r $0-tick
|
env~ 4096
(OUT)
0 snapshot~ snapshot~
measured strength 0 0
real part imaginary part

(a) (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 sam-
suono campionato di campana e fa l’envelope following del risultato; (b) spo-
pled 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


Envelope followers mean square power of the bell, we would like to estimate
the frequency and power of each of its partials. To do this we sweep a band-pass
L’esempio
filter up andH06.envelope.follower.pd
down in frequency, listening mostra to una realizzazione
the result and/or semplice
watchinged theespli-
fil-
cativa
ter’s dell’envelope
output power using follower descrittofollower.
an envelope nel paragrafo(We use8.4.2.
twoUn’applicazione
band-pass filtersinte- in
ressante
series for di envelope
better following
isolation of theè mostrata
partials; this nell’esempio H07.measure.spectrum.pd
is not especially good filter design
(Figura but
practice 8.30,itparte
will do a).inUn famoso
this context.)sampleWhen di campana
the filter viene
is tunedmesso
to ainpartial
loop comethe
suono di follower
envelope prova. Piuttosto
reports its che considerare la potenza quadrata media complessi-
strength.
va Example
della campana, vorremmo stimare
H08.heterodyning.pd (partla frequenza
(b) of the efigure)
la potenza
showsdian ciascuna delle
alternative
sue of
way parziali.
finding A tal fine,
partial muoviamo
strengths of anun filtro passa-basso
incoming sound; it has su the
e giù in frequen-
advantage of
za, ascoltando
reporting the phaseil risultato
as well as e/o
theguardando
strength. la potenza
First di uscita
we modulate thedel filtro partial
desired usando
un envelope
down to zerofollower
frequency. (utilizziamo
We use due filtri passa-banda
a complex-valued in serie
sinusoid as per un miglio-
a modulator
re that
so isolamento
we get delle
only parziali;
one sideband questa fornoneachè component
una praticaofparticolarmente
the input. Thebuona test
di progettazione
frequency is the onlydel frequency
filtro, ma that lo sarà in questo contesto).
is modulated to DC; others Quando il filtro è
go elsewhere.
sintonizzato
We then low-passsu una theparziale,
resultingl’envelope
complex follower
signal. (We riporta
can la
usesua forza.
a real-valued low-
passL’esempio H08.heterodyning.pd
filter separately on the real and (parte imaginary (b) della figura)
parts.) mostra un removes
This essentially modo al-
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 è l’unica frequenza che è modulata a DC; le
8.5.
8.5. EXAMPLES
Esempi 259
243

sample loop for


test signal
pd bell-loop

pair of allpass 0 shift frequency


filters to make
phasor~
90 degree phase cosine and sine waves
shifted versions -~ 0.25 to form the real and
cos~ cos~ imaginary part of a
hilbert~ complex sinusoid

*~ *~ <-- complex multipier


(calculates real part)
-~
|
(OUT)

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

all the partials except for the DC one, which we then harvest. This technique
isaltre
the vanno altrove.
basis of Fourier Applichiamo
analysis, the quindi un filtro
subject passa-basso
of Chapter 9. al segnale comples-
so risultante (possiamo usare un filtro passa-basso a valore reale separatamente
sulle parti reale e immaginaria). Questo rimuove essenzialmente tutte le parziali
Single sideband
tranne quella a DC, che modulation
poi raccogliamo. Questa tecnica è la base dell’analisi
di Fourier, argomento
As described in Section 8.4.3,del Capitolo 9. of all-pass filters can be constructed to
a pair
give roughly π/2 phase difference for positive frequencies and −π/2 for negative
ones. The design of
Modulazione a these
banda pairs is beyond
laterale the scope of this discussion (see, for
singola
instance, [Reg93]) but Pd does provide an abstraction, hilbert~, to do this.
Come descritto
Example nel paragrafo 8.4.3,shown
H09.ssb.modulation.pd, una coppia di filtri
in Figure 8.31,all-pass può essere
demonstrates howco-to
struita
use per fornire,abstraction
the hilbert~ approsimativamente,
to do signal una differenza
sideband di fase di π/2
modulation. The per le
Hilbert
frequenze dates
transform positiveto the −π/2 era
e dianalog per [Str95,
quelle pp.129-132].
negative. La progettazione di que-
steThe
coppie
two èoutputs
al di làof degli scopi di
hilbert~, questa discussione
considered as the real (siandveda, ad esempio,
imaginary parts of
a[Reg93]), tuttavia signal,
complex-valued Pd fornisce un’abstraction,
are multiplied hilbert∼,
by a complex per farlo.
sinusoid L’esempio
(at right in the
H09.ssb.modulation.pd, mostrato in Figura 8.31, mostra come
figure), and the real part is output. The components of the resulting signal are utilizzare l’ab-
straction
those hilbert∼
of the per effettuare
input shifted la modulazione
by a (positive or negative)a banda laterale
frequency del segnale.
specified in the
La trasformata
number box. di Hilbert risale all’era analogica [Str95, pp.129-132].
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
destra nella figura) e la filters directly:
parte reale shelving
viene emessa. and peaking
Le componenti del segnale
No finite set of prefabricated filters could fill every possible need, negativa)
risultante sono quelle dell’input spostate di una frequenza (positiva o and so Pd
specificata
provides thenella casella numerica.
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
Utilizzare filtri the shelving and
elementari peaking filters ofshelving
direttamente: Sections 8.3.3 and 8.3.5
e peaking
directly from elementary filters. First we introduce the six Pd objects that
Nessunelementary
realize insieme finito di filtri prefabbricati potrebbe soddisfare ad ogni possibile
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 Capitolo 8. Filtri
260 CHAPTER 8. FILTERS

0 angle (degrees)
zero and pole * 3.14159
radii (%)
/ 180
0 0
sin
zero pole (%) / 100 / 100 cos
t b f t b f
0 0
(IN) / 100 / 100
| (IN) * *
| * *
rzero~
czero~
rpole~ cpole~
| |
(OUT) (OUT)
(a) (b)

Figura 8.32:
Figure 8.32:Building
Costruire filtrifrom
filters a partire da quelli
elementary, raw elementari grezzi: (b)
ones: (a) shelving; (a) peak-
shelving;
(b) peaking.
ing.

rzero~
king , rzero rev~
dei paragrafi 8.3.3 ,e 8.3.5
rpole~ : elementary
direttamente daifilters
filtriwith real-valued
elementari. coeffi-
Innanzitutto
introduciamo i sei oggetti Pd che realizzano filtri elementari:
cients operating on real-valued signals. The three implement non-recirculating
filters
rzero∼ of the first and
, rzero rev∼second types, and
, rpole∼ the recirculating
: filtri elementari con filter.coefficienti
They all have
a valori
one
reali che operano su segnali a valori reali. I tre oggetti implementano filtriornon-
inlet, at right, to supply the coefficient that sets the location of the zero
pole. The inlet
ricircolanti delfor the coefficient
primo e secondo(as welleasilthe
tipo, leftricircolante.
filtro inlet for the signal
Tuttitohanno
filter)una
take audio signals. No stability check is performed.
sola entrata, a destra, per fornire il coefficiente che determina la posizione dello
zero o del, polo.
czero~ czeroL’ingresso
rev~ , cpole~per il coefficiente
: elementary (cosı̀ come
filters withl’ingresso sinistro per
complex-valued
il segnale da filtrare) accetta segnali audio. Non viene eseguito alcun controllo
coefficients,
sulla stabilità.operating on complex-valued signals, corresponding to the real-
valued ones above. Instead of two inlets and one outlet, each of these filters has
four inlets ,(real
czero∼ and rev∼
czero imaginary part of the
, cpole∼ signalelementari
: filtri to filter, and conreal and imaginary
coefficienti a valori
part of the coefficient) and two outlets for the complex-valued
complessi, che operano su segnali a valori complessi, corrispondenti ai filtri output.
Theaexample
sopra, patches
valori reali. use a avere
Anziché pair ofdueabstractions
ingressi e to unagraph the ciascuno
uscita, frequencydiand questi
phase responses of filters as explained in Example H10.measurement.pd.
filtri ha quattro ingressi (parte reale e immaginaria del segnale da filtrare, Exam- parte
ple
realeH11.shelving.pd
e immaginaria(Figure 8.32, parte a)
del coefficiente) due shows
uscite how
pertol’output
make a ashelving filter.
valori complessi.
One elementary non-recirculating filter (rzero~) and one elementary recircu-
Le 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 fil-
Example H12.peaking.pd (part (b) of the figure) implements a peaking filter.
tro shelving. Un filtro elementare non-ricircolante (rzero∼) ed uno elementa-
Here 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
the shelf frequency DC gainviene
and therzero∼ of theper primo.
corresponding shelving filter.
Example H13.butterworth.pd demonstrates afigura)
L’esempio H12.peaking.pd (parte (b) della implementa
three-pole, three-zerounButter-
filtro pea-
worth shelving filter. The filter itself is an abstraction, butterworth3~, for easy la
king. Qui il polo e lo zero sono ruotati di un angolo di ω per controllare
frequenza centrale del filtro. La larghezza di banda ed il guadagno della fre-
quenza 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 è 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~
| rpole~
(OUT)
+~
(a) | (b)
(OUT)

Figura8.33:
Figure 8.33:All-pass
Filtri filters:
all-pass: (a) (a) realizzazione
making an all-passdifilter
un from
filtro elementary
all-pass dafilters;
filtri
elementari;
(b) (b)all-pass
using four utilizzofilters
di quattro filtri
to build all-pass per costruire un phaser.
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 recir-
culating 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 all-
pass da un filtro non-ricircolante, seconda forma (rzero rev∼) e da un filtro
ricircolante (rpole∼). Il coefficiente, compreso tra −1 e 1, è controllato in
centesimi.
L’esempio H15.phaser.pd (parte b della figura) mostra come utilizzare quat-
tro 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à di cambiamento di fase è variabile nel tempo
cambiando il coefficiente (condiviso) dei filtri all-pass. L’effetto complessivo è
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 è maggiore e qual è tale guadagno? A quale
frequenza angolare il suo guadagno è minimo e qual è 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 . Sup-
poniamo 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 campiona-
mento 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 è 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 è il
valore di “q”?
Capitolo 9

Analisi e risintesi di Fourier

Tra le applicazioni dei filtri discusse nel Capitolo 8, abbiamo visto come usa-
re 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 ca-
pitolo rifiniremo questa tecnica in quella che viene chiamata analisi di Fourier.
Nella sua forma più semplice, l’analisi di Fourier prende in input un qualsia-
si 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 sinu-
soidi 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é il successivo avrebbe frequenza 2π, equivalente alla
frequenza 0, che è già 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 è 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ò calcolando la media su un numero enorme di campioni; ma poiché il segnale

247
248 Capitolo 9. Analisi e risintesi di Fourier

si ripete ogni N campioni, questa media enorme è 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] è del tipo:
 n
Pk [n] = Ak U k
dove Ak è l’ampiezza complessa della parziale, e la frequenza della parziale è:
∠(U k ) = k∠(U ) = kω.
Stiamo assumendo, per il momento, che il segnale X[n] possa essere effettiva-
mente scritto come una somma di N parziali, cioè:
 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  −k 0  1  N −1 
Ak = U X[0] + U −k X[1] + · · · + U −k X[N − 1] .
N
Questa è una formula talmente utile da avere la propria notazione. La trasfor-
mata di Fourier di un segnale X[n], su N campioni, è 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 è 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ù generale come:
V = cos(−kω) + i sin(−kω)
dove, come prima, ω = 2π/N è la frequenza fondamentale (angolare) associata
al periodo N .

9.1.1 Periodicità della trasformata di Fourier


Se X[n] è, come sopra, un segnale che si ripete ogni N campioni, anche la
trasformata di Fourier di X[n] si ripete ogni N unità di frequenza cioè
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à delle trasformate di Fourier 249

9.1.2 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] è una somma di sinusoidi complesse, con ampiezze complesse X[m] e fre-
quenze −mω per m = 0, . . . , N − 1. In altri termini, Y [k] può essere conside-
rato come una serie di Fourier di per sé, la cui componente m−esima ha forza
X[−m] (l’espressione X[−m] ha senso perché X è un segnale periodico). Possia-
mo 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ò significa a sua volta che X[−m] può essere ottenuto sommando sinusoidi
con ampiezze Y [k]/N . Ponendo n = −m si ha:
1
X[n] = N FT {Y [k]} (−n)
 n  n  n
= U 0 Y [0] + U 1 Y [1] + · · · + U (N −1) Y [N − 1].

Ciò dimostra che ogni X[n] periodico può 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à delle trasformate di Fourier


In questo paragrafo verificheremo cosa succede quando prendiamo la trasformata
di Fourier di una sinusoide (complessa). Il caso più semplice è quello “DC”,
la sinusoide speciale di frequenza zero. Dopo aver calcolato la trasformata di
Fourier di questa, svilupperemo alcune proprietà 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’è 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 è, come prima, il numero complesso di modulo 1 e argomento −kω.
Questa è una serie geometrica; finché V 6= 1 otterremo:
VN −1
FT {X[n]} (k) = .
V −1
Simmetriziamo la parte superiore e quella inferiore nello stesso modo che abbia-
mo fatto prima nel paragrafo 7.3. Per fare ciò 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:
ξ N − ξ −N
FT {X[n]} (k) = ξ N −1 .
ξ − ξ −1
Ora è facile semplificare il numeratore:
ξ 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, è definito come


(
N k=0
DN (k) = sin(πk)
sin(πk/N ) k 6= 0, −N < 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à, intorno a k = 0. Il
picco è circondato da sidelobes larghi un’unità, 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 approssimati-
vamente 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à delle trasformate di Fourier 251

9.2. PROPERTIES OF FOURIER TRANSFORMS 267

real

-5 0 5
k

imagi-
nary

Figure 9.1:
Figura 9.1: The Fourier transform
La trasformata of a signal
di Fourier di un consisting of all ones.
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 è a valori
and showne as
complessi a projection,
viene with una
mostrato come the proiezione,
real axis pointing up reale
con l’asse the page and the
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


CHAPTER ) − i sin(πk(N
9. FOURIER − 1)/N ) AND RESYNTHESIS
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 0 5
9.2.2 Shifts and phase changes 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
9.2:frequencies. These
The Dirichlet two effects
kernel, for Nhave corresponding
= 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 Capitolo 9. Analisi e risintesi di Fourier

9.2.2 Spostamenti e cambiamenti di fase


Nel paragrafo 7.2 abbiamo mostrato come uno spostamento temporale di un se-
gnale 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à che coinvolgono la trasformata di Fourier.
In primo luogo consideriamo uno spostamento temporale. Se X[n], come al
solito, è 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é 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 è 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] è un termine di fase moltiplicato per


la trasformata di Fourier di X[n]. La fase è cambiata di −dkω, una funzione
lineare della frequenza k.
Ora supponiamo invece di cambiare il nostro segnale di partenza X[n] mol-
tiplicandolo per un esponenziale complesso Z n con frequenza angolare α:
Y [n] = Z n X[n],

Z = cos(α) + i sin(α).
La trasformata di Fourier è:
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 − ).

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

amplitude
(a)

-5 0 5
k->

(b)

0 5
-5

Figura 9.3: Trasformate di Fourier di sinusoidi complesse, con N = 100: (a)


Figure 9.3: Fourier
con frequenza transforms
2ω; (b) of complex
con frequenza sinusoids,
1.5ω (l’effetto delwith N =di100:
termine (a) with
avvolgimento
frequency 2ωè ;mostrato).
di fase non (b) with frequency 1.5ω. (The effect of the phase winding term
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))
100 200N (k − ω )
+ i sin(Φ(k))]D
dove DN è il kernel di Dirichlet e Φ è un “brutto” termine di fase:
α
Φ(k) = −π · (k − ) · (N − 1)/N.
ω
Se la frequenza
Figure della sinusoide
9.4: A complex α èwith
sinusoid un multiplo
frequencyintero
α =della
1.5ωfrequenza
= 3π/N ,fondamen-
forced to
repeat every N samples. (N is arbitrarily set to 100; only the direal
tale ω, il kernel di Dirichlet viene spostato a sinistra o a destra un part
intero.
is
In questo
shown.) caso gli zero-crossings del kernel di Dirichlet si allineano con valori
interi di k, in modo che solo una parziale non sia nulla. Questo è illustrato nella
Figura 9.3 (parte a).
La parte (b) mostra il risultato quando la frequenza α cade a metà 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 è arbitrariamente impostato su 100, solo la parte
repeat every N samples. (N is arbitrarily set to 100; only the real part is
reale è 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 è in accordo con la frequenza della sinusoide. Di conseguenza c’è una
discontinuità 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 è 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 sinu-
soide 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 miglio-
rerà le nostre analisi, ma farà 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 è quella di inviluppare il segnale prima di eseguire l’analisi di Fourier.
La forma dell’inviluppo è conosciuta come funzione finestra (window function).
Dato una window function w[n], la trasformata di Fourier su finestra (windowed
Fourier transform) è:
FT {w[n]X[n]}(k).

Molto inchiostro è stato versato per la progettazione di funzioni finestra ade-


guate per situazioni particolari, ma qui prenderemo in considerazione la più
semplice, chiamata la funzione finestra di Hann (il nome è talvolta storpiato ad
“Hanning” negli ambienti DSP). La finestra di Hann è:

1 1
w[n] = − cos(2πn/N ).
2 2
9.3. Analisi di Fourier
272 di segnali
CHAPTER non periodici
9. FOURIER 255
ANALYSIS AND RESYNTHESIS

amplitude

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

0 1 2 k->
-1

Figura 9.5: La magnitudine M (k) della trasformata di Fourier della funzione


finestra9.5:
Figure di Hann. È la somma
The magnitude di tre
M(k) copie
of the (spostate
Fourier e ingrandite)
transform del kernel
of the Hann windowdi
Dirichlet D
function. ItNis, con
the Nsum= of
100.
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
prima
The di prendere
magnitude la trasformata
function di Fourier,
M (k) is graphed perché 9.5.
in Figure la finestra di Hann
The three può
Dirichlet
essere components
kernel scritta come are
unaalso
somma di tre
shown esponenziali complessi
separately.
The main lobe of M (k) is four 1harmonics 1 wide,
1 −ntwice the width of the main
lobe of the Dirichlet kernel. w[n]The = − U non−theUother
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
attenuated prima, U èthe
1/2 and il numero
others, complesso
opposite indisign,
modulo unitariobycon
attenuated argomento
1/4. They do
2π/N
not . Ora
cancel outpossiamo
perfectly calcolare
but they la
do trasformata
cancel out di Fourier
fairly well. su finestra di una
sinusoide Z n con frequenza
The sidelobes reach theirangolare
maximum α come prima. Lenear
amplitudes fasi usciranno disordinate
their midpoints, and
e lecan
we sostituiremo con approssimazioni
estimate their amplitudes there, semplificate:
using the approximation:
n
FT {w[n]Z }(k)
N sin(πk)
n D N (k) ≈ 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, è: ≈ −21dB, ≈ −23dB, . . .
3π 5π 7π 9π
α
The sidelobes drop off progressively −π · (kslowly
Φ(k) = more − ) so that the tenth one is only
ω
attenuated about 30 dB and the 32nd one about -40 dB. On the other hand,
e laHann
the funzione di magnitudine
window sidelobes areè: attenuated by:
 
1
M (k) = 2 Dn (k) 1 + 2 1 Dn2(k + 1) + 1 Dn (k − 1) .
2 − [ 4+ ] ≈ −32.30dB
4
5π 2 3π 7π
La funzione
and −42, −49,di magnitudine
−54, and −59 M dB(k) for
viene
therappresentata in figura 9.5. Sono inoltre
next four sidelobes.
mostrare, separatamente, le tre componenti del
This shows that applying a Hann window before taking kernel di Dirichlet.
the Fourier transform
will better allow us to isolate sinusoidal components. due
Il lobo principale di M (k) è ampio quattro armonici, If a volte
signalla has
larghezza
many
del lobo principale del kernel di Dirichlet. I sidelobes, d’altro canto, hanno una
grandezza molto minore. Ogni sidelobe di M (k) è 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
9.3. Capitolo 9. Analisi
SIGNALS e risintesi di Fourier
273

real

0 5 10 k

imagi-
nary

Figura 9.6: The


Figure La trasformata
Hann-windoweddi Fourier Hann-windowed
Fourier transform of adisignal
un segnale con sinu-
with two due
componenti
soidal sinusoidali,
components, alle frequenze
at frequencies 5.310.6
5.3 and e 10.6 volte
times thelafundamental,
fondamentale,
ande with
con
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:

sinusoidal components, the sidelobes N sin(πk)


DN (k) ≈engendered .by each one will interfere with
the main lobe of all the others. Reducing theπk amplitude of the sidelobes reduces
this interference.
Impostare k = 3/2, 5/2, . . . dà 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.
≈ −13dB, The≈two are separated
−18dB, by about 5≈times
≈ −21dB, the fundamental
−23dB, ...
3π 5π 7π 9π
frequency ω, and for each we see clearly the shape of the Hann window’s Fourier
transform. Four points
I sidelobes scendono of the Fourier analysis
progressivamente lie within
più lentamente in the main
modo chelobe of M (k)
il decimo è
corresponding
attenuato di soloto circa
each sinusoid.
30 dB e il The amplitude
32−esimo and−40
di circa phase
dB.ofD’altra
the individual
parte, i
sinusoids are reflected
sidelobes della finestra in
di those
Hann of theattenuati
sono (four-point-wide)
da: peaks. The four points
within a peak which happen to fall at integer
 values k are successively about
2 1 2 2
one half cycle out of phase.− + ≈ −32.30dB
5π 2 3π 7π
e −42, −49, resolve
To fully −54 e −59the dB per i of
partials successivi
a signal,quattro sidelobes.
we should choose an analysis size
Questo
N large mostra
enough so che
thatl’applicazione
ω = 2π/N is di nouna
more finestra
than adiquarter
Hann prima
of the di fare la
frequency
trasformatabetween
separation di Fourier ci permetterà
neighboring meglio
partials. Fordiaisolare le componenti
periodic sinusoidali.
signal, for example, the
Se un segnale
partials ha molteby
are separated componenti sinusoidali,
the fundamental i sidelobes
frequency. For generati da ciascuna
the analysis to fully
interferiranno
resolve con il the
the partials, loboanalysis
principale di tutti
period gli altri.
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 four-
di Fourier sulla finestra di Hann. Quattro punti dell’analisi di Fourier si trova-
period 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ù 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é il centro di ogni picco è isolato da tutti gli altri picchi; in questo caso
la regola di quattro periodi può essere abbassata a tre o anche leggermente
meno.

9.4 Analisi di Fourier e ricostruzione di segnali


audio
L’analisi di Fourier può essere utilizzata, a volte, per trovare le componenti si-
nusoidali in un segnale audio. Anche quando non si può andare cosı̀ lontano,
si può 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ò suggerisce molte operazioni
interessanti che potremmo eseguire su un segnale considerando la sua trasfor-
mata 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 è 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 moltipli-
candola 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 è auspica-
bile calcolare la trasformata di Fourier per più punti, ma qui saranno sufficienti
questi N punti).
L’analisi di Fourier ci dà un array bidimensionale di numeri complessi. Deno-
tiamo con H la hop size, il numero di campioni con cui ogni finestra è 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 è mH + n. La trasformata Fourier su finestra: è quindi
uguale a:
S[m, k] = FT {w[n]X[n − mH]}(k).
Questa è sia una funzione del tempo (m, in unità di H campioni) che della fre-
quenza (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à 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
FT FT
analysis

modifi-
cation ANYTHING ANYTHING

Fourier
resynth- iFT iFT
esis

shape
windows
again

overlap-
add
...

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 mo-
difiche desiderate. Nella figura, la modifica è semplicemente sostituire la metà
superiore dello spettro con lo zero, che dà un filtro passa-basso altamente selet-
tivo (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ò si applica l’inverso
della trasformata di Fourier (denominata “iFT” nella figura). Come mostrato
nel paragrafo 9.1.2 questo può 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è,
scegliamo N un multiplo di quattro e collochiamo ogni finestra H = N/4 cam-
pioni oltre la precedente), possiamo ricostruire fedelmente il segnale originale
omettendo il passaggio di “modifica”. Ciò è 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 è 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 è uguale all’input per un un fattore
costante.
La capacità di ricostruire esattamente il segnale di ingresso è utile perché
alcuni tipi di modifica possono essere fatti per gradi e quindi l’output può essere
fatto variare con regolarità tra l’input e qualche versione trasformata di esso.

9.4.1 Narrow-band companding


Un compander è uno strumento che amplifica un segnale con un guadagno varia-
bile, a seconda dell’ampiezza misurata del segnale. Il termine è 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 varia-
zione complessiva del livello di segnale, sia ridotta. Un expander fa il contrario,
aumentando la gamma dinamica. Frequentemente il guadagno dipende non so-
lo 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 sin-
golarmente su canali a banda stretta. Se C[m] è una tale banda, applichiamole
un guadagno g[m], per avere g[m]C[m]. Sebbene C[m] è un numero complesso,
il guadagno è 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 con-
siderazione la situazione più semplice in cui il guadagno è semplicemente una
funzione dell’ampiezza del sample corrente: |C[m]|.
La patch illustrata in Figura 9.8 mostra un’applicazione molto utile di com-
panding chiamata noise gate. Qui il guadagno g[m] dipende dall’ampiezza del
canale C[m] e da un livello di rumore che è una funzione f del numero del cana-
le 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
FT FLOOR

|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 è 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] è inferiore alla soglia f [k] il guadagno è ze-
ro 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é il guadagno è un numero reale non-negativo, la fase è conservata.
Nella figura, il guadagno è calcolato come funzione di soglia del rapporto
x = |S[m, k]|/f [k] dell’ampiezza del segnale rispetto al livello di rumore; la
soglia è g(x) = 1 − 1/x quando x < 1 e zero altrimenti, anche se si potrebbe
sostituire facilmente con altre funzioni di soglia.
Questa tecnica è utile per rimuovere il rumore da un suono registrato. Mi-
suriamo 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é questo è fatto su bande strette
di frequenze, a volte è possibile rimuovere la maggior parte del rumore anche
quando il segnale stesso, nelle frequenze in cui è più forte del livello di rumore,
è maggiormente conservato.
La tecnica è utile anche come preparazione prima di applicare un’operazione
non-lineare ad un suono, come la distorsione. Spesso è meglio distorcere solo
le frequenze più salienti del suono. Sottrarre il suono con rumore soppresso
dall’originale dà un segnale residuo che può essere passato non distorto.

9.4.2 Timbre stamping (vocoder classico)


Una seconda applicazione dell’analisi e della risintesi di Fourier è un filtro, va-
riabile nel tempo, in grado di far si che un suono prenda l’inviluppo spettrale
in evoluzione di un’altro. Questo è ampiamente conosciuto nei circoli di mu-
sica 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ù 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 vie-
ne 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 è mostrato un diagramma a blocchi per il timbre stamping.
Come nell’esempio precedente, il timbre stamping agisce moltiplicando la tra-
sformata 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 è 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,
|T [m, k]|
g[m, k] = .
|S[m, k]|
In pratica è meglio limitare il guadagno ad un certo valore massimo (che potreb-
be dipendere dalla frequenza) in quanto altrimenti i canali che non contengano
262 Capitolo 9. Analisi e risintesi di Fourier

278 CHAPTER 9. FOURIER ANALYSIS AND RESYNTHESIS

FILTER CONTROL
INPUT 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à. 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ò è 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ù 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 è α = 3ω, in modo che il picco nella trasformata di Fourier sia
centrato su k = 3. Se la fase iniziale è φ, le fasi vicine possono essere definite
come:
∠S[0, 2] = φ + π ∠S[0, 3] = φ ∠S[0, 4] = φ + π
∠S[1, 2] = φ + Hα + π ∠S[1, 3] = φ + Hα ∠S[1, 4] = φ + Hα + π .
∠S[2, 2] = φ + 2Hα + π ∠S[2, 3] = φ + 2Hα ∠S[2, 4] = φ + 2Hα + π
Questo dà 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 è un intero. Ci sono H frequenze possibili, distanziate di 2π/H. Se si
utilizza una sovrapposizione di 4, cioè H = N/4, le frequenze sono distanziate
di 8π/N = 4ω. Fortunatamente, questa è la larghezza del lobo principale per
la finestra di Hann, quindi non più di un possibile valore di α può spiegare
qualsiasi differenza di fase misurata all’interno del lobo principale di un picco.
Il valore corretto di p da scegliere è quello che fornisce una frequenza più 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à
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à 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 windowed windowed


FT FT FT

S[0, 3] S[1, 3] 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:
analizzata Phase
in tre in windowed
finestre Fourier
successive; analysis:per
(b) il risultato (a)una singolo
complex sinusoid
canale (k =ana-
3),
lyzed on three successive
per le tre finestre. windows; (b) the result for a single channel (k=3), for
the three windows.
9.5. Fase 265

THIS INPUT

ANOTHER INPUT

T[k] T'[k]

phase diff phase diff

phase accum phase accum

S[m-1, k] S[m, k] S[m+1, k]

...
...

OUTPUT

Figura 9.11: Propagazione delle fasi nella risintesi. Ciascuna fase, come quella
Figure
di S[m,9.11: Propagating
k] qui, phases
dipende dalla in resynthesis.
precedente Each phase,
fase di output e dalla such as that
differenza of
delle
S[m, k] input.
fasi di here, depends on the previous output phase and the difference of the
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ù 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à
la somma o la differenza dei loro argomenti.
9.5. PHASE 283
266 Capitolo 9. Analisi e risintesi di Fourier

imaginary

T'[k]

real

S[m-1, k] T[k]

S[m, k]

Figura 9.12:
Figure 9.12: Phases
Fasi di of
unone
canale delleoffinestre
channel di analisi
the analysis e due and
windows successive finestre
two successive
di risintesi.
resynthesis windows.

Se l’ampiezza desiderata è un numero reale a, allora dobbiamo impostare


S[m,magnitudes
The k] su: of the second and third terms cancel out, so that the magnitude
of S[m, k] reduces to a; the first two terms0 are −1real numbers 0 so the argument is
S[m − 1, k]T [k] S[m − 1]T [k]
controlled by the S[m,last = a ·
k] term. · .
T [k] T [k]
If we want to end up with the magnitude from the spectrum T as well, we
I moduli ′
del|Tsecondo
can set a = [k]| andesimplify:
del terzo termine si annullano, in modo che il modulo
di S[m, k] si riduca ad a; i primi due termini sono numeri reali in modo che
!
l’argomento sia controllato dall’ultimo !−1
! S[m − 1, k]termine.
! S[m − 1, k]T ′ [k]
Se vogliamo S[m, finirek]anche ! !
= ! con la magnitudine · 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]
·
9.5.1 Phase S[m, k] =
relationships T [k] between
channels
T [k]
.

In the scheme above, the phase of each S[m, k] depends only on the previ-
9.5.1 Rapporti di fase tra i canali
ous value for the same channel. The phase relationships between neighboring
channels
Nello schema are left to chance.
sopra, la fase diThisognisometimes works fine,
S[m, k] dipende solo butdal sometimes the in-
valore precedente
coherence
per lo stesso of neighboring
canale. Lechannels
relazionigives rise tra
di fase to an unintended
i canali vicinichorus effect. We
sono lasciati al
would ideally awish
caso. Questo voltefor S[m, k]bene,
funziona and S[m,
ma a kvolte
+ 1]l’incertezza
to have the deisamecanaliphase
vicinirela-
dà
tionship
origine ad as un T ′ [k] and
for effetto T ′ [k + 1],dibut
involontario also for
chorus. the phase
Vorremmo relationship
idealmente che between
S[m, k]
S[m,
e S[m, k] kand
+ 1]S[m − 1, k]latostessa
abbiano be the same asdibetween
relazione fase come T ′ [k] T 0 [k]
perand T [k].
e T [k + 1], ma
anche che2N
These la equations
relazione di forfase tra S[m,
N phases k] e S[m
in general − 1,
will k] sia
have uguale a but
no solution, quella
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 so-
lutionQueste
to the2N equazioni per system
over-constrained le N fasi, in generale,
of equations, thenon avranno alcuna
reconstruction solu-
algorithm
zione, ma possiamo alterare l’equazione per S[m, k] in modo
homes in on the solution. This approach is called phase locking [Puc95b], and che ogni qualvolta
ci sia
has theuna soluzione
virtue al sistema
of simplicity sovra-vincolato
although di equazioni,
more sophisticated l’algoritmo
techniques di rico-
are available
struzione
[DL97]). porti a quella soluzione. Questo approccio è chiamato phase locking
[Puc95b] e ha la virtù della semplicità (anche se sono disponibili tecniche più
sofisticate [DL97]).
La relazione di fase in output desiderata, al frame m − 1, è
∠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
T [k] · S[m − 1, k]
R[k] =
|S[m − 1, k]|
e a causa della precedente equazione, gli R[k] dovrebbero essere tutti in fase. Il
trucco è ora quello di sostituire R[k], per ogni k, con la somma dei tre vicini. Il
calcolo è 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à nella relazione di fase corretta, questo non ha alcun effetto
(la fase risultante sarà uguale a quella nel caso in cui solo R[k] fosse usato).
Ma in generale la somma condividerà 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 puntare maggiormente nella stessa direzione rispet-
to 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’è garanzia che le fasi
si abbinino. Se non lo fanno, il risultato può essere brutto, poiché le variazioni
di fase casuale vengono percepite come fluttuazioni di frequenza. Ciò può 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 è dunque
zero sia per valori pari che per quelli dispari di k. Per impostare le fasi (gli ar-
gomenti delle ampiezze complesse nello spettro) nel modo desiderato, troviamo
innanzitutto la magnitudine, che può essere considerata un numero complesso
268 Capitolo 9. Analisi e risintesi di Fourier

INPUT

...

FT

MAGNITUDE

k
(-1)

iFT
...

PHASE-BASHED INPUT

Figura 9.13: Phase-bashing di un suono registrato (qui, una sinusoide con


Figure
286 9.13:
frequenza Phase-bashing
per darea9.una
CHAPTER
crescente) recorded
serie disound
FOURIER (here,wavetables.
ANALYSIS
oscillatori a AND
sinusoid with rising fre-
RESYNTHESIS
quency) to give a series of oscillator wavetables.

(a) (c)
osc~

fft~ block~ 512


tabwrite~ $0-imaginary inlet~

tabwrite~ $0-real tabreceive~ $0-hann


*~
rfft~
(b)
0 <- frequency, *~ *~
tens of Hz.
* 10 +~
osc~ click here and sqrt~
pd fft-analysis <- see tabwrite~ $0-magnitude

Figure
Figura 9.14:
9.14: Fourier
Analisianalysis
di Fourierin Pd: (a) the
in Pd: (a) fft ∼ object;
l’oggetto (b) using
fft∼; a subwindow
(b) utilizzo di una
to control block
sotto-patch size of the la
per controllare Fourier transform;
dimensione (c) the
del blocco subwindow,
della using
trasformata a real
di Fourier;
Fourier transform (the
(c) la sotto-patch, fft~object)
che usa and the di
una trasformata Hann windowing
Fourier function.rfft∼) e
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 trasfor-
mata inversa di Fourier, senza nemmeno preoccuparci di suddividere in finestre
nella fase di ritorno; probabilmente vogliamo comunque applicare un inviluppo
windowing in seguito, come è stato mostrato nella Figura 2.7. I risultati posso-
no 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 è 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ù semplice considera
il caso in cui N sia una potenza di due, che è 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 con-
trollare 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, è 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à del tempo di
calcolo dell’oggetto (più 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 è 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 risin-
tetizzare un segnale audio seguendo la strategia di Figura 9.7. Come prima c’è
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 512-sample block, 4-fold overlap (hop size 128).

inlet~ now takes care of buffering and shifting for


inlet~ overlapped windowing.
*~ tabreceive~ $0-hann Hann window as before
rfft~ 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 specificare
of 4, and rifft~ to reconstruct the signal after modification.
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∼ è 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 argo-
mento che specifica un fattore di sovrapposizione di 4. Ciò impone che la sotto-
patch venga eseguita quattro volte ogni N = 512 campioni, a intervalli regolari
di 128 campioni. L’oggetto inlet∼ fa il necessario buffering e la riorganizzazio-
ne 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 sca-
lata moltiplicando separatamente le parti reale e immaginaria per il guada-
gno. Il guadagno (che dipende dal canale) viene da un’altra tabella, deno-
minata “$0-gain”. Il risultato è un filtro di equalizzazione grafica; muovendo
9.7. Esempi 271
9.7. EXAMPLES 289

rfft~ real FT (a)


(b)
*~ *~ compute power
(call it "s") loop to number r make-mask
+~
of frames t b f r window-msec
pd calculate-mask bang~
subpatch shown in (b) 0
spigot
mask table hop size
/ / 4 in msec
tabreceive~ $0-mask float + 1
< 0 number of
*~ r mask-level t f f frames
-~ power ("s") minus sel 0
mask ("m")
max~ 0 force >= 0 expr 1/($f1+1) 0

+~ 1e-20 protect against 0 weight to average


division by zero current
power new power into mask
/~
sqrt((s-m)/s) inlet~
q8_sqrt~ (or 0 if s < m) tabreceive~ $0-mask
-~
average current power into
/~ 1536
last mask to get new mask.
normalize by 2/(3N) New value is weighted 1/n
*~ *~ *~
+~ on the nth iteration.
rifft~ real iFT tabsend~ $0-mask

Figure
Figura9.16: NoiseSoppressione
9.16: suppression as andel
example
rumore of narrow-band companding:
come esempio (a)
di companding
a banda
analysis and reconstruction of the signal; (b) computation of the “mask”.
stretta: (a) analisi e ricostruzione del segnale; (b) calcolo della “maschera”.

il mouse nella finestra grafica per questa tabella, è 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
(whichVidepends
è un ritardo intrinseco
on the channel) comesintrodotto
from anotherdall’uso di block∼
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
Capitolo percanridurre
design gain-frequency
la dimensione curves.
del blocco rispetto alla finestra genitore).
Il ritardo può essere misurato dall’input all’output della sotto-patch ed è uguale
There
alla is an inherent
differenza delledelay introduceddei
dimensioni by using
due block~
blocchi.to increase the block
In questo esempio il ritardo di
size (but none if it is used, as shown in Chapter 7, to reduce block size relative
buffering è 512 − 64 = 448 campioni. Il ritardo di blocco
to the parent window.) The delay can be measured from the inlet to the outlet non dipende dalla
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 è 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 è 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ù alto della potenza
del rumore per il canale k), allora il guadagno nel canale k è dato da
(q
s[k]−m[k]
s[k] s[k] > m[k]
.
0 altrimenti
272 Capitolo 9. Analisi e risintesi di Fourier

La potenza nel canale k−esimo è cosı̀ ridotto di m[k] se possibile, e altrimenti


sostituita con zero.
La mascheratura stessa è il prodotto del rumore medio misurato in ciascun
canale, che è contenuto nella tabella “$0-mask”, moltiplicato per un valore de-
nominato “mask-level”. Il rumore medio è misurato in una sotto-patch (pd
calculate-mask), il cui contenuto è 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 indipen-
dentemente 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 è 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” è
impostato su 10 e il segnale da cui sopprimere il rumore viene inviato attraver-
so la parte (a) della patch. Il rumore sarà 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ù alta progressivamente meno (naturalmente,
la soppressione effettiva del rumore potrebbe non essere l’applicazione più in-
teressante della patch; si potrebbe tentare di mascherare qualsiasi segnale con
qualsiasi altro).

Timbre stamp (“vocoder”)


L’esempio I05.compressor.pd (Figura 9.17) è un altro compander di canale che
viene presentato in preparazione per l’esempio I06.timbre.stamp.pd, che esami-
neremo 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 291

inlet~ filter input


*~ tabreceive~ $0-hann
rfft~

*~ *~
reciprocal
+~ modulus of inlet~ control source
+~ 1e-20 filter input
*~ tabreceive~ $0-hann
amplitude
q8_rsqrt~
rfft~
r squelch
*~ *~
expr 0.01*$f1*$f1 modulus
limit gain to +~
of control
clip~ squelch*squelch/100 q8_sqrt~ amplitude
*~ multiply the two amplitude
factors (for compression
and to apply new timbre)
/~ 1536

*~ *~
rifft~
*~ tabreceive~ $0-hann
outlet~

Figura
Figure 9.17: 9.17:
TimbreTimbre
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 è controllato
dal parametro “squelch”, che è elevato al quadrato e diviso per 100 per mappare
i valori da 0 a 100 in un range utile.
Un altro schema possibile è quello di limitare il guadagno dopo aver formato
il quoziente c[k]/f [k]. La limitazione del guadagno può, in entrambi i casi, essere
dipendente dalla frequenza. È anche utile, a volte, elevare il guadagno ad una
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 (Fi-
gura 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è, 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 argu-
ment). Se l’argomento è positivo, ogni blocco dell’output è 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 re-
ciproco 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 ampiez-
ze 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’inver-
so 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 condizionata-
mente con la versione phase-locking R0 [k]. Questo viene fatto usando gli oggetti
lrshift∼, i cui outputs vengono aggiunte a R[k] se “lock” è impostato su uno,
oppure no se è 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 recall previous output amplitude


whose phase we'll add to measured
tabreceive~ prev-imag phase precession

*~ *~ normalize (divide by the magnitude).


The 1e-20 is to prevent overflows.
+~ +~ 1e-20
*~ *~ 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 If "lock" is on, add two neighboring


complex amplitudes. The result will
lrshift~ -1 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~
tabsend~ prev-real
*~ tabreceive~ $0-hann r window-size
*~ r window-size set $1 4
'set' message to block
outlet~ expr 2/(3*$f1) allows variable size block~

Figura 9.18:
Figure Phase
9.18: vocoder
Phase vocoderper
for l’allungamento e lacontraction.
time stretching and 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 è più potente
di quello che è già ricircolato. Il risultato è un effetto di riverbero più coerente
rispetto a quello che può 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 del-
la 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-
parazione di N campioni, possono essere coerentemente incrociate. È possibile
realizzare una versione sintetica in tono del file sonoro originale utilizzando una
dissolvenza a catena circolare.

Esercizi
1. Un segnale x[n] è 1 per n = 0 e 0 altrimenti (un impulso). Qual è la sua
trasformata di Fourier (a N −punti) in funzione di k?

2. Supponendo inoltre che N sia un numero pari, qual è la trasformata di


Fourier se x[n] è 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 è 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 è 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 è 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 ripeti-
tive: sintesi additiva (Capitolo 1), sintesi wavetable (Capitolo 2) e waveshaping
(Capitoli 5 e 6). Questo capitolo introduce un quarto approccio, in cui le for-
me d’onda vengono costruite esplicitamente da segmenti di retta con estremi
controllabili. Questo approccio è, storicamente, tanto importante quanto gli
altri, ed era dominante durante il periodo di sintesi analogica, nel periodo 1965-
1985 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à, le onde a dente di sega, trian-
golare 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 ret-
tangolare 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, è 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é 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ù 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à quella di prendere in considerazione innanzitutto quelle forme d’onda cam-
pionate il cui periodo è un intero N . Poi, se vogliamo ottenere una forma d’onda
di un periodo non integrale (chiamiamolo τ , per esempio), approssimiamo τ co-
me 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 è
quella in cui viene prodotto il foldover ed una sua attenta gestione ci aiuterà a
controllarlo.

277
278 Capitolo 10. Forme d’onda classiche

(a)

(b)

(c)

Figura10.1:
Figure 10.1:Classical
Forme waveforms:
d’onda classiche:
(a) the (a) dente (b)
sawtooth, di sega, (b) triangolare
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ò
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ò contenere solo coefficienti
a valori reali o puramente immaginari (corrispondenti alle funzioni coseno o
seno). Ciò 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à, che N sia pari (se non lo è, possiamo sopra-
campionare per un fattore di due). Sappiamo dal Capitolo 9 che qualsiasi forma
d’onda (reale o complessa) X[n] può 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 è la frequenza fondamentale della forma d’onda, e


U = cos(ω) + i sin(ω)
è il numero complesso di modulo unitario il cui argomento è ω.
Per analizzare la prima simmetria ritardiamo il segnale X[n] di mezzo ciclo.
Poiché 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à 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à della somma delle due:
X[n] + X[n + N/2]
X 0 [n] = = A[0] + A[2]U 2n + · · · + A[N − 2]U (N −2)n
2
e X 00 metà 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 è uguale a se stesso spostato di mezzo ciclo, cioè 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ò implica che, in questo caso, X[n] possiede solo armonici
pari. Infatti, questo non dovrebbe sorprendere perché in questo caso X[n] dovrà
ripetersi ogni N/2 campioni, quindi la sua frequenza fondamentale è doppia
rispetto alla normale al periodo N .
Allo stesso modo, se X[n] = −X[n + N/2], allora X può avere solo armonici
dispari. Questo ci permette di dividere facilmente qualsiasi forma d’onda desi-
derata 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é 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é la funzione coseno è pari e la funzione seno è dispari). Allo stesso modo
di prima possiamo estrarre i coseni formando X 0 [n] come metà della somma:
X[n] + X[−n]
X 0 [n] = = A[0] + A[1] cos(ωn) + · · · + A[N − 1] cos(ω(N − 1)n)
2
e X 00 [n] come metà della differenza divisa per i:
X[n] − X[−n]
X 0 [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 è 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.
10.1. SYMMETRIES AND FOURIER SERIES 299

280 Capitolo 10. Forme d’onda classiche

(a)

(b)

(c)

(d)

Figura10.2:
Figure 10.2:Using
Utilizzo di una relazione
a symmetry relationdi
tosimmetria perand
extract even estrarre armonici pari
odd harmonics from
ae sawtooth
dispari dawave:
un’onda
(a) athe
dente di sega:
original (a) l’onda
sawtooth wave;a (b)
dente di sega
shifted by originale;
1/2 cycle;(b)
(c)
spostata di mezzo ciclo; (c) la loro somma (un’altra onda a dente
their sum (another sawtooth wave at twice the frequency); (d) their difference di sega al
(adoppio
squaredella frequenza); (d) la loro differenza (un’onda quadra).
wave).

10.1.1 Onde a dente di sega e simmetria


Come esempio, applichiamo la simmetria di spostamento (armonici pari e di-
spari) 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à del periodo originale (due volte
la frequenza fondamentale). Sottrarre le due onde a dente di sega (parte d) dà
una forma d’onda con pendenza zero ad eccezione che nelle discontinuità. Le
discontinuità 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 è un’onda quadra, una particolare
onda rettangolare in cui i due segmenti componenti hanno la stessa durata.
Questa simmetria è stata usata per ottenere un importante effetto nella
300 CHAPTER 10. CLASSICAL WAVEFORMS
10.2. Dissezione di forme d’onda classiche 281

(a)

L L
1 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 discon-
due discontinuità; (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 ge-


10.2
neratore Dissecting
a dente di sega, Buchla classicalha progettato waveforms un oscillatore che emette separa-
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 de-
composition 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
10.2
this Dissezione
idea further, and show how ditoforme composed’onda any classical classiche
waveform having only
jumps (discontinuities in value) but no corners (discontinuities in slope) as a
sumTraoflesawtooth
diverse conclusioni
waves of various che possiamo phasestrarre dalla decomposizione
and amplitudes. We then in armonici
develop the
pari/dispari
idea further, showingdell’ondahow a dente di sega (Figura
to generate waveforms 10.2), withunacorners
è che un’onda
(either quadra
in addi-
puòto,essere
tion scomposta
or instead in una using
of, jumps) combinazione
another lineare
elementary di duewaveform
onde a dente we’lldicall
sega.
the
Possiamo
parabolic wave.portare ulteriormente avanti questa idea e mostrare come comporre
qualsiasi forma d’onda classica che abbia solo salti (discontinuità in valore), ma
Suppose
non angoli first that a waveform
(discontinuità in pendenza) of period
comeNsomma has discontinuities
di onde a denteatdijsega different
con
points,
diverse L1fasi
, . . . e, Lampiezze.
j , all lying Quindi
on the cycle betweenulteriormente
sviluppiamo 0 and N , at which l’idea,the waveform
mostrando
jumps
comeby values forme
generare d1 , . . .d’onda
, dj . Acon negative value
angoli (sia in of d1 , for ainstance,
aggiunta salti o al would mean
loro posto)
that the waveform jumps from a higher to a
usando un’altra forma d’onda elementare che chiameremo onda parabolica. lower value at the point L 1 , and a
positive value of d would mean a jump from a
Supponiamo innanzitutto che una forma d’onda di periodo N abbia discon-
1 lower to a higher value.
tinuità in j punti
For instance, Figurediversi,
10.3 L 1 , . . .a)
(part , Lshows
j , tutti contenutiwaveform
a classical nel ciclo with
tra 0twoe Njumps:
, nei
(Lquali
,
1 1 d )la=forma
(0.3N, d’onda
−0.3) fa salti
and con
(L ,
2 2
valori
d ) =d 1 , . .
(0.6N, . , d j . Un
1.3). valore
Parts negativo
(b) and di d
(c)1 , show
per
esempio,waves,
sawtooth significa each chewithla forma
one ofd’ondathe two salta
jumps.da unThe valoresumpiù
of alto ad un
the two valore
sawtooth
inferiore
waves nel puntothe
reconstructs L1waveform
e un valore of positivo
part (a),diexceptd1 significa un saltoconstant
for a possible da un valore (DC)
inferiore
offset. ad un valore superiore.
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
= n/N di −
un’unità
1/2 nel punto zero è data da
over the period 0 ≤ n ≤ N − 1,s[n] and=repeats
n/N − 1/2 for other values of n. A sawtooth
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) è data da s0 [n] = ds[n − L]. La somma di tutte le
componenti a dente x[n] = dè1 s[n − L1 ] + · · · + dj s[n − Lj ]
di sega
The slopes of thex[n] segments= d1 s[n of −the
L1waveform
] + · · · + djofs[n part− 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
tutte la stessa, uguale alla somma d1 + · · · + d j
− delle pendenze delle componenti a dente di
sega: N
Square and rectangle waves have−horizontal d + · ·· + d line . segments (slope zero); for this
1 j
to happen in general the jumps must add to zero: d1 + · · · + dj = 0. N
Onde To quadrate
decompose e rettangolari
classical waveforms hanno segmentiwith corners orizzontali
we use(pendenza
the parabolic zero); per
wave,
fare ciò in genere i salti devono
which, over a single period from 0 to N , is equal to 1 avere somma zero: d + · · · + d j = 0.
Per decomporre le forme d’onda classiche 2con gli angoli usiamo l’onda para-
1 n 1 1
bolica che, in un solo periodo p[n]da=0 a( N ,−è uguale ) − a
2N 2  24
2
as shown in Figure 10.4. It p[n] is =a 1second-degree
n

1 1
−(quadratic) polynomial in the
2 N 2
variable n, arranged so that it reaches a maximum halfway through the cycle at 24
ncome
= N/2, the DC
mostrato component
in Figura 10.4. isSizero
tratta (oruninpolinomio
other words, the average
quadratico (cioè divalue over
secondo
one cycle of the waveform is zero), and so that
grado) nella variabile n, disposto in modo che raggiunga un massimo a metà the slope changes discontinuously
by −1/N del
percorso at the beginning
ciclo a n = N/2, of thelacycle.componente DC è zero (in altri termini, il
valore medio dell’onda su unwith
To construct a waveform cicloany desired
è pari a zero)number e inofmodo
corners che(suppose
la pendenzathey
are at the points M , . . . , M ,
cambi discontinuamente di −1/N all’inizio del ciclo.
i l with slope changes equal to c 1 , . . . , c l ), we sum up
the necessary parabolic waves:
Per costruire una forma d’onda con un qualsiasi numero desiderato di angoli
(supponiamo chex[n] siano = nei−N punti
c1 p[n − MM 1 , . .] .−
,M· · l·, −con
N ccambi di pendenza uguali a
1 l p[n − Ml ]
c1 , . . . , cl ), sommiamo le necessarie onde paraboliche:
An example is shown graphically in Figure 10.5.
If the sum x[n]x[n] is to = −N contain −M
c1 p[nline 1] − · · · −
segments p[n − Ml ].of curves), the n 2
N clsegments
(not
terms
Un esempio in the èsum must graficamente
mostrato sum to zero. inFrom Figura the10.5.
expansion of x[n] above, this
implies that c + · · · + c = 0. Sums
Se la somma x[n] deve contenere segmenti di retta
1 l obtained from existing
(non classical
segmentiwaveformsdi curve),
(as in the figure) will
2 always satisfy this
la somma degli n termini deve essere pari a zero. Dall’espansione condition because the changesdi x[n]in sopra,
slope,
over a cycle, must all add to zero for the waveform
ciò implica che c1 + · · · + cl = 0. Le somme ottenute dalle forme d’onda classiche to connect with itself.
esistenti (come nella figura) soddisfano sempre questa condizione perché le va-
riazioni della pendenza, lungo un ciclo, devono avere tutte somma zero affinché
la forma d’onda si riconnetta con se stessa.
10.3.
302 Serie di Fourier delle forme CHAPTER
d’onda elementari 283
10. CLASSICAL WAVEFORMS

(a)

(b)

(c)

Figura 10.5: Decomposing


Figure 10.5: Decomposizione di un’onda
a triangle triangolare
wave (part a) into (parte a) in due
two parabolic onde
waves (b
paraboliche
and c). (b e c).

10.3 Serie
Fourier di series
Fourier ofdelle forme d’onda
the elementary elemen-
waveforms
tari
In general, given a repeating waveform X[n], we can evaluate its Fourier series
coefficients
In generale,A[k]
databyuna
directly
formaevaluating
d’onda X[n]the Fourier
che si transform:
ripete, possiamo valutare i
coefficienti A[k] della sua serie di Fourier
1 valutando direttamente la trasformata
di Fourier: A[k] = FT {X[n]}(k)
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
but doing this=directly
N X[0]for+U X[1] +
sawtooth and + U −(N −1)k
· · · parabolic − 1]require pages of
X[Nwill
waves
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 richie-
we 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à 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 diffe-
simple 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à 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à 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ùFT grande
{x[n di
− k,
1]}o=equivalente,
[cos(kω) − iche k/N sia
sin(kω)] FTtrascurabile.
{x[n]}
Cominciamo dalla formula di spostamento temporale per le trasformate di
Fourier (pagina 252) impostando ≈ (1 lo
− iωk)FT
spostamento {x[n]}temporale ad un campione:
Here we’re using the assumption that, because N is much larger than k, kω =
2πk/N is much FT {x[n than
smaller − 1]}unity and we−can
= [cos(kω) i sin(kω)]FT {x[n]}
make approximations:
≈ (1 −≈iωk)FT
cos(kω) 1 , sin(kω) ≈ kω
{x[n]}.
Qui usiamo l’ipotesi che, poiché N è molto più grande di k, kω = 2πk/N è
molto più piccolo dell’unità 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 1 n=0
s[n] − s[n − 1] = − + .
N 0 altrimenti

Ignorando l’offset costante di − N1 , questo dà 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:

1 −iN
FT {s[n]}(k) ≈ =
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à la componente DC, FT {s[n]}(0), perché avremmo
dovuto dividere per k = 0. Invece, possiamo valutare il termine DC direttamente
come somma di tutti i punti della forma d’onda: è 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) è:

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 è

sin(kωn)

quindi l’intera serie di Fourier è:


 
1 sin(2ωn) sin(3ωn)
s[n] ≈ sin(ωn) + + + ··· .
π 2 3
10.3. Serie di Fourier delle forme d’onda elementari 285

10.3.2 Onda parabolica


La stessa analisi, con alcune differenze nel segno e nella normalizzazione, fun-
ziona per le onde paraboliche. Innanzitutto calcoliamo la differenza:
2 2
( Nn − 12 ) −( n−1
N −2)
1
p[n] − p[n − 1] = 2

2 −2 2
( Nn − 2N
N
) −( N
n
− N2N )
= 2

2n 1
N2
−N − N12
2

≈ −s[n]/N.
Quindi (ancora per k 6= 0, piccolo rispetto a N ) otteniamo:
−1 −iN
FT {p[n]}[k] ≈ N · 2πk · F T {s[n]}[k]

−1 −iN −iN
≈ N · 2πk · 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,
N
x[n] = s[n] − s[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)
2 + sin(3ωn)
3 + ···
i
sin(2ωn) sin(3ωn)
− sin(ωn) + 2 − 3 ± ···
h i
2 sin(3ωn) sin(5ωn)
= π sin(ωn) + 3 + 5 + ··· .

L’onda triangolare simmetrica (Figura 10.6) data da


N
x[n] = 8p[n] − 8p[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
Capitolo WAVEFORMS
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
The same 10.7 viene
analysis, with visualizzata
some differences un’onda triangolare
in sign generale, non
and normalization, simme-
works for
trica. Qui abbiamo disposto il ciclo in
parabolic waves. First we compute the difference:modo che, in primo luogo, la componente
DC sia zero (in modo che i due angoli abbiano altezze uguali e opposte) e in se-
condo luogo, in modo che il punto medio n del 2 2
(N − 12 )segmento
− ( n−1
N − 2)
più1 corto passi attraverso
il punto (0, 0). p[n] − p[n − 1] =
2
I due segmenti hanno pendenze pari a 1/M e −2/(N − 2M ), quindi la
2 N −2 2 è data da:
decomposizione nelle componenti n
− 2NaN onde
) − (paraboliche
n
(N N − 2N )
=
2
N2
x[n] = 2n (p[n 1 −M 1 ] − p[n + M ])
MN − N 2 2− N + N 2
= 2M
2
(qui usiamo la periodicità di p[n] per sostituire p[n − (N − M )] con p[n + M ]).
≈ −s[n]/N.
Il modo più generale di trattare le combinazioni lineari di onde elementari
(paraboliche k ̸=dente
So (again for e/o 0, small compared
di sega) to N )alla
è tornare we serie
get: di Fourier complessa, come
abbiamo fatto per trovare la serie per le onde elementari stesse. Ma in questo
caso particolare possiamo usare ≈ −1 −iNtrigonometrica per evitare il lavo-
un’identità
FT {p[n]}(k) · · FT {s[n]}(k)
ro extra di conversione avanti e indietro. N 2πk Innanzitutto sostituiamo la serie di
Fourier a valori reali: −1 −iN −iN
≈ h · ·
N 2 N 2πk 2πk
x(n) = 2π2 (M N −2M 2 ) cos(ω(n − M )) − cos(ω(n + M ))
N
=
4π 2 k 2 i
cos(2ω(n−M ))−cos(2ω(n+M ))
+
and as before we get the Fourier series: 4 + · · · .
! "
Ora usiamo l’identità, 1 cos(2ωn) cos(3ωn)
p[n] ≈ cos(ωn) + + + · · ·
2π 2 4  9 
b−a a+b
cos(a) − cos(b) = 2 sin sin
10.3.3 Square and symmetric triangle 2 waves2

in
Tomodo che,toad
see how esempio,
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 è una sempli-
ficazione poiché il primo termine seno non dipende da n; è solo un termine di
ampiezza. Applicare l’identità a tutti i termini dell’espansione per x[n] dà:

x[n] = a[1] sin(ωn) + a[2] sin(2ωn) + · · ·


10.3. FOURIER SERIES OF THE ELEMENTARY WAVEFORMS 305
10.4. Prevedere e controllare il foldover 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
1 sin(2πkM/N )
get the Fourier series by plugging in the Fourier
a[k] = · series 2for s[n]. twice:
2
π (M/N − 2(M/N ) ) 2 k
!
1 sin(2ωn) sin(3ωn)
x[n] ≈ nonsin(ωn)
Si noti che il risultato dipende+separatamente + dai valori · · ·M e N , ma solo
+ di
π 2 3
dal loro rapporto, M/N (non sorprende perché la forma dell’onda dipende da
questo rapporto). Se guardiamosin(2ωn)
ai piccoli valori di k: "
sin(3ωn)
−sin(ωn) + − ± ···
2 1 3
! k< "
2 4M/N sin(5ωn)
sin(3ωn)
= sin(ωn) + + + ···
π
l’argomento della funzione 3
seno è inferiore a π/25 e usando l’approssimazione
The≈symmetric
sin(θ) θ troviamotriangle
che a[k]wave
scende come 1/k,
(Figure 10.6)proprio
given bycome le parziali di un’on-
da a dente di sega. Ma per valori più grandi di k il termine seno oscilla tra 1 e
−1, in modo che le ampiezze N 2
x[n]scendano
= 8p[n] − irregolarmente
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 è 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é cos(3ωn)
le parziali debbano "
comportarsi come 1/k
cos(5ωn)
per i valori bassi ≈ k e2 come
x[n]di cos(ωn)
1/k +successivamente,
2 + + · · · il periodo di
è confrontare
π 9 25
una determinata parziale con la lunghezza del segmento corto, 2M . Per le par-
ziali con numero inferiore a N/4M , il periodo è almeno il doppio della lunghezza
10.3.4
del segmento General
corto, e, (non-symmetric)
a quella scala, la forma triangle wave
d’onda è quasi indistinguibile da
un’onda a dente di sega. Per le parziali con numerazione
A general, non-symmetric triangle wave appears in Figure 10.7. Here superiore a N/2M
we have,i
due angoli dell’onda triangolare sono separati da almeno
arranged the cycle so that, first, the DC component is zero (so that the un periodo e a queste
two
frequenze
corners havesuperiori i dueopposite
equal and angoli (ognuno
heights), conanddipendenza
second, soin frequenza 1/k 2 ) ven-of
that the midpoint
gono
the risoltisegment
shorter l’uno dall’altro. Nella the
goes through figura,
point l’accumulo
(0, 0). alla parziale 17 si verifica
alla lunghezza d’onda N/2M ≈ 1/17,
The two line segments have slopes equal to 1/Malla quale i due
andangoli
−2/(N sono separati
− 2M ), so da
the
un ciclo; poiché gli angoli sono opposti in segno,
decomposition into component parabolic waves is given by: si annullano l’uno con l’altro.

2
10.4 Prevedere
x[n] = e Ncontrollare
2
(p[n − M ] −ilp[n
foldover
+ M ])
M N − 2M
Ora passiamo alla situazione reale, in cui il periodo della forma d’onda non può
(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 4 8 16 32
partial number (k)

Figura 10.8: Spettro di magnitudine di un’onda triangolare con M/N = 0.03. I


2
Figuresegmenti
due di retta mostrano
10.8: Magnitude spectrumi comportamenti 1/k with
of a triangle wave e 1/kM/N
a frequenze
= 0.03. basse
The
e alte. 2
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 cin-


quantesima 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à dell’ordine di −32 decibel – abbastanza udibile.
Se la frequenza fondamentale viene aumentata ulteriormente, più parziali, an-
cora più forti, raggiungono la frequenza di Nyquist (metà 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ù 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à sono un punto di partenza migliore per la sintesi sottrattiva
(la tecnica classica più popolare). Nel caso si sperasse, è bene sapere che il
filtraggio sottrattivo non può rimuovere lil foldover una volta che è 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 è impostata sulla frequenza di Ny-
quist (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 pre-
occupa), quindi la prima parziale problematica è 685600/440 = 1558, la cui
ampiezza è −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 so-
lo una caduta 37 dB dalla fondamentale alla parziale più alta che subisce il
foldover. D’altra parte, aumentando la frequenza di campionamento per un ul-
teriore fattore di due riduce il foldover per la stessa quantità. Se noi vogliono
realmente ottenere 60 decibel di rifiuto del foldover – fino a 10 kHz dalla fonda-
mentale –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 è un modo semplice
per ottenere una protezione adeguata dal foldover. Se vogliamo permettere fre-
quenze più alte, avremo bisogno di un approccio più sofisticato. Una possibilità
è di sostituire le discontinuità 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é 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 è di circa 40 dB sotto la fondamentale. D’altra parte, le forze delle
parziali cominciano a cadere più velocemente di quelle di una vera onda a dente
di sega a circa la metà della frequenza di Nyquist. Questo è accettabile in alcune
situazioni, ma non in tutte.
La strategia di utilizzare le onde triangolari può 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 è 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 spet-
trali delle onde classiche può essere attribuita interamente ai loro salti e angoli.
Naturalmente questo è artificioso: nella realtà, l’energia si emana dall’intera
310
290 CHAPTER 10. CLASSICAL
Capitolo WAVEFORMS
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ò essere considerata approssimativamente come una serie di funzioni
This can limitato
a passo be regarded approximately
a banda disposte da as a series
estremo of band-limited step functions
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à, e questo è possibile
cutoff
perchéfrequency can bed’onda
l’intera forma takenèasdeterminata
12ω (if ω isdallethe loro
fundamental
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ò essere affrontato
instance.
realizzando versioni a this
Extending banda process
limitata forever,
dei salti wee would eventually
degli angoli. Poichésee the sono
i salti ideal
band-limited step function, twice per (arbitrarily long)
la più grave minaccia di foldover, ci concentreremo su essi, anche se l’approccio period.
quiIndescritto
practicefunziona
we can do quite well using
perfettamente anche only theangoli.
per gli first two partials (one and
threePertimes the fundamental).
costruire una funzioneFigure a passo10.10 (partina)banda,
limitato showstutto
a two-partial
quello che approx-
dob-
imation of a square wave. The cutoff frequency is
biamo fare è aggiungere le componenti di Fourier di un’onda quadra, quante four times the fundamental;
soneifvogliamo,
the period of the raccogliere
e quindi waveform isla eight funzionesamples,
a passo thesucutoff is at thedei
uno qualsiasi Nyquist
salti.
frequency. Part (b) of the figure shows how we
La Figura 10.9 mostra la somma parziale Fourier corrispondente ad un’onda could use this step function
toquadra
synthesize,
usandoapproximately,
le parziali 1, 3,a 5, square
7, 9 ewave11. Laof twice
frequenza the period.
di taglioIfpuòtheessere
cutoff
frequency is the Nyquist frequency,
presa come 12ω (se ω è la frequenza fondamentale). the period of the waveform of part (b) is 16
samples. Each transition lasts 4 samples, because the
Se raddoppiamo il periodo dell’onda quadra, per arrivare alla stessa frequen-band-limited square wave
has a period
za di of eight samples.
taglio, aggiungeremo il doppio delle parziali di Fourier, fino alla numero 23,
We can make
ad esempio. Estendendo a band-limited sawtoothper
questo processo wave by adding
sempre, thepotremmo
alla fine four-sample-long
vedere
transition to a ramp function so that the end of the
la funzione a passo limitato in banda ideale, due volte per (un arbitrariamente resulting function meets
smoothly with itself end to end, as shown in part (c) of the figure. There is one
lungo) periodo.
transition per period,
Nella pratica so thefare
possiamo period must bebene
abbastanza at least
usando four samples;
solo le primethe duehighest
par-
fundamental
ziali (uno e tre frequency
volte la we can synthesize
fondamentale). Lathis way10.10
Figura is half(parte
the Nyquist
a) mostra frequency.
un’ap-
For this or lower
prossimazione di fundamental
un’onda quadra frequency, the foldover
a due parziali. La frequenza products all turn
di taglio out to
è quattro
bevolte
at least 60 dB quieter
la fondamentale; thansethe
quindi fundamental.
il periodo della forma d’onda è di otto campio-
ni,Figure 10.11 shows
la frequenza how
di taglio to generate
è alla frequenzaa di sawtooth
Nyquist.wave with a(b)
La parte spliced transi-
della figura
tion.
mostra The twopotremmo
come parameters are f , the
utilizzare questafundamental
funzione afrequency, and b, the band
passo per sintetizzare, ap-
limit, assumed to beun’onda
prossimativamente, at leastquadra as large di asduef .volte
We ilstart with Se
periodo. a digital sawtooth
la frequenza di
taglio
wave (a èphasor)
la frequenza
rangingNyquist,
from -0.5 il periodo
to 0.5 indellavalue.forma
The d’onda della
transition willparte
take(b) è
place
di 16 campioni. Ogni transizione dura 4 campioni,
at the middle of the cycle, when the phasor crosses 0. The wavetable is traversed in quanto l’onda quadra
inlimitata
a constant in banda
amount ha of
untime,
periodo 1/b,diregardless
otto campioni.of f . The table lookup is taken to
be non-wraparound,
Possiamo fare una soonda
thatainputs dente di outsega
of range
limitata output
in bandaeither -0.5 or 0.5.
sommando la tran-
sizione
At the lunga
end quattro campioni
of the cycle a una funzione
the phasor di rampajumps
discontinuously in modofrom che-0.5
l’estremo
to 0.5,
della
but thefunzione
output risultante si incontri
of the transition senza
table problemi
jumps an equal con se andstessa, estremo
opposite con
amount,
soestremo,
the result come mostrato nella
is continuous. parte the
During (c) portion
della figura.
of theC’è una transizione
waveform in whichper the
periodo, quindi il periodo deve essere almeno di quattro campioni; la frequenza
fondamentale più alta che possiamo sintetizzare in questo modo è metà del-
la frequenza di Nyquist. Per questa frequenza fondamentale o per quelle più
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

0.5

-0.5

b/f

0.5

-0.5

-0.5 0.5

OUT

Figura
Figure 10.11: Block
Diagramma a blocchi
diagram per la
for making realizzazione
a sawtooth wavediwith
un’onda a dente
a spliced di
transi-
sega
tion. con una spliced transition.

basse, i prodotti di foldover risultano essere almeno 60 dB più 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à luogo alla metà del ciclo, quando il phasor attraversa lo 0. L wavetable è
attraversata in una quantità 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à uguale e opposta, quindi il
risultato è 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 0 0
phasor~ / 100 / 100 / 100

phasor~ sawtooth wave -~ -~ -~


-~ 0.5 remove DC bias wrap~ wrap~ wrap~

wrap~ 1/2 cycle -~ 0.5 -~ 0.5 -~ 0.5


out of
-~ 0.5 AMPLITUDES (percent)
phase
0 0 0
+~ -~ sum and difference
/ 100 / 100 / 100
(a) *~ *~ *~
+~
+~ (b)
|
(OUT)

Figura 10.12:
Figure 10.12: Combining
Combinando onde a waves:
sawtooth dente di
(a)sega: (a)and
adding sommare e sottrarre
subtracting onde
sawtooth
a dente di sega 1/2 ciclo fuori fase, per estrarre armonici pari e dispari;
waves 1/2 cycle out of phase, to extract even and odd harmonics; (b) combining (b)
combinare tre onde a dente di sega con ampiezze e fasi
three sawtooth waves with arbitrary amplitudes and phases. arbitrarie.

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 saw-
tooth 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 different frequencies so that the relative phase
314 CHAPTER 10. CLASSICAL WAVEFORMS
294 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:
Figure 10.13: Combining
Combinazione di ondewaves
parabolic paraboliche
to makeper creare unawith
a waveform forma d’onda
three cor-
con tre angoli.
ners.

changes continuously.
J02.trapezoids.pd (parteTheir sumfigura)
b della is a rectangle
mostra la wave whose width
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
ha fino J04.corners.pd
a tre salti (Figure
e nessun angolo. 10.13)
I tre shows
segmenti how to
di retta add
sono parabolicfinché
orizzontali wavesi
to make a combined waveform with three corners. Each parabolic
tre salti hanno somma zero; altrimenti i segmenti sono inclinati per compensare wave is com-
puted from a sawtooth wave (ranging from -0.5 to 0.5) by squaring
i salti sbilanciati in modo che il risultato si ripeta da un periodo all’altro. it, multi-
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 è un’onda rettangolare la
of line segments, whose corners are located according to the three phases and
cui larghezza varia nel tempo. Questo è 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 pa-
Strategies
raboliche per for creareband-limiting
una forma d’onda sawtooth
combinata waves
con tre angoli. Ogni onda
parabolica è calcolata a partire da un’onda a dente di sega (che varia da −0.5 a
Example J05.triangle.pd
0.5), elevandola (Figure
al quadrato, 10.14, part poi
moltiplicandola a) shows
per 0.5a esimple way infine
sottraendo to make la
acomponente
triangle wave, in which only the slope of the rising and falling
DC pari a −1/12, o −0.08333. La patch combina tre di tali onde segment are
paraboliche con ampiezze e fasi controllabili. Finché la somma delle ampiezze
è pari a zero, la forma d’onda risultante è 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 295

frequency slopes
0 up down 0 frequency
phasor~ 0 0 phasor~
/ 100 / 100
0 slope of rise segment
*~ -1 *~
*~
+~ 1 0 Duty cycle
*~ / 100 make the phasor cross zero at
the desired point of the cycle.
min~ -~
0 slope of decay segment
|
(OUT) * -1 multiply by desired slope, negating
so that the segment points downward
*~
(a) (b) minimum of rise and decay segments
min~ (makes a triangle wave)

clip~ 0 1 clip between 0 and 1 to make the


| sustain and silent regions.
(OUT)

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
triangle (a)asun’onda triangolare
the minimum of two linecome minimo
segments; di duea triangle
(b) clipping segmentiwavedi retta; (b)
ritagliare
to un’onda triangolare per fare un “inviluppo”.
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 è la pendenza), e lo stesso phasor, sottratto da uno, dà 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ò essere ritagliata sopra e sotto per creare un’onda
trapezoidale, che può essere utilizzata sia come impulso audio-frequenza o, alla
frequenza fondamentale più 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 è 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 è 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 è zero per il resto del ciclo.
L’esempio J07.oversampling.pd mostra come utilizzare la tecnica del sovra-
campionamento per ridurre il foldover quando si utilizza un oggetto phasor∼
come onda audio a dente di sega. Una sottopatch, eseguita a 16 volte la fre-
quenza 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 so-
pra 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 con-
trollabile. Questa ha il vantaggio di essere più diretta (e di solito meno costosa
computazionalmente) rispetto al metodo di sovra-campionamento. D’altra par-
te, questa tecnica dipende dall’uso del reciproco della frequenza fondamentale
come segnale audio in proprio (per controllare l’ampiezza del segnale di swee-
ping 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 è 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 è la sua ampiezza RMS?


3. Nel paragrafo 10.3 un’onda quadra è stata presentata come una forma
d’onda dispari la cui serie di Fourier consisteva di funzioni sinusoidali (e
non cosinuodali). Se l’onda quadra è 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 è 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 noise∼ , 240
bang∼ , 272 notein , 79
block∼ , 200 osc∼ , 16
outlet∼ , 98
bp∼ , 240
outlet , 98
catch∼ , 102
pack , 45
clip∼ , 131
pipe , 73
cos∼ , 49
cpole∼ , 244 poly , 108
czero rev∼ , 244 q8 rsqrt∼ , 274
czero∼ , 244 r∼ , 51
dac∼ , 18 receive∼ , 51
dbtorms , 18 receive , 21
delay , 73 rfft∼ , 269
delread∼ , 196 rifft∼ , 270
delwrite∼ , 196 rpole∼ , 244
del , 73 rzero rev∼ , 244
rzero∼ , 244
div , 108
r , 21
env∼ , 79 s∼ , 51
expr , 51
samphold∼ , 51
fft∼ , 269
select , 74
fiddle∼ , 131
sel , 74
ftom , 21
send∼ , 51
hip∼ , 47, 240
send , 21
inlet∼ , 98 snapshot∼ , 79
inlet , 98 stripnote , 79
line∼ , 19
switch∼ , 200
line , 74 s , 21
loadbang , 51 tabosc4∼ , 44
lop∼ , 240 tabread4∼ , 45
lrshift∼ , 274 tabreceive∼ , 269
makenote , 108 tabsend∼ , 272
mod , 108 tabwrite4∼ , 45
moses , 73 throw∼ , 102
mtof , 21 trigger , 82

297
298 Indice Analitico

t , 82 covarianza, 10
unpack , 102 creation arguments, 15
untill , 162
DC, 115, 222
vcf∼ , 241 debouncing, 65
vd∼ , 197 decibel, 4
vline∼ , 76 delay
wrap∼ , 51 composto, 70
in Pd, 73
abstraction, 97 semplice, 70
ADSR, generatore di inviluppo, 85 su flussi di controllo, 70
aliasing, 56 diagramma polo-zero, 220
ampiezza, 1, 2 dimensione della finestra, 194
complessa, 169 dinamica, 5
misure di, 2 distorsione, 121
di picco, 3 dominio
RMS, 3 del tempo, 170
analisi di Fourier, vedi Fourier, analisi della frequenza, 170
di Doppler, effetto, 189
angolo di rotazione, 180 duty cycle, 38
argomento (di un numero complesso),
166 eco, densità di, 183
armonici, 11 envelope follower, 65, 235
envelope generator, vedi generatore di
banco di voci, 94 inviluppo
banda di transizione, 211 equalizzazione, 213
banda passante, 210 estremi di banda, 116
battimento, 22 evento, 65
beating, vedi battimento
Bessel, funzioni di, 137 fase iniziale, 1
box, 14 Fast Fourier transform, vedi Trasfor-
GUI, 15 mata di Fourier veloce
message, 14 feedback, 154
number, 15 filtro, 173, 209
object, 14 a pettine, 173
ricircolante, 175
campionamento, 30 all-pass, 182, 233
esempi, 106 composto, 217
campione, 1 di Butterworth, 225
carrier signal, vedi segnale portante elementare
cents, 7 non-ricircolante, 214
Chebychev, polinomi di, 134 ricircolante, 217
classe, 15 passa-alto, 210
clipping, 25 passa-banda, 211
clipping function, vedi funzione di ta- passa-basso, 210
glio peaking, 213
colorazione, 183 shelving, 213
compander, 259 finestra, 3, 257
coniugato complesso, 216 flusso di controllo, 59
controllo, 57 numerico, 60
Indice Analitico 299

in Pd, 70 indice
foldover, 56 di modulazione, 127
fondamentale, 11 di waveshaping, 121
forma polare (di un numero comples- individuazione degli eventi, 65
so), 166 interferenza, 165
forma rettangolare (di un numero com- intermodulazione, 124
plesso), 166 invarianza temporale, 170
formante, 141 inviluppo spettrale, 31, 115
forme d’onda classiche, 277
formula di conversione nota/frequenza, kernel di Dirichlet, 250
6
Fourier larghezza di banda, 141, 211
analisi di, 247
magnitudine (di un numero comples-
trasformata di, 248
so), 166
formula di spostamento della fa-
merging su flussi di controllo, 70
se, 252
in Pd, 73
formula di spostamento tempo-
message box, vedi box
rale, 252
messaggi, 15, 70
su finestra, 257
MIDI, 6
veloce, 269
modulating signal, vedi segnale modu-
frequency domain, vedi dominio della lante
frequenza modulazione
frequenza ad anello, 116
angolare, 1 di frequenza, 23, 126
centrale, 141, 211 modulo (di un numero complesso), 166
di campionamento, 1 muting, 90
modulante, 127
portante, 127, 142 noise gate, 259
risposta in, vedi risposta in fre- number box, vedi box
quenza numeri complessi, 166
funzione
di taglio, 121 object box, vedi box
di trasferimento, 90, 120, 209 onda
finestra, 254 a dente di sega, 26, 277
finestra di Hann, 146, 254 parabolica, 281
quadra, 280
gain, vedi guadagno rettangolare, 277
gamma dinamica, 259 triangolare, 277
generatore di inviluppo, 9, 85 oscillatore, 7
ADSR, 85 ottava, 6
resettare, 92
generatore di transiente, 85 pacchetto d’onda, 148
generatori unitari, 7 PAF (generatore di formante allineata
guadagno, 173 in fase), 152
GUI box, vedi box parte immaginaria di un numero com-
plesso, 166
hop size, 257 parte reale di un numero complesso,
166
impulso, 172, 284 parziali, 115
incapsulamento, 97 patch, 7, 14
300 Indice Analitico

genitore, 97 sinusoide, 1
periodo, 11 sottopatch, 97
phase locking, 266 spettro, 113
pole-zero plot, vedi diagramma polo- continuo, 115
zero discreto, 113
polifonia, 94 rumoroso, 115
potenza media, 3 stopband, 211
prima differenza, 283 attenuazione della, 211
pruning su flussi di controllo, 70 switch-and-ramp, 92
in Pd, 73
tags, 96
qualità (“q”), 233 tasks, 95
tempo di stabilizzazione, 232
rete di ritardo tempo logico, 57
lineare, 170 tempo reale, 57
stabile, 175 Teorema del Limite Centrale, 125
unitaria, 179 Teorema di Nyquist, 55
ricerca su tabelle, vedi wavetable loc- threshold detection, 65
kup timbre stamping, 261
riflessione, 181 timbre stretching, 35, 144
ripple, 210 time domain, vedi dominio del tempo
risincronizzazione di un flusso di con- toggle, 22
trollo, 70 transition band, vedi banda di transi-
in Pd, 74 zione
risposta in frequenza, 173
valore assoluto (di un numero comples-
sample, vedi campione so), 166
sample number, 1 vocoder, 261
sample rate, vedi frequenza di campio-
namento waveshaping, 120
sampling, vedi campionamento wavetable lockup, 25
segnale non-interpolante, 26
armonico, 113 wavetables
formule di trasposizione momen-
inarmonico, 115
tanea, 31
modulante, 116
formule di trasposizione per loo-
portante, 116
ping, 30
segnali audio digitali, 1
window function, vedi funzione finestra
semitono, 6
window size, vedi dimensione della fi-
sequenza 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 view-


points. 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 Pro-
ceedings 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 synthesi-


zed musical instrument tones. Journal of the Acoustical Society of America,
62:454–462, 1977.

[Har87] William M. Hartmann. Digital waveform generation by fractional ad-


dressing. 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 Conferen-
ce, 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 frequen-
cy 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.

Potrebbero piacerti anche