Algoritmo di Karplus-Strong: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
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'
== 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):
:<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:
:<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 ===
▲[[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
▲Mantenendo il periodo (= lunghezza della linea di ritardi)
== Bibliografia ==
* {{Cita pubblicazione
| url = https://archive.org/details/sim_computer-music-journal_summer-1983_7_2/page/43
| volume = 7
|
|
|
}}
* {{
|
|
|
| url = https://archive.org/details/sim_computer-music-journal_summer-1983_7_2/page/56
|
| volume = 7
|
|
|
}}
* {{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}}
<!-- 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}}
==
*
*
{{portale|musica}}
[[Categoria:Teoria dei segnali]]▼
[[Categoria:Tecnologia musicale]]
[[Categoria:Filtri elettronici]]
|