class lines

Détection des lignes de pics. More...

Definition#include <lines.h>
List of all Methods
Annotated List
Files
Globals
Hierarchy
Index

Public Members

Private Members


Detailed Description

Détection des lignes de pics.

typedef float (lines::*LINE_GAIN)
[private]

Type de fonction utilisé pour le calcul du score d'une ligne:

float freq_sum

Somme des parties frequentielles des scores

float ampl_sum

Somme des parties amplitude des scores

float phase_sum

Somme des parties phase des scores

long nb_sum

Nombre de scores sommes dans les variables lines::freq_sum, lines::ampl_sum et lines::phase_sum

long nb_sum_neg

Nombre de scores negatifs

LINE_GAIN line_gain

Pointeur sur la fonction de calcul de gain choisie. Selection effectuée par hmmLis en fonction du mode choisi (hmmLis::param_type ) ainsi que de la valeur du membre ph de lines::variances.

Choix de fonctions:

float* gain

Tableau des scores des différentes lignes détectées dans la fenêtre courante

int nb_lines

Nombre de lignes détectées dans la fenêtre courante

int** line

Descriptif des lignes. Le premier indice de ce tableau bidimensionnel correspond au numéro de la ligne; le second indice correspond au pas de temps à l'intérieur de la fenêtre d'analyse HMM; enfin, la valeur contenue dans chaque cellule du tableau correspond à l'indice du pic référencé.

float** line_freq

Fréquence instantanée de chaque ligne calculée dans certain cas particuliers d'analyse. Ce tableau n'est utilisé que par les fonctions viterbi_formant et viterbi_additive, elles-mêmes uniquement appelées des fonction de type LINE_GAIN suivantes:

Notons que ces deux fonctions ne sont utilisées que si, d'une part la variance de la phase lines::variances n'est pas mise à NO(0), et d'autre part si la variable lines::nb_freq n'est pas à zéro. Cette variable est contrôlée par l'option de ligne de commande -Q de hmmLis; cette option n'est pas utilisée par le script hmm: ainsi nb_freq=0 et ces deux fonctions de calcul de score sont actuellement inusitées.

double_float_ptr (struct)
[private]

Structure pour l'algorithme de Viterbi utilisée par les fonctions lines::viterbi_additive et lines::viterbi_formant. Elle contient dans le membre delta les scores cumulés optimaux de chaque chemin exploré par l'algorithme. Le membre fi correspond quant à lui à l'index du pic optimal.

int* part
[private]

Tableau contenant les index des pics de la ligne actuellement explorée.

int nb_freq
[private]

Nombre de pas de fréquences pour le lissage des trajectoires de partiels (cf lines::line_gain_formant_viterbi et lines::line_gain_additive_viterbi).

int window
[private]

Taille de la fenêtre d'analyse HMM.

int maxNbLines
[private]

Nombre maximal de lignes détectées par fenêtre d'analyse HMM.

float* mean_freq
[private]

TODO

float df_max
[private]

Différence maximale absolue de fréquence entre deux trames.

float df_rel
[private]

Différence maximale relative de fréquence entre deux trames.

float fmin
[private]

Fréquence explorée minimale.

float fmax
[private]

Fréquence explorée maximale.

float res_freq
[private]

Taille du pas de fréquence pour le lissage des partiels (cf lines::line_gain_formant_viterbi et lines::line_gain_additive_viterbi).

double_float_ptr* vit
[private]

Tableau de données pour le lissage des partiels (cf lines::line_gain_formant_viterbi et lines::line_gain_additive_viterbi).

param* gain_coefs
[private]

Gains pour le calcul du score de chaque ligne.

param* add_coefs
[private]

Coefficients additifs pour le calcul du score de chaque ligne.

param* variances
[private]

Variances pour le calcul du score de chaque ligne.

lines (int window, int nb_freq, float df_max, float df_rel, float fmin, float fmax, float res_freq, param* gain_coefs, param* add_coefs, param* variances, int maxNbLines)

Constructeur

Parameters:
windowtaille de la fenêtre d'analyse HMM
nb_freqnombre de cellules de fréquence (cf lines::line_gain_formant_viterbi et lines::line_gain_additive_viterbi)
df_maxdifférence maximale absolue de fréquence
df_reldifférence maximale relative de fréquence
fminfréquence explorée minimale
fmaxfréquence explorée maximale
res_freqresolution fréquentielle (cf lines::line_gain_formant_viterbi et lines::line_gain_additive_viterbi)
gain_coefscoefficients de gain pour calcul du score (cf lines::line_gain)
add_coefscoefficients additifs pour calcul du score (cf lines::line_gain)
variancesvariances pour calcul du score (cf lines::line_gain)
maxNbLinesnombre maximal de lignes détectées par fenêtre d'analyse HMM

~lines ()

Destructeur désalloue la mémoire.

void find_lines (PmPartialSet* bande, int* nombre_f, float step)

