Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | C -+-+-+-+-+ \ e H A E E O G . F T \ e -+-+-+-+-+\r |
2 | C\r | |
3 | C EOG ANALYSIS\r | |
4 | C\r | |
5 | SUBROUTINE EOGSCN\r | |
6 | INCLUDE HAEBUF.FI\r | |
7 | INCLUDE HAEPTI.FI\r | |
8 | INCLUDE HAEGSA.FI\r | |
9 | INCLUDE HAECEO.FI\r | |
10 | INCLUDE HAETTY.FI\r | |
11 | INCLUDE HABRK.FI\r | |
12 | C\r | |
13 | \f EXTERNAL TOASCI,REASAC\r | |
14 | INTEGER TOASCI\r | |
15 | REAL REASAC\r | |
16 | C\r | |
17 | C\r | |
18 | INTEGER POS1,I,N,\r | |
19 | * SACBEG,SACEND, @ BEGINNING & ENDING OF SACCADE\r | |
20 | * NXTSAC, @ HERE WE START FOR THE NEXT SEARCH\r | |
21 | * S0,S1, @ WINDOW TO SCAN FOR SACCADE\r | |
22 | * ERR, @ SACCAD ERROR NUMBER\r | |
23 | * SPEAKR(73),LSTPOS,VLSTPO, @ SPEAKER POSITIONS HISTOGRAM\r | |
24 | * BHH,BMM,BSS,EHH,EMM,ESS, @ TO EDIT OUTPUT LINE\r | |
25 | * SACSTK(2,7,73),I1,I2,I3,Q1,Q2,Q3(8),Q4(8) @ STATISTIK STACK \r | |
26 | REAL THRL,THRU, @ LOWER AND UPPER THRESHOLD FOR SACCAD SUBROUTINE\r | |
27 | * SACAMP, @ AMPLITUDE OF THE SACCADE (INSERTED BY SACCAD)\r | |
28 | * TE1,TE2,TE3,TE4, @ TEMP STORAGE FOR OUTPUT EDITING\r | |
29 | * AMPL,AMPU @ TO CALIBRATE THE SACCADE AMPLITUDE\r | |
30 | C\r | |
31 | C STATEMENT FUNCTIONS ARE\r | |
32 | C\r | |
33 | SPKPOS(IP0)=INT(XYSAM(IP0,SPKCN)*SPKFAC+SPKOFS+.5)\r | |
34 | INTEGER SPKPOS\r | |
35 | SPKPNT(IP1)=MIN0(MAX0((SPKPOS(IP1))/5+1,1),73)\r | |
36 | INTEGER SPKPNT\r | |
37 | EOFLOP(IP0)=IP0-S0.LT.SAMRAT @ END OF LOOP INDICATOR ( 1 SEC STILL REMAINS)\r | |
38 | LOGICAL EOFLOP\r | |
39 | MODE(IP0)=XYSAM(IP0,MODCN)\r | |
40 | INTEGER MODE\r | |
41 | C\r | |
42 | IF (SAMCNT.EQ.0) RETURN @ NO SAMPLE IN BUFFER\r | |
43 | IF (BREAK(11)) RETURN @ USER GETS RID OF PROGRAM\r | |
44 | IF (OPTION.NE.12) CALL ASKHIM(2) @ EO* DOES NOT ASK FOR BEGIN, SPAN\r | |
45 | IF (BREAK(11)) RETURN @ BLAH BLAH BLAH\r | |
46 | C\r | |
47 | C ASK FOR THRESHOLD\r | |
48 | C\r | |
49 | THRL=40. @ DEFAULT\r | |
50 | THRU=40.\r | |
51 | IF (OPTION.NE.11) GOTO 30\r | |
52 | WRITE (TTO,1)\r | |
53 | READ (TTI,2) THRL,THRU @ NO SIGN PLEASE!\r | |
54 | IF (BREAK(11)) RETURN @ USER GETS ....\r | |
55 | IF (THRL.GE.0) GOTO 30 @ NO SIGN IS THE CORRECT ONE\r | |
56 | WRITE (TTO,5) @ TYPE A MSG, NO SIGN PLEASE\r | |
57 | THRL=-THRL @ AND BEHAVE LIKE A GENTLEMAN\r | |
58 | 30 THRL=-THRL @ LOWER LIMIT MUST BE NEGATIVE\r | |
59 | BSS=TOASCI(MOD(BEGIN,60))\r | |
60 | BMM=TOASCI(MOD(BEGIN/60,60))\r | |
61 | BHH=TOASCI(BEGIN/3600)\r | |
62 | ESS=TOASCI(MOD(ENDS,60))\r | |
63 | EMM=TOASCI(MOD(ENDS/60,60))\r | |
64 | EHH=TOASCI(ENDS/3600)\r | |
65 | C\r | |
66 | WRITE (3,3) BHH,BMM,BSS,EHH,EMM,ESS,LABEL\r | |
67 | WRITE (9,3) BHH,BMM,BSS,EHH,EMM,ESS,LABEL\r | |
68 | C\r | |
69 | S0=BEGIN*SAMRAT @ START OF MAJOR LOOP\r | |
70 | C\r | |
71 | \f100 CONTINUE\r | |
72 | CALL MOVE (-73*2*7,0,SACSTK) @ CLEAR STATISTIK BUFFER\r | |
73 | CALL CMODE (S0,S1) @ COMPUTE S1, THE BOUNDER FOR SACCADE SEARCH\r | |
74 | C\r | |
75 | C COMPUTE MIN/MAX OF EOG SIGNAL\r | |
76 | C\r | |
77 | AMPL=999\r | |
78 | AMPU=-AMPL\r | |
79 | DO 120 I=S0,S1\r | |
80 | TE1=XYSAM(I,0)\r | |
81 | AMPL=AMIN1(AMPL,TE1)\r | |
82 | AMPU=AMAX1(AMPU,TE1)\r | |
83 | 120 CONTINUE\r | |
84 | AMPU=REASAC(AMPU)\r | |
85 | AMPL=REASAC(AMPL) @ CALIBRATE INTO DEG SCALE\r | |
86 | I=S0/SAMRAT\r | |
87 | BSS=TOASCI(MOD(I,60))\r | |
88 | BMM=TOASCI(MOD(I/60,60))\r | |
89 | BHH=TOASCI(I/3600)\r | |
90 | I=S1/SAMRAT\r | |
91 | ESS=TOASCI(MOD(I,60))\r | |
92 | EMM=TOASCI(MOD(I/60,60))\r | |
93 | EHH=TOASCI(I/3600)\r | |
94 | TE1=MODE(S0)\r | |
95 | WRITE (9,6) LABEL,BHH,BMM,BSS,EHH,EMM,ESS,\r | |
96 | * TE1,AMPL,AMPU\r | |
97 | WRITE (3,6) LABEL,BHH,BMM,BSS,EHH,EMM,ESS,\r | |
98 | * TE1,AMPL,AMPU\r | |
99 | C\r | |
100 | C COUNT THE NUMBER OF SPEAKER TURNS FROM S0 TO S1 ( I.E. FOR THE SAME MODE SIGNAL )\r | |
101 | C\r | |
102 | CALL MOVE (-73,0,SPEAKR)\r | |
103 | DO 110 I=S0,S1,2\r | |
104 | J=SPKPNT(I)\r | |
105 | IF (J.EQ.LSTPOS .OR. J.EQ.VLSTPO) GOTO 110 @ PREVENT MULTIPLE COUNTING\r | |
106 | SPEAKR(J)=SPEAKR(J)+1\r | |
107 | VLSTPO=LSTPOS @ SAVE VERY LAST POSITION\r | |
108 | LSTPOS=J @ SAVE LAST POSITION\r | |
109 | 110 CONTINUE\r | |
110 | C\r | |
111 | POS1=S0 @ HERE WE START THE SEARCH LOOP\r | |
112 | C\r | |
113 | C MINOR LOOP TO FETCH THE SACCADE ONE BY ONE\r | |
114 | C\r | |
115 | 10 CONTINUE @ LOOP TO FETCH THE NEXT SACCADE\r | |
116 | CALL SACCAD(POS1,S1,THRL,THRU,SACBEG,SACEND,\r | |
117 | * SACAMP,NXTSAC,ERR)\r | |
118 | TE1=SACBEG/FLOAT(SAMRAT) @ BEGINING OF THE SACCADE\r | |
119 | BSS=TOASCI(MOD(TE1,60))\r | |
120 | BMM=TOASCI(MOD(TE1/60,60))\r | |
121 | BHH=TOASCI(TE1/3600)\r | |
122 | TE2=(SACEND-SACBEG)/FLOAT(SAMRAT) @ DURATION\r | |
123 | TE3=SPKPOS(SACBEG)-180. @ COMPUTE SPEAKER POSITION\r | |
124 | I=MOD(INT(TE1*10.),10)\r | |
125 | WRITE (3,4) BHH,BMM,BSS,I,TE2,SACAMP,TE3,ERR\r | |
126 | C\r | |
127 | C INSERT DATA INTO STATISTIK BUFFER\r | |
128 | C\r | |
129 | IF (ERR.NE.0) GOTO 20 @ ERROR FLAG SET, NO SACCADE FOUND\r | |
130 | I1=NCOND(SACAMP.LT.0,1,2) @ SACAMP<0 --> 1 ELSE 2\r | |
131 | I2=MIN1(ABS(SACAMP/5.)+1.,7.) @ 0-5, -10, -15, -20, -25, -30, >30\r | |
132 | I3=SPKPNT(SACBEG)\r | |
133 | SACSTK(I1,I2,I3)=SACSTK(I1,I2,I3)+1 @ HISTOGRAM\r | |
134 | C\r | |
135 | C\r | |
136 | 20 POS1=NXTSAC @ PREP FOR THE NEXT LOOP\r | |
137 | IF (S1-NXTSAC.GT.SAMRAT) GOTO 10 @ NO MODE CHANGE, SO CONTINUE MINOR LOOP\r | |
138 | S0=S1+5 @ MODE CHANGES, REPEAT MAJOR LOOP\r | |
139 | C\r | |
140 | C PRINT THE HISTOGRAM\r | |
141 | C\r | |
142 | CALL MOVE (-8,0,Q3)\r | |
143 | CALL MOVE (-8,0,Q4)\r | |
144 | DO 40 I=1,73,6\r | |
145 | J=-180+(I-1)*5\r | |
146 | WRITE (9,7) J\r | |
147 | DO 40 I3=I,MIN0(I+5,73)\r | |
148 | Q1=0\r | |
149 | Q2=0\r | |
150 | DO 42 N=1,7\r | |
151 | Q1=SACSTK(1,N,I3)+Q1\r | |
152 | Q2=SACSTK(2,N,I3)+Q2\r | |
153 | Q3(N)=SACSTK(1,N,I3)+Q3(N)\r | |
154 | 42 Q4(N)=SACSTK(2,N,I3)+Q4(N)\r | |
155 | Q3(8)=Q1+Q3(8)\r | |
156 | Q4(8)=Q2+Q4(8)\r | |
157 | 40 WRITE (9,8) SPEAKR(I3),((SACSTK(I1,I2,I3),I1=1,2),I2=1,7),\r | |
158 | * Q1,Q2\r | |
159 | \r | |
160 | WRITE (9,9) (Q3(I),Q4(I),I=1,8)\r | |
161 | WRITE (9,101) @ NEW PAGE\r | |
162 | IF (EOFLOP(ENDS*SAMRAT)) RETURN @ WORK DONE\r | |
163 | GOTO 100\r | |
164 | 1 FORMAT (' U/O SCHWELLENWERT (2F3.0) ',$)\r | |
165 | 2 FORMAT (2F3.0)\r | |
166 | 3 FORMAT (1H1,80X/1X,2(2(A2,1H:),A2,3H - ),5X,10A6)\r | |
167 | 4 FORMAT (1X,2(A2,1H:),A2,1H.,I1,F7.3,2F8.0,I5)\r | |
168 | 5 FORMAT (' KEINE VORZEICHEN BITTE, WEISS ICH SELBER RICHTIG!')\r | |
169 | 6 FORMAT (80X/1X,10A6/1X,2(2(A2,1H:)A2,3H - ),'MODE:',F6.0,\r | |
170 | * ' SCHLAGFELD:',F6.0,2H /,F6.0/)\r | |
171 | 7 FORMAT (1X,I4)\r | |
172 | 8 FORMAT (1H+,2X,I6,1H*,7(2I4,2X),1H*,2I4/1X)\r | |
173 | 9 FORMAT (10X,7(2I4,2X),1H#,2I4)\r | |
174 | 101 FORMAT (1H1)\r | |
175 | END\r | |
176 | \1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 |