lpcanal

lpcanal — Analyse par prédiction linéaire sur un flux.

Description

Cet opcode réalise l'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

kCoef[], krms, kerr, kcps lpcanal asrc, kflg,
    kprd, isiz, iord[,iwin] 
kCoef[], krms, kerr, kcps lpcanal koff, kflg,
    ifn, isiz, iord[,iwin] 
iCoef[], irms, ierr, icps lpcanal ioff, iflg,
    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

kCoef[] -- coefficients du filtre tout-pôle (tableau de taille iord).

krms - estimation de la valeur efficace du signal source.

kerr - erreur de la prédiction linéaire (ou résidu).

kcps - estimation de la fréquence fondamentale, à partir de la fonction d'autocorrélation.

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. Ces coefficients sont placés en sortie dans un tableau de taux-k, et sont accompagnés d'autres mesures de l'analyse.

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 produits.

Exemples

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

Exemple 524. Exemple de l'opcode lpcanal.

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 lpcanal qui utilise une table de fonction comme source lpc. Il utilise le fichier lpcanal-2.csd.

Exemple 525. Un autre exemple de l'opcode lpcanal.

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>


Voir aussi

lpcfilter, allpole