Télécharger tfr.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : tfr.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. *
  5. * Transformee de Fourier rapide (FFT via operateur TFR)
  6. * et transformee inverse (FFT-1 via operateur TFRI)
  7. *
  8. * BP, 2018-10-04
  9. *
  10. ************************************************************************
  11.  
  12. ************************************************************************
  13. * Test de plusieurs signaux
  14. ************************************************************************
  15.  
  16. * nombre de points consideres (TFR demande une puissance de 2)
  17. * p = 10;
  18. p = 18;
  19. n = 2**p;
  20.  
  21. * listes des temps (de dime n)
  22. t = prog 0. pas (4./n) npas (n-1);
  23. * quelques listes utiles
  24. c180 = cos (180*t);
  25. s180 = sin (180*t);
  26. * creneau
  27. cre_c = masq c180 'EGSUPE' 0.;
  28. cre_s = masq s180 'EGSUPE' 0.;
  29. * bruite
  30. xh = (0.7*(sin (100*t))) + (sin (360*t));
  31. xb = brui 'BLAN' 'UNIF' 0. 0.5 (n );
  32. bru1 = xh + xb;
  33. * rampe
  34. ram1 = 1.*t;
  35. * pour le trace
  36. tt = tabl; tt . 2 = mot 'TIRR';
  37. tt . 3 = mot 'POIN ';
  38. tt . 4 = mot 'MARQ SS ROND';
  39. * erreur
  40. err_p = prog ;
  41.  
  42. * boucle sur les signaux a traiter
  43. REPE BB 6;
  44.  
  45. * quel cas traite t'on ?
  46. si (&BB ega 1) ; x = c180; finsi;
  47. si (&BB ega 2) ; x = s180; finsi;
  48. si (&BB ega 3) ; x = cre_c; finsi;
  49. si (&BB ega 4) ; x = ram1 ; finsi;
  50. si (&BB ega 5) ; x = bru1 ; finsi;
  51. si (&BB ega 6) ; x = cre_s; finsi;
  52.  
  53. * signal de depart
  54. ev_x = evol azur manu 't' t 'x' x;
  55.  
  56. * Transformee de Fourier
  57. * Tx = TFR ev_x p 'MOPH';
  58. Tx = TFR ev_x p 'REIM';
  59. * si (&BB ega 3); list Tx; sinon; list resum Tx; finsi;
  60.  
  61. * Transformee de Fourier inverse
  62. ev_y = (TFRI Tx) COUL 'BRON';
  63. * si (&BB ega 3); list ev_y; sinon; list resum ev_y; finsi;
  64. * si (&BB ega 3); dess (ev_x et ev_y) tt; finsi;
  65.  
  66. * test de bon fonctionnement
  67. t_y = EXTR (EXTR ev_y 'COUR' 1) 'ABSC' ;
  68. x = EXTR (EXTR ev_x 'COUR' 1) 'ORDO' ;
  69. y = EXTR (EXTR ev_y 'COUR' 1) 'ORDO' ;
  70. err_x = MAXI 'ABS' (x - y) ;
  71. err_p = err_p et err_x;
  72.  
  73. MESS '>>> Cas' ' ' &BB ' : erreur =' err_x;
  74.  
  75. FIN BB ;
  76.  
  77. TEMP IMPR MAXI CPU;
  78. xCPU1 = TEMP 'CPU' ;
  79. mess '>>> temps CPU = ' xCPU1 ' ms ';
  80.  
  81. ************************************************************************
  82. * Test des options
  83. ************************************************************************
  84. * Transformee de Fourier Module PHase
  85. Tx1 = TFR ev_x p 'MOPH' BLEU;
  86. * Transformee de Fourier option FMAX
  87. Tx2 = TFR ev_x p 'FMAX' 256. VERT;
  88. * Transformee de Fourier option FMIN (pas souvent utilise a priori)
  89. Tx3 = TFR ev_x p 'FMIN' 10.5 ORAN;
  90. * Transformee de Fourier options FMIN FMAX simultanee
  91. Tx4 = TFR ev_x p 'FMIN' 10.5 'FMAX' 99.5 BRUN;
  92.  
  93. * Transformee de Fourier inverse sur Tx1 ...
  94. ev_y1 = (TFRI Tx1) COUL 'BLEU';
  95. y1 = IPOL t ev_y1;
  96. err_x1 = MAXI 'ABS' (x - y1) ;
  97. err_p = err_p et err_x1;
  98. * ... et Tx2 seulement
  99. ev_y2 = (TFRI Tx2) COUL 'VERT';
  100. y2 = IPOL t ev_y2;
  101. * pour ce cas, phenomene de Gibbs visible :
  102. * on calcule une erreur moyenne plutot que max et on est + tolerant
  103. * err_x2 = MAXI 'ABS' (x - y2) ;
  104. err_x2 = (SOMM (ABS (x - y2))) / (dime x);
  105. * si (p < 16); dess (ev_x et ev_y et ev_y1 et ev_y2) tt; finsi;
  106.  
  107.  
  108. ************************************************************************
  109. * TEST DE NON REGRESSION
  110. ************************************************************************
  111. * pour info : lors de la creation du cas-test,
  112. * +----------+-------------------------+--------------+
  113. * | linux 64 | AIX |
  114. * +----------+-------------------------+-------+------+
  115. * | castem18 | castem apres EVOL #9942 | avant | apres|
  116. * +-------------+----------+-------------------------+-------+------+
  117. * | precision | ~1.E-10 | ~1.E-15 |~1.E-10|~1E-15|
  118. * | performance | 540ms | 190ms | 1090ms| 930ms|
  119. * +-------------+----------+-------------------------+-------+------+
  120. * perf linux 32 apres EVOL : 306ms
  121.  
  122. * PRECISION
  123. XPREC = VALE 'PREC'; mess 'precision=' XPREC;
  124. XTOL = XPREC * 100;
  125. ZPREC1 = (maxi 'ABS' err_p) > XTOL;
  126. ZPREC2 = err_x2 > 1.E-2;
  127. SI ZPREC1; MESS 'PB DE PRECISION !'; FINSI;
  128. SI ZPREC2; MESS 'PB DE PRECISION avec option FMAX !'; FINSI;
  129.  
  130. * * PERFORMANCE
  131. * ZPERF1 = xCPU1 > ??? difficile car tres dependant-machine ;
  132. * SI ZPERF1; MESS 'PB DE PEROFRMANCE !'; FINSI;
  133. * SI (ZPREC1 OU ZPERF1 ou ZPREC2);
  134. SI (ZPREC1 OU ZPREC2);
  135. ERRE 5;
  136. FINSI ;
  137.  
  138.  
  139. FIN ;
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales