#!/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