zfilter2 — Réalise un filtrage au moyen d'un bloc de filtre numérique de forme tranposée II avec déplacement radial et déformation angulaire des pôles.
Filtre configurable à usage général avec contrôle variable des pôles. Les coefficients du filtre implémentent l'équation aux différences suivante :
(1)*y(n) = b0*x[n] + b1*x[n-1] +...+ bM*x[n-M] - a1*y[n-1] -...- aN*y[n-N]
the system function for which is represented by:
B(Z) b0 + b1*Z-1 + ... + bM*Z-M
H(Z) = ---- = --------------------------
A(Z) 1 + a1*Z-1 + ... + aN*Z-N
A l'initialisation, les nombres de zéros et de pôles du filtres sont spécifiés ainsi que leurs valeurs. Les coefficients doivent être obtenus par une application externe de conception de filtre telle que Matlab ou Octave (GPL) et sont spécifiés directement ou bien chargés dans une table via GEN01. Avec zfilter2, les racines du polynôme caractéristique sont calculées à l'initialisation pour une implémentation efficace des opérations de contrôle des pôles.
L'opcode filter2 réalise un filtrage au moyen d'un bloc de filtre numérique de forme transposée II sans contrôle variable. zfilter2 utilise en plus les opérations de déplacement radial et de déformation angulaire des pôles dans le plan des Z.
Le déplacement radial des pôles augmente la magnitude des pôles le long des lignes radiales dans le plan des Z. Cela modifie les durées de suroscillation du filtre. La variable de taux-k kdamp est le paramètre d'amortissement. Les valeurs positives (0.01 to 0.99) augmentent la durée de suroscillation du filtre (Q élevé), les valeurs négatives (-0.01 to -0.99) diminuent la durée de suroscillation du filtre (Q faible).
La déformation des pôles modifie leur fréquence en les déplaçant le long de chemins angulaires dans le plan des Z. Cette opération ne change pas la forme de l'amplitude de la réponse mais modifie les fréquences d'un facteur constant (préservant 0 et p). La variable de taux-k kfreq détermine le facteur de déformation fréquentielle. Les valeurs positives (0.01 to 0.99) augmentent les fréquences vers p et les valeurs négatives (-0.01 to -0.99) diminuent les fréquences vers 0.
Comme filter2 implémente des filtres récursifs généralisés, on peut l'utiliser pour définir une grande variété d'algorithmes généraux de traitement numérique du signal. Par exemple, on peut implémenter un guide d'onde numérique pour modéliser un instrument de musique au moyen d'une paire d'opcodes delayr et delayw conjointement à l'opcode filter2.
Un filtre RII du second ordre contrôlable opérant sur un signal de taux-a :
a1 zfilter2 asig, kdamp, kfreq, 1, 2, 1, ia1, ia2 ;; filtre RII contrôlable de taux-a
Voici un exemple de l'opcode zfilter2. Il utilise le fichier zfilter2.csd.
Exemple 1248. Exemple de l'opcode zfilter2.
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> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o zfilter2.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ; By Stefano Cucchi 2020 sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 kdamp linseg p5, p3, p6 kfreq linseg p7, p3, p8 kcps init cpspch(p4) asig1 vco2 .2, kcps asaw zfilter2 asig1, kdamp, kfreq, 2, 2, 0.81, 0.713, 0.0001, 0.99 acompare oscil 0.2, 440 ; signal comparator for volume asaw balance asaw, acompare ; adjust the volume. Volume can have big variation due to filter. outs asaw, asaw endin </CsInstruments> <CsScore> i 1 0 5 6.00 0.6 0.99 0.006 0.006 ; varying ringing time (from 0.6 to 0.99) i 1 6 5 6.00 0.3 0.3 0.01 -0.8 ; varying frequency warp factor (from 0.01 to -0.8) e </CsScore> </CsoundSynthesizer>