filtre
C FILTRE SOURCE GOUNAND 19/07/23 21:15:10 10267 SUBROUTINE FILTRE IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C C======================================================================= C = CALCUL DE FILTRES PASSE-HAUT, PASSE-BAS,EN I*OMEGA C = C = SYNTAXE : C = C = FILTRE = FILT NN TYPE 'PHAU' FC (SORT 'REIM') DFRQ DF C = 'PBAS' FC 'MOPH' C = 'OMEG' NP C = C = NN EXPOSANT TEL QUE NPOINT=2**NN C = C = TYPE MOT-CLE C = C = SUIVI DU MOT HAUT : POUR UN FILTRE PASSE-HAUT C = BAS : POUR UN FILTRE PASSE-BAS C = OMEG : POUR UN FILTRE EN OMEGA C = C = FC FREQUENCE DE COUPURE DU FILTRE C = C = NP PUISSANCE DU FILTRE C = C = SORT MOT-CLE FACULTATIF : PAR DEFAUT MOPH C = C = SUIVI DU MOT REIM : PARTIES REELLES ET IMAGINAIRES C = MOPH : MODULE ET PHASE C = C = C = DFRQ MOT-CLE C = C = SUIVI DE LA VALEUR DU PAS EN FREQUENCE EN HZ C = C = CREATION : 16/04/88, F.ROULLIER C = C======================================================================= C CHARACTER*4 ISORT(2),MOCLE(3),ITYPE(3) CHARACTER*4 IBLAN SEGMENT TEMPP IMPLIED AA(NP),BB(NP),XX(NP),OMEG(NP) ENDSEGMENT C -INC CCGEOME -INC PPARAM -INC CCOPTIO -INC CCREEL -INC SMEVOLL -INC SMLREEL C DATA IBLAN 1/' '/ DATA ISORT/'REIM','MOPH'/ DATA ITYPE/'PHAU','PBAS','OMEG'/ DATA MOCLE/'TYPE','SORT','DFRQ'/ ISOR=2 DEGRES=180.D0/XPI XPI2=XPI*2.D0 ITYP=0 C C LECTURE DE L'EXPOSANT NN C IF(IRETOU.EQ.0) GOTO 666 C C IF (IRETOU.EQ.0) GO TO 30 GO TO (11,12,13) IRETOU GO TO 30 C 11 CONTINUE C LECTURE DU TYPE DE FILTRE C GO TO (21,21,23) ITYP C 21 CONTINUE C LECTURE DE LA FREQUENCE DE COUPURE C IF(IRETOU.EQ.0) GOTO 666 GO TO 10 C 23 CONTINUE C LECTURE DE LA PUISSANCE DE LA FREQ C IF(IRETOU.EQ.0) GOTO 666 GO TO 10 12 CONTINUE C LECTURE DU TYPE DE SORTIE IF(ISOR.EQ.0) ISOR=2 C GO TO 10 C 13 CONTINUE C LECTURE DU PAS EN FREQUENCE C IF(IRETOU.EQ.0) GOTO 666 GO TO 10 C 30 CONTINUE IF(ITYP.EQ.0) THEN MOTERR(1:4)= MOCLE(1) RETURN ENDIF C NPOINT=2**NN NPT2=NPOINT/2 NP=NPT2+1 C C CREATION DES FREQUENCES ET DU FILTRE C SEGINI TEMPP IF (ITYP.EQ.3) GO TO 100 C C IF(ISOR.EQ.1) THEN C C SORTIE EN PARTIE REELLE & IMAGINAIRE C I=1 XX(I)=0.D0 IF (ITYP.EQ.1) THEN AA(I)=0.D0 ELSE AA(I)=1.D0 ENDIF BB(I)=0.D0 DO 40 K=1,NPT2 I=I+1 FRQ=DBLE(I-1)*DF IF (ITYP.EQ.1) THEN RAP=FC/FRQ ELSE RAP=-FRQ/FC ENDIF DENOM=1.D0/(1.D0+RAP*RAP) XX(I)=FRQ AA(I)=DENOM BB(I)=RAP*DENOM 40 CONTINUE C ELSE C C SORTIE EN MODULE & PHASE C I=1 XX(I)=0.D0 IF (ITYP.EQ.1) THEN AA(I)=0.D0 BB(I)=90.D0 ELSE AA(I)=1.D0 BB(I)=0.D0 ENDIF DO 50 K=1,NPT2 I=I+1 FRQ=DBLE(I-1)*DF IF (ITYP.EQ.1) THEN RAP=FC/FRQ ELSE RAP=FRQ/FC ENDIF DENOM=1.D0/(1.D0+RAP*RAP) XX(I)=FRQ AA(I)=SQRT(DENOM) IF (ITYP.EQ.1) THEN BB(I)=ATAN(RAP)*DEGRES ELSE BB(I)=-ATAN(RAP)*DEGRES ENDIF 50 CONTINUE ENDIF C JG=NP SEGINI MLREE1,MLREE2,MLREE3 C DO 60 I=1,NP 60 CONTINUE C GO TO 200 100 CONTINUE C IMULT = 1 IF(NPUIS.LT.0) IMULT = -1 C C MDPUIS = MOD ( (IMULT*NPUIS),4) IF(IMULT.EQ.-1) THEN MDPUI1 = MDPUIS IF(MDPUI1.EQ.1) MDPUIS = 3 IF(MDPUI1.EQ.3) MDPUIS = 1 ENDIF C IF (ISOR.EQ.1) THEN I=1 XX(I)=0.D0 AA(I)=0.D0 BB(I)=0.D0 OMEG(I)=0.D0 DO 70 K=1,NPT2 I=I+1 FRQ=DBLE(I-1)*DF XX(I)=FRQ OMEG(I)=FRQ*XPI2 70 CONTINUE C C C IF (MDPUIS.EQ.0) THEN DO 71 K=2,NP AA(K)=OMEG(K)**NPUIS BB(K)=0.D0 71 CONTINUE ELSEIF (MDPUIS.EQ.1) THEN DO 72 K=2,NP AA(K)=0.D0 BB(K)=(OMEG(K)**NPUIS) 72 CONTINUE ELSEIF (MDPUIS.EQ.2) THEN DO 73 K=2,NP AA(K)=-1.0D0*(OMEG(K)**NPUIS) BB(K)=0.D0 73 CONTINUE ELSEIF (MDPUIS.EQ.3) THEN DO 74 K=2,NP AA(K)=0.D0 BB(K)=-1.0D0*(OMEG(K)**NPUIS) 74 CONTINUE ENDIF C ELSE I=1 XX(I)=0.D0 AA(I)=0.D0 OMEG(I)=0.D0 DO 75 K=1,NPT2 I=I+1 FRQ=DBLE(I-1)*DF XX(I)=FRQ OMEG(I)=FRQ*XPI2 75 CONTINUE C DO 81 K=2,NP AA(K)=OMEG(K)**NPUIS 81 CONTINUE IF (MDPUIS.EQ.1) THEN DO 76 K=1,NP BB(K)=90.D0 76 CONTINUE ELSEIF (MDPUIS.EQ.2) THEN DO 77 K=1,NP BB(K)=180.D0 77 CONTINUE ELSEIF (MDPUIS.EQ.3) THEN DO 78 K=1,NP BB(K)=-90.D0 78 CONTINUE ELSEIF (MDPUIS.EQ.0) THEN DO 79 K=1,NP BB(K)=0.D0 79 CONTINUE ENDIF C ENDIF C JG=NP SEGINI MLREE1,MLREE2,MLREE3 C DO 80 I=1,NP 80 CONTINUE 200 CONTINUE SEGSUP TEMPP SEGDES MLREE1,MLREE2,MLREE3 C C CREATION DE L'OBJET EVOLUTIO FILTRE C N=2 SEGINI MEVOLL IPEVOL=MEVOLL C IEVTEX=TITREE ITYEVO='COMPLEXE' C C MODULE (OU PARTIE REELLE) C SEGINI KEVOL1 KEVOL1.TYPX='LISTREEL' KEVOL1.TYPY='LISTREEL' IEVOLL(1)=KEVOL1 C c KEVOL1.KEVTEX=TITREE KEVOL1.NUMEVX=IDCOUL KEVOL1.NOMEVX='FREQUENCES ' IF(ISOR.EQ.1) THEN KEVOL1.NUMEVY='PREE' KEVOL1.NOMEVY='P. REELLE ' KEVOL1.KEVTEX='Re' ELSE KEVOL1.NUMEVY='MODU' KEVOL1.NOMEVY='MODULE ' KEVOL1.KEVTEX='Amp' ENDIF KEVOL1.IPROGX=MLREE1 KEVOL1.IPROGY=MLREE2 KEVOL1.NUMEVX=IDCOUL SEGDES KEVOL1 C C PHASE (OU PARTIE IMAGINAIRE) C SEGINI KEVOL2 KEVOL2.TYPX='LISTREEL' KEVOL2.TYPY='LISTREEL' IEVOLL(2)=KEVOL2 C c KEVOL2.KEVTEX=TITREE KEVOL2.NUMEVX=IDCOUL KEVOL2.NOMEVX='FREQUENCES ' IF(ISOR.EQ.1) THEN KEVOL2.NUMEVY='PIMA' KEVOL2.NOMEVY='P.IMAGINAIRE' KEVOL2.KEVTEX='Im' ELSE KEVOL2.NUMEVY='PHAS' KEVOL2.NOMEVY='PHASE ' KEVOL2.KEVTEX='\j' ENDIF KEVOL2.IPROGX=MLREE1 KEVOL2.IPROGY=MLREE3 KEVOL2.NUMEVX=IDCOUL SEGDES KEVOL2 C C SEGDES MEVOLL 666 CONTINUE RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales