chebyshevpoly

chebyshevpoly — Evalue efficacement la somme de polynomes de Tchebychev d'ordre arbitraire.

Description

L'opcode chebyshevpoly calcule la valeur d'une expression polynomiale d'une variable d'entrée unique de taux-a. Cette expression est constituée d'une combinaison linéaire des N premiers polynome de Tchebychev de première espèce. Chaque polynome de Tchebychev, Tn(x), est pondéré par un coefficient de taux-k, kn, de façon à ce que l'opcode calcule la somme de n'importe quel nombre de termes de la forme kn * Tn(x). Ainsi, l'opcode chebyshevpoly permet d'effectuer la distorsion non-linéaire d'un signal audio avec une fonction de transfert dynamique donnant un contrôle précis du contenu harmonique de la sortie.

Syntaxe

aout chebyshevpoly ain, k0 [, k1 [, k2 [...]]]

Exécution

ain -- le signal d'entrée utilisé comme variable indépendante des polynomes de Tchebychev ("x").

aout -- le signal de sortie ("y").

k0, k1, k2, ... -- multiplicateurs de taux-k pour chaque polynome de Tchebychev.

Cet opcode est très utile pour la distorsion non-linéaire dynamique d'un signal audio. Les techniques traditionnelles de distorsion non-linéaire utilisent une table à consulter pour la fonction de transfert -- habituellement une somme de polynomes de Tchebychev. Lorsqu'une onde sinusoïdale dont l'amplitude couvre toute l'échelle est utilisée comme index pour lire la table, le spectre harmonique précis défini par les poids des polynomes de Tchebychev est produit. On obtient un spectre dynamique en variant l'amplitude de l'onde sinusoïdale en entrée, mais cela produit un changement non-linéaire du spectre.

En calculant directement les polynomes de Tchebychev, l'opcode chebyshevpoly donne plus de contrôle sur le spectre, et le nombre d'harmoniques ajoutés à l'entrée peut varier dans le temps. La valeur de chaque coefficient kn contrôle directement l'amplitude du nième harmonique si l'entrée ain est une onde sinus d'amplitude = 1.0. Cela fait de chebyshevpoly un outil de synthèse additive efficace pour N partiels, ne nécessitant qu'un oscillateur au lieu de N. On peut aussi changer l'amplitude ou la forme d'onde du signal d'entrée pour obtenir différents effets de distorsion non-linéaire.

Si nous considérons que le paramètre d'entrée ain est "x" et que la sortie aout est "y", alors l'opcode chebyshevpoly calcule l'équation suivante :


        y = k0*T0(x) + k1*T1(x) + k2*T2(x) + k3*T3(x) + ...

où les Tn(x) sont définis par la relation de récurrence


        T0(x) = 1,
        T1(x) = x, 
        Tn(x) = 2x*T[n-1](x) - T[n-2](x)

On peut trouver plus d'information sur les polynomes de Tchebychev sur Wikipedia à http://en.wikipedia.org/wiki/Chebyshev_polynomial

Voir aussi

polynomial, mac maca

Exemples

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

Exemple 119. Exemple de l'opcode chebyshevpoly.

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     ;;;RT audio out
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o chebyshevpoly.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2

; time-varying mixture of first six harmonics
instr 1
	; According to the GEN13 manual entry,
	; the pattern + - - + + - - for the signs of 
	; the chebyshev coefficients has nice properties.
	
	; these six lines control the relative powers of the harmonics
	k1         line           1.0, p3, 0.0
	k2         line           -0.5, p3, 0.0
	k3         line           -0.333, p3, -1.0
	k4         line           0.0, p3, 0.5
	k5         line           0.0, p3, 0.7
	k6         line           0.0, p3, -1.0
	
	; play the sine wave at a frequency of 256 Hz with amplitude = 1.0
	ax         oscili         1, 256, 1
	
	; waveshape it
	ay         chebyshevpoly  ax, 0, k1, k2, k3, k4, k5, k6
	
	; avoid clicks, scale final amplitude, and output
	adeclick   linseg         0.0, 0.05, 1.0, p3 - 0.1, 1.0, 0.05, 0.0
	           outs           ay * adeclick * 10000, ay * adeclick * 10000
endin

</CsInstruments>
<CsScore>
f1 0 32768 10 1	; a sine wave

i1 0 5
e

</CsScore>
</CsoundSynthesizer>


Crédits

Auteur : Anthony Kozar
Janvier 2008

Nouveau dans la version 5.08 de Csound.