// fonction _fft1d
// Calcule la transformée de Fourier rapide pour 1 dimension
// @param Img Image à partir de laquelle la transformée de Fourier est calculée. L'image doit être en niveau de gris. 
// @param SensFFT Détermine le sens de la tranformation. Directe : -1; Inverse : 1.
// @return ImgTrans Résultat de la transformée de Fourier appliquée à l'image Img. 
function [ImgTrans] = _fft1d(Img, SensFFT)

    // On calcule la taille de l'image passée en paramètre
    Width = size(Img, 2);

    // On créé la matrice qui sera retournée
    ImgTrans = Img

    // Si la Width est différent de 1, alors on traite l'image en paramètre
    if Width <> 1 then
    
        // On créé les matrices
        MPair = zeros(1, Width / 2)    // Pixels de position paire
        MImpair = zeros(1, Width / 2)  // Pixels de position impaire

        // On coupe en deux l'image reçue, pour traiter indépendamment chaque moitié
	    for i = 1 : Width
		    if modulo(i, 2) == 0 then
			    // Pair
			    MPair(i / 2) = Img(i)
		    else
			    // Impair
		        MImpair( ( i + 1 ) / 2 ) = Img(i)
		    end
	    end

	    // On appelle la fonction pour les deux nouvelles images
	    ImgPair = _fft1d(MPair, SensFFT)
	    ImgImpair = _fft1d(MImpair, SensFFT)

	    // On applique la formule de la transformée de fourier pour les images obtenues
	    for u = 1 : (Width / 2)
    	    coef = exp( ( SensFFT * 2 * %i * %pi * u ) / Width )
            ImgTrans(u) = ImgPair(u) + ( coef * ImgImpair(u) )
            ImgTrans( u + ( Width / 2 ) ) = ImgPair(u) - ( coef * ImgImpair(u) )
	    end

    end

endfunction 

// fonction fft1d
// Prépare les données pour le calcul de la transformée de Fourier en une dimension
// @param Img Image à partir de laquelle la transformée de Fourier est calculée. L'image doit être en niveau de gris, et de taille (1, 2^n)
// @param SensFFT Détermine le sens de la tranformation. Directe : -1; Inverse : 1.
// @return ImgTrans Résultat de la transformée de Fourier appliquée à l'image Img. 
function [ImgTrans] = fft1d(Img, SensFFT)

    // Calcul de la taille de l'image
    Width = size(Img, 2)
    
    // Création d'une image temporaire pour l'inversion de l'image de base
    ImgTemp1 = zeros(1, Width)
    
    // Inversion des pixels de l'image passée en paramètre
    for i = 1 : Width
    
        ImgTemp1(i) = Img(Width + 1 - i)
    
    end

    // Calcul de la FFT1D sur l'image retournée
    ImgTemp2 = _fft1d(ImgTemp1, SensFFT)
    
    // Initialisation de l'image de retour
    ImgTrans = zeros(1, Width)
    
    // Inversion du résultat de la transformée de Fourier
    for i = 1 : Width
    
        ImgTrans(i) = ImgTemp2(Width + 1 - i)
    
    end
    
    // Si on est en sens inverse, il faut diviser chaque pixel du tableau par la taille du tableau
    if SensFFT == 1 then
    
        for i = 1 : Width
        
            ImgTrans(i) = ImgTrans(i) / Width
        
        end
    
    end

endfunction

