Scilab, Transformée de Fourier
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Scilab, Transformée de Fourier



  1. #1
    invitec6b6a1e5

    Scilab, Transformée de Fourier


    ------

    Bonjour,

    Dans le cadre d'un projet, je dois comparer le temps que prend une convolution en utilisant la convolution simple (fonction convol(f1,f2) de Scilab, puis en utilisant les tranformées de Fourier.

    Donc, après avoir cherché un peu, j'ai trouvé ceci:

    f*g = F-1(F(f) x F(g))

    Or, je n'arrive pas à implémenter cette fonction sur Scilab, je calcule d'abord les deux tranformées de Fourier, mais au moment de les multiplier entre elles, je me retrouve avec une erreur "inconsistent multiplication".

    Si quelqu'un avait des bases de réponses, j'avoue que je bloque vraiment !

    Merci par avance

    -----

  2. #2
    invite18b68ae0

    Re : Scilab, Transformée de Fourier

    Bonsoir,

    pourriez-vous détailler votre tentative d'implémentation sous SciLab ?

  3. #3
    invitec6b6a1e5

    Re : Scilab, Transformée de Fourier

    Bonjour,

    Je n'ai pas mon code avec moi mais en gros il ressemble à ça:

    f1 et f2 sont définies comme étant des fonctions cosinus basiques.

    La première convolution avec

    Code:
    convol(f1,f2)
    fonctionne correcement (je les affiche avec plot sans soucis).

    En ce qui concerne la convolution par tranformée de Fourier, je définis

    Code:
    F1=fft(f1)
    F2=fft(f2)
    puis

    Code:
    z=F-1(F1 * F2)
    C'est à ce niveau là que ça bloque. J'ai essayé avec une Transformée de Fourier discrète, pas de résultat non plus...

    Je dois oublier quelque chose ou mal en définir une autre mais je vois pas ou...!

  4. #4
    invite18b68ae0

    Re : Scilab, Transformée de Fourier

    a priori, si vous l'avez écrit comme ça, la première idée qui me vient est la suivante :

    sous SciLab, comme sous MatLab, les multiplications sont des multiplications matricielles. Donc si vous essayez de multiplier deux matrices de mêmes dimensions, il faut rajouter un point devant le signe multiplier pour que la multiplication se fasse terme à terme. Sinon, il tentera de faire le produit d'une matrice de dimensions (1,n) par une matrice de dimensions (1,n).

  5. A voir en vidéo sur Futura
  6. #5
    invitec6b6a1e5

    Re : Scilab, Transformée de Fourier

    ah effectivement, je n'avais pas envisagé ça! J'essaierai ce soir et je vous tiens au courant !

    Merci !

  7. #6
    invitec6b6a1e5

    Re : Scilab, Transformée de Fourier

    Bonjour,

    Malheureusement cela ne marche toujours pas, je poste le code que j'utilise actuellement

    Code:
    //Initialisation
    xdel(winsid());     // Fermeture des fenetres
    clear               // Suppression des variables
    clc                 // effacement des lignes de la console
    lines(0);
    
    
    N1 = 100;
    N2 = 20;
    
    n1 = 1:N1;
    n2 = 1:N2;
    
    w = %pi/10;
    
    f1 = cos(w*n1);
    f2 = cos(w*n2);
    
    
    //Calcul par convolution directe
    timer()
    
    y = convol(f1, f2);
    
    timer();
    
    //Calcul par transformée de fourrier
    
    timer()
    
    F1 = dft(f1);
    F2 = dft(f2);
    F3 = F1.*F2
    
    z = fft(F3,1);
    
    timer();
    
    
    
    plot(f1);
    scf(); plot(f2);
    scf(); plot(y);
    scf(); plot(z);

  8. #7
    invitec6b6a1e5

    Re : Scilab, Transformée de Fourier

    J'ai légerement avancé,

    maintenant j'arrive à convoluer les deux mais il se trouve que la convolution par transformée de fourrier et a convolution directe ne me donnent pas les mêmes résultats

    Code:
    //Initialisation
    xdel(winsid());     // Fermeture des fenetres
    clear               // Suppression des variables
    clc                 // effacement des lignes de la console
    lines(0);
    
    // définition des constantes
    N=300 ; //nombre de points,
    Te=0.1e-2 ; // période d'échantillonange
    F=100 ; // fréquence du signal
    
    t=Te*(0:N-1);// description du vecteur temps 
    
    f1=2*cos(2*%pi*F*t);//description du vecteur signal f1
    f2=sin(2*%pi*F*t);//description du vecteur signal f2
    
    
    
    ////////////////////////////////////////////////////////////////////////////
    //Calcul par convolution directe
    timer()
    
    y = convol(f1,f2);
    
    timer();
    
    //Calcul par transformée de fourrier
    
    timer()
    
    F1=fft(f1,-1)
    F2=fft(f2,-1)
    
    z = fft( (F1 .* F2), 1);
    
    timer();
    
    
    
    // affichage sur la fenêtre 0
      xset('window',0); // sélection de la fenêtre 0
      xbasc(0); //effacer la fenetre 0
      xset("font size",4); //définition de la taille de la police
      
      xsetech([0, 0, 0.5,0.5]); // le haut gauche de la fenetre coupée en 4
      plot(f1) 
      xtitle('Sinusoide 1');
    
      xsetech([0,0.5,0.5,0.5]) ;// le bas gauche de la fenetre coupée en 4
      plot(f2) ; 
      xtitle('Sinusoide 2');
    
      xsetech([0.5,0,0.5,0.5]) ; //le haut droit de la fenetre coupée en 4
      plot(y); 
      xtitle('Convolution directe');
    
      xsetech([0.5,0.5,0.5,0.5]) ; //le bas droit de la fenetre coupée en 4
      plot(z);
      xtitle('Convolution par transformées de Fourier');

Discussions similaires

  1. transformée de fourier
    Par invite07dd2471 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 22/03/2009, 12h12
  2. Transformée de Fourier
    Par invitec13ffb79 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 03/01/2009, 11h49
  3. Transformée de Fourier plus, Transformée de Fourier moins.
    Par invite10e7600a dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 29/10/2008, 08h10
  4. Transformée de Fourier
    Par inviteaceb3eac dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 18/02/2007, 16h09
  5. Transformée de Fourier
    Par inviteec56abf0 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 30/05/2005, 05h59