* RESPOWSP PROCEDUR PICA 92/07/03 21:34:39 619 ********************************************************************* * DATE 06/04/90 * Procedure RESPOWSP * * PSPE = RESPOWSP RSPE TE AMOR (OPTION); ********************************************************************* * objet : * * Calcul du spectre de puissance (objet de type EVOLUTION * comportant une unique courbe) d'un signal de duree TE (REEL) * associe a N spectres de reponse RSPE (objet de type EVOLUTION * comportant N courbes) correspondant aux N amortissements AMOR * (objet de type LISTREEL). * * Pour stabiliser le processus de convergence, les premieres * iteration s'effectuent en utilant le filtre de Hanning (HANN). ********************************************************************* * options : * * Les options sont contenues dans OPTION (objet de type TABLE). * * OPTION.'GPRP'= objet de type MOT representant la grandeur * physique de reponse : ACCE(leration), VITE(sse) * ou DEPL(acement relatif). Le defaut est ACCE. * * OPTION.'GPAB'= objet de type MOT representant la grandeur * physique en abscisse de la reponse: PERI(ode) * ou FREQ(uence). Le defaut est PERI. * * OPTION.'FRCO'= objet de type FLOTTANT indiquant la frequence * de coupure du signal. le defaut est 25 hz. * * OPTION.'FFPS'= objet de type LISTREEL donnant le reticule de * calcul en frequence du spectre de puissance. Le * defaut est une progression geometrique entre * 1/TE et la frequence de coupure dont la raison * est (1+2*KSI), ou KSI=MIN AMOR. * * OPTION.'TTRS'= objet de type LISTREEL donnant le reticule de * calcul en periode du spectre de reponse. Le * defaut est celui de l'operateur PSRS. * * OPTION.'DIST'= objet de type MOT representant le type de * distribution choisi pour evaluer le lieu des * maxima du spectre de reponse: CRAM(er) ou * NEWG(umg). Le defaut est CRAM. * * OPTION.'JMAX'= objet de type ENTIER representant le nombre * maximum d'iteration autorise. Le defaut est 15. * * OPTION.'JHAN'= objet de type ENTIER representant le nombre * d'iteration comportant le filtrage de Hanning. * le defaut est JMAX. * * OPTION.'EMAX'= objet de type FLOTTANT representant la limite de * convergence de l'erreur. Le defaut est 1.E-2. * * OPTION.'LIST'= objet de type LOGIQUE indiquant la possibilite * d'affichage du processus de convergence. Le * defaut est FAUX. * ********************************************************************* OPTION/'TABLE'; * ******* INITIALISATION ********************************************** * * *------ Reprise de la table d'entre et/ou introduction des defauts * 'SI' ('NON' ('EXISTE' OPTION)); LOPTION=FAUX; 'SINON'; LOPTION=VRAI; 'FINSI'; * LOK=VRAI; * GPRP='ACCE';GPAB='PERI';DIST='CRAM'; FRCO=25.D0; LFFPS=FAUX;LTTRS=FAUX; JMAX=15;JHAN=JMAX;EMAX=1.E-2; LLIST=FAUX; 'SI' LOPTION; 'SI' ('EXISTE' OPTION 'GPRP'); GPRP=OPTION.'GPRP'; 'FINSI'; 'SI' ('EXISTE' OPTION 'GPAB'); GPAB=OPTION.'GPAB'; 'FINSI'; 'SI' ('EXISTE' OPTION 'DIST'); DIST=OPTION.'DIST'; 'FINSI'; 'SI' ('EXISTE' OPTION 'FRCO'); FRCO=OPTION.'FRCO'; 'FINSI'; 'SI' ('EXISTE' OPTION 'FFPS'); LFFPS=VRAI; FFPS=OPTION.'FFPS'; DFFPS='DIMENSION' FFPS; 'FINSI'; 'SI' ('EXISTE' OPTION 'TTRS'); LTTRS=VRAI; TTRS=OPTION.'TTRS'; 'FINSI'; 'SI' ('EXISTE' OPTION 'JMAX'); JMAX=OPTION.'JMAX'; JHAN=JMAX; 'FINSI'; 'SI' ('EXISTE' OPTION 'EMAX'); EMAX=OPTION.'EMAX'; 'FINSI'; 'SI' ('EXISTE' OPTION 'JHAN'); JHAN=OPTION.'JHAN'; 'FINSI'; 'FINSI'; *'MESSAGE' 'Fin de la reprise'; * *------ Verification de la grille du RS (donnee) * FRMIN=1/TE; 'SI' (LTTRS); TTMIN='EXTRAIRE' TTRS 1; NBTTRS='DIMENSION' TTRS;TTMAX='EXTRAIRE' TTRS NBTTRS; 'SI' ( (1/TTMAX) '>EG' (FRMIN + 1.D-6) ); LOK=FAUX; 'FINSI'; 'SI' ( (1/TTMIN) '<EG' (FRCO - 1.D-6) ); LOK=FAUX; 'FINSI'; 'FINSI'; 'SI' ('NON' LOK); 'FINSI'; *'MESSAGE' 'Fin verification de la grille du RS * *------ Constante relative a la phase de Hanning NHANN=3; * *------ Generation de la grille des frequence du PS *------ ou verification de la grille par defaut * 'SI' LOK; 'SI' ('NON' LFFPS); FXXX= 1. / TE; UNPXI=1. + (2. * AMOMIN); J=1; 'REPETER' LAB1; FXXX=FXXX * UNPXI; 'SI' ( FXXX '>EG' FRCO ); 'QUITTER' LAB1; 'FINSI'; J=J+1; FFPS= 'INSERER' FFPS J FXXX; 'FIN' LAB1; DFFPS=J+1; FFPS ='INSERER' FFPS DFFPS FRCO; *'MESSAGE' 'Fin de la generation de FFPS'; 'FINSI'; *------ On duplique FFPS (pour mieux detruire l'objet interpole) FFRS= 'COPIER' FFPS; *------ On corrige eventuellement FFRS FRMINB='EXTRAIRE' FFRS 1; 'SI' ( ('ABS' (FRMINB-FRMIN)) '>EG' 1.E-5); 'SI' (FRMINB '<' FRMIN); LOK=FAUX; 'FINSI'; 'SINON'; 'REMPLACER' FFRS 1 (FRMIN + 1.D-6); 'FINSI'; FRCOB='EXTRAIRE' FFRS DFFPS; 'SI' ( ('ABS' (FRCOB-FRCO)) '>EG' 1.E-5); 'SI' (FRCOB '>' FRCO); LOK=FAUX; 'MESSAGE' 'LA FREQUENCE MAX DE FFPS EST INCOHERENTE (25Hz)'; 'FINSI'; 'SINON'; 'REMPLACER' FFRS DFFPS (FRCO - 1.D-6); 'FINSI'; *------ On detruit FFRS et eventuellement FFPS en cas d'erreur 'SI' ('NON' LOK); 'FINSI'; 'FINSI'; * *------ Creation de l'objet evolution contenant le RS *------ interpole sur la grille FFPS *------ Calcul des references d'erreur * 'SI' LOK; *------ Si le RS est donne en periode on interpole sur une grille *------ de periode 'SI' ( 'EGA' GPAB 'PERI' ); JT=0;JF=DFFPS+1; 'REPETER' LAB2 DFFPS; JF=JF-1; FXXX='EXTRAIRE' FFRS JF; TXXX= 1. / FXXX; JT=JT+1;FFPE= 'INSERER' FFPE JT TXXX; 'FIN' LAB2; GRITER=FFPE; 'SINON'; GRITER=FFRS; 'FINSI'; *'MESSAGE' 'Fin de generation/recuperation de GRITER'; *------ Min/Max de GRITER XMIGR='EXTRAIRE' GRITER 1; XMAGR='EXTRAIRE' GRITER DFFPS; *------ On initialise les references d'erreur *------ Boucle sur les courbes J=0; 'REPETER' LAB4 DAMOR; J=J+1; *'MESSAGE' 'Interpolation du resp numero' J; *------ Extraction des courbes ABSI= 'EXTRAIRE' RSPE 'ABSC' J; *'MESSAGE' ' fin extraction'; *------ Interpolation (on blinde pour que GRITER soit tjs dedans *------ ABSI) INTERN=VRAI; DABSI= 'DIMENSION' ABSI; XMAAB= 'EXTRAIRE' ABSI DABSI; LMAX = XMAAB '<' XMAGR; XMIAB= 'EXTRAIRE' ABSI 1; LMIN = XMIAB '>' XMIGR; 'SI' ( LMAX 'OU' LMIN ); INTERN=FAUX; AABSI='COPIER' ABSI; OORDI='COPIER' ORDI; 'SI' LMAX; AABSI='INSERER' AABSI (DABSI+1) (1.00001*XMAGR); XXORD='EXTRAIRE' OORDI DABSI; OORDI= 'INSERER' OORDI (DABSI+1) XXORD; 'FINSI'; 'SI' LMIN; AABSI= 'INSERER' AABSI 1 (.99999*XMIGR); XXORD='EXTRAIRE' OORDI 1; OORDI= 'INSERER' OORDI 1 XXORD; 'FINSI'; 'FINSI'; 'SI' INTERN; 'SINON'; 'FINSI'; *'MESSAGE' ' fin interpolation'; *------ Si le RS est donne en periode on le restitue en frequence 'SI' ( 'EGA' GPAB 'PERI' ); JF=0;JT=DFFPS+1; 'REPETER' LAB3 DFFPS; JT=JT-1; RS='EXTRAIRE' RSTER JT; JF=JF+1;RSTERB = 'INSERER' RSTERB JF RS; 'FIN' LAB3; RSTER=RSTERB; *'MESSAGE' ' fin restitution en frequence'; 'FINSI'; *------ On calcul la reference d'erreur ERRN= 'INSERER' ERRN J ERRRN; *------ On genere la courbe RS interpole 'SI' (J 'EGA' 1); RSINTERF=COURBE; 'SINON'; RSINTERF=RSINTERF 'ET' COURBE; 'FINSI'; *'MESSAGE' ' fin concatenation dans RSINTERF'; 'FIN' LAB4; * *------ On initialise le PS * J=0; 'REPETER' LAB5 DFFPS; J=J+1; PS= 'INSERER' PS J (1.); 'FIN' LAB5; *'MESSAGE' 'fin initialisation PS'; * 'SI' LLIST; 'MESSAGE' 'procedure RESPOWSP avec ' DAMOR ' spectres de reponse'; 'FINSI'; * ******* CALCUL ****************************************************** * LHANN=VRAI; ERRP=0.; JCALC=0; EXPOS=2. / DAMOR; 'REPETER' CALCUL; JCALC=JCALC+1; *'MESSAGE' 'Boucle de calcul: Iteration ' JCALC; * *------ On calcul le RS (en frequence) associer au PS * 'SI' LTTRS; 'SINON'; 'FINSI'; *'MESSAGE' ' Fin du calcul du RS'; * *------ On interpole le RS sur la grille du PS * J=0; 'REPETER' LAB10 DAMOR; J=J+1; *'MESSAGE' ' Boucle d"interpolation du RS' J ; *------ Extraction des abscisses/ordonnees ABSI= 'EXTRAIRE' RSPEC 'ABSC' J; *'MESSAGE' ' Fin extraction RS Calcule'; *------ Interpolation *'MESSAGE' ' Fin interpolation'; *------ Extraction du RS de consigne *'MESSAGE' ' Fin extraction RS Consigne'; *------ Calcul du rapport du calcul a la consigne RAPJ = RSJ / RSCJ; *'MESSAGE' ' Fin calcul amplification RAPJ'; *------ Determination de l'erreur absolue; ERRRA1 = RSJ - RSCJ; ERRRA2 = 'ABS' ERRRA1; ERRA='INSERER' ERRA J ERRRA; *------ Cumul des rapport.... 'SI' (J 'EGA' 1); RAP = RAPJ; 'SINON'; RRAP = RAP * RAPJ; *------ ... et premieres destructions RAP=RRAP; 'FINSI'; *'MESSAGE' ' Fin cumul amplification RAP'; 'FIN' LAB10; *'MESSAGE' ' Fin calcul amplification RAP'; *------ calcul des coefficients COEF = RAP ** EXPOS; *'MESSAGE' ' Fin calcul amplification reelle COEF'; *------ calcul d'erreur ERRR = ERRA / ERRN; *'MESSAGE' ' Fin calcul mesure scalaire d"erreur'; 'SI' LLIST; 'MESSAGE' 'step' JCALC ' ---> mesure d"erreur=' ERR; 'FINSI'; *------ nouveau PS; PS = COEF * PSO; *'MESSAGE' ' Fin calcul nouveau PS'; *------ fin du calcul??? XCONV1=ERR;XCONV2=(ABS (ERRP - ERR))/ERR; 'SI' (XCONV1 '>' XCONV2); XCONV=XCONV2; 'SINON'; XCONV=XCONV1; 'FINSI'; 'SI' (XCONV '<' EMAX); 'QUITTER' CALCUL; 'FINSI'; ERRP=ERR; *'MESSAGE' ' Fin test d"erreur'; *------ fin du calcul en erreur ??? 'SI' (JCALC '>EG' JMAX); 'QUITTER' CALCUL; 'FINSI'; *------ filtrage 'SI' (JCALC '>EG' JHAN); LHANN=FAUX; 'FINSI'; 'SI' LHANN; PSPE=PSPB; *'MESSAGE' ' Fin filtrage'; 'FINSI'; 'FIN' CALCUL; *'MESSAGE' ' Fin boucle de calcul'; * ******* SORTIE ****************************************************** * 'FINSI'; 'FINPROC' PSPE;
© Cast3M 2003 - Tous droits réservés.
Mentions légales