home *** CD-ROM | disk | FTP | other *** search
- REM * PROGRAM LPFILTAN BY E.R. LE CLEAR 8-15-79
- CONSOLE
- REM * THIS PROGRAM EVALUATES LOW PASS FILTERS FOR
- REM * TRANSMISSION CHARACTERISTICS AND INPUT IN-
- REM * PEDANCE VERSUS FREQUENCY. THE FILTER IS TER-
- REM * MINATED IN A LOAD RESISTANCE RL AND CONSISTS
- REM * OF N "L" SECTIONS. EACH "L" SECTION CONSISTS
- REM * OF THE FOLLOWING COMPONENTS:
- REM *
- REM * ----< LA >-------< RLA >-----
- REM * l l
- REM * l l
- REM * O--------< CA >-------< RCA >-----------O
- REM * l
- REM * <RB>
- REM * l
- REM * <LB>
- REM * l
- REM * <CB>
- REM * l
- REM * O---------------------------------------O
- REM *
- DIM LA(10),RLA(10),CA(10),RCA(10),RB(10),LB(10),CB(10)
- 1.00 PRINT TAB(24);"LOW PASS FILTERS"
- REM *
- REM ***** REQUEST COMPONENT DATA *****
- REM *
- INPUT "NUMBER OF SECTIONS ?";N
- INPUT "RG,RL ? ";RG,RL
- PRINT "TYPE IN SECTION PARAMETERS. TYPE - IF ELEMENT NOT USED"
- PRINT "FOR SHORTED SERIES ARM, SET LA=RLA=0"
- PRINT "FOR OPEN SHUNT ARM, SET RB=1E15"
- MIN=1E-15 : MAX=1E15
- FOR LOOP=1 TO N
- PRINT "LA,RLA FOR SECTION ";LOOP;
- INPUT LA$,RLA$
- IF LA$="-" THEN LA(LOOP)=MAX ELSE LA(LOOP)=VAL(LA$)
- IF RLA$="-" THEN RLA(LOOP)=MIN ELSE RLA(LOOP)=VAL(RLA$)
- PRINT "CA,RCA FOR SECTION ";LOOP;
- INPUT CA$,RCA$
- IF CA$="-" THEN CA(LOOP)=MIN ELSE CA(LOOP)=VAL(CA$)
- IF RCA$="-" THEN RCA(LOOP)=MIN ELSE RCA(LOOP)=VAL(RCA$)
- PRINT "RB,LB,CB FOR SECTION ";LOOP;
- INPUT RB$,LB$,CB$
- IF RB$="-" THEN RB(LOOP)=MIN ELSE RB(LOOP)=VAL(RB$)
- IF LB$="-" THEN LB(LOOP)=MIN ELSE LB(LOOP)=VAL(LB$)
- IF CB$="-" THEN CB(LOOP)=MAX ELSE CB(LOOP)=VAL(CB$)
- NEXT LOOP
- REM *
- REM ***** PRINT HEADING AND INPUT DATA *****
- REM *
- INPUT "HARD COPY ? (Y OR N)";Q$
- IF Q$="Y" THEN LPRINTER WIDTH 80
- PRINT
- PRINT " LOW PASS FILTER ANALYSIS "
- PRINT
- PRINT "FILTER CONSTANTS"
- PRINT
- PRINT "RG=";RG
- PRINT "RL=";RL
- PRINT
- FOR LOOP=1 TO N
- PRINT "LA";LOOP;" =";LA(LOOP),"RLA";LOOP;" =";RLA(LOOP)
- PRINT "CA";LOOP;" =";CA(LOOP),"RCA";LOOP;" =";RCA(LOOP)
- PRINT "RB";LOOP;" =";RB(LOOP),"LB";LOOP;" =";LB(LOOP),"CB";LOOP;" =";CB(LOOP)
- PRINT
- NEXT LOOP
- REM *
- REM ***** INPUT FREQUENCY DATA *****
- REM *
- 2.00 CONSOLE
- INPUT "FMIN,FMAX ?";FMIN,FMAX
- INPUT "NUMBER OF DATA POINTS ?";M
- DEL=(LOG(FMAX)-LOG(FMIN))/(M-1)
- IF Q$="Y" THEN LPRINTER WIDTH 80
- REM *
- REM ***** CALCULATE AND PRINT DATA *****
- REM *
- PRINT "FREQ ALPHA(DB) ANG(ALPHA) ZIN ANG(ZIN)"
- PRINT "-------------------------------------------------------------------"
- PRINT
- FOR LOOPF=0 TO (M-1)
- F=EXP(LOG(FMIN)+DEL*LOOPF)
- W=6.2832*F
- A11.REAL=1.0 : A11.IMAG=MIN REM UNIT MATRIX
- A12.REAL=MIN : A12.IMAG=MIN
- A21.REAL=MIN : A21.IMAG=MIN
- A22.REAL=1.0 : A22.IMAG=MIN
- FOR LOOP=1 TO N
- REM *
- REM ***** COMPUTE ZA *****
- REM *
- IF RLA(LOOP) GT MAX/2 OR LA(LOOP) GT MAX/2 THEN GOTO 3.00
- IF RCA(LOOP) GT MAX/2 OR CA(LOOP) LT 2*MIN THEN GOTO 4.00
- TEMP.REAL=RLA(LOOP) : TEMP.IMAG=W*LA(LOOP)
- TEMP1.REAL=RCA(LOOP) : TEMP1.IMAG=-1/(W*CA(LOOP))
- GOSUB 103.100 REM COMPLEX MULTIPLY
- TEMP1.REAL=RLA(LOOP)+RCA(LOOP) : TEMP1.IMAG=W*LA(LOOP)-1/(W*CA(LOOP))
- GOSUB 104.100 REM COMPLEX DIVIDE
- ZA.REAL=TEMP.REAL : ZA.IMAG=TEMP.IMAG
- GOTO 5.00
- 3.00 IF RCA(LOOP) GT MAX/2 OR CA(LOOP) LT 2*MIN THEN \
- PRINT "ERROR IN SERIES ARM";LOOP : GOTO 1.00
- ZA.REAL=RCA(LOOP) : ZA.IMAG=-1/(W*CA(LOOP))
- GOTO 5.00
- 4.00 IF RLA(LOOP) GT MAX/2 OR LA(LOOP) GT MAX/2 THEN \
- PRINT "ERROR IN SERIES ARM";LOOP : GOTO 1.00
- ZA.REAL=RLA(LOOP) : ZA.IMAG=W*LA(LOOP)
- REM *
- REM ***** COMPUTE ZB *****
- REM *
- 5.00 IF RB(LOOP) GT MAX/2 OR LA(LOOP) GT MAX/2 OR CB(LOOP) LT 2*MIN THEN \
- PRINT "ERROR IN SHUNT ARM";LOOP : GOTO 1.00
- ZB.REAL=RB(LOOP) : ZB.IMAG=W*LB(LOOP)-1/(W*CB(LOOP))
- REM *
- REM ***** COMPUTE X MATRIX FOR SECTION *****
- REM *
- TEMP.REAL=ZA.REAL+ZB.REAL : TEMP.IMAG=ZA.IMAG+ZB.IMAG
- TEMP1.REAL=ZB.REAL : TEMP1.IMAG=ZB.IMAG
- GOSUB 104.100 REM COMPLEX DIVIDE
- B22.REAL=TEMP.REAL : B22.IMAG=TEMP.IMAG
- B12.REAL=ZA.REAL : B12.IMAG=ZA.IMAG
- TEMP.REAL=1.0 : TEMP.IMAG=MIN
- TEMP1.REAL=ZB.REAL : TEMP1.IMAG=ZB.IMAG
- GOSUB 104.100 REM COMPLEX DIVIDE
- B21.REAL=TEMP.REAL : B21.IMAG=TEMP.IMAG
- B11.REAL=1.0 : B11.IMAG=MIN
- GOSUB 111.100 REM MULTIPLY X MATRICES [C]=[A]X[B]
- A11.REAL=C11.REAL : A11.IMAG=C11.IMAG REM RENAME MATRIX FOR NEXT LOOP
- A12.REAL=C12.REAL : A12.IMAG=C12.IMAG
- A21.REAL=C21.REAL : A21.IMAG=C21.IMAG
- A22.REAL=C22.REAL : A22.IMAG=C22.IMAG
- NEXT LOOP
- REM *
- REM ***** SET UP TERMINATION MATRIX *****
- REM *
- B11.REAL=1.0 : B11.IMAG=MIN
- B12.REAL=MIN : B12.IMAG=MIN
- B21.REAL=1/RL : B21.IMAG=MIN
- B22.REAL=1.0 : B22.IMAG=MIN
- GOSUB 111.100 REM MULTIPLY X MATRICES [C]=[A]X[B]
- TEMPA.REAL=C11.REAL : TEMPA.IMAG=C11.IMAG
- TEMPB.REAL=C12.REAL : TEMPB.IMAG=C12.IMAG
- TEMPC.REAL=C21.REAL : TEMPC.IMAG=C21.IMAG
- TEMPD.REAL=C22.REAL : TEMPD.IMAG=C22.IMAG
- GOSUB 109.100 REM [X] TO [Z]
- REM *
- REM ***** COMPUTE POLAR INPUT INPEDANCE *****
- REM *
- ZINR=TEMPA.REAL : ZINI=TEMPA.IMAG
- TEMP.REAL=ZINR : TEMP.IMAG=ZINI
- GOSUB 100.100 REM CONVERT TO POLAR ZIN
- ZIN.MAG=TEMP.MAG : ZIN.PHA=TEMP.PHA
- TEMP.REAL=2*ZINR : TEMP.IMAG=2*ZINI REM NORMALIZE TRANSFER FUNCTION
- TEMP1.REAL=RG+ZINR : TEMP1.IMAG=ZINI
- GOSUB 104.100 REM TEMP=2*ZIN/(RG+ZIN)
- TEMP1.REAL=C11.REAL : TEMP1.IMAG=C11.IMAG
- GOSUB 104.100 REM COMPLEX DIVIDE
- GOSUB 100.100 REM CONVERT TO POLAR
- ALPHA.MAG=20*LOG(TEMP.MAG)/LOG(10)
- ALPHA.PHA=TEMP.PHA
- PRINT USING "#.###^^ ####.## ####.## #.###^^ ####.##";\
- F,ALPHA.MAG,ALPHA.PHA,ZIN.MAG,ZIN.PHA
- NEXT LOOPF
- PRINT
- REM *
- REM ***** PROGRAM OPTIONS *****
- REM *
- FOR I=1 TO 10
- PRINT
- NEXT I
- CONSOLE
- INPUT "NEW FREQ PLOT(F), NEW PARAMETERS(P) OR QUIT(Q)";S$
- IF S$="F" THEN GOTO 2.00
- IF S$="P" THEN GOTO 1.00
- IF S$="Q" THEN STOP
- GOTO 1.00
- 100.100 REM ***********REC/POL***********
- TEMP.MAG=SQR(TEMP.REAL*TEMP.REAL+TEMP.IMAG*TEMP.IMAG)
- TEMP.PHA=57.296*ATN(TEMP.IMAG/TEMP.REAL)
- RETURN
- 103.100 REM ***********MPYCOM***********
- A=TEMP.REAL : B=TEMP.IMAG
- C=TEMP1.REAL : D=TEMP1.IMAG
- TEMP.REAL=A*C-B*D
- TEMP.IMAG=A*D+B*C
- RETURN
- 104.100 REM ***********DIVCOM***********
- A=TEMP.REAL : B=TEMP.IMAG
- C=TEMP1.REAL : D=TEMP1.IMAG
- E=C*C+D*D
- IF E<1E-12 THEN E=1E-12
- TEMP.REAL=(A*C+B*D)/E
- TEMP.IMAG=(B*C-A*D)/E
- RETURN
- 109.100 REM ***********ZXXZ***********
- TEMP.REAL=TEMPA.REAL : TEMP.IMAG=TEMPA.IMAG
- TEMP1.REAL=TEMPD.REAL : TEMP1.IMAG=TEMPD.IMAG
- GOSUB 103.100
- TEM1R=TEMP.REAL : TEM1I=TEMP.IMAG
- TEMP.REAL=TEMPB.REAL : TEMP.IMAG=TEMPB.IMAG
- TEMP1.REAL=TEMPC.REAL : TEMP1.IMAG=TEMPC.IMAG
- GOSUB 103.100
- TEM2R=TEMP.REAL : TEM2I=TEMP.IMAG
- DELR=TEM1R-TEM2R : DELI=TEM1I-TEM2I
- TEMP.REAL=TEMPA.REAL : TEMP.IMAG=TEMPA.IMAG
- TEMP1.REAL=TEMPC.REAL : TEMP1.IMAG=TEMPC.IMAG
- GOSUB 104.100
- TEMPA.REAL=TEMP.REAL : TEMPA.IMAG=TEMP.IMAG
- TEMP.REAL=DELR : TEMP.IMAG=DELI
- TEMP1.REAL=TEMPC.REAL : TEMP1.IMAG=TEMPC.IMAG
- GOSUB 104.100
- TEMPB.REAL=TEMP.REAL : TEMPB.IMAG=TEMP.IMAG
- TEM3R=TEMPC.REAL : TEM3I=TEMPC.IMAG
- TEMP.REAL=1 : TEMP.IMAG=0
- TEMP1.REAL=TEM3R : TEMP1.IMAG=TEM3I
- GOSUB 104.100
- TEMPC.REAL=TEMP.REAL : TEMPC.IMAG=TEMP.IMAG
- TEMP.REAL=TEMPD.REAL : TEMP.IMAG=TEMPD.IMAG
- TEMP1.REAL=TEM3R : TEMP1.IMAG=TEM3I
- GOSUB 104.100
- TEMPD.REAL=TEMP.REAL : TEMPD.IMAG=TEMP.IMAG
- RETURN
- 111.100 REM ***********MTXMPY***********
- A1=A11.REAL : B1=A11.IMAG : C1=A12.REAL : D1=A12.IMAG
- E1=A21.REAL : F1=A21.IMAG : G1=A22.REAL : H1=A22.IMAG
- A2=B11.REAL : B2=B11.IMAG : C2=B12.REAL : D2=B12.IMAG
- E2=B21.REAL : F2=B21.IMAG : G2=B22.REAL : H2=B22.IMAG
- C11.REAL=A1*A2-B1*B2+C1*E2-D1*F2
- C11.IMAG=B1*A2+A1*B2+C1*F2+D1*E2
- C12.REAL=A1*C2-B1*D2+C1*G2-D1*H2
- C12.IMAG=B1*C2+A1*D2+D1*G2+C1*H2
- C21.REAL=A2*E1-B2*F1+E2*G1-F2*H1
- C21.IMAG=A2*F1+B2*E1+E2*H1+F2*G1
- C22.REAL=C2*E1-D2*F1+G1*G2-H1*H2
- C22.IMAG=C2*F1+D2*E1+H1*G2+G1*H2
- RETURN
-