Recherche des lignes de pics. Appelle la méthode lines::next_line afin d'explorer l'ensemble des lignes possibles. Pour chaque ligne de pics trouvée, calcule le score de cette ligne et le stocke.

Parameters:
bandedonnées des pics.
nombre_ftableau donnanr le nombre de pics pour chaque trame.
steptaille du pas de temps entre deux trames d'analyse.

float line_gain_formant (PmPartialSet* bande, float step, float** ptr_modif_freq)

Fonction de calcul du score d'une ligne de pics de type LINE_GAIN. Option: formant -> utilise la fréquence, l'amplitude et la largeur de bande pour le calcul du score.

Parameters:
bandedonnées des partiels
steptaille du pas de temps entre deux trames d'analyse
ptr_modif_freqnon utilisé par cette fonction, mais nécéssaire dans la déclaration pour se conformer au prototype LINE_GAIN

Returns: score de la ligne de pics

float line_gain_formant_viterbi ( PmPartialSet* bande,float step, float** ptr_modif_freq)

Fonction de calcul du score d'une ligne de pics de type LINE_GAIN. Option: formant_viterbi -> utilise l'amplitude et la fréquence détectées pour le calcul du score: effectue un lissage optimal contraint par la variance obs (cf lines::variances). Notons que ce lissage est effectué sur toutes les lignes candidates avant de sélectionner celles retenues pour devenir des partiels.

Parameters:
bandedonnées des partiels
steptaille du pas de temps entre deux trames d'analyse
ptr_modif_freqtableau destiné à recevoir les fréquences lissées par la fonction lines::formant_viterbi

Returns: score de la ligne de pics

float line_gain_general ( PmPartialSet* bande, float step, float** ptr_modif_freq)

Fonction de calcul du score d'une ligne de pics de type LINE_GAIN. Option: general -> utilise uniquement la fréquence et l'amplitude pour le calcul du score

Parameters:
bandedonnées des partiels
steptaille du pas de temps entre deux trames d'analyse
ptr_modif_freqnon utilisé par cette fonction, mais nécéssaire dans la déclaration pour se conformer au prototype LINE_GAIN

Returns: score de la ligne de pics

float line_gain_additive ( PmPartialSet* bande, float step, float** ptr_modif_freq)

Fonction de calcul du score d'une ligne de pics de type LINE_GAIN. Option: additive -> utilise la fréquence, l'amplitude et la phase pour le calcul du score.

Parameters:
bandedonnées des partiels
steptaille du pas de temps entre deux trames d'analyse
ptr_modif_freqnon utilisé par cette fonction, mais nécéssaire dans la déclaration pour se conformer au prototype LINE_GAIN

Returns: score de la ligne de pics

float line_gain_additive_viterbi ( PmPartialSet* bande, float step, float** ptr_modif_freq)

Fonction de calcul du score d'une ligne de pics de type LINE_GAIN. Option: additive_viterbi -> utilise la fréquence, l'amplitude et la phase pour le calcul du score. Effectue un lissage optimal de la trajectoire. Notons que ce lissage est effectué sur toutes les lignes candidates et pas seulement sur celles retenues comme des partiels.

Parameters:
bandedonnées des partiels
steptaille du pas de temps entre deux trames d'analyse
ptr_modif_freqTODO

Returns: score de la ligne de pics

void add_stat (float freq_part, float ampl_part, float phase_part = 0)
[private]

Fonction de stockage des resultats separes en frequence, amplitude, et phase, afin de permettre de regler les parametres de gain.

Parameters:
freq_partpartie frequentielle du score
ampl_partpartie amplitude du score
phase_partpartie phase du score

int next_part ( PmPartialSet* bande, int* nombre_f, int t, float step)
[private]

Recherche un pic dans une trame pas trop loin du pic actuel de la trame suivante. Deux pics sont considérés comme suffisamment proches si le carré de la différence de leurs fréquences est inférieur au carré d'une quantité égale à la somme de lines::df_max et de lines::df_rel * (la fréquence du pic actuel de la trame suivante). Cette fonction est appélée par la méthode lines::next_line.

Parameters:
bandedonnées sur les pics.
nombre_ftableau contenant le nombre de pics dans chaque trame.
tnuméro de la trame dans laquelle on recherche un pic.

Returns: 1 si un tel pic est trouvé (lines::part[t] contient alors son indice), -1 sinon.

int next_line (PmPartialSet* bande, int* nombre_f, int t, float step)
[private]

Recherche une nouvelle ligne de pics. Pour cela explore l'arbre des pics en partant par la fin de la fenêtre d'analyse HMM

Parameters:
bandedonnées sur les pics
nombre_ftableau contenant le nombre de pics dans chaque trame.
tnuméro de la trame dans laquelle on recherche un pic.

Returns: 1 si une telle ligne est trouvée, sinon -1.

float viterbi_additive (float* modif_freq, float step)
[private]

Fonction de calcul de score de ligne actuellement inusitée

See also: line_freq

float viterbi_formant (float* modif_freq, float step)
[private]

Fonction de calcul de score de ligne actuellement inusitée

See also: line_freq