Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | C -+-+-+-+-+ \ e H A E X Y S . F T \ e -+-+-+-+-+\r |
2 | C\r | |
3 | C RETURNS A SPECIFIED WORD FROM SAMPLE BUFFER (CHANNEL 0 TO 7)\r | |
4 | C RETURNS THE INDEX ID (CHANNEL 8)\r | |
5 | C\r | |
6 | REAL FUNCTION XYSAM (ID,CN)\r | |
7 | INTEGER ID, @ INDEX TO THE WORD\r | |
8 | * CN @ CHANNEL WHERE TO GET THE WORD\r | |
9 | * ,TRGWRD,TRITIM\r | |
10 | REAL ESAM\r | |
11 | EXTERNAL ESAM,\r | |
12 | * TRITIM\r | |
13 | * ,TRGWRD\r | |
14 | INCLUDE HAEBUF.FI\r | |
15 | INCLUDE HAECTR.FI\r | |
16 | INCLUDE HABRK.FI\r | |
17 | \fC\r | |
18 | INTEGER CH @ SAVES THE ACT. CHANNEL NUMBER\r | |
19 | * ,I,B,T1,T2,N @ TEMP STORAGE\r | |
20 | * ,T @ T EQUIVALENCED INTO COMMON!\r | |
21 | EQUIVALENCE (TTRGW,T)\r | |
22 | C STATEMENT FUNCTIONS ARE:\r | |
23 | INTEGER TIMFRQ\r | |
24 | TIMFRQ(IP1,IP2)=500/(IP1+12*IP2) @ 1 IST MINIMUM FUER EINZEL SPIKE\r | |
25 | C\r | |
26 | XYSAM=FLOAT(ID) @ IF CALLED FOR TIME BASE THEN \r | |
27 | IF (CN.GT.7) RETURN @ RETURN WITH XYSAM=ID\r | |
28 | IF (CN.LT.CHNLS) GOTO 10 @ TEST FOR VALID CHANNEL NUMBER\r | |
29 | IF (CN.LT.CHNLS+STRIGS) GOTO 20\r | |
30 | WRITE (TTO,1) CN,CHNLS\r | |
31 | STOP\r | |
32 | 10 CONTINUE\r | |
33 | CH=CHANEL @ SAVE THE CURRENT CHANNEL NUMBER\r | |
34 | CHANEL=CN @ COMPUTES ESAM INDEX\r | |
35 | XYSAM=ESAM(ID) @ LOAD THE WORD FROM VIRTUAL STORAGE\r | |
36 | CHANEL=CH @ RESTORE CURRENT CHANNEL NUMBER\r | |
37 | RETURN\r | |
38 | C\r | |
39 | C HERE WE HANDLE THE TRIGGER EVENTS: WE SUMM UP ALL BITS IN ONE TIME WORD!\r | |
40 | C\r | |
41 | 20 CONTINUE\r | |
42 | CH=CHANEL\r | |
43 | CHANEL=CN\r | |
44 | T=TRGWRD(ESAM(ID))\r | |
45 | CHANEL=CH\r | |
46 | IF (.NOT.BREAK(8)) XYSAM=T*40\r | |
47 | IF (.NOT.BREAK(8)) RETURN\r | |
48 | C\r | |
49 | C\r | |
50 | IF (T.EQ.0) GOTO 23 @ KEINE SPIKES\r | |
51 | IF (NXTBIT.LT.0) GOTO 25 @ MEHR ALS EIN SPIKE\r | |
52 | C\r | |
53 | NXTBIT=-1\r | |
54 | T2=TRITIM(ID,NXTBIT) @ LI --> RE SUCHE LIEFERT BITPOSITION IM AKTUELLEN WORT\r | |
55 | C\r | |
56 | C RUECKWAERTS SUCHE BIS ZU 300 MILLI SEC BEI 128 HZ MESSRATE\r | |
57 | C\r | |
58 | B=MAX0(1,ID-41) @ WE SCAN TO THE LEFT 41 STEPS OR TO THE BEGINING\r | |
59 | DO 21 I=1,B @ WIR SUCHEN RUECKWAERTS 40 STELLEN, JEDOCH NICHT VOR DATENANFANG!\r | |
60 | N=1 @ RE --> LI SUCHE\r | |
61 | T1=TRITIM(ID-I,N) @ BERECHNE MIT DECREMENTIERENDEM ZAEHLER\r | |
62 | IF(T1.NE.0) GOTO 22 @ WIR HABEN VORHERGEHENDEN SPIKE GEFUNDEN\r | |
63 | 21 CONTINUE\r | |
64 | XYSAM=TIMFRQ(500,0) @ MINIMALER WERT BEI SPIKE OHNE VORHERGAENGER\r | |
65 | IF(T.GT.1) NXTBIT=ISIGN(NXTBIT,-1) @ SETZTE DAS MULTI SPIKE FLAG\r | |
66 | RETURN\r | |
67 | C\r | |
68 | 22 XYSAM=TIMFRQ(T1+T2,I-1) @ RECHNE INDEX IN FREQUENZ UM\r | |
69 | IF(T.GT.1) NXTBIT=ISIGN(NXTBIT,-1) @ SETZTE DAS MULTI SPIKE FLAG\r | |
70 | RETURN\r | |
71 | C\r | |
72 | 23 XYSAM=0.1 @ KEINE SPIKES GEFUNDEN, ALSO NULL\r | |
73 | 24 NXTBIT=1 @ NAECHSTES WORT VON RECHTS AN DURCHSUCHEN\r | |
74 | RETURN\r | |
75 | C\r | |
76 | C MEHR ALS EIN SPIKE JE WORT GEFUNDEN\r | |
77 | C DANN SETZTEN WIR NXTBIT NEGATIV UND SUCHEN VON LINKS NACH RECHTS.\r | |
78 | C DAS PLOTTPROGRAMM RUFT SO LANGE XYSAM AUF BIS NXTBIT POSITIV WIRD!\r | |
79 | C\r | |
80 | 25 T1=TRITIM(ID,NXTBIT) @ TRITIM IST AUF LINKS --> RECHTS SUCHE GESCHALTET\r | |
81 | IF(T1.EQ.0) GOTO23 @ KEINE SPIKES MEHR GEFUNDEN, KANN WEITERGEHEN\r | |
82 | XYSAM=TIMFRQ(T1,0) @ WANDELE BITINDEX IN FREQUENZ UM\r | |
83 | IF(NXTBIT.GE.12) GOTO 24 @ WAR DIE LETZTE BITPOSITION IM WORT, ZUENDE\r | |
84 | NXTBIT=ISIGN(NXTBIT,-1) @ SETZE DAS DOPPELSPIKE FLAG: NXTBIT < 0\r | |
85 | RETURN\r | |
86 | C\r | |
87 | 1 FORMAT (' XYSAM: KANALNUMMER',\r | |
88 | * I3,' GROESSER ALS ANZAHL DER KANAELE',I3)\r | |
89 | END\r | |
90 | \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 |