CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C PROGRAMM ZUR UNTERSUCHUNG VON VEKTORQUANTISIERERN C IN BAUMSTRUKTUR FUER DIE QUANTISIERUNG C VON SPRACH- UND RESIDUALSIGNALEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C PROGRAMM : CODEBUCHSUCHE C C DATUM : 15. 5.84 C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC PROGRAM COBUS INTEGER BAUM(10,4),XMAX,YMAX(10),ZMAX,ALGO,VEKT,ANFA(8), 1 MERK,SINN,FIND,SUCH,ZAHL(1024),MITT(1024,8),I,J,K,L,M,N INTEGER*2 WD(433408),BUCH(10,1024,8) REAL EPSI,GLEI,ESIG,EDIF,SNDB,DIFF,SUMM,QUAD CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C VERWALTUNGSKREMPEL C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C LESEN DER VEKTORLAENGE C ZMAX=0 DO WHILE(ZMAX.LT.1.OR.ZMAX.GT.8) TYPE *,'SAMPLES/VEKTOR ?' ACCEPT 1,ZMAX END DO C C LESEN DER BAUMSTRUKTUR C DO I=1,10 YMAX(I)=0 DO J=1,4 BAUM(I,J)=0 END DO END DO DO WHILE(BAUM(1,1).LT.1.OR.BAUM(1,1).GT.10) TYPE *,'BAUMSTRUKTUR ?' ACCEPT 1,BAUM(1,1) END DO XMAX=1 BAUM(1,2)=BAUM(1,1) DO WHILE(BAUM(XMAX,1).NE.0.AND.BAUM(XMAX,2).LT.10 1 .AND.XMAX.LT.10) ACCEPT 2,BAUM(XMAX+1,1) BAUM(XMAX+1,2)=BAUM(XMAX,2)+BAUM(XMAX+1,1) IF(BAUM(XMAX+1,2).GT.10)THEN TYPE *,'LETZTE EINGABE KORRIGIEREN !' ELSE XMAX=XMAX+1 END IF END DO IF(BAUM(XMAX,1).EQ.0)THEN BAUM(XMAX,2)=0 XMAX=XMAX-1 END IF DO I=1,2 DO J=1,XMAX BAUM(J,I+2)=2**BAUM(J,I) END DO END DO C C WAHL DES ALGORITHMUS C ALGO=0 DO WHILE(ALGO.LT.1.OR.ALGO.GT.2) TYPE *,'ALGORITHMUS ?' ACCEPT 2,ALGO END DO C C KONTROLLE DER EINGABEN C TYPE 3,ZMAX TYPE 4,BAUM(XMAX,2) TYPE 5 DO I=1,XMAX TYPE 6,BAUM(I,1) END DO TYPE 7,ALGO 1 FORMAT(I2) 2 FORMAT(I1) 3 FORMAT(' ','SAMPLES/VEKTOR : ',I4) 4 FORMAT(' ','BIT/VEKTOR : ',I4) 5 FORMAT(' ','BAUMSTRUKTUR : ',$) 6 FORMAT('+',I4,$) 7 FORMAT(' ','ALGORITHMUS : ',I4) C C LESEN DER TRAININGSSEQUENZ C OPEN(UNIT=10,NAME='WD4711.;1',TYPE='OLD', 1 FORM='UNFORMATTED',RECL=128,ACCESS='DIRECT') DO I=2,1694 READ(10'I)(WD(256*I+J-512),J=1,256) END DO CLOSE(UNIT=10) C C ANZAHL DER TRAININGSVEKTOREN C VEKT=433408/ZMAX C C SCHWERPUNKTSVEKTOR UND GLEICHSPANNUNGSANTEIL C DO I=1,8 ANFA(I)=0 END DO GLEI=0. DO I=1,ZMAX DO J=0,VEKT-1 ANFA(I)=ANFA(I)+WD(J*ZMAX+I) END DO GLEI=GLEI+FLOAT(ANFA(I)) J=10*ANFA(I)/VEKT IF(J.EQ.0)J=1 ANFA(I)=(J+IABS(J)/J*5)/10 END DO GLEI=GLEI/FLOAT(VEKT*ZMAX) C C BERECHNUNG DER SIGNALENERGIE C ESIG=0. DO I=1,VEKT*ZMAX ESIG=ESIG+(FLOAT(WD(I))-GLEI)**2. END DO C C LOESCHEN DES CODEBUCHS C DO I=1,8 DO J=1,10 DO K=1,1024 BUCH(J,K,I)=0 END DO END DO END DO C C ABBRUCHBEDINGUNG C EPSI=0.001 C C SPRUNG ZUM GEWAEHLTEN ALGORITHMUS C GOTO(100,200),ALGO CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C LINDE/BUZO/GRAY-ALGORITHMUS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C KNOTENEBENEN-SCHLEIFE C 100 DO I=1,XMAX CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C ANFANGSBEDINGUNGEN C C C IF(I.EQ.1)THEN DO J=1,ZMAX BUCH(1,1,J)=ANFA(J) END DO ELSE DO J=1,BAUM(I-1,4) MERK=(J-1)*BAUM(I,3)+1 DO K=1,ZMAX BUCH(I,MERK,K)=BUCH(I-1,J,K) END DO END DO END IF C C C ANFANGSBEDINGUNGEN UEBERTRAGEN C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C CODEBUCHERSTELLUNG AUF DER I-TEN EBENE C DO J=1,BAUM(I,1) YMAX(I)=2**J CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C VERDOPPELN DES CODEBUCHS C C C DO K=1,BAUM(I,4)/BAUM(I,3) MERK=(K-1)*BAUM(I,3) SINN=MERK+YMAX(I)/2 DO L=1,YMAX(I)/2 BUCH(I,SINN+L,1)=BUCH(I,MERK+L,1)+1 BUCH(I,MERK+L,1)=BUCH(I,MERK+L,1)-1 DO M=2,ZMAX BUCH(I,SINN+L,M)=BUCH(I,MERK+L,M) END DO END DO END DO C C C CODEBUCH VERDOPPELT C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C ITERATION C DIFF=1.E32 EDIF=1.E30 DO K=1,1024 ZAHL(K)=0 DO L=1,8 MITT(K,L)=0 END DO END DO DO WHILE((DIFF/EDIF-1.).GT.EPSI) DIFF=EDIF EDIF=0. DO K=1,BAUM(I,4) ZAHL(K)=0 DO L=1,ZMAX MITT(K,L)=0 END DO END DO C C BERECHNUNG DER RAUSCHENERGIE C DO K=0,VEKT-1 SINN=K*ZMAX CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C VEKTORQUANTISIERUNG C C C FIND=1 DO L=1,I SUMM=1.E30 MERK=(FIND-1)*BAUM(L,3) DO M=1,YMAX(L) QUAD=0. DO N=1,ZMAX QUAD=QUAD+(FLOAT(WD(SINN+N))- 1 FLOAT(BUCH(L,MERK+M,N)))**2. END DO IF(QUAD.LT.SUMM)THEN SUCH=M SUMM=QUAD END IF END DO FIND=MERK+SUCH END DO C C C ENDE DER VEKTORQUANTISIERUNG C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC EDIF=EDIF+SUMM ZAHL(FIND)=ZAHL(FIND)+1 DO L=1,ZMAX MITT(FIND,L)= 1 MITT(FIND,L)+ 1 WD(SINN+L) END DO END DO IF(DIFF.GT.EDIF)THEN CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C ZENTRIEREN C C C DO K=1,BAUM(I,4)/BAUM(I,3) MERK=(K-1)*BAUM(I,3) DO L=1,YMAX(I) SINN=MERK+L IF(ZAHL(SINN).NE.0)THEN DO M=1,ZMAX N=10*MITT(SINN,M)/ 1 ZAHL(SINN) IF(N.EQ.0)N=1 BUCH(I,SINN,M)= 1 (N+IABS(N)/N*5)/10 END DO ELSE IF(I.EQ.1)THEN BUCH(1,L,1)=ANFA(1)+1 DO M=2,ZMAX BUCH(1,L,M)= 1 ANFA(M) END DO ELSE BUCH(I,SINN,1)= 1 BUCH(I-1,K,1)+1 DO M=2,ZMAX BUCH(I,SINN,M)= 1 BUCH(I-1,K,M) END DO END IF END IF END DO END DO C C C ENDE DES ZENTRIERENS C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ELSE EDIF=DIFF END IF END DO END DO END DO C C ENDE DES LINDE/BUZO/GRAY-ALGORITHMUS C GOTO 1000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C LINDE/BUZO/GRAY/MEYER-ALGORITHMUS C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C KNOTENEBENEN-SCHLEIFE C 200 DO I=1,XMAX CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C ANFANGSBEDINGUNGEN C C C IF(I.EQ.1)THEN DO J=1,ZMAX BUCH(1,1,J)=ANFA(J) END DO ELSE DO J=1,BAUM(I-1,4) MERK=(J-1)*BAUM(I,3)+1 DO K=1,ZMAX BUCH(I,MERK,K)=BUCH(I-1,J,K) END DO END DO END IF C C C ANFANGSBEDINGUNGEN UEBERTRAGEN C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C CODEBUCHERSTELLUNG AUF DER I-TEN EBENE C DO J=1,BAUM(I,1) YMAX(I)=2**J CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C VERDOPPELN DES CODEBUCHS C C C DO K=1,BAUM(I,4)/BAUM(I,3) MERK=(K-1)*BAUM(I,3) SINN=MERK+YMAX(I)/2 DO L=1,YMAX(I)/2 BUCH(I,SINN+L,1)=BUCH(I,MERK+L,1)+1 BUCH(I,MERK+L,1)=BUCH(I,MERK+L,1)-1 DO M=2,ZMAX BUCH(I,SINN+L,M)=BUCH(I,MERK+L,M) END DO END DO END DO C C C CODEBUCH VERDOPPELT C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C ITERATION C DIFF=1.E32 EDIF=1.E30 DO K=1,1024 ZAHL(K)=0 DO L=1,8 MITT(K,L)=0 END DO END DO DO WHILE((DIFF/EDIF-1.).GT.EPSI) DIFF=EDIF EDIF=0. DO K=1,BAUM(I,4) ZAHL(K)=0 DO L=1,ZMAX MITT(K,L)=0 END DO END DO C C BERECHNUNG DER RAUSCHENERGIE C DO K=0,VEKT-1 SINN=K*ZMAX CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C VEKTORQUANTISIERUNG C C C FIND=1 DO L=1,I SUMM=1.E30 MERK=(FIND-1)*BAUM(L,3) DO M=1,YMAX(L) QUAD=0. DO N=1,ZMAX QUAD=QUAD+(FLOAT(WD(SINN+N))- 1 FLOAT(BUCH(L,MERK+M,N)))**2. END DO IF(QUAD.LT.SUMM)THEN SUCH=M SUMM=QUAD END IF END DO FIND=MERK+SUCH END DO C C C ENDE DER VEKTORQUANTISIERUNG C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC EDIF=EDIF+SUMM ZAHL(FIND)=ZAHL(FIND)+1 DO L=1,ZMAX MITT(FIND,L)= 1 MITT(FIND,L)+ 1 WD(SINN+L) END DO END DO IF(DIFF.GT.EDIF)THEN CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C ZENTRIEREN C C C DO K=1,BAUM(I,4)/BAUM(I,3) MERK=(K-1)*BAUM(I,3) DO L=1,YMAX(I) SINN=MERK+L IF(ZAHL(SINN).NE.0)THEN DO M=1,ZMAX N=10*MITT(SINN,M)/ 1 ZAHL(SINN) IF(N.EQ.0)N=1 BUCH(I,SINN,M)= 1 (N+IABS(N)/N*5)/10 END DO ELSE IF(I.EQ.1)THEN BUCH(1,L,1)=ANFA(1)+1 DO M=2,ZMAX BUCH(1,L,M)= 1 ANFA(M) END DO ELSE BUCH(I,SINN,1)= 1 BUCH(I-1,K,1)+1 DO M=2,ZMAX BUCH(I,SINN,M)= 1 BUCH(I-1,K,M) END DO END IF END IF END DO END DO C C C ENDE DES ZENTRIERENS C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ELSE EDIF=DIFF END IF C C ABBRUCH NACH ERSTER ITERATION FUER I < XMAX-1 C IF(I.LT.XMAX-1)DIFF=EDIF END DO END DO END DO C C ENDE DES LINDE/BUZO/GRAY/MEYER-ALGORITHMUS C GOTO 1000 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C ABSPEICHERN DER DATEN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C BERECHNUNG DES SIGNAL/RAUSCH-VERHAELTNISSES C 1000 SNDB=10*ALOG10(ESIG/EDIF) C C ABLEGEN DES CODEBUCHS C OPEN(UNIT=10,NAME='CBUCH.DAT',TYPE='NEW') WRITE(10,10)ZMAX WRITE(10,11)(BAUM(I,1),I=1,10) WRITE(10,10)ALGO WRITE(10,12)SNDB DO I=1,XMAX DO J=1,BAUM(I,4) WRITE(10,13)(BUCH(I,J,K),K=1,8) END DO END DO CLOSE(UNIT=10) 10 FORMAT(I4) 11 FORMAT(10I4) 12 FORMAT(F10.4) 13 FORMAT(8I6) STOP'HIER ENDET DAS PROGRAMM !' END