resonr
Prev | Opcodes et opérateurs de l'orchestre | Next

## resonr

resonr — Un filtre passe-bande avec une réponse en fréquence variable.

## Description

Implémentation d'un filtre passe-bande du second ordre à deux pôles et deux zéros, avec une réponse en fréquence variable.

## Syntaxe

    ares resonr asig, xcf, xbw [, iscl] [, iskip]

## Initialisation

Les variables d'initialisation facultatives de resonr sont identiques aux variables de taux-i de reson.

iscl (facultatif, 0 par défaut) -- facteur de pondération codé pour les résonateurs. Une valeur de 1 signifie que la crête du facteur de réponse est 1, c-à-d. toutes les fréquences autres que kcf sont atténuées selon la courbe de réponse (normalisée). Une valeur de 2 élève le facteur de réponse de façon à ce que sa valeur efficace globale soit égale à 1. Cette égalisation intentionnelle des puissances d'entrée et de sortie suppose que toutes les fréquences sont présentes ; elle est ainsi plus appropriée au bruit blanc. Une valeur de 0 signifie aucune pondération du signal, laissant cette tâche à un ajustement ultérieur (voir balance). La valeur par défaut est 0.

iskip (facultatif, 0 par défaut) -- é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 d'entrée à filtrer

xcf -- fréquence de coupure ou de résonance du filtre, mesurée en Hz

xbw -- largeur de bande du filtre (la différence en Hz entre les points à mi-puissance inférieur et supérieur).

resonr et resonz sont des variations du résonateur passe-bande classique à deux pôles (reson). Ces deux filtres ont deux zéros dans leur fonction de transfert en plus des deux pôles. Les zéros de resonz se trouvent à z = 1 et à z = -1. Les zéros de resonr se trouvent à +racine_carrée(R) et à -racine_carrée(R), où R est le rayon des pôles dans le plan complexe des z. L'ajout de zéros à resonr et à resonz améliore la sélectivité de la magnitude de la réponse de ces filtres aux fréquences de coupure proches de 0, ceci au prix d'une moins grande sélectivité aux fréquences supérieures à la crête de la fréquence de coupure.

resonr et resonz sont très proches du gain constant lorsque la fréquence centrale glisse, ce qui donne un contrôle plus efficace de la magnitude de la réponse qu'avec les résonateurs à deux pôles traditionnels tels que reson.

resonr et resonz produisent une sonorité considérablement différente de celle de reson, spécialement pour les faibles fréquences centrales ; la méthode par tâtonnement est la meilleure façon de déterminer quel résonateur est le plus adapté à une application particulière.

## Exemples

Voici un exemple des opcodes resonr et resonz. Il utilise le fichier resonr.csd.

Example 756. Exemple des opcodes resonr et resonz.

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
    ; Audio out   Audio in    No messages
    -odac           -iadc     -d     ;;;RT audio I/O
    ; For Non-realtime ouput leave only the line below:
    ; -o resonr.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    /* Written by Sean Costello */
     ; Orchestra file for resonant filter sweep of a sawtooth-like waveform.
      ; The outputs of reson, resonr, and resonz are scaled by coefficients
      ; specified in the score, so that each filter can be heard on its own
      ; from the same instrument.

      sr = 44100
      kr = 4410
      ksmps = 10
      nchnls = 1

    instr 1

      idur     =        p3
      ibegfreq =        p4                              ; beginning of sweep frequency
      iendfreq =        p5                              ; ending of sweep frequency
      ibw      =        p6                              ; bandwidth of filters in Hz
      ifreq    =        p7                              ; frequency of gbuzz that is to be filtered
      iamp     =        p8                              ; amplitude to scale output by
      ires     =        p9                              ; coefficient to scale amount of reson in output
      iresr    =        p10                             ; coefficient to scale amount of resonr in output
      iresz    =        p11                             ; coefficient to scale amount of resonz in output

     ; Frequency envelope for reson cutoff
      kfreq    linseg ibegfreq, idur * .5, iendfreq, idur * .5, ibegfreq

     ; Amplitude envelope to prevent clicking
      kenv     linseg 0, .1, iamp, idur - .2, iamp, .1, 0

     ; Number of harmonics for gbuzz scaled to avoid aliasing
      iharms   =        (sr*.4)/ifreq

      asig     gbuzz 1, ifreq, iharms, 1, .9, 1      ; "Sawtooth" waveform
      ain      =        kenv * asig                     ; output scaled by amp envelope
      ares     reson ain, kfreq, ibw, 1
      aresr    resonr ain, kfreq, ibw, 1
      aresz    resonz ain, kfreq, ibw, 1

               out ares * ires + aresr * iresr + aresz * iresz

    endin

    </CsInstruments>
    <CsScore>

    /* Written by Sean Costello */
    f1 0 8192 9 1 1 .25                               ; cosine table for gbuzz generator

    i1  0 10 1 3000 200 100 4000 1 0 0                ; reson  output with bw = 200
    i1 10 10 1 3000 200 100 4000 0 1 0                ; resonr output with bw = 200
    i1 20 10 1 3000 200 100 4000 0 0 1                ; resonz output with bw = 200
    i1 30 10 1 3000  50 200 8000 1 0 0                ; reson  output with bw = 50
    i1 40 10 1 3000  50 200 8000 0 1 0                ; resonr output with bw = 50
    i1 50 10 1 3000  50 200 8000 0 0 1                ; resonz output with bw = 50
    e

    </CsScore>
    </CsoundSynthesizer>

## Historique Technique

resonr et resonz ont étés décrits à l'origine dans un article de Julius O. Smith et James B. Angell. 1 Smith et Angell recommandait la forme resonz (zéros à +1 et -1) quand l'efficacité calculatoire était la préoccupation principale car il y a une multiplication de moins par échantillon, tandis que resonr (zéros à + et - la racine carrée du rayon des pôles R) était recommandé pour les situations où l'on voulait un pic central parfait à gain constant.

Ken Steiglitz, dans un article ultérieur 2, demontra que resonz avait un gain constant au pic réel du filtre, à l'opposé de resonr, qui affichait un gain constant à la position angulaire des pôles. Steiglitz recommandait aussi resonz pour ses encoches dans la courbe du gain plus raides à zéro et à la fréquence de Nyquist. Le livre récent de Steiglitz 3 présente une discussion technique détaillée de reson et de resonz, tandis que le livre de Dodge et Jerse's 4 illustre les différences dans les courbes de réponse de reson et de resonz.

## Références

1. Smith, Julius O. et Angell, James B., "A Constant-Gain Resonator Tuned by a Single Coefficient," Computer Music Journal, vol. 6, no. 4, pp. 36-39, Hiver 1982.

2. Steiglitz, Ken, "A Note on Constant-Gain Digital Resonators," Computer Music Journal, vol. 18, no. 4, pp. 8-10, Hiver 1994.

3. Ken Steiglitz, A Digital Signal Processing Primer, with Applications to Digital Audio and Computer Music. Addison-Wesley Publishing Company, Menlo Park, CA, 1996.

4. Dodge, Charles et Jerse, Thomas A., Computer Music: Synthesis, Composition, and Performance. New York: Schirmer Books, 1997, 2nde édition, pp. 211-214.

## Voir aussi

resonz

## Crédits

Auteur : Sean Costello
Seattle, Washington
1999

Nouveau dans la version 3.55 de Csound.

Paramètres de taux audio introduits dans la version 6.02

Octobre 2013.

Prev | Up | Next
resonk | Home | resonx