Algoritmo di Karplus-Strong: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Tappoz (discussione | contributi)
creazione pagina+cat+interwiki
 
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti.
 
(38 versioni intermedie di 21 utenti non mostrate)
Riga 1:
L'algoritmo di '''Karplus-Strong''' è un metodo usato nel campo dell'audio[[acustica]] che manipola una [[forma d'onda]] attraverso una linea di [[delay]] con dei [[filtroFiltro (elettronica)|filtri]] per simulare suoni di corde plettrate ([[chitarra]]) o soggette a percussione ([[pianoforte]]). È una tecnica di [[sintesi sottrattiva (musica elettronica)|sintesi sottrattiva]] basata sulla [[retroazione]] (''feedback loop'') simile a quella di un [[combfiltro filtercomb]].
 
== Come funziona ==
* viene generata una breve forma d'onda (di lunghezza di L campioni) di eccitazione. Nell'algoritmo originale era un [[rumore bianco]], ma può essere qualsiasi segnale a [[banda radio|banda]] estesa.
* questa eccitazione è portata in output e simultaneamente in retroazione in una catena di ritardi (delay line) lunga L campioni.
* l'uscita della catena di ritardi è portata ad un [[Filtro (elettronica)|filtro]]. Il [[guadagno (elettronica)|guadagno]] del filtro deve essere minore di 1 a tutte le frequenze. Di solito si tratta di un [[filtro passa basso]] del primo ordine.
* l'output filtrato è simultaneamente mixato in output e all'indietro in retroazione nella catena dei ritardi.
 
Di seguito i maggiori dettagli:
== Accordatura della corda ==
Il [[delay]] richiesto ''D'' per una frequenza fondamentale data ''F''<sub>1</sub> è calcolato in base alla formula ''D'' = ''F''<sub>''s''</sub>/''F''<sub>1</sub> dove ''F''<sub>''s''</sub> è la [[frequenza di campionamento]]. La lunghezza della delay line è un numero multiplo del [[periodo]] di campionamento. Per ottenere un ritardo (delay) frazionario si usano dei filtri di [[interpolazione]]. Possono essere usati sia filtri di tipo [[FIR]] sia di tipo [[IIR]]. Con i filtri FIR si ha il vantaggio che i transitori si concludono in un nemero finito di passi.
 
La parte fondamentale dell'algoritmo di Karplus-Strong è l'utilizzo di un [[filtro comb]] del tipo a [[retroazione]] settato in modo da sfruttare la capacità intrinseca dell'algoritmo di essere strutturalmente identico al più semplice modello fisico a guida d'onda.
Mantenendo il periodo (= lunghezza della linea di ritardi) constante si ottiengono vibrazioni simili a quelle di una [[corda]] o una [[campana]]. Aumentando il periodo velocemente subito dopo il transitorio si producono suoni di tipo percussivo ([[tamburo|tamburi]]).
 
L'<math>\alpha</math> della formula seguente per un filtro comb a ''retroazione'' (feedback):
== Evoluzioni dall'originale formulazione ==
:<math>
[[Julius O. Smith III]] ed altri hanno osservato che l'algoritmo di Karplus-Strong era analogo dal punto di vista fisico all'approccio a [[guida d'onda]] di un segnale. La [[retroazione]] rappresentava la perdita totale di un'[[onda]] (prodotta ad esempio da una corda) in un periodo. Grazie a questa intuizione è possibile modellare a onde acustiche perché l'algoritmo di Karplus-Strong è strutturalmente identico ai più semplici modelli a guida d'onda.
\ y[n] = x[n] + \alpha y[n-K] \,
</math>
assume il valore di [[resistenza elettrica|resistenza]] <math>R^{L}</math> che quindi diventa:
:<math>
\ y[n] = x[n] + R^{L} y[n-L] \,
</math>
con [[funzione di trasferimento]]:
:<math>
\ H(z) = \frac{Y(z)}{X(z)} = \frac{1}{1 - R^{L} z^{-L}} \,
</math>
I poli di <math>H(z)</math> si ricavano da <math>z^{-L}=R^{L}</math> e quindi il filtro ha ''L'' [[Polo (analisi complessa)|poli]] <math>z=R e^{(j2l\pi)/L}</math> per <math>l=0,...,L-1</math> equispaziati attorno al cerchio (nel [[piano complesso]]) di raggio R. Il filtro produce uno spettro armonico con picchi in corrispondenza di multipli interi della frequenza fondamentale
:<math> f_0 = \frac{F_s}{L} \ </math> Hz
 
Un'[[Onda (fisica)|onda]], considerata come una perturbazione, si propaga attraverso il mezzo (confinato ad essere di lunghezza ''L'') e rimbalza avanti e indietro in base alle condizioni al contorno che la regolano. Ad ogni passaggio attraverso <math>R^{L}</math> nel ramo della retroazione viene dissipata energia. Se il segno dell'onda è invertito ad ogni [[riflessione (fisica)|riflessione]] <math>R^{L}</math> ha segno negativo e le formule risultanti sono:
== Note ==
:<math>
\ y[n] = x[n] - R^{L} y[n-L] \,
</math>
:<math>
\ H(z) = \frac{Y(z)}{X(z)} = \frac{1}{1 + R^{L} z^{-L}} \,
</math>
In questo caso i poli saranno <math>z=R e^{(j(2l+1)\pi)/L}</math> per <math>l=0,...,L-1</math>. Questo significa che i corrispondenti picchi saranno tutti shiftati di un angolo pari a <math>\pi/L</math>. In questo modo le frequenze dei picchi saranno interi multipli ''dispari'' della frequenza fondamentale
:<math> f_0 = \frac{F_s}{2L} \ </math> Hz
 
=== Ridefinizione del filtro comb ===
* {{cite journal
[[Julius O. Smith III]] ed altri hanno osservato che l'algoritmo di Karplus-Strong era analogo dal punto di vista fisico all'approccio a [[guida d'onda]] di un segnale. La [[retroazione]] rappresentava la perdita totale di un'[[Onda (fisica)|onda]] (prodotta ad esempio da una corda) in un periodo. Grazie a questa intuizione è possibile modellare a onde acustiche perché l'algoritmo di Karplus-Strong è strutturalmente identico ai più semplici modelli a guida d'onda.
| author = Kevin Karplus, Alex Strong
 
| year = 1983
Alla luce di quanto argomentato la struttura del filtro comb può essere ridefinita per sintetizzare suoni di tipo armonico come quelli prodotti da una [[chitarra]]. Le modifiche che andranno fatte dovranno implementare un decadimento dipendente dalla frequenza delle singole armoniche. In altre parole il modulo delle armoniche dovrà decadere man mano che le frequenze aumentano in modo che le armoniche più basse durino di più di quelle più alte. Questo si ottiene inserendo in diretta (non in retroazione) un [[filtro passa basso]] <math>H_{lp}</math> creando un ''filtro comb passa-basso''. Intuitivamente ad ogni passaggio le componenti ad alta frequenza sono attenuate in maniera più marcata di quelle a bassa frequenza. Considerando un filtro [[Finite impulse response|FIR]] del primo ordine le formule diventeranno le seguenti:
| title = Digital Synthesis of Plucked String and Drum Timbres
 
| journal = Computer Music Journal
:<math>
\ y[n] = \frac{1}{2} \cdot [x[n] + x[n-1]] \,
</math>
:<math>
\ H_{lp}(z) = \frac{1}{2} \cdot [1+z^{-1}] \,
</math>
 
La [[risposta in frequenza]] corrispondente è:
:<math>H_{lp}(f)=cos(\pi f) \cdot e^{-j\pi f}</math>
Da notare che la fase del filtro passa basso aggiunge un ulteriore ritardo di mezzo campione. Come conseguenza la nuova frequenza fondamentale generata sarà:
:<math> f_0 = \frac{F_s}{L+1/2} \ </math>
Queste piccole deviazioni in frequenza risultano insignificanti se si considera un valore di resistenza R vicino a 1.
 
== Accordatura della corda ==
Il [[delay]] richiesto ''D'' per una frequenza fondamentale data ''F''<sub>1</sub> è calcolato in base alla formula ''D'' = ''F''<sub>''s''</sub>/''F''<sub>1</sub> dove ''F''<sub>''s''</sub> è la [[frequenza di campionamento]]. La lunghezza della delay line è un numero multiplo del [[periodo]] di [[campionamento (teoria dei segnali)|campionamento]]. Per ottenere un ritardo (delay) frazionario si usano dei filtri di [[interpolazione]]. Possono essere usati sia filtri di tipo [[Finite impulse response|FIR]] sia di tipo [[Infinite impulse response|IIR]]. Con i filtri FIR si ha il vantaggio che i transitori si concludono in un nemeronumero finito di passi.
 
Mantenendo il periodo (= lunghezza della linea di ritardi) constantecostante si ottiengonoottengono vibrazioni simili a quelle di una [[corda]] o una [[campana]]. Aumentando il periodo velocemente subito dopo il transitorio si producono suoni di tipo percussivo ([[tamburo|tamburi]]).
 
== Bibliografia ==
 
* {{Cita pubblicazione
| authorautore = Kevin Karplus, Alex Strong
| yearanno = 1983
| titletitolo = Digital Synthesis of Plucked String and Drum Timbres
| url = https://archive.org/details/sim_computer-music-journal_summer-1983_7_2/page/43
| journalrivista = Computer Music Journal
| volume = 7
| issuenumero = 2
| pagespp = 43-55
| publisher editore= MIT Press
}}
 
* {{citeCita journalpubblicazione
| authorautore = David A. Jaffe, Julius O. Smith
| yearanno = 1983
| titletitolo = Extensions of the Karplus-Strong Plucked String Algorithm
| url = https://archive.org/details/sim_computer-music-journal_summer-1983_7_2/page/56
| journalrivista = Computer Music Journal
| volume = 7
| issuenumero = 2
| pagespp = 56-69
| publisher editore= MIT Press
}}
 
* {{Cita web|url=https://worldwide.espacenet.com/textdoc?DB=EPODOC&IDX=US4649783|autore=Alexander R. Strong, Kevin J. Karplus|titolo=Wavetable Modification Instrument and Method for Generating Musical Sound|data=17 marzo 1987}}
* {{US patent reference|
number=4649783|
y=1987|m=03|d=17|
inventor=Alexander R. Strong, Kevin J. Karplus|
title=Wavetable Modification Instrument and Method for Generating Musical Sound}}
<!-- filed May 24, 1984, now expired -->
 
* Moore, F. Richard. ''Elements of Computer Music''. Upper Saddle River: Prentice-Hall, 1990. ISBN 0-13-252552-6.
* Dispense del corso di Informatica Musicale dell'[[Università di Padova]] del professor DePoli [https://web.archive.org/web/20071130040156/http://www.dei.unipd.it/corsi/musica/ Sito web del corso] pubblicate sotto [[licenza (informatica)|licenza]] [[Creative Commons]] ''Attribuition-NonCommercial-ShareAlike''
 
== Altri progetti ==
* Dispense del corso di Informatica Musicale dell'[[Università di Padova]] del professor DePoli [http://www.dei.unipd.it/corsi/musica/ Sito web del corso] pubblicate sotto [[licenza]] [[Creative Commons]] ''Attribuition-NonCommercial-ShareAlike''
{{interprogetto}}
 
== LinkCollegamenti esterni ==
* [{{cita web|http://ccrma.stanford.edu/~jos/pasp/Karplus_Strong_Algorithm.html |L'algoritmo di Karplus-Strong]}}
* [{{cita web|http://ccrma.stanford.edu/~jos/Mohonk05/Karplus_Strong_Algorithm.html |Esempi sonori]}}
{{portale|musica}}
 
[[Categoria:Teoria dei segnali]]
[[Categoria:Tecnologia musicale]]
[[Categoria:TeoriaElaborazione numerica dei segnali]]
 
[[Categoria:Filtri elettronici]]
[[en:Karplus-Strong string synthesis]]