diode_ladder

diode_ladder — Implémentation d'un filtre en échelle à diodes à 4 pôles avec rétroaction sans retard.

Description

Implémentation d'un filtre passe-bas à diodes à 4 pôles (24 dB/oct) avec rétroaction sans retard. Ce type de filtre fut utilisé à l'origine dans l'EMS VCS3 et il fut le filtre résonnant du Roland TB-303.

Syntaxe

asig diode_ladder ain, xcf, xk [, inlp, isaturation, istor]

Initialisation

istor --état initial de l'espace de données interne. Comme le filtrage comprend une boucle de rétroaction sur la sortie précédente, l'état initial de l'espace de stockage utilisé est significatif. Une valeur nulle provoquera l'effacement de cet espace ; une valeur non nulle autorisera la persistance de l'information précédente. La valeur par défaut est 0.

Exécution

asig -- signal de sortie passe-bas.

ain -- signal d'entrée.

xcf -- fréquence de coupure du filtre (taux-i-, k ou a).

xk -- valeur de rétroaction du filtre (taux-i-, k ou a) qui contrôle la résonance. Dans l'intervalle 0.0-17.0. L'auto-oscillation survient à 17.0.

knlp (facultatif, 0 par défaut) -- méthode de traitement non linéaire. 0 = pas de traitement, 1 = TNL de grande qualité, 2 = TNL de faible qualité (plus rapide). La méthode 1 utilise (1.0 / tanh(ksaturation)) * tanh(ksaturation * input). La méthode 2 utilise tanh(ksaturation * input). L'activation du TNL peut pousser la sortie globale du filtre au-delà de l'unité et doit être compensée pour l'environnement externe du filtre.

ksaturation (facultatif, 1 par défaut) -- quantité de saturation à utiliser pour le traitement non linéaire. Les valeurs > 1 augmentent la pente de la courbe de TNL.

Exemples

Voici un exemple de l'opcode diode_ladder. Il utilise le fichier diode_ladder.csd.

Exemple 209. Exemple de l'opcode diode_ladder.

<CsoundSynthesizer>
<CsOptions>
-o dac
</CsOptions>
<CsInstruments>
sr=44100
ksmps=16
nchnls=2
0dbfs=1


gi_sine ftgen 0, 0, 65537, 10, 1

gkcut init 6000


instr modulation 
  gkcut = lfo(4000, 0.1) + 6000 
endin

instr bass	 

  iamp = ampdbfs(-12) 
  ipch = cps2pch(p4, 12)

  asig = vco2(0.5, ipch, 0)

  acut = expon:a(i(gkcut), p3, 200) 
  aout = diode_ladder(asig, acut, 17, 1, 4)

  aout *= expseg:a(1.0, p3 - 0.05, 1.0, 0.05, 0.001) 

  aout = limit(aout, -1.0, 1.0)

  outc(aout, aout)

endin


gipat[] init 8
gipat[0] = 6.00
gipat[1] = 7.00
gipat[2] = 6.00
gipat[3] = 7.00
gipat[4] = 5.07
gipat[5] = 6.07
gipat[6] = 5.08
gipat[7] = 6.08


instr player
  indx = p4

  ;; play instrument
  if(gipat[indx] > 0) then
    schedule("bass", 0, 0.2, gipat[indx])
  endif

  ;; temporal recursion
  schedule("player", 0.2, 0.1, (indx + 1) % lenarray(gipat))

endin

schedule("modulation", 0, -1)
schedule("player", 0, 0.1, 0)
event_i("e", 0, 0.1 * 128)

</CsInstruments>

<CsScore>  
</CsScore>

</CsoundSynthesizer>


Références

Ce filtre est basé sur les travaux de Will Pirkle qui emploie le travail de Vadim Zavalishin pour créer des implémentation de filtres analogiques à transformation préservant la topologie (TPT), avec des transformées bilinéaires.

  1. Pirkle, Will. Designing Software Synthesizer Plug-ins in C++: For RackAFX, VST3, and Audio Units. CRC Press, 2014.

  2. Pirkle, Will. AN-6: Virtual Analog (VA) DiodeLadder Filter. 2013.

  3. Zavalishin, Vadim. "The Art of VA filter design." Native Instruments, 2012.

Crédits

Auteur : Steven Yi
Avril 2017

Nouveau dans Csound 6.09.0