A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / haeprp.ft
1 C -+-+-+-+-+ \ e H A E P R P . F T \ e -+-+-+-+-+
2 C
3 C PREP FOR THE FFT
4 C
5 SUBROUTINE PRPFFT
6 INCLUDE HAEBUF.FI
7 INCLUDE HAEGSA.FI
8 INCLUDE HAEPTI.FI
9 INCLUDE HAETTY.FI
10 INCLUDE HABRK.FI
11 C
12 INTEGER LOG2
13 EXTERNAL LOG2
14 \fC
15 INTEGER I,J,K,DA(3),BAND,LIMIT @ DO LOOP COUNTERS & LIMITS
16 REAL TEMP,CPUTIM
17 C
18 C
19 10 CONTINUE
20 C
21 C HERE WE TEST FOR CORRECT FREQUENCY LIMITS OF THE EEG BAND (1-5)
22 DO 12 BAND=1,5
23 DO 12 LIMIT=1,2
24 IF (FREQU(BAND,LIMIT).LE.SAMRAT/2) GOTO 12
25 WRITE (TTO,101) BAND,SAMRAT
26 FREQU(BAND,LIMIT)=COND(LIMIT.EQ.1,SAMRAT/2.-.1,SAMRAT/2.)
27 12 CONTINUE
28 C
29 IF (OPTION.NE.12 .OR. ENDS.LT.SPAN) CALL ASKHIM(4) @ CO* DOESN'T ASK SCILLY QUESTIONS IF THERE ARE CORRECT PARAMETERS
30 C
31 C TEST FOR VALID INPUT PARAMETERS
32 C
33 IF BREAK(11) RETURN @ USER GETS RID OF PROGRAM
34 INCR=SAMRAT*SPAN @ NUMBER OF POINTS FOR EACH FFT --> INCR
35 IF (INCR.LE.2048) GOTO 22 @ MORE THAN 2048 POINTS TO SCAN?
36 WRITE (TTO,6) SPAN @ TOO LESS MEMORY
37 GOTO 10
38 22 CONTINUE
39 IF (SPAN.LE.ENDS) GOTO 23 @ LESS THAN ONE PASS?
40 WRITE (TTO,8) SPAN,ENDS
41 GOTO 10
42 23 CONTINUE
43 IF (ENDS.LE.SAMCNT/SAMRAT) GOTO 24 @ IF THE END DOES NOT EXCEED THE SAMPLE COUNT THEN WE GO 24 ELSE
44 I=SAMCNT/SAMRAT @ WE COMPUTE THE SAMPLING TIME IN SECONDS
45 WRITE (TTO,2) ENDS,I @ IN ORDER TO PRINT AN DIAGNOSTIC MSG
46 ENDS=SAMCNT/SAMRAT @ AND THE WE BUMP THE SAMPLING TIME INTO ENDS
47 24 CONTINUE
48 EXPON=LOG2(INCR) @ TEST FOR POWER OF 2
49 IF (EXPON.GT.0) GOTO 20 @ IF INCR IS A POWER OF TWO THEN GOTO 20
50 WRITE (TTO,3) SAMRAT,SPAN @ NO POWER OF TWO
51 GOTO 10 @ READ NEXT VALUE
52 20 TEMP=AMOD(FLOAT(ENDS-BEGIN),FLOAT(SPAN)) @ COMPUTE SECONDS TO TRANSFORM
53 IF (TEMP.LT.0.1) GOTO 30 @ ARE THERE SOME SECONDS LEFT?
54 TEMP=AMOD(FLOAT(SAMCNT)/FLOAT(SAMRAT),FLOAT(SPAN))
55 WRITE (TTO,4) TEMP @ TELL THE USER THERE IS SOMETHING REMAINING
56 30 ENDS=BEGIN+(ENDS-BEGIN)/SPAN*SPAN @ COMPUTE THE END OF THE SPECTRUM TO SCAN
57 C
58 I=NCOND(OVRLAP,2*(ENDS-BEGIN)/SPAN,(ENDS-BEGIN)/SPAN) @ IF THE INTERMEDIATE RESULTS FIT ONTO UNIT 5 THEN
59 I=I/4 @ FOUR DATA WORDS PER RECORD
60 I=I+STSCAN @ COMPUTE NUMBER OF RECORDS NESESCARY
61 IF (MAXBL5.GE.I) GOTO 40 @ RETURN ELSE PRINT AN ERROR MSG
62 WRITE (TTO,9) I
63 OPTION=0 @ PREVENT LOOPING IF CO*
64 GOTO 10
65 C
66 C
67 40 FREQU(1,2)=AMIN1(SAMRAT/2.,FREQU(1,2)) @ HIGHEST FREQUENCY OF THE INPUT SIGNAL --> UPPER LIMIT OF THE FIRST BAND
68 IF BREAK(11) RETURN
69 CALL ADATE(DA) @ ASK FRTS FOR THE CURRENT DATE AND INSERT IT INTO THE HEADER
70 WRITE (3,1) SETNUM,CHANEL,LABEL,DA
71 WRITE (3,100) ((FREQU(I,J),J=1,2),I=1,5)
72 RETURN
73 C
74 C
75 1 FORMAT ('1SATZ:',I3,' KANAL',I2,' :',10A6,2(A2,1H/),A2)
76 100 FORMAT (1H0,15X,5(F6.1,' -',F6.1,5X))
77 101 FORMAT (' FUER EEG BAND',I2,' REICHT DIE MESSRATE VON',I4,
78 * ' HZ NICHT AUS. BANDGRENZE VERRINGERT.')
79 2 FORMAT (' RECHNUNG SOLL MIT',I5,' SEC UEBER DAS DATENENDE',
80 * I5,' SEC HINAUSGEHEN.')
81 3 FORMAT (' DAS PRODUKT AUS MESSRATE',I3,' [HZ] UND SPANNE',
82 * I3,' [SEK] IST KEINE ZWEIERPOTENZ.')
83 4 FORMAT (' AM ENDE DES SPEKTRUMS BLEIBEN',F4.1,' SEKUNDEN',
84 * ' UNBERUECKSICHTIGT.')
85 6 FORMAT (' MEHR ALS 2048 PUNKTE FUER EINE FFT:',I7)
86 8 FORMAT (' SPANNE MIT',I3,' SEK. GROESSER ALS DIE MESSZEIT',I3
87 * ,' SEKUNDEN.')
88 9 FORMAT (' FILE 5 FUER DIE ZWISCHENWERTE ZU KLEIN:',I5,
89 * ' SPANNE VERGROESSERN.')
90 END
91 \1a