
/*************************************************************************************************************************************/
/* */
/* D E F I N I T I O N D E L A T R A N S F O R M E E D E F O U R I E R : */
/* */
/* */
/* Cas mono-dimensionnel : */
/* --------------------- */
/* */
/* Soit une fonction "discrete" 'f' */
/* connue aux points {0,1,2,...,N-1}, */
/* ce qui signifie que l'on connait les */
/* valeurs {f(0),f(1),f(2),...,f(N-1)}. */
/* Designons par T (f,u) la transformee de */
/* N */
/* Fourier "discrete" de la fonction 'f' */
/* au point 'u' et calculee pour 'N' points. */
/* Elle est definie par : */
/* */
/* n=N-1 */
/* _____ u */
/* \ -(2.i.p.---.n) */
/* T (f,u) = / f(n).e N ou 'p' designe 'pi' et */
/* N ----- 'i' la racine de -1. */
/* n=0 */
/* */
/* 'u' est appelee "frequence spatiale", */
/* et varie dans [0,N-1], tout comme la */
/* variable 'n'. */
/* */
/* L'algorithme dit de "transformee */
/* rapide" (ou 'FFT" en anglais), repose */
/* sur le raisonnement suivant : */
/* */
/* posons, en supposant 'N' pair, et */
/* meme une puissance de 2 (a cause */
/* de la dichotomie que l'on va mettre */
/* en evidence) : */
/* */
/* N */
/* M = ---, */
/* 2 */
/* */
/* on a alors : */
/* */
/* m=M-1 */
/* _____ u u u */
/* \ -(2.i.p.---.m) -(2.i.p.(---.m + ---)) */
/* T (f,u) = / [f(2.m).e M + f(2.m+1).e M N ] */
/* N ----- */
/* m=0 */
/* */
/* m=M-1 m=M-1 */
/* _____ u u _____ u */
/* \ -(2.i.p.---.m) -(2.i.p.---) \ -(2.i.p.---.m) */
/* T (f,u) = / f(2.m).e M + e N ./ f(2.m+1).e M */
/* N ----- ----- */
/* m=0 m=0 */
/* */
/* soit donc : */
/* */
/* u */
/* -(2.i.p.---) */
/* T (f,u) = T (f.paire,u) + e N .T (f.impaire,u), */
/* N N N */
/* --- --- */
/* 2 2 */
/* */
/* avec : */
/* */
/* T (f,u) = f(du_point_unique), quel que soit 'u'. */
/* 1 */
/* */
/* ou 'f.paire/impaire,u' signifie que l'on */
/* ne conserve que les coefficients pairs et */
/* impairs de la fonction 'f' respectivement. */
/* Ainsi, on divise par 2 exactement le nombre */
/* de points sur lesquels faire les calculs, */
/* tout en arrivant a une definition recursive */
/* de la transformee de Fourier... */
/* */
/* Le cout de l'algorithme de transformee */
/* de Fourier rapide mono-dimensionnelle est */
/* donc en N.Log(N). */
/* */
/* En ce qui concerne les periodes de la */
/* frequence spatiale 'u', on peut dire la */
/* chose suivante : */
/* */
/* u */
/* pour T (f,u), on trouve ---, on peut donc */
/* N N */
/* considerer que la periode de 'u' est 'N', */
/* et donc 'u' est a considerer dans [0,N-1]. */
/* Alors que pour T (f.paire,u) et T (f.impaire,u), */
/* N N */
/* --- --- */
/* 2 2 */
/* u */
/* on trouve ---, on peut donc considerer que */
/* M */
/* la periode de 'u' est alors 'M' (ou 'M' est */
/* la moitie de 'N') ; 'u' est alors a considerer */
/* dans [0,M-1]. */
/* */
/* */
/* Cas bi-dimensionnel : */
/* ------------------- */
/* */
/* Soit une fonction "discrete" 'f' */
/* connue aux points {0,1,2,...,N-1}x{0,1,2,...,N-1}, */
/* ce qui signifie que l'on connait les */
/* valeurs {f(0,0),f(0,1),f(0,2),...,f(0,N-1),...,f(N-1,0),f(N-1,1),f(N-1,2),...,f(N-1,N-1)}. */
/* Designons par T(f,u,v) la transformee de */
/* Fourier "discrete" de la fonction 'f' aux points 'u' et 'v'. */
/* Elle est definie par : */
/* */
/* y=Y-1 x=X-1 */
/* _____ _____ u v */
/* \ \ -[2.i.p.(---.x + ---.y)] */
/* T(f,u,v) = / / f(x,y).e X Y */
/* ----- ----- */
/* y=0 x=0 */
/* */
/* ou (u,v) ∈ [0,X-1]x[0,Y-1], 'p' designe 'pi' et 'i' la racine de -1. */
/* */
/* Comme on le verra dans la programmation */
/* qui suit, la 'FFT' bi-dimensionnelle peut */
/* se ramener au calcul de 'FFT' mono- */
/* dimensionnelles "orthogonales". */
/* */
/* Le cout de l'algorithme de transformee */
/* rapide de Fourier bi-dimensionnelle est donc */
/* en 2N.N.Log(N) ; en effet, on effectue 'N' */
/* transformees horizontales, puis 'N' trans- */
/* formee verticales (d'ou le '2N'), chacune */
/* etant en N.Log(N)... On notera que : */
/* */
/* 2 2 2 */
/* 2N.N.Log(N) = N .2.Log(N) = N .Log(N ). */
/* */
/* */
/* Transformees inverses : */
/* --------------------- */
/* */
/* Pour obtenir en mono- et bi-dimensionnel */
/* la transformee inverse, il suffit de changer */
/* le signe de l'exposant dans l'exponentielle : */
/* */
/* u=N-1 */
/* _____ n */
/* 1 \ 2.i.p.---.u */
/* f(n) = --- / T (f,u).e N ou n ∈ [0,N-1], 'p' designe 'pi' et */
/* N ----- N 'i' la racine de -1. */
/* u=0 */
/* */
/* */
/* v=Y-1 u=X-1 */
/* _____ _____ x y */
/* 1 \ \ 2.i.p.(---.u + ---.v) */
/* f(x,y) = ---- / / T(f,u,v).e X Y */
/* 2 ----- ----- */
/* N v=0 u=0 */
/* */
/* ou {x,y} ∈ [0,X-1]x[0,Y-1], 'p' designe 'pi' et 'i' la racine de -1. */
/* */
/* */
/*************************************************************************************************************************************/