|
|
Détection des lignes de pics.
typedef float (lines::*LINE_GAIN) |
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) |
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 |
Tableau contenant les index des pics de la ligne actuellement explorée.
int nb_freq |
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 |
Taille de la fenêtre d'analyse HMM.
int maxNbLines |
Nombre maximal de lignes détectées par fenêtre d'analyse HMM.
float* mean_freq |
TODO
float df_max |
Différence maximale absolue de fréquence entre deux trames.
float df_rel |
Différence maximale relative de fréquence entre deux trames.
float fmin |
Fréquence explorée minimale.
float fmax |
Fréquence explorée maximale.
float res_freq |
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 |
Tableau de données pour le lissage des partiels (cf lines::line_gain_formant_viterbi et lines::line_gain_additive_viterbi).
param* gain_coefs |
Gains pour le calcul du score de chaque ligne.
param* add_coefs |
Coefficients additifs pour le calcul du score de chaque ligne.
param* variances |
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:
window | taille de la fenêtre d'analyse HMM |
nb_freq | nombre de cellules de fréquence (cf lines::line_gain_formant_viterbi et lines::line_gain_additive_viterbi) |
df_max | différence maximale absolue de fréquence |
df_rel | différence maximale relative de fréquence |
fmin | fréquence explorée minimale |
fmax | fréquence explorée maximale |
res_freq | resolution fréquentielle (cf lines::line_gain_formant_viterbi et lines::line_gain_additive_viterbi) |
gain_coefs | coefficients de gain pour calcul du score (cf lines::line_gain) |
add_coefs | coefficients additifs pour calcul du score (cf lines::line_gain) |
variances | variances pour calcul du score (cf lines::line_gain) |
maxNbLines | nombre 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:
bande | données des pics. |
nombre_f | tableau donnanr le nombre de pics pour chaque trame. |
step | taille 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:
bande | données des partiels |
step | taille du pas de temps entre deux trames d'analyse |
ptr_modif_freq | non 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:
bande | données des partiels |
step | taille du pas de temps entre deux trames d'analyse |
ptr_modif_freq | tableau 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:
bande | données des partiels |
step | taille du pas de temps entre deux trames d'analyse |
ptr_modif_freq | non 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:
bande | données des partiels |
step | taille du pas de temps entre deux trames d'analyse |
ptr_modif_freq | non 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:
bande | données des partiels |
step | taille du pas de temps entre deux trames d'analyse |
ptr_modif_freq | TODO |
Returns: score de la ligne de pics
void add_stat (float freq_part, float ampl_part, float phase_part = 0) |
Fonction de stockage des resultats separes en frequence, amplitude, et phase, afin de permettre de regler les parametres de gain.
Parameters:
freq_part | partie frequentielle du score |
ampl_part | partie amplitude du score |
phase_part | partie phase du score |
int next_part ( PmPartialSet* bande, int* nombre_f, int t, float step) |
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:
bande | données sur les pics. |
nombre_f | tableau contenant le nombre de pics dans chaque trame. |
t | numé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) |
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:
bande | données sur les pics |
nombre_f | tableau contenant le nombre de pics dans chaque trame. |
t | numé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) |
Fonction de calcul de score de ligne actuellement inusitée
See also: line_freq
float viterbi_formant (float* modif_freq, float step) |
Fonction de calcul de score de ligne actuellement inusitée
See also: line_freq