Guest User

Untitled

a guest
Apr 23rd, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 3.18 KB | None | 0 0
  1. clear;
  2.  
  3. ////////////////////////////
  4. // Partie 1: TFD rapide  ///
  5. ////////////////////////////
  6.  
  7.  
  8. //Fonction permettant de realiser le decoupage
  9. // d'un vecteur X de taille pair en deux vecteurs
  10. // Le premier aura les valeurs des indices impair
  11. // Le second aura les valeurs des indices pair
  12. function [X0, X1] = decouper(X);
  13.  dimensionX = length(X);
  14.  for k=0:dimensionX/2-1;
  15.    X0(k+1) = X(2*k+1);
  16.    X1(k+1) = X(2*k+2);
  17.  end;
  18. endfunction;
  19.  
  20. //Tests de la fonction
  21. [dec1, dec2] = decouper([1,2,4,5]');
  22.  
  23.  
  24. //Transformee Fourier Discrete Rapide
  25. // Precondition: X de dimension 2^q
  26. function T= TFDrapide(X)
  27.  dimensionX = length(X);
  28.  if (dimensionX==1) then
  29.     //cas d'arret
  30.     T(1) = X(1);
  31.   else
  32.     //cas general
  33.     [X0, X1] = decouper(X);
  34.     TFDX0 = TFDrapide(X0);
  35.     TFDX1 = TFDrapide(X1);
  36.     for k=0:dimensionX/2-1;
  37.       T(k+1) = TFDX0(k+1) + exp(-2* %i * %pi * k/ dimensionX) * TFDX1(k+1);
  38.       T(k+1+dimensionX/2) = TFDX0(k+1) - exp(-2* %i * %pi * k/ dimensionX) * TFDX1(k+1);
  39.     end;
  40.   end;
  41. endfunction;
  42.  
  43.  
  44.  
  45. ///////////////////////////////////
  46. // Partie 2: TFD rapide inverse  //
  47. ///////////////////////////////////
  48.  
  49.  
  50. //Transformee Fourier Discrete Inverse Rapide
  51. function T = TFDrapideInverse(X)
  52.  dimensionX = length(X);
  53.  T = TFDrapide(X);
  54.  for k=0:dimensionX-1;
  55.    T(k+1) = conj(T(k+1)) / dimensionX;
  56.  end;
  57. endfunction;
  58.  
  59.  
  60.  
  61. //////////////////////////////////
  62. // Partie 3: Module de spectre  //
  63. //////////////////////////////////
  64.  
  65.  
  66. //Calcul le module du spectre d'un vecteur X
  67. //  qui sera allonge a une taille 256
  68. //Precondition: taille de X inferieur a 256
  69. function S = modspectre(X)
  70.   dimensionX = length(X);
  71.   for k=1:256;
  72.     S(k) = X(max(int((k /256) * dimensionX),1));
  73.   end;
  74.   S = TFD(S);
  75.   for k=1:256;
  76.     S(k) = abs(S(k));
  77.   end;
  78. endfunction;
  79.  
  80.  
  81. /////////////////////////////
  82. // FONCTION POUR LES TESTS //
  83. /////////////////////////////
  84.  
  85. //version moins optimise du calcul de la TFD
  86. // par simple application de la definition de la TFD
  87. function T = TFD(X);
  88.   dimensionX = length(X);
  89.  for k=0:dimensionX-1;
  90.    somme=0;
  91.    for n=0:dimensionX-1;
  92.      somme = somme + X(n+1)* exp(-2*%i*%pi*k*n/dimensionX);
  93.    end;
  94.    T(k+1) = somme;
  95.  end;
  96. endfunction;
  97.  
  98.  
  99. //version moins optimise du calcul de la TFD inverse
  100. // par simple application de la definition de la TFD inverse
  101. function T = TFDinverse(X);
  102.  dimensionX = length(X);
  103.  for k=0:dimensionX-1;
  104.    somme=0;
  105.    for n=0:dimensionX-1;
  106.      somme = somme + X(n+1)* exp(2*%i*%pi*k*n/dimensionX);
  107.    end;
  108.    T(k+1) = somme / dimensionX;
  109.  end;
  110. endfunction;
  111.  
  112.  
  113. //fonction utilise pour tester la fonction modspectre
  114. function X = creerSin()
  115.  
  116.  for k=1:2048;
  117.    X(k) = sin(k/5);
  118.  end;
  119.  
  120. endfunction;
  121.  
  122.  
  123.  
  124. ////////////
  125. // TESTS ///
  126. ////////////
  127.  
  128. //version rapide
  129. timer();
  130.  s3 =  TFDrapide(creerSin());
  131. //version peu optimise
  132. disp(timer());
  133.  
  134. timer();
  135. S3 = TFD(creerSin());
  136. disp(timer());
  137.  
  138. //version de scilab
  139.  
  140.  sc = fft( [45,14,14,15,14,15,16,17]',-1);
  141.  
  142. //version rapide
  143.  //s4 = TFDrapideInverse([45,14,14,15,14,15,16,17]');
  144. //version moins optimise
  145.  //s4 = TFDinverse([45,14,14,15,14,15,16,17]');
  146.  
  147. //test de modspectre
  148.  spectre = modspectre(creerSin());
Add Comment
Please, Sign In to add comment