#!/bin/csh

#######################################################################################################################################
#                                                                                                                                     #
#         T R A N S F O R M E E   E N   O N D E L E T T E S   D ' U N   C H A M P   N O N   S T A N D A R D  :                        #
#                                                                                                                                     #
#                                                                                                                                     #
#         Utilisation :                                                                                                               #
#                                                                                                                                     #
#                   $xci/ondelettes.01$Z     <Champ> <Transformee> [<ArgsMorlet> [<Centrer> [<trX> [<trY> [<Decentrer> [<Fact>]]]]]]  #
#                                                                                                                                     #
#                                                                                                                                     #
#         Principe :                                                                                                                  #
#                                                                                                                                     #
#                     La transformee en ondelettes de la                                                                              #
#                   fonction 'f' s'obtient en fait en faisant                                                                         #
#                   le produit de convolution '*' de 'f' par                                                                          #
#                   l'ondelette 'M', soit :                                                                                           #
#                                                                                                                                     #
#                                       f*M                                                                                           #
#                                                                                                                                     #
#                   or, 'TF' designant la transformee de                                                                              #
#                   Fourier, on sait que :                                                                                            #
#                                                                                                                                     #
#                                       TF(f1*f2) = TF(f1).TF(f2)                                                                     #
#                                                                                                                                     #
#                   ou '.' designe le produit terme a terme                                                                           #
#                   de deux matrices complexes.                                                                                       #
#                                                                                                                                     #
#                   En prenant la transformee de Fourier                                                                              #
#                   inverse de l'identite precedente, on a :                                                                          #
#                                                                                                                                     #
#                                         -1                -1                                                                        #
#                                       TF  (TF(f1*f2)) = TF  (TF(f1).TF(f2))                                                         #
#                                                                                                                                     #
#                   soit :                                                                                                            #
#                                                                                                                                     #
#                                                 -1                                                                                  #
#                                       f1*f2 = TF  (TF(f1).TF(f2))                                                                   #
#                                                                                                                                     #
#                   Appliquee a la transformee en ondelettes,                                                                         #
#                   on a donc :                                                                                                       #
#                                                                                                                                     #
#                                               -1                                                                                    #
#                                       f*M = TF  (TF(f).TF(M))                                                                       #
#                                                                                                                                     #
#                   Pour calculer la transformee en ondelettes                                                                        #
#                   de 'f' par 'M', on calcule donc la transformee                                                                    #
#                   de Fourier de la fonction 'f', soit TF(f),                                                                        #
#                   on precalcule (c'est-a-dire qu'en general elle                                                                    #
#                   est calculee une fois pour toute) la transformee                                                                  #
#                   de Fourier TF(M) de l'ondelette 'M' (notons                                                                       #
#                   qu'au passage, c'est en fait 'M(a,b)', puisque                                                                    #
#                   l'ondelette depend de deux parametres) ; on                                                                       #
#                   fait ensuite leur produit terme a terme,                                                                          #
#                   soit 'TF(f).TF(M)', puis enfin, on calcule                                                                        #
#                   la transformee de  Fourier inverse de ce                                                                          #
#                   produit, ce qui donne la transformee cherchee...                                                                  #
#                                                                                                                                     #
#                                                                                                                                     #
#         Note sur la periodicite :                                                                                                   #
#                                                                                                                                     #
#                     La transformee de Fourier demande a ce                                                                          #
#                   que le champ soit periodique dans les deux                                                                        #
#                   directions ; si ce n'est pas le cas, une                                                                          #
#                   solution simple consiste a le symetriser                                                                          #
#                   doublement par '$xci/kaleidoscope$X', et                                                                          #
#                   a faire, sur la mosaique doublement symetrique                                                                    #
#                   obtenue, la transformee en ondelettes, mais avec                                                                  #
#                   une resolution deux fois moindre suivant chaque                                                                   #
#                   direction. Alors on n'oubliera pas que l'echelle                                                                  #
#                   ("dilatation=") de l'ondelette doit changer elle                                                                  #
#                   aussi (reduction de moitie).                                                                                      #
#                                                                                                                                     #
#                                                                                                                                     #
#         Author of '$xci/ondelettes.01$Z' :                                                                                          #
#                                                                                                                                     #
#                     Jean-Francois Colonna (LACTAMME, 20121114103747).                                                               #
#                                                                                                                                     #
#######################################################################################################################################

