allpole — Réalisation d'un filtre tout-pôle par convolution directe.
kCoef[] -- coefficients du filtre tout-pôle (tableau de taille iord)
asig -- entrée audio
ares -- sortie audio
Cet opcode fait partie d'une suite d'opcodes de prédiction linéaire sur un flux. Il réalise un filtre tout-pôle en utilisant des coefficients qui lui sont passés via un tableau de taux-k. La longueur du filtre est déterminée par la taille du tableau.
The typical application is compute the coefficients via some method and then pass these to the opcode. The set of coefficients passed to allpole need to implement a stable filter, since this is an IIR filter and stability is not guaranteed by default.
La méthode la plus commune de dérivation des coefficients est l'analyse par prédiction linéaire, produite par exemple par lpcanal. D'autres méthodes peuvent être employées, y compris le calcul direct des coefficients à partir d'une recette de filtre connu (par exemple résonateurs, etc).
Voici un exemple de l'opcode allpole qui utilise un signal d'entrée audio comme source lpc. Il utilise le fichier allpole.csd.
Exemple 53. Exemple de l'opcode allpole.
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 -d </CsOptions> <CsInstruments> sr = 44100 ksmps = 64 nchnls = 1 0dbfs = 1 gifw ftgen 0,0,1024,20,2,1 instr 1 a1 diskin "fox.wav",1,0,1 kcfs[],krms,kerr,kcps lpcanal a1,1,128,1024,64,gifw if kcps > 180 then kcps = 180 endif a2 buzz 0dbfs, kcps, sr/(kcps*2), -1 a3 allpole a2*krms*kerr,kcfs a3 dcblock a3 out a3 endin </CsInstruments> <CsScore> i1 0 30 </CsScore> </CsoundSynthesizer>
Voici un autre exemple de l'opcode allpole qui utilise une table de fonction comme source lpc. Il utilise le fichier allpole-2.csd.
Exemple 54. Un autre exemple de l'opcode allpole.
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 -d </CsOptions> <CsInstruments> sr = 44100 ksmps = 64 nchnls = 1 0dbfs = 1 gifn ftgen 0,0,0,1,"fox.wav",0,0,1 gifw ftgen 0,0,1024,20,2,1 instr 1 k1 init 0 kts = p4 kcfs[],krms,kerr,kcps lpcanal k1,1,gifn,1024,ksmps,gifw if kcps > 180 then kcps = 180 endif a1 buzz 0dbfs, kcps, sr/(kcps*2), -1 a3 allpole a1*krms*kerr,kcfs k1 += ksmps*kts if k1 > ftlen(gifn) then k1 = 0 endif a3 dcblock a3 out a3 endin </CsInstruments> <CsScore> i1 0 10 1 i1 10 10 .75 i1 20 10 1.5 </CsScore> </CsoundSynthesizer>