svn

svn — Filtre non linéaire à variable d'état.

Description

Cet opcode implémente un filtre non linéaire à variable d'état avec contrôle de la saturation et fonction de transfert non linéaire facultative définie par l'utilisateur.

Syntax

ahp, alp, abp, abr svn asig, xcf, xQ,
    kdrive[, ifn, inm, imx, istor]

Initialisation

ifn -- s'il est non nul, numéro d'une table de fonction contenant la fontion de transfert pour la non-linéarité du filtre. Elle doit être centrée sur son point médian et définie entre -imx et imx. S'il est nul, le filtre emploie une fonction non linéaire interne basée sur une tangente hyperbolique. 0 par défaut.

inm -- s'il est non nul, numéro d'une table de fonction contenant une fonction de transfert de normalisation générée à partir de ifn (au moyen de GEN 4). Vaut 0 par défaut.

imx -- le maximum absolu du domaine de la table de fonction qui est définie entre -imx et imx. 1 par défaut.

istor -- disposition initiale de l'espace de données interne. Comme ce filtre comprend une boucle de rétroaction de la sortie antérieure, l'état initial de l'espace de stockage utilisé est pris en compte. Une valeur nulle efface cet espace ; une valeur non nulle retient l'information antérieure. 0 par défaut.

Exécution

ahp, alp, abp, abr -- sorties passe-haut, passe-bas, passe-bande et à réjection de bande.

asig -- entrée.

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

xQ -- Q du filtre Q (min 0.5) (taux-a ou -k)).

kdrive -- facteur de saturation. Avec la fonction interne non linéaire, les valeurs supérieures à 0.125 introduisent progressivement plus de non linéarités dans le signal du filtre. Quand on utilise une fonction de transfert définie par l'utilisateur, la quantité de distortion introduite par ce paramètre dépend de la fonction employée. Une valeur de 0 rend le filtre complétement linéaire. L'importance de la saturation dépend également du niveau du signal d'entrée. Si ce signal est significativement inférieur à 0dbfs, alors il faut proportionnellement plus de saturation pour introduire des non-linéarités dans le signal. Avec une entrée à 0dBFS, on obtient une saturation à 100% avec kdrive=1. Avec des niveaux d'entrée plus forts, kdrive peut servir à modérer la distortion non linéaire du filtre.

Exemples

Voici un exemple de l'opode svn. Il utilise le fichier svn.csd.

Exemple 1045. Exemple de l'opode svn.

Voir les sections Audio en temps réel et Options de la ligne de commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<CsoundSynthesizer>
<CsOptions>
-odac
</CsOptions>
<CsInstruments>

0dbfs = 1

instr 1
 as vco2 0dbfs,100
 kcf expseg 20,p3/2,20000,p3/2,20
 ahp,alp,abp,abr svn as,kcf,p5,p6,p7,p8
    out alp*p4
endin

</CsInstruments>
<CsScore>
// x - .2x^3 + .3x^5 - .1x^7
f1 0 16385 3 -1 1 0 1 0 -.2 0 .3 0 -.1
f2 0 8193 4 1 1
i1 0 10 0.1 10 0 0 0 ; linear
i1 + 10 0.1 10 0.25 0 0 ; 25% drive
i1 + 10 0.1 10 0.75 0 0 ; 75% drive
i1 + 10 0.1 10 1 0 0 ; 100% drive
i1 + 10 0.1 10 0.25 1 2 ; table 1  25% drive 
i1 + 10 0.1 10 0.75 1 2 ; table 1   75%
i1 + 10 0.1 10 1 1 2 ; table 1   100%
</CsScore>
</CsoundSynthesizer>


Crédits

Auteur : Victor Lazzarini
Février 2021