/*************************************************************************************************************************************/
/* */
/* T R A N S F O R M E E E N O N D E L E T T E S : */
/* */
/* */
/* Definition : */
/* */
/* Dans ce fichier se trouvent toutes */
/* les definitions necessaires a la trans- */
/* formee en ondelettes. */
/* */
/* */
/* Cas mono-dimensionnel : */
/* --------------------- */
/* */
/* Soit une fonction "discrete" 'f' */
/* connue aux points (Xmin,...,Xmax), */
/* ce qui signifie que l'on connait les */
/* valeurs (f(Xmin),...,f(Xmax)). */
/* Designons par T(f) la transformee en */
/* ondelettes "discrete" de la fonction 'f'. */
/* */
/* Soit g(t) l'ondelette, ou 't' designe */
/* une variable continue; g(t) est en */
/* general une fonction a valeur complexe, */
/* mais sera supposee ici reelle afin de */
/* simplifier la programmation... */
/* */
/* La transformee en ondelette de f(u) */
/* par rapport a l'ondelette g(t) est */
/* definie au point (b,a) par : */
/* */
/* */
/* n=Xmax */
/* ___ */
/* \ 1 n-b */
/* T(f,(b,a)) = / ---.g(-----).f(n) ou 'b' est le parametre de position et 'a' le parametre d'echelle. */
/* --- a a */
/* n=Xmin */
/* */
/* L'algorithme qui suit fait l'hypothese */
/* que g(t) peut s'exprimer localement par un */
/* polynome de degre 3, plus exactement on */
/* ecrit que : */
/* */
/* 0 1 2 3 */
/* g(X + t) = C .t + C .t + C .t + C .t pour X E [nL,nR] ('X' entier), et t E [0,1[, */
/* X,0 X,1 X,2 X,3 */
/* */
/* g(t) = 0 pour t < 0 et t >= 1. */
/* */
/* */
/* Description de l'algorithme de Matthias Holschneider : */
/* ---------------------------------------------------- */
/* */
/* Soit : */
/* */
/* X=m */
/* ___ */
/* \ 0 */
/* S (m) = / X . f(X) */
/* 0 --- */
/* X=Xmin */
/* */
/* X=m */
/* ___ */
/* \ 1 */
/* S (m) = / X . f(X) */
/* 1 --- */
/* X=Xmin */
/* */
/* X=m */
/* ___ */
/* \ 2 */
/* S (m) = / X . f(X) */
/* 2 --- */
/* X=Xmin */
/* */
/* X=m */
/* ___ */
/* \ 3 */
/* S (m) = / X . f(X) */
/* 3 --- */
/* X=Xmin */
/* */
/* */
/* avec les conventions "limite" suivantes : */
/* */
/* */
/* S (m) = 0 si m<Xmin, */
/* i */
/* = S (Xmax) si m>Xmax. */
/* i */
/* */
/* */
/* On montre alors "aisement" que T(f,(b,a)) peut s'ecrire : */
/* */
/* X=nR */
/* ____ 0 1 2 3 */
/* \ B B B B */
/* T(f,(b,a)) = / {S [b + (X+1).a - 1] - S [b + (X).a - 1]} . {C .--- - C .--- + C .--- - C .---} + */
/* ---- 0 0 X,0 0 X,1 1 X,2 2 X,3 3 */
/* X=nL a a a a */
/* */
/* X=nR */
/* ____ 0 1 2 */
/* \ B B B */
/* / {S [b + (X+1).a - 1] - S [b + (X).a - 1]} . {C .--- - 2.C .--- + 3.C .---} + */
/* ---- 1 1 X,1 1 X,2 2 X,3 3 */
/* X=nL a a a */
/* */
/* X=nR */
/* ____ 0 1 */
/* \ B B */
/* / {S [b + (X+1).a - 1] - S [b + (X).a - 1]} . {C .--- - 3.C .---} + */
/* ---- 2 2 X,2 2 X,3 3 */
/* X=nL a a */
/* */
/* X=nR */
/* ____ 0 */
/* \ B */
/* / {S [b + (X+1).a - 1] - S [b + (X).a - 1]} . {C .---} */
/* ---- 3 3 X,3 3 */
/* X=nL a */
/* */
/* */
/* avec 'a' entier, et en posant : */
/* */
/* B = b + X.a */
/* */
/* */
/* Cas bi-dimensionnel : */
/* ------------------- */
/* */
/* Soit une fonction "discrete" 'f' */
/* connue aux points ((Xmin,Ymin),...,(Xmax,Ymax)) */
/* ce qui signifie que l'on connait les */
/* valeurs (f(Xmin,Ymin),...,f(Xmax,Ymax)) */
/* Designons par T(f) la transformee en */
/* ondelettes "discrete" de la fonction 'f'. */
/* */
/* Soit g(t) l'ondelette, ou 't' designe */
/* une variable continue; g(t) est en */
/* general une fonction a valeur complexe, */
/* mais sera supposee ici reelle afin de */
/* simplifier la programmation... */
/* */
/* La transformee en ondelette de f(u) */
/* par rapport a l'ondelette g(t) est */
/* definie au point (b,a) par : */
/* */
/* */
/* Y=Ymax X=Xmax */
/* ___ ___ X-b Y-b */
/* \ \ 1 x y */
/* T(f,(b,a)) = / / -------.g(------,------).f(X,Y) */
/* --- --- a .a a a */
/* Y=Ymin X=Xmin x y x y */
/* */
/* ou 'b' est le vecteur-parametre de position et 'a' le vecteur-parametre d'echelle. */
/* */
/* */
/* Author of '$ximt/ondelettes$DEF' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 19890000000000). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' O N D E L E T T E M O N O - D I M E N S I O N N E L L E : */
/* */
/*************************************************************************************************************************************/
#define EPSILON_DE_L_ONDELETTE \
SIX \
/* Moins le logarithme neperien de la valeur a partir de laquelle on considere */ \
/* qu'une exponentielle est nulle : */ \
/* */ \
/* -6 */ \
/* e = 0. */ \
/* */
#define FREQUENCE_DE_L_ONDELETTE \
CERCLE_TRIGONOMETRIQUE \
/* Valeur initiale (et implicite) des frequences reelle et imaginaire de l'ondelette */ \
/* de Morlet. */
#define INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D \
NEGA(INTE(DIVI(RACA(DOUB(EPSILON_DE_L_ONDELETTE)) \
,DIVI(CERCLE_TRIGONOMETRIQUE,MUL2(NOMBRE_DE_POINTS_PAR_CYCLE,FREQUENCE_DE_L_ONDELETTE)) \
) \
) \
) \
/* Definition de la valeur inferieure de l'index 'j', soit 'nL'. */
#define CENTRE_DE_L_ONDELETTE_1D \
MOYE(INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D,INDEX_DE_DROITE_DE_L_ONDELETTE_1D) \
/* Definition du "centre" de l'ondelette. */
#define INDEX_DE_DROITE_DE_L_ONDELETTE_1D \
TRMU(NEGA(INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D)) \
/* Definition de la valeur superieure de l'index 'j', soit 'nR'. */
#define k___LONGUEUR_DE_L_ONDELETTE_1D \
LENG(INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D,INDEX_DE_DROITE_DE_L_ONDELETTE_1D) \
/* Definition du nombre de noeuds definissant l'ondelette. */ \
/* */ \
/* ATTENTION : la constante 'LONGUEUR_DE_L_ONDELETTE_1D' est pre-generee dans */ \
/* '$xcp/Konstantes$K'. */
#define ACCES_A_L_ONDELETTE_1D(coefficient,x,y) \
ITb1(coefficient,INDX(x,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D)) \
/* Primitive d'acces a l'element 'x' d'un certain coefficient de l'ondelette. */
#define VALEUR_DE_L_ONDELETTE_1D(coefficient,x,y,facteur_d_echelle) \
DIVI(ACCES_A_L_ONDELETTE_1D(coefficient,x,y) \
,facteur_d_echelle \
) \
/* Primitive donnant la valeur de l'element 'x' d'un certain coefficient de l'ondelette. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* " P R E - G E N E R A T I O N " D E S C O N S T A N T E S F O N D A M E N T A L E S : */
/* */
/*************************************************************************************************************************************/
#TestADef LONGUEUR_DE_L_ONDELETTE_1D \
k___LONGUEUR_DE_L_ONDELETTE_1D \
/* Cette astucieuse solution permet de resoudre le probleme des dimensions de tableaux */ \
/* obtenues a partir de nombres flottants (par exemple 'PI'). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' O N D E L E T T E B I - D I M E N S I O N N E L L E : */
/* */
/*************************************************************************************************************************************/
#define INDEX_DE_GAUCHE_DE_L_ONDELETTE_2D \
NEGA(DEUX) \
/* Definition de la valeur inferieure de l'index horizontal, */
#define INDEX_DE_DROITE_DE_L_ONDELETTE_2D \
NEUT(DEUX) \
/* Definition de la valeur superieure de l'index horizontal. */
#define INDEX_DU_BAS_DE_L_ONDELETTE_2D \
NEGA(DEUX) \
/* Definition de la valeur inferieure de l'index vertical, */
#define INDEX_DU_HAUT_DE_L_ONDELETTE_2D \
NEUT(DEUX) \
/* Definition de la valeur superieure de l'index vertical. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D E L ' O N D E L E T T E C O U R A N T E : */
/* */
/*************************************************************************************************************************************/
#define NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D \
SUCC(LONGUEUR_DE_L_ONDELETTE_1D) \
/* Nombre de points pour definir l'ondelette que l'on veut approximer ; */ \
/* notera qu'il y a un point de plus que dans l'ondelette, en effet, le calcul des */ \
/* coefficients 'C' au point 'X' se fait principalement par des differences du type : */ \
/* */ \
/* C(X) = f(X+1) - f(X) */ \
/* */ \
/* d'ou le '+1'... */ \
/* */ \
/* L'approximation se fait soit par un spline cubique soit par une famille de polynomes */ \
/* du troisieme degre. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A P P R O X I M A T I O N D E L ' O N D E L E T T E C O U R A N T E */
/* P A R U N S P L I N E C U B I Q U E : */
/* */
/*************************************************************************************************************************************/
#define VALEUR_DE_LA_FONCTION_AUX_EXTREMITES \
FZERO \
/* Valeur de la fonction aux extremites gauche et droite de l'intervalle de calcul. */
#define VALEUR_DE_LA_DERIVEE_PREMIERE_AUX_EXTREMITES \
FZERO \
/* Valeur de la derivee premiere de la fonction aux extremites gauche et droite */ \
/* de l'intervalle de calcul. */
#define GENERATION_DE_L_ONDELETTE_1D_PAR_SPLINE(fonction,derivee_de_la_fonction) \
/* Generation de l'ondelette par echantillonnage de la fonction argument 'fonction' et */ \
/* par approximation par un spline cubique mono-dimensionnel ; ATTENTION : l'argument */ \
/* 'derivee_de_la_fonction' est la par symetrie avec l'approximation par les polynomes */ \
/* cubiques... */ \
Bblock \
DEFV(Float,DTb1(liste_des_abscisses,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D)); \
DEFV(Float,DTb1(liste_des_ordonnees,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D)); \
/* Echantillons de l'ondelette donnes par des couples (abscisses,ordonnees). */ \
begin_ligneQ(DoIn \
,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D \
,LSTX(INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D) \
,PasX \
) \
Bblock \
/* Initialisation et echantillonnage de l'ondelette que l'on veut approximer par le spline. */ \
EGAL(ITb1(liste_des_abscisses,INDX(X,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D)),X); \
Test(IFOU(IFEQ(X \
,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D \
) \
,IFEQ(X \
,LSTX(INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D \
,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D \
) \
) \
) \
) \
Bblock \
EGAL(ITb1(liste_des_ordonnees,INDX(X,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D)) \
,VALEUR_DE_LA_FONCTION_AUX_EXTREMITES \
); \
Eblock \
ATes \
Bblock \
EGAL(ITb1(liste_des_ordonnees,INDX(X,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D)) \
,fonction(X) \
); \
Eblock \
ETes \
Eblock \
end_ligneQ(EDoI) \
\
CALS(Fapproximation_par_un_spline_cubique(Fondelettes_1D_____coefficient_X0_de_l_ondelette \
,Fondelettes_1D_____coefficient_X1_de_l_ondelette \
,Fondelettes_1D_____coefficient_X2_de_l_ondelette \
,Fondelettes_1D_____coefficient_X3_de_l_ondelette \
,liste_des_abscisses \
,liste_des_ordonnees \
,VALEUR_DE_LA_DERIVEE_PREMIERE_AUX_EXTREMITES \
,VALEUR_DE_LA_DERIVEE_PREMIERE_AUX_EXTREMITES \
,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D \
) \
); \
/* Approximation de l'ondelette par un spline cubique mono-dimensionnel ; la premiere */ \
/* derivee premiere, ainsi que la derniere sont prises nulles ('FZERO'). */ \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* A P P R O X I M A T I O N D E L ' O N D E L E T T E C O U R A N T E */
/* P A R D E S P O L Y N O M E S D E D E G R E T R O I S : */
/* */
/*************************************************************************************************************************************/
#define GENERATION_DE_L_ONDELETTE_1D_PAR_POLYNOMES(fonction,derivee_de_la_fonction) \
/* Generation de l'ondelette par echantillonnage de la fonction argument 'fonction' et */ \
/* par approximation par des polynomes du troisieme degre. */ \
Bblock \
DEFV(Float,DTb1(liste_des_abscisses,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D)); \
DEFV(Float,DTb1(liste_des_ordonnees,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D)); \
DEFV(Float,DTb1(liste_des_derivees_premieres,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D)); \
/* Echantillons de l'ondelette donnes par des triplets (abscisses,ordonnees,derivees). */ \
begin_ligneQ(DoIn \
,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D \
,LSTX(INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D) \
,PasX \
) \
Bblock \
/* Initialisation et echantillonnage de l'ondelette que l'on veut approximer par le spline. */ \
EGAL(ITb1(liste_des_abscisses,INDX(X,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D)),X); \
EGAL(ITb1(liste_des_ordonnees,INDX(X,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D)) \
,fonction(X) \
); \
EGAL(ITb1(liste_des_derivees_premieres,INDX(X,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D)) \
,derivee_de_la_fonction(X) \
); \
Eblock \
end_ligneQ(EDoI) \
\
CALS(Fapproximation_par_des_polynomes_cubiques(Fondelettes_1D_____coefficient_X0_de_l_ondelette \
,Fondelettes_1D_____coefficient_X1_de_l_ondelette \
,Fondelettes_1D_____coefficient_X2_de_l_ondelette \
,Fondelettes_1D_____coefficient_X3_de_l_ondelette \
,liste_des_abscisses \
,liste_des_ordonnees \
,liste_des_derivees_premieres \
,NOMBRE_DE_POINTS_DE_LA_FONCTION_DEFINISSANT_L_ONDELETTE_1D \
) \
); \
/* Approximation de l'ondelette par des polynomes du trosieme degre. */ \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* E D I T I O N D E L ' O N D E L E T T E C O U R A N T E : */
/* */
/*************************************************************************************************************************************/
#define PRINT_ONDELETTE_1D \
/* Impression de l'ondelette courante. */ \
Bblock \
CAL2(Prin0("\n\n")); \
CAL2(Prin0("Ondelette courante :\n")); \
\
begin_ligneQ(DoIn,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D,INDEX_DE_DROITE_DE_L_ONDELETTE_1D,PasX) \
Bblock \
CAL2(Prin8("C0(%d)=%g C1(%d)=%g C2(%d)=%g C3(%d)=%g\n" \
,X,ACCES_A_L_ONDELETTE_1D(Fondelettes_1D_____coefficient_X0_de_l_ondelette,X,Ymin) \
,X,ACCES_A_L_ONDELETTE_1D(Fondelettes_1D_____coefficient_X1_de_l_ondelette,X,Ymin) \
,X,ACCES_A_L_ONDELETTE_1D(Fondelettes_1D_____coefficient_X2_de_l_ondelette,X,Ymin) \
,X,ACCES_A_L_ONDELETTE_1D(Fondelettes_1D_____coefficient_X3_de_l_ondelette,X,Ymin) \
) \
); \
Eblock \
end_ligneQ(EDoI) \
CAL2(Prin0("\n")); \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' O N D E L E T T E " C R E N E A U " : */
/* */
/* */
/* Definition : */
/* */
/* L'ondelette "creneau" est definie */
/* en complexe par : */
/* */
/* delta(X,Xcentre) + i.delta(X,Xcentre) */
/* */
/* ou 'Xcentre' designe le "centre de */
/* l'ondelette. */
/* */
/* */
/*************************************************************************************************************************************/
#define ONDELETTE_CRENEAU_1D \
/* Generation de l'ondelette "creneau"... */ \
/* a referencer directement si besoin dans : */ \
/* */ \
/* GENERATION_DE_LA_PARTIE_REELLE_DE_L_ONDELETTE_1D, */ \
/* */ \
/* et : */ \
/* */ \
/* GENERATION_DE_LA_PARTIE_IMAGINAIRE_DE_L_ONDELETTE_1D. */ \
/* */ \
Bblock \
begin_ligneQ(DoIn,INDEX_DE_GAUCHE_DE_L_ONDELETTE_1D,INDEX_DE_DROITE_DE_L_ONDELETTE_1D,PasX) \
Bblock \
EGAL(ACCES_A_L_ONDELETTE_1D(Fondelettes_1D_____coefficient_X0_de_l_ondelette,X,Ymin),FZERO); \
EGAL(ACCES_A_L_ONDELETTE_1D(Fondelettes_1D_____coefficient_X1_de_l_ondelette,X,Ymin),FZERO); \
EGAL(ACCES_A_L_ONDELETTE_1D(Fondelettes_1D_____coefficient_X2_de_l_ondelette,X,Ymin),FZERO); \
EGAL(ACCES_A_L_ONDELETTE_1D(Fondelettes_1D_____coefficient_X3_de_l_ondelette,X,Ymin),FZERO); \
Eblock \
end_ligneQ(EDoI) \
\
EGAL(ACCES_A_L_ONDELETTE_1D(Fondelettes_1D_____coefficient_X0_de_l_ondelette,CENTRE_DE_L_ONDELETTE_1D,Ymin),FU); \
/* Tous les coefficients sont nuls, sauf le coefficient lineaire ('X0') au "centre"... */ \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L ' O N D E L E T T E D E M O R L E T : */
/* */
/* */
/* Definition : */
/* */
/* L'ondelette de Morlet est definie */
/* en complexe par : */
/* */
/* 2 */
/* X */
/* - --- */
/* 2 */
/* e .[cos(F .X) + i.sin(F .X)] */
/* r i */
/* */
/* ou 'F ' et 'F ' designent respectivement */
/* r i */
/* les frequences 'reelle' et 'imaginaire'. */
/* */
/* */
/*************************************************************************************************************************************/
#define ONDELETTE_1D_DE_MORLET(variable,frequence,fonction) \
MUL2(EXPB(NEGA(MOIT(EXP2(variable)))),fonction(MUL2(frequence,variable))) \
/* Definition generale de l'ondelette de Morlet. */ \
/* */ \
/* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug */ \
/* 'BUG_SYSTEME_SG_C_exp'... */
#define ONDELETTE_1D_DE_MORLET_PARTIE_REELLE(variable) \
ONDELETTE_1D_DE_MORLET(variable,Fondelettes_1D_____frequence_reelle,COSD) \
/* Definition de la partie reelle de l'ondelette de Morlet, */
#define ONDELETTE_1D_DE_MORLET_PARTIE_IMAGINAIRE(variable) \
ONDELETTE_1D_DE_MORLET(variable,Fondelettes_1D_____frequence_imaginaire,SIND) \
/* Definition de la partie imaginaire de l'ondelette de Morlet. */
#define DERIVEE_DE_L_ONDELETTE_1D_DE_MORLET(variable,frequence,fonction1,fonction2,fonction3) \
MUL2(EXPB(NEGA(MOIT(EXP2(variable)))) \
,SOUS(MUL2(frequence,fonction1(fonction2(MUL2(frequence,variable)))) \
,MUL2(variable,fonction3(MUL2(frequence,variable))) \
) \
) \
/* Definition generale de la derivee de l'ondelette de Morlet. */ \
/* */ \
/* On notera que l'on utilise 'EXPB(...)' et non pas 'EXPX(...)' a cause du bug */ \
/* 'BUG_SYSTEME_SG_C_exp'... */
#define DERIVEE_DE_L_ONDELETTE_1D_DE_MORLET_PARTIE_REELLE(variable) \
DERIVEE_DE_L_ONDELETTE_1D_DE_MORLET(variable,Fondelettes_1D_____frequence_reelle,NEGA,SIND,COSD) \
/* Definition de la derivee de la partie reelle de l'ondelette de Morlet, */
#define DERIVEE_DE_L_ONDELETTE_1D_DE_MORLET_PARTIE_IMAGINAIRE(variable) \
DERIVEE_DE_L_ONDELETTE_1D_DE_MORLET(variable,Fondelettes_1D_____frequence_imaginaire,NEUT,COSD,SIND) \
/* Definition de la derivee de la partie imaginaire de l'ondelette de Morlet. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C H O I X D E L ' O N D E L E T T E C O U R A N T E P O U R L A */
/* M E T H O D E U T I L I S A N T D I R E C T E M E N T U N E F O N C T I O N : */
/* */
/*************************************************************************************************************************************/
#nodefine FONCTION_ONDELETTE_1D_VERSION_01 \
/* Approximation de l'ondelette de Morlet par un developpement limite... */
#define FONCTION_ONDELETTE_1D_VERSION_02 \
/* Ondelette de Morlet "parfaite"... */
#ifdef FONCTION_ONDELETTE_1D_VERSION_01
/* ATTENTION : l'utilisation de '__Fpartie_...' au lieu de 'Fpartie_...' est faite pour */
/* simplifier le probleme de la compatibilite avec le CRAY2... */
# define ONDELETTE_1D_REELLE \
__Fpartie_imaginaireA_de_l_ondelette_1D_de_Morlet \
/* Definition d'une ondelette reelle ; on prend une approximation de la partie imaginaire */ \
/* de l'ondelette de Morlet, car en effet elle est symetrique */ \
/* par rapport a 'OY', et que c'est mieux d'etre symetrique... */
# define ONDELETTE_1D_PARTIE_REELLE \
__Fpartie_reelleA_de_l_ondelette_1D_de_Morlet \
/* Definition de la partie reelle de l'ondelette choisie : c'est une approximation */ \
/* de l'ondelette de Morlet par un developpement limite, */
# define ONDELETTE_1D_PARTIE_IMAGINAIRE \
__Fpartie_imaginaireA_de_l_ondelette_1D_de_Morlet \
/* Definition de la partie imaginaire de l'ondelette choisie : c'est une approximation */ \
/* de l'ondelette de Morlet par un developpement limite. */
#Aifdef FONCTION_ONDELETTE_1D_VERSION_01
#Eifdef FONCTION_ONDELETTE_1D_VERSION_01
#ifdef FONCTION_ONDELETTE_1D_VERSION_02
/* ATTENTION : l'utilisation de '__Fpartie_...' au lieu de 'Fpartie_...' est faite pour */
/* simplifier le probleme de la compatibilite avec le CRAY2... */
# define ONDELETTE_1D_REELLE \
__Fpartie_imaginaire_de_l_ondelette_1D_de_Morlet \
/* Definition d'une ondelette reelle ; on prend la partie imaginaire de l'ondelette de */ \
/* Morlet, car en effet elle est symetrique par rapport a 'OY', et que c'est mieux d'etre */ \
/* symetrique... */
# define ONDELETTE_1D_PARTIE_REELLE \
__Fpartie_reelle_de_l_ondelette_1D_de_Morlet \
/* Definition de la partie reelle de l'ondelette choisie, on prend l'ondelette de */ \
/* Morlet, sans aucune approximations... */
# define ONDELETTE_1D_PARTIE_IMAGINAIRE \
__Fpartie_imaginaire_de_l_ondelette_1D_de_Morlet \
/* Definition de la partie imaginaire de l'ondelette choisie, on prend l'ondelette de */ \
/* Morlet, sans aucune approximations... */
#Aifdef FONCTION_ONDELETTE_1D_VERSION_02
#Eifdef FONCTION_ONDELETTE_1D_VERSION_02
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C H O I X D E L ' O N D E L E T T E C O U R A N T E P O U R L A */
/* M E T H O D E D ' A P P R O X I M A T I O N P A R M O R C E A U X : */
/* */
/*************************************************************************************************************************************/
#ifdef FONCTION_ONDELETTE_1D_VERSION_01
# nodefine CHOIX_DE_LA_METHODE_D_APPROXIMATION_DE_L_ONDELETTE_VERSION_01 \
/* Approximation des ondelettes par des splines cubiques. */
# define CHOIX_DE_LA_METHODE_D_APPROXIMATION_DE_L_ONDELETTE_VERSION_02 \
/* Approximation des ondelettes par des polynomes cubiques. */
# ifdef CHOIX_DE_LA_METHODE_D_APPROXIMATION_DE_L_ONDELETTE_VERSION_01
# define GENERATION_DE_LA_PARTIE_REELLE_DE_L_ONDELETTE_1D \
GENERATION_DE_L_ONDELETTE_1D_PAR_SPLINE(ONDELETTE_1D_DE_MORLET_PARTIE_REELLE \
,VIDE \
) \
/* Definition de la partie reelle de l'ondelette choisie, */
# define GENERATION_DE_LA_PARTIE_IMAGINAIRE_DE_L_ONDELETTE_1D \
GENERATION_DE_L_ONDELETTE_1D_PAR_SPLINE(ONDELETTE_1D_DE_MORLET_PARTIE_IMAGINAIRE \
,VIDE \
) \
/* Definition de la partie imaginaire de l'ondelette choisie. */
# Aifdef CHOIX_DE_LA_METHODE_D_APPROXIMATION_DE_L_ONDELETTE_VERSION_01
# Eifdef CHOIX_DE_LA_METHODE_D_APPROXIMATION_DE_L_ONDELETTE_VERSION_01
# ifdef CHOIX_DE_LA_METHODE_D_APPROXIMATION_DE_L_ONDELETTE_VERSION_02
# define GENERATION_DE_LA_PARTIE_REELLE_DE_L_ONDELETTE_1D \
GENERATION_DE_L_ONDELETTE_1D_PAR_POLYNOMES(ONDELETTE_1D_DE_MORLET_PARTIE_REELLE \
,DERIVEE_DE_L_ONDELETTE_1D_DE_MORLET_PARTIE_REELLE \
) \
/* Definition de la partie reelle de l'ondelette choisie, */
# define GENERATION_DE_LA_PARTIE_IMAGINAIRE_DE_L_ONDELETTE_1D \
GENERATION_DE_L_ONDELETTE_1D_PAR_POLYNOMES(ONDELETTE_1D_DE_MORLET_PARTIE_IMAGINAIRE \
,DERIVEE_DE_L_ONDELETTE_1D_DE_MORLET_PARTIE_IMAGINAIRE \
) \
/* Definition de la partie imaginaire de l'ondelette choisie. */
# Aifdef CHOIX_DE_LA_METHODE_D_APPROXIMATION_DE_L_ONDELETTE_VERSION_02
# Eifdef CHOIX_DE_LA_METHODE_D_APPROXIMATION_DE_L_ONDELETTE_VERSION_02
#Aifdef FONCTION_ONDELETTE_1D_VERSION_01
#Eifdef FONCTION_ONDELETTE_1D_VERSION_01
#ifdef FONCTION_ONDELETTE_1D_VERSION_02
# define GENERATION_DE_LA_PARTIE_REELLE_DE_L_ONDELETTE_1D \
VIDE \
/* Definition de la partie reelle de l'ondelette choisie (rien a faire...), */
# define GENERATION_DE_LA_PARTIE_IMAGINAIRE_DE_L_ONDELETTE_1D \
VIDE \
/* Definition de la partie imaginaire de l'ondelette choisie (rien a faire...). */
#Aifdef FONCTION_ONDELETTE_1D_VERSION_02
#Eifdef FONCTION_ONDELETTE_1D_VERSION_02
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C H O I X E N T R E U N E T R A N S F O R M E E E N O N D E L E T T E S */
/* A P P R O X I M E E O U " P A R F A I T E " M O N O - D I M E N S I O N N E L L E : */
/* */
/*************************************************************************************************************************************/
#nodefine APPROXIMEE_PARFAITE_ONDELETTE_1D_VERSION_01 \
/* Approximation des ondelettes par des morceaux de polynomes... */
#define APPROXIMEE_PARFAITE_ONDELETTE_1D_VERSION_02 \
/* Utilisation des fonctions exactes pour les ondelettes... */
#ifdef APPROXIMEE_PARFAITE_ONDELETTE_1D_VERSION_01
# define NOMBRE_DE_POINTS_PAR_CYCLE \
HUIT \
/* Nombre de points par cycle pour l'echantillonnage de l'ondelette. */
# define Fondelettes_1D_reelles(fonction,pointeur_de_position_1D,pointeur_d_echelle_1D,initialiser_les_cumuls_S,ondelette) \
Fondelettes_1D_reelles_approximees(fonction \
,pointeur_de_position_1D \
,pointeur_d_echelle_1D \
,initialiser_les_cumuls_S \
)
#Aifdef APPROXIMEE_PARFAITE_ONDELETTE_1D_VERSION_01
#Eifdef APPROXIMEE_PARFAITE_ONDELETTE_1D_VERSION_01
#ifdef APPROXIMEE_PARFAITE_ONDELETTE_1D_VERSION_02
# define NOMBRE_DE_POINTS_PAR_CYCLE \
UN \
/* Nombre de points par cycle pour l'echantillonnage de l'ondelette. */
# define Fondelettes_1D_reelles(fonction,pointeur_de_position_1D,pointeur_d_echelle_1D,initialiser_les_cumuls_S,ondelette) \
Fondelettes_1D_reelles_parfaites(fonction \
,pointeur_de_position_1D \
,pointeur_d_echelle_1D \
,aFONCTION(ondelette) \
)
#Aifdef APPROXIMEE_PARFAITE_ONDELETTE_1D_VERSION_02
#Eifdef APPROXIMEE_PARFAITE_ONDELETTE_1D_VERSION_02