diode_ladder
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

## 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 230. 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, 8, 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

Précédent | Niveau supérieur | Suivant
diff | Sommaire | directory