home *** CD-ROM | disk | FTP | other *** search
- PROGRAM LADDER
- INTEGER CHAR
- DIMENSION R(100)
- PI=3.14159
- WRITE (3,1)
- 1 FORMAT (' LADDER NETWORK ANALYSIS PROGRAM')
- WRITE (3,222)
- 222 FORMAT (
- &' This program analyses a full ladder network for gain and phase'
- &/' starting at the load and working towards the voltage source.'
- &/' Any null or infinite branches must be declared as such.'
- &/' ...report problems to Trevor Marshall,'
- &/' SYSOP, Thousand Oaks Tech RBBS (805) 492 3693'/)
- WRITE (3,16)
- 16 FORMAT (' NUMBER OF BRANCHES (including the load) ? ')
- READ (3,2) A
- 2 FORMAT (F2.0)
- N=2*A+9
- DO 100 I=0,N
- R(I)=0.
- 100 CONTINUE
- NN=1
- 150 FLAG3=0
- WRITE (3,17)
- 17 FORMAT (' R, L or C ? ')
- READ (3,3) CHAR
- 3 FORMAT (A1)
- IF (CHAR.EQ.'R ' .OR. CHAR.EQ.'r ') R(3)=1.
- IF (CHAR.EQ.'L ' .OR. CHAR.EQ.'l ') R(3)=2.
- IF (CHAR.EQ.'C ' .OR. CHAR.EQ.'c ') R(3)=3.
- IF (R(3).EQ.3) FLAG3=1
- WRITE (3,18)
- 18 FORMAT (' VALUE ? ')
- READ (3,4) R(4)
- 4 FORMAT (E12.5)
- IF (R(3).NE.1) GO TO 200
- C IF (.NOT. CHAR.EQ.'R ' .OR. CHAR.EQ.'r ') GOTO 200
- R(NN+10)=R(4)
- GO TO 300
- 200 R(NN+11)=PWR1(FLAG3)*R(4)
- 300 NN=NN+2
- IF (NN.LE.(2.*A-1.)) GO TO 150
- WRITE (3,5)
- 5 FORMAT ('0 OUTPUT')
- IF (R(11).GT.1E-30) WRITE (3,6)
- 6 FORMAT ('0OHMS 0----R----O'/' ! !')
- IF (R(11).GT.1E-30)GO TO 400
- IF (R(12).GT.1E-30) WRITE (3,7)
- 7 FORMAT (' HY O----L----O'/' ! !')
- IF (R(12).GT.1E-30) GO TO 400
- WRITE (3,8)
- 8 FORMAT (' FD O----C----O'/' ! !')
- 400 NN=3
- 450 R(0)=((NN-1.0)/4.0-INT((NN-1.0)/4.0))
- IF (R(0).GT.1E-30) GO TO 500
- IF (R(NN+10).GT.1E-30) WRITE (3,9)
- 9 FORMAT (' OHMS !----R----!'/' ! !')
- IF (R(NN+10).GT.1E-30) GO TO 600
- IF (R(NN+11).GT.1E-30) WRITE (3,10)
- 10 FORMAT (' HY !----L----!'/' ! !')
- IF (R(NN+11).GT.1E-30) GO TO 600
- WRITE (3,11)
- 11 FORMAT (' FD !----C----!'/' ! !')
- GO TO 600
- 500 IF (R(NN+10).GT.1E-30) WRITE (3,12)
- 12 FORMAT (' OHMS R !'/' ! !')
- IF (R(NN+10).GT.1E-30) GO TO 600
- IF (R(NN+11).GT.1E-30) WRITE (3,13)
- 13 FORMAT (' HY L !'/' ! !')
- IF (R(NN+11).GT.1E-30) GO TO 600
- WRITE (3,14)
- 14 FORMAT (' FD C !'/' ! !')
- 600 NN=NN+2
- IF (NN.LE.(2*A-1)) GO TO 450
- 700 WRITE (3,15)
- 15 FORMAT (' O INPUT O')
- C
- 750 WRITE(3,28)
- 28 FORMAT('0FREQUENCY SWEEP STARTS AT ? ')
- READ (3,19) R(0)
- 19 FORMAT(E12.5)
- C R(0)=R(0)/(2*PI) omega
- WRITE(3,20)
- 20 FORMAT('+ AND ENDS AT ? ')
- READ (3,21)R(1)
- 21 FORMAT(F5.0)
- C R(1)=R(1)/(2*PI) omega
- WRITE(3,22)
- 22 FORMAT(' NUMBER OF INTERVALS ')
- READ(3,23)R(2)
- 23 FORMAT(F3.0)
- WRITE(3,24)
- 24 FORMAT('0FREQ.(HZ),MAGNITUDE (DB),PHASE (DEGREES)'/' ')
- C=R(0)
- R(4)=(R(1)/R(0))**(1./R(2))
- C CALL PLOT S/R 'P'
- 900 R(7)=1.
- X=1
- Y=0
- R(5)=0
- R(6)=0
- R(8)=0
- NN=1
- 1300 FLAG1=0
- FLAG2=0
- FLAG3=0
- FLAG4=0
- IF(R(NN+10).GT.1E-30)FLAG1=1
- IF(R(NN+10).GT.1E-30)GO TO 1000
- R(10)=R(NN+11)*2.*PI*C
- IF(R(10).GT.1E-30)Z=FLAG2
- IF(R(10).GT.1E-30)GO TO 1100
- FLAG3=1
- R(10)=-1./(R(NN+11)*2.*PI*C)
- 1000 R(3)=R(NN+10)
- 1100 ZZ=((NN+1.0)/4.0-INT((NN+1.0)/4.0))
- IF(ZZ)1115,1115,1120
- 1120 IF(FLAG1.EQ.1)R(3)=1./R(3)
- FLAG4=1.
- IF(FLAG1.EQ.1)GO TO 1115
- R(10)=1./R(10)
- 1115 IF(FLAG1.EQ.1)X=R(3)*X
- IF(FLAG1.EQ.0)X=R(10)*X
- IF(FLAG1.EQ.0)ZZ=FLAG4*FLAG2+(1-FLAG4)*FLAG3
- IF(FLAG1.EQ.0)Y=Y+PWR1(ZZ)*PI/2.0
- Z=X*COS(Y)
- Y=X*SIN(Y)
- X=Z
- IF(FLAG4.EQ.0)X=R(7)+X
- IF(FLAG4.EQ.0)Y=R(8)+Y
- IF(FLAG4.EQ.1)X=R(5)+X
- IF(FLAG4.EQ.1)Y=R(6)+Y
- IF(FLAG4.EQ.1)R(5)=X
- IF(FLAG4.EQ.1)R(6)=Y
- IF(FLAG4.EQ.1)GO TO 1200
- R(7)=X
- R(8)=Y
- 1200 Z=SQRT(X*X+Y*Y)
- IF(Y.GT.0)R(2)=PI/2.0
- IF(Y.LE.0)R(2)=-PI/2.0
- IF(X)2220,2250,2220
- 2220 R(2)=ATAN(Y/X)
- IF(X.LT.0)R(2)=R(2)+PI
- IF(Y.LT.0)R(2)=R(2)-2*PI
- 2250 Y=R(2)
- X=Z
- NN=NN+2
- IF(NN.LE.IFIX(2.0*A))GO TO 1300
- X=1.0/X
- ZZ=20*ALOG10(X)
- ZZZ=-Y*180./PI
- C CC=C*2.0*PI omega
- CC=C
- WRITE(3,25)CC,ZZ,ZZZ
- 25 FORMAT(F8.2,2(' ',F12.2))
- IF (R(0).EQ.R(1))GO TO 1550
- C=C*R(4)
- IF(C.LE.R(1))GO TO 900
- 1550 WRITE (3,26)
- 26 FORMAT('0NEW SWEEP (Y/N) ? ')
- READ(3,27)ISTRG
- 27 FORMAT(A1)
- IF(ISTRG.EQ.'Y ')GO TO 750
- END
- FUNCTION PWR1(Z)
- IF(Z.EQ.0)PWR1=1
- IF(Z.EQ.1)PWR1=-1
- IF(Z.EQ.2)PWR1=1
- RETURN
- END
-