set       Champ=$1
set       Transformee=$2
set       ArgumentsMorlet=($3)
                                        # Des arguments du type :                                                                     #
                                        #                                                                                             #
                                        #                   "dilatation=0.10 angle=... nombre_periodes=..."                           #
                                        #                                                                                             #
                                        # sont conseilles...                                                                          #
set       Centrer=$4
set       translationX=$5
set       translationY=$6
set       Decentrer=$7
set       Facteur=$8

setArgum  Centrer                       FAUX
                                        # On ne centre pas a priori (par compatibilite avec 'v $xci/fftds$Z Centrer')...              #

setArgum  Decentrer                     FAUX
                                        # On ne decentre pas a priori (par compatibilite avec 'v $xci/ffti$Z Decentrer')...           #

setArgum  Facteur                       1
                                        # Facteur compatible avec 'v $xci/ffti$Z Facteur'...                                          #

FilSTmpB  ChampMorlet
FilSTmpB  ChampComplexe
FilSTmpB  ProduitFFT

$xci/morlet.02$X                                                                                                                        \
                    renormaliser=FAUX                                                                                                   \
                    $ArgumentsMorlet                                                                                                    \
                    R=$ChampMorlet$J                                                                                                    \
                                                                                                              $formatI
$xci/fft.01$X       A=$ChampMorlet$J                                                                                                    \
                    centrer=$Centrer                                                                                                    \
                    TF=$ChampMorlet$TF                                                                                                  \
                                                                                                              $formatI
                                        # Generation du champ de Morlet Complexe et de sa transformee de Fourier...                   #

$xci/RI_J$X                                                                                                                             \
                    AR=$Champ                                                                                                           \
                    AI=0                                                                                                                \
                    standard=FAUX                                                                                                       \
                    R=$ChampComplexe$J                                                                                                  \
                                                                                                              $formatI
$xci/fft.01$X       A=$ChampComplexe$J                                                                                                  \
                    centrer=$Centrer                                                                                                    \
                    TF=$ChampComplexe$TF                                                                                                \
                                                                                                              $formatI
                                        # Generation du champ Argument Complexe et de sa transformee de Fourier...                    #

$xci/fftp$Z         $ChampComplexe $ChampMorlet $ProduitFFT $translationX $translationY
                                        # Calcul du produit des deux transformees de Fourier...                                       #

$xci/fft.03$X       TF=$ProduitFFT$TF                                                                                                   \
                    R=$Transformee$J                                                                                                    \
                    decentrer=$Decentrer                                                                                                \
                    facteur=$Facteur                                                                                                    \
                                                                                                              $formatI
                                        # Et enfin transformees de Fourier inverse...                                                 #
$xci/J_RIMP$X       A=$Transformee$J                                                                                                    \
                    RR=$Transformee$PR                                                                                                  \
                    RI=$Transformee$PI                                                                                                  \
                    RM=$Transformee$Mo                                                                                                  \
                    RP=$Transformee$Ph                                                                                                  \
                    standard=FAUX                                                                                                       \
                                                                                                              $formatI
                                        # Puis conversion en quatre images non standards ($nom$PR,$nom$PI,$nom$Mo,$nom$Ph).           #

$DELETE             $Transformee$J
                                        # L'image '$Transformee$J' est a priori detruite car, en effet, peu utile...                  #

FilSTmpE  ProduitFFT
FilSTmpE  ChampComplexe
FilSTmpE  ChampMorlet



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.