lpcfilter

lpcfilter — Filtre tout-pôle par prédiction linéaire sur un flux.

Description

Cet opcode réalise un filtre tout-pôle dont les coefficients sont obtenus à partir d'une analyse par prédiction linéaire sur un flux. Deux versions existent, l'une prenant pour entrée un signal audio, et l'autre prenant pour entrée une table de fonction.

Syntaxe

ares lpcfilter asig, asrc, kflg,
    kprd, isiz, iord[,iwin] 
ares lpcfilter asig, koff, kflg,
    ifn, isiz, iord[,iwin] 

Initialisation

isiz -- taille d'une trame d'entrée lpc en échantillons.

iord -- ordre du prédicteur linéaire.

ifn -- table de fonction de la source de l'analyse LPC du flux.

iwin -- numéro d'une table de fonction de fenêtrage (facultatif).

Exécution

ares -- sortie.

asig - entré audio.

asrc -- signal source de l'analyse LPC sur flux.

kflg -- indicateur de calcul ; les valeurs non nulles activent l'analyse par prédiction linéaire remplaçant les coefficients du filtre, alors que zéro la désactive, gardant les coefficients courants du filtre.

kprd -- période de l'analyse en échantillons, déterminant la fréquence de renouvellement des coefficients.

koff -- décalage de la position dans la table de fonction, déterminant la position du début de la trame d'analyse.

Cet opcode fait partie d'une suite d'opcodes de prédiction linéaire sur un flux. Il analyse un signal d'entrée, soit une entrée audio, ou stocké dans une table de fonction, et produit un ensemble de coefficients pour un filtre tout-pôle qui modélise l'enveloppe spectrale du signal. Ce filtre est ensuite appliqué à une entrée arbitraire, produisant comme résultat une synthèse croisée.

Les paramètres d'analyse fondamentaux sont la taille de trame en entrée et l'ordre du filtre. Des trames d'entrée plus longues produiront un résultat plus précis en termes de résolution en fréquence, mais induiront aussi plus de calculs. Ceci est dû au calcul de la fontion d'autocorrélation, qui est utilisée ensuite dans le calcul des coefficients. Cette partie est plus efficace et dépend seulement de l'ordre de la prédiction linéaire. qui est aussi le nombre de coefficients calculés. Les ordres typiques de lp peuvent aller de 30 à 100 coefficients, mais on peut utiliser de plus grandes valeurs.

Si le signal source LPC est dérivé d'une entrée audio, alors le calcul des coefficients dépend de deux paramètres, kflg et kprd. Le premier est un bouton on/off qui détermine si les coefficients sont remplacés par de nouveaux coefficients calculés ou s'ils gardent leur dernière valeur. L'autre détermine la fréquence des analyses, en fixant un intervalle temporel (en échantillons) entre les calculs de nouveaux coefficients. Cela va de coefficients étant remplacés à chaque échantillon, à jamais remplacés (si la période est plus grande que la durée de synthèse). Des analyses se chevauchant se produiront si la valeur de kprd est inférieure à la taille de l'entrée. La diminution de l'espacement des analyses produira aussi une augmentation des besoins de calcul.

Si le signal source LPC est dérivé d'une table de fonction, alors kflg détermine s'il faut effectuer une analyse ou non (1 ou 0). La valeur de koff est ensuite utilisée comme décalage (en échantillons) dans la table de fonction déterminant la position de la trame d'analyse. Par exemple, si kflg est fixé en permanence à 1 et koff est fixé à ksmps, alors à chaque cycle-k une trame d'analyse sera prise des positions successives dans la table de fonction. Le changement de koff à moins d'échantillons produira un résultat étiré dans le temps alors qu'en l'augmentant on compressera le temps.

Le signal une fois extrait, soit de l'entrée audio, soit d'une table de fonction, il peut être facultativement fenêtré si une table de fonction est fournie. Bien que ce soit facultatif, c'est une procédure recommandée (GEN20 peut fournir les fenêtres les plus communes). Le signal est ensuite analysé et les coefficients sont remplacés. Le filtre tout-pôle est calculé comme une convolution directe dans le domaine temporel.

Exemples

Voici un exemple de l'opcode lpcfilter qui utilise un signal d'entrée audio comme source lpc. Il utilise le fichier lpcfilter.csd.

Exemple 526. Exemple de l'opcode lpcfilter.

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
a2 diskin "beats.wav",1,0,1
a3 lpcfilter a2,a1,1,128,1024,64,gifw
a3 dcblock2 a3
out a3
endin

</CsInstruments>
<CsScore>
i1 0 30
</CsScore>
</CsoundSynthesizer>


Voici un autre exemple de l'opcode lpcfilter qui utilise une table de fonction comme source lpc. Il utilise le fichier lpcfilter-2.csd.

Exemple 527. Un autre exemple de l'opcode lpcfilter.

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
koff init 0
kts = p4 // timescale
a1 diskin "beats.wav",1,0,1
a3 lpcfilter a1,koff,1,gifn,1024,ksmps,gifw
koff += ksmps*kts
if koff > ftlen(gifn) then
 koff = 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>


Voir aussi

lpcanal allpole