C -+-+-+-+-+  H A E P R P . F T  -+-+-+-+-+ C C PREP FOR THE FFT C SUBROUTINE PRPFFT INCLUDE HAEBUF.FI INCLUDE HAEGSA.FI INCLUDE HAEPTI.FI INCLUDE HAETTY.FI INCLUDE HABRK.FI C INTEGER LOG2 EXTERNAL LOG2 C INTEGER I,J,K,DA(3),BAND,LIMIT @ DO LOOP COUNTERS & LIMITS REAL TEMP,CPUTIM C C 10 CONTINUE C C HERE WE TEST FOR CORRECT FREQUENCY LIMITS OF THE EEG BAND (1-5) DO 12 BAND=1,5 DO 12 LIMIT=1,2 IF (FREQU(BAND,LIMIT).LE.SAMRAT/2) GOTO 12 WRITE (TTO,101) BAND,SAMRAT FREQU(BAND,LIMIT)=COND(LIMIT.EQ.1,SAMRAT/2.-.1,SAMRAT/2.) 12 CONTINUE C IF (OPTION.NE.12 .OR. ENDS.LT.SPAN) CALL ASKHIM(4) @ CO* DOESN'T ASK SCILLY QUESTIONS IF THERE ARE CORRECT PARAMETERS C C TEST FOR VALID INPUT PARAMETERS C IF BREAK(11) RETURN @ USER GETS RID OF PROGRAM INCR=SAMRAT*SPAN @ NUMBER OF POINTS FOR EACH FFT --> INCR IF (INCR.LE.2048) GOTO 22 @ MORE THAN 2048 POINTS TO SCAN? WRITE (TTO,6) SPAN @ TOO LESS MEMORY GOTO 10 22 CONTINUE IF (SPAN.LE.ENDS) GOTO 23 @ LESS THAN ONE PASS? WRITE (TTO,8) SPAN,ENDS GOTO 10 23 CONTINUE IF (ENDS.LE.SAMCNT/SAMRAT) GOTO 24 @ IF THE END DOES NOT EXCEED THE SAMPLE COUNT THEN WE GO 24 ELSE I=SAMCNT/SAMRAT @ WE COMPUTE THE SAMPLING TIME IN SECONDS WRITE (TTO,2) ENDS,I @ IN ORDER TO PRINT AN DIAGNOSTIC MSG ENDS=SAMCNT/SAMRAT @ AND THE WE BUMP THE SAMPLING TIME INTO ENDS 24 CONTINUE EXPON=LOG2(INCR) @ TEST FOR POWER OF 2 IF (EXPON.GT.0) GOTO 20 @ IF INCR IS A POWER OF TWO THEN GOTO 20 WRITE (TTO,3) SAMRAT,SPAN @ NO POWER OF TWO GOTO 10 @ READ NEXT VALUE 20 TEMP=AMOD(FLOAT(ENDS-BEGIN),FLOAT(SPAN)) @ COMPUTE SECONDS TO TRANSFORM IF (TEMP.LT.0.1) GOTO 30 @ ARE THERE SOME SECONDS LEFT? TEMP=AMOD(FLOAT(SAMCNT)/FLOAT(SAMRAT),FLOAT(SPAN)) WRITE (TTO,4) TEMP @ TELL THE USER THERE IS SOMETHING REMAINING 30 ENDS=BEGIN+(ENDS-BEGIN)/SPAN*SPAN @ COMPUTE THE END OF THE SPECTRUM TO SCAN C I=NCOND(OVRLAP,2*(ENDS-BEGIN)/SPAN,(ENDS-BEGIN)/SPAN) @ IF THE INTERMEDIATE RESULTS FIT ONTO UNIT 5 THEN I=I/4 @ FOUR DATA WORDS PER RECORD I=I+STSCAN @ COMPUTE NUMBER OF RECORDS NESESCARY IF (MAXBL5.GE.I) GOTO 40 @ RETURN ELSE PRINT AN ERROR MSG WRITE (TTO,9) I OPTION=0 @ PREVENT LOOPING IF CO* GOTO 10 C C 40 FREQU(1,2)=AMIN1(SAMRAT/2.,FREQU(1,2)) @ HIGHEST FREQUENCY OF THE INPUT SIGNAL --> UPPER LIMIT OF THE FIRST BAND IF BREAK(11) RETURN CALL ADATE(DA) @ ASK FRTS FOR THE CURRENT DATE AND INSERT IT INTO THE HEADER WRITE (3,1) SETNUM,CHANEL,LABEL,DA WRITE (3,100) ((FREQU(I,J),J=1,2),I=1,5) RETURN C C 1 FORMAT ('1SATZ:',I3,' KANAL',I2,' :',10A6,2(A2,1H/),A2) 100 FORMAT (1H0,15X,5(F6.1,' -',F6.1,5X)) 101 FORMAT (' FUER EEG BAND',I2,' REICHT DIE MESSRATE VON',I4, * ' HZ NICHT AUS. BANDGRENZE VERRINGERT.') 2 FORMAT (' RECHNUNG SOLL MIT',I5,' SEC UEBER DAS DATENENDE', * I5,' SEC HINAUSGEHEN.') 3 FORMAT (' DAS PRODUKT AUS MESSRATE',I3,' [HZ] UND SPANNE', * I3,' [SEK] IST KEINE ZWEIERPOTENZ.') 4 FORMAT (' AM ENDE DES SPEKTRUMS BLEIBEN',F4.1,' SEKUNDEN', * ' UNBERUECKSICHTIGT.') 6 FORMAT (' MEHR ALS 2048 PUNKTE FUER EINE FFT:',I7) 8 FORMAT (' SPANNE MIT',I3,' SEK. GROESSER ALS DIE MESSZEIT',I3 * ,' SEKUNDEN.') 9 FORMAT (' FILE 5 FUER DIE ZWISCHENWERTE ZU KLEIN:',I5, * ' SPANNE VERGROESSERN.') END