Télécharger dspr.eso

Retour à la liste

Numérotation des lignes :

dspr
  1. C DSPR SOURCE BP208322 16/11/18 21:16:32 9177
  2. SUBROUTINE DSPR
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-V)
  5. IMPLICIT COMPLEX*16 (W-Z)
  6. CHARACTER *72 TI
  7. CHARACTER*12 MOTX,MOTY
  8. CHARACTER*4 MCLE(2)
  9. LOGICAL INV
  10. C
  11. C=======================================================================
  12. C = CALCUL DE LA DENSITE SPECTRALE DE PUISSANCE D'UN SIGNAL =
  13. C = =
  14. C = SYNTAXE : =
  15. C = =
  16. C = SPEC = DSPR EXP2 EVO1 FMIN V1 FMAX V2 (COUL) ; =
  17. C = =
  18. C = =
  19. C = EXP2 : EXPOSANT DANS NPOINT=2^EXP2, NPOINT ETANT =
  20. C = LE NOMBRE DE REELS DANS LISTREEL =
  21. C = EVO1 : OBJET DE TYPE EVOLUTIO CONTENANT LE SIGNAL A TRAITER=
  22. C = ( UNE COURBE SEULEMENT ) =
  23. C = FMIN : MOT-CLE =
  24. C = V1 : FREQUENCE MINIE A VISUALISER =
  25. C = FMAX : MOT-CLE =
  26. C = V2 : FREQUENCE MAXIE A VISUALISER =
  27. C = COUL : COULEUR ATTRIBUEE A L'OBJET CREE (FACULTATIF) =
  28. C = =
  29. C = =
  30. C = CREATION : 01/04/87 =
  31. C = PROGRAMMEUR : BEAUFILS =
  32. C = MODIFICATIO : PEG WARNING LE IRET2.... 22/2/90 =
  33. C = MODIFICATIO : PEG FREQUENCES CORRECTES 1/6/90 =
  34. C = MODIFICATIO : PEG PERIODOGRAM CORRECT 1/6/90 =
  35. C=======================================================================
  36. C
  37. -INC CCGEOME
  38.  
  39. -INC PPARAM
  40. -INC CCOPTIO
  41. -INC SMEVOLL
  42. -INC SMLREEL
  43. C
  44. SEGMENT MTRAV1
  45. IMPLIED XX(NCOU),YY(NCOU)
  46. ENDSEGMENT
  47. C
  48. SEGMENT MTRAV2
  49. IMPLIED W(NEXP)
  50. ENDSEGMENT
  51. C
  52. DATA MOTX/'FREQ HZ'/
  53. DATA MOTY/'DSP UN**2/HZ'/
  54. DATA MCLE(1),MCLE(2)/'FMIN','FMAX'/
  55. C
  56. C LECTURE DE EXP2
  57. C
  58. CALL LIRENT(N2,1,IRET1)
  59. IF(IRET1.EQ.0)GOTO 666
  60. C
  61. C LECTURE DE L'OBJET EVOLUTIO CONTENANT LE SIGNAL
  62. C
  63. CALL LIROBJ('EVOLUTIO',IPSIG,1,IRET2)
  64. C PEG IF(IRET1.EQ.0)GOTO 666
  65. IF(IRET2.EQ.0)GOTO 666
  66. C
  67. C LECTURE DE LA FREQUENCE MINIE
  68. C
  69. CALL LIRMOT(MCLE(1),1,IRET,0)
  70. IF(IRET.EQ.1) THEN
  71. CALL LIRREE(FRMI,0,IRET1)
  72. IF(IRET1.EQ.0) THEN
  73. MOTERR(1:4)=MCLE(1)
  74. CALL ERREUR(166)
  75. GOTO 666
  76. ENDIF
  77. IF(FRMI.LT.(-1.D-20)) FRMI=-FRMI
  78. IF(ABS(FRMI).LT.1.D-20) FRMI=-1.D0
  79. ELSE
  80. FRMI=-1.D0
  81. ENDIF
  82. C
  83. C LECTURE DE LA FREQUENCE MAXIE
  84. C
  85. CALL LIRMOT(MCLE(2),1,IRET,0)
  86. IF(IRET.EQ.1) THEN
  87. CALL LIRREE(FRMA,0,IRET1)
  88. IF(IRET1.EQ.0) THEN
  89. MOTERR(1:4)=MCLE(2)
  90. CALL ERREUR(166)
  91. GOTO 666
  92. ENDIF
  93. IF(FRMA.LT.(-1.D-20)) FRMA=-FRMA
  94. IF(ABS(FRMA).LT.1.D-20) FRMA=-1.D0
  95. ELSE
  96. FRMA=-1.D0
  97. ENDIF
  98. C
  99. C LECTURE DE LA COULEUR
  100. C
  101. CALL LIRMOT(NCOUL,NBCOUL,ICOUL,0)
  102. IF(ICOUL.EQ.0) ICOUL=IDCOUL+1
  103. ICOUL=ICOUL-1
  104. C
  105. IF(IERR.NE.0) GOTO 666
  106. C
  107. MEVOL1=IPSIG
  108. SEGACT MEVOL1
  109. KEVOL1=MEVOL1.IEVOLL(1)
  110. SEGACT KEVOL1
  111. MLREE1=KEVOL1.IPROGX
  112. MLREE2=KEVOL1.IPROGY
  113. SEGACT MLREE1,MLREE2
  114. C
  115. L1=MLREE1.PROG(/1)
  116. DT=MLREE1.PROG(2)-MLREE1.PROG(1)
  117. SEGDES MLREE1
  118. C
  119. NPOINT=2**N2
  120. IF(NPOINT.GT.L1) THEN
  121. IF(IIMPI.EQ.1) WRITE(IOIMP,1000) L1,N2,NPOINT
  122. 1000 FORMAT(1H ,'LE NOMBRE DE POINTS DANS LISTEMPS ',I6, ' EST ',
  123. & 'INFERIEURE @ 2**',I5,
  124. & /' ON PRENDRA UNE LONGUEUR DE LISTEMPS DE ',I6,' MOTS ',
  125. & /' ET ON COMPLETERA PAR DES ZEROS')
  126. ELSE
  127. IF(NPOINT.LT.L1) THEN
  128. IF(IIMPI.EQ.1) WRITE(IOIMP,1010) N2
  129. 1010 FORMAT(1H ,'ON TRONQUE LE SIGNAL A 2**',I5,' MOTS',/)
  130. ELSE
  131. IF(IIMPI.EQ.1) WRITE(IOIMP,1030)N2,NPOINT
  132. 1030 FORMAT(1H ,'LA LONGUEUR DU LISTEMP EST EGALE A 2**',I5,
  133. & ' = ',I6,/)
  134. ENDIF
  135. ENDIF
  136. C
  137. NCOU=NPOINT
  138. SEGINI MTRAV1
  139. C
  140. NEXP=NPOINT/2
  141. SEGINI MTRAV2
  142. C
  143. C CHARGEMENT DES TABLEAUX DE TRAVAIL
  144. C
  145. IND1=L1
  146. IF(NPOINT.LT.L1)IND1 = NPOINT
  147. DO 10 I=1,IND1
  148. XX(I)=MLREE2.PROG(I)
  149. C IF(IIMPI.EQ.1)WRITE(IOIMP,*) ' XX(',I,') = ',XX(I)
  150. 10 CONTINUE
  151. IF(NPOINT.GT.L1) THEN
  152. L2=L1+1
  153. DO 11 I=L2,NPOINT
  154. XX(I)=0.D0
  155. 11 CONTINUE
  156. ENDIF
  157. C
  158. C CALCUL DE LA FFT
  159. C
  160. IF(IIMPI.EQ.1) WRITE(IOIMP,*)' CALCUL DE LA FFT DU SIGNAL '
  161. INV=.FALSE.
  162. CALL WEXP(INV,NPOINT,W(1))
  163. CALL FFTL(XX(1),YY(1),W(1),NPOINT)
  164. C
  165. IF(IIMPI.EQ.1) WRITE(IOIMP,*)' FFT CALCULEE '
  166. SEGDES MLREE2
  167. C
  168. C CREATION ET CALCUL DES LISTES DE LA DSP
  169. C
  170. IF(IIMPI.EQ.1) WRITE(IOIMP,*)' CALCUL DE LA DSP DU SIGNAL '
  171. DUREE=DT*DBLE(NPOINT)
  172. DFREQ=1.D0/DUREE
  173. KHALF=NEXP+1
  174. CPP +
  175. KHALF1=KHALF
  176. CPP +
  177. KMIN=INT(FRMI/DFREQ)+1
  178. KMAX=INT(FRMA/DFREQ)+1
  179. KDEBU=1
  180. IF(KMIN.GT.0) KDEBU=KMIN
  181. IF((KMAX.LT.KHALF).AND.(FRMA.GT.0.)) KHALF=KMAX
  182. JG=KHALF-KDEBU+1
  183. SEGINI MLREE1
  184. SEGINI MLREE2
  185. CPP ! COEF=2.D0*DFREQ*DT*DT
  186. COEF= DFREQ*DT*DT
  187. DO 20 I=KDEBU,KHALF
  188. FREQ=DBLE(I-1)*DFREQ
  189. C IF(IIMPI.EQ.1) WRITE(IOIMP,*)I,FREQ,' XX = ',XX(I)
  190. MLREE1.PROG(I-KDEBU+1)=FREQ
  191. YCOMP=CONJG(XX(I))
  192. PMODU2=XX(I)*YCOMP
  193. cbp: on pourrait aussi ecrire PMODU2=ABS(XX(I))**2
  194. CPP +
  195. IF(I.NE.1.AND.I.NE.KHALF1)THEN
  196. YCOMP=CONJG(XX(NPOINT-I+2))
  197. PMODU2=PMODU2+XX(NPOINT-I+2)*YCOMP
  198. cbp: on pourrait aussi ecrire PMODU2=PMODU2+ABS(XX(NPOINT-I+2))**2
  199. ENDIF
  200. CPP +
  201. MLREE2.PROG(I-KDEBU+1)=COEF*PMODU2
  202. C IF(IIMPI.EQ.1) WRITE(IOIMP,*)'DSP(',I,')=',MLREE2.PROG(I)
  203. 20 CONTINUE
  204. C
  205. SEGDES MLREE1,MLREE2
  206. C
  207. C CREATION DE L'OBJET EVOLUTIO DSP
  208. C
  209. N=1
  210. SEGINI MEVOLL
  211. IPVO=MEVOLL
  212. TI(1:72)=TITREE
  213. IEVTEX=TI
  214. ITYEVO='REEL'
  215. SEGINI KEVOLL
  216. c KEVTEX=TI
  217. KEVTEX=KEVOL1.KEVTEX
  218. IEVOLL(1)=KEVOLL
  219. TYPX='LISTREEL'
  220. TYPY='LISTREEL'
  221. C
  222. IPROGX=MLREE1
  223. NOMEVX=MOTX(1:12)
  224. C
  225. IPROGY=MLREE2
  226. NOMEVY=MOTY(1:12)
  227. C
  228. NUMEVX=ICOUL
  229. NUMEVY='REEL'
  230. C
  231. SEGSUP MTRAV1,MTRAV2
  232. SEGDES KEVOL1
  233. SEGDES MEVOL1
  234. C
  235. SEGDES KEVOLL,MEVOLL
  236. CALL ECROBJ('EVOLUTIO',IPVO)
  237. 666 CONTINUE
  238. RETURN
  239. END
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  

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