chebyshevpoly — Evalue efficacement la somme de polynomes de Tchebychev d'ordre arbitraire.
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.
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
Voici un exemple de l'opcode chebyshevpoly. Il utilise le fichier chebyshevpoly.csd.
Exemple 134. 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>