#define MY_BIG_VAL 1000000
#define PI 3.14159265358979323846
#define ONE_OVER_TWO_PI .15915494309189533576
#define TWO_PI 6.28318530717958647692
//#define CROSSING 1
//#define NO_CROSSING 0
//#define YES 1
#define NO 0
#define HMM_ADDITIVE 0
#define HMM_FORMANT 1
//#define HMM_ADDITIVE_AMOR 2
extern int DEBUG;
/**
* Structure de tableau avec taille.
*
* @short Tableau dimensionné
*/
struct tab
{
/**
* Tableau de données
*/
int* id;
/**
* Taille du tableau
*/
int nb;
};
/**
* Liste des index des partiels récemment décédés (Carnet mondain section décès)
*
* @short Liste des index des partiels récemment décédés
*/
class tab_time
{
public:
/**
* Tableau d'index des partiels
*/
int* label;
/**
* Nombre de trames écoulées depuis la mort de chaque partiel référence par @ref tab_time::label
*/
int* time;
/**
* Nombre de partiels référencés dans les tableaux @ref tab_time::label et @ref tab_time::time
*/
int nb;
/**
* Période de deuil durant laquelle la réutilisation de l'index du défunt est interdite
*/
int LatTime;
/**
* Ajoute un nouvel index dans la liste des morts
*/
void add(int new_label, int new_time)
{
label[nb] = new_label;
time[nb] = new_time;
nb++;
}
/**
* Reserve la mémoire adequate pour les tableaux utilisés en interne
*
* @param maxNbOutput nombre maximal de morts dans la liste
*/
void initArrays(int maxNbOutput)
{
label = new int[maxNbOutput];
time = new int[maxNbOutput];
}
/**
* Constructeur
*/
tab_time()
{
nb = 0;
LatTime = 10;
}
/**
* Désalloue la mémoire réservée
*/
~tab_time()
{
if (label)
delete label;
if (time)
delete time;
}
/**
* Retire un mort de la liste
*
* @param index index dans la liste du partiel mort à retirer
*/
void remove(int index)
{
nb--;
label[index] = label[nb] ;
time[index] = time[nb] ;
}
/**
* Augmente d'une unité le delai de deuil d'un partiel mort
*
* @param index index dans la liste du partiel mort considéré
*/
void increase_time(int index)
{
time[index] += 1 ;
}
/**
* Teste si un mort est mort depuis suffisamment longtemps pour le rayer de la liste
*
* @param index index dans la liste du partiel mort testé
*/
int too_old(int index)
{
return (time[index] > LatTime);
}
};
/**
* Tableau de partiels
*
*/
class partials
{
public:
/**
* Indices des partiels vivants
*/
int* Alive;
/**
* Indices des nouveaux partiels
*/
int* NewAlive;
/**
* Indices des partiels morts
*/
int* Dead;
/**
* Indices des partiels nouveaux-nés
*/
int* Born;
/**
* Nombre de partiels vivants
*/
int nbAlive;
/**
* Nombre de nouveaux partiels
*/
int nbNewAlive;
/**
* Nombre de partiels morts
*/
int nbDead;
/**
* Nombre de partiels nouveaux-nés
*/
int nbBorn;
/**
* Constructeur vide
*/
partials()
{
}
/**
* Destructeur. Libère la mémoire allouée dans la fonction @ref partials::initArrays
*/
~partials()
{
if (Alive)
delete Alive;
if (NewAlive)
delete NewAlive;
if (Born)
delete Born;
if (Dead)
delete Dead;
}
/**
* Alloue la mémoire nécessaire
* @param maxNbOutput nombre maximal de partiels simultanés
*/
void initArrays(int maxNbOutput)
{
Alive = new int[maxNbOutput];
NewAlive = new int[maxNbOutput];
Born = new int[maxNbOutput];
Dead = new int[maxNbOutput];
nbAlive = 0;
nbDead = 0;
nbBorn = maxNbOutput;
for(int i=0 ; i < maxNbOutput ; i++ )
Born[i] = maxNbOutput - i - 1 ;
}
};
/**
* Paramètres du programme. Structure destinée à recevoir les variances, paramètres additifs
* ainsi que les gains pour le calcul des scores
*/
struct param
{
/**
* Paramètre relié à la fréquence
*/
float freq;
/**
* Paramètre relié à l'amplitude
*/
float ampl;
/**
* Paramètre relié à la phase
*/
float ph;
/**
* Paramètres relié au lissage des partiels (cf @ref lines::viterbi_formant)
*/
float obs;
};
| Generated by: chose@josquin on Wed Nov 10 20:55:59 199. |