home *** CD-ROM | disk | FTP | other *** search
- 100 CLS :KEY OFF :REM "COMBLINE"
- 110 PRINT TAB(23);"**** COMBLINE FILTER DESIGN ****" :PRINT
- 120 REM H.HOWE -1974 & J.CROMPTON FILES -1984 & V.HEESEN -1985
- 130 PRINT "THIS PROGRAM COMPUTES THE NORMALIZED BUTTERWORTH or CHEBYSHEV";
- 140 PRINT " ELEMENT VALUES" :PRINT :PRINT "g0, g1, g3, etc. ";
- 150 PRINT "STYLE: CAPACITIVE-TAPPED,WITH EQUAL (IN/OUT) TERMINATIONS."
- 160 PRINT :PRINT "NOTE: RESONATOR LENGTH MUST BE LONGER THAN THE TUNING STUB."
- 170 DIM G(25),AA(25),B(25),C(10),Z(10),ZO(10,10),ZE(10,10),A(10,10)
- 180 PRINT :PRINT :BEEP :PRINT "ENTER: TYPE CAPACITOR OR STUB LOADED (C/S)"
- 190 C$=INKEY$ :IF C$="" THEN 190
- 200 IF C$<>"C" AND C$<>"S" THEN 190
- 210 PI=4*ATN(1) :DR=PI/180
- 220 PRINT :BEEP :INPUT " NUMBER OF FILTER SECTIONS";N
- 230 PRINT :BEEP :INPUT " PASSBAND RIPPLE (DB) ";R
- 240 PRINT :B$="## = #.#####"
- 250 IF R=0 THEN 390
- 260 P=N :Q=(-1)^P :IF Q<=0 THEN 290
- 270 PRINT "NOTE: CHEBYSHEV designs require an ODD number of sections!!!"
- 280 GOTO 220
- 290 R1=R/17.37 :B1=LOG((EXP(R1)+EXP(-R1))/(EXP(R1)-EXP(-R1)))
- 300 C1=(EXP(B1/(2*N))-EXP(-B1/(2*N)))/2
- 310 FOR K=1 TO N
- 320 AA(K)=SIN((((2*K)-1)*PI)/(2*N))
- 330 B(K)=((C1)^2)+(1-COS((2*K*PI)/N))/2 :NEXT K
- 340 G(0)=1 :G(1)=(2*AA(1))/C1 :FOR K=2 TO N
- 350 G(K)=(4*(AA(K-1))*AA(K))/(B(K-1)*G(K-1)) :NEXT K
- 360 IF INT(N/2)=N/2 THEN 380
- 370 G(N+1)=1 :GOTO 410
- 380 G(N+1)=((EXP(B1/4)+EXP(-B1/4))/(EXP(B1/4)-EXP(-B1/4)))^2 :GOTO 410
- 390 G(0)=1 :G(N+1)=1 :FOR K=1 TO N
- 400 G(K)=2*SIN((((2*K)-1)*PI)/(2*N)) :NEXT K
- 410 FOR K=0 TO (N+1)
- 420 PRINT TAB(8);"g"; :PRINT USING B$;K,G(K) :NEXT K
- 430 PRINT :BEEP :INPUT "ENTER: CENTER FREQUENCY (Mhz)";FO :FO=FO*10^6
- 440 PRINT :BEEP :INPUT " FACTIONAL BANDWIDTH (%)";Q :Q=Q/100
- 450 PRINT :BEEP :INPUT " TERMINAL ZO (ohms)";RT :WO=2*PI*FO
- 460 PRINT :BEEP :INPUT " UNMATCHED Z (ohms)";R
- 470 PRINT :BEEP :INPUT " RESONATOR LENGTH (degrees)";AR
- 480 IF C$="C" THEN 490 ELSE 500
- 490 PRINT :PRINT " TUNING STUB LENGTH (degrees) 45" :AS=45 :GOTO 510
- 500 PRINT :BEEP :INPUT " TUNING STUB LENGTH (degrees)";AS
- 510 IF AS=>AR THEN RUN
- 520 LR=AR*DR :LS=AS*DR :G=1/R
- 530 TR=SIN(LR)/COS(LR) :TS=SIN(LS)/COS(LS) :B=G*SQR(R/RT-1)
- 540 IF C$<>"C" THEN 550 :LF=2*LR/SIN(2*LR)+1 :GOTO 560
- 550 LF=2*LR/SIN(2*LR)+2*LS/SIN(2*LS)
- 560 GX=Q*R/(G(0)*G(1)*2) :K=B*GX*LF*TS/(1-B*GX*2*LR/SIN(2*LR))
- 570 Z(1)=K/B :Z(N)=Z(1) :C=1/(1+K/TS) :C(1)=B/(K*WO) :C(N)=C(1)
- 580 IF C$="C" THEN LC=2*LR/SIN(2*LR)+C ELSE LC=2*LR/SIN(2*LR)+C*2*LS/SIN(2*LS)
- 590 A(1,2)=Q*SQR(LF*LC)/(2*SQR(G(1)*G(2))) :A(N-1,N)=A(1,2)
- 600 ZR=GX*LC/(TR*(1-A(1,2)^2)) :PRINT :PRINT "RESONATOR Z=";INT(ZR*10)/10
- 610 IF N<=3 THEN 670
- 620 FOR I=1 TO 6 :FOR J=2 TO N-2 :ZT(J)=Z(J)
- 630 A(J,J+1)=Q*LF*(1+(A(J-1,J)^2+A(J+1,J+2)^2)/2)/(2*SQR(G(J)*G(J+1)))
- 640 Z(J)=ZR*TS*TR*(1-A(J-1,J)^2-A(J,J+1)^2) :C(J)=1/(WO*Z(J)) :NEXT J :NEXT I
- 650 FOR J=2 TO N-2
- 660 IF ABS((ZT(J)-Z(J))/Z(J))>.01 THEN 1180 ELSE NEXT J
- 670 IF N=2 THEN 680 ELSE J=N-1 :Z(J)=ZR*TS*TR*(1-A(J-1,J)^2-A(J,J+1)^2)
- 680 C(J)=1/(WO*Z(J)) :IF C$="C" THEN 740
- 690 FOR J=1 TO N-1 :ZE(J,J+1)=ZR*(1+A(J,J+1)) :ZO(J,J+1)=ZR*(1-A(J,J+1))
- 700 PRINT :PRINT "N";J;TAB(6);"Z STUB";INT(Z(J)*10)/10;TAB(22);
- 710 PRINT "; ZO EVEN (";J;J+1;")";INT(ZE(J,J+1)*10)/10;TAB(49);
- 720 PRINT "; ZO ODD (";J;J+1;")";INT(ZO(J,J+1)*10)/10 :NEXT J
- 730 J=N :PRINT :PRINT "N";J;TAB(6);"Z STUB";INT(Z(J)*10)/10; :GOTO 790
- 740 FOR J=1 TO N-1 :ZE(J,J+1)=ZR*(1+A(J,J+1)) :ZO(J,J+1)=ZR*(1-A(J,J+1))
- 750 PRINT :PRINT "N";J;TAB(6);"Loading CAP.=";INT(C(J)*10^12*100)/100;"pf";
- 760 PRINT TAB(28);"; ZO EVEN (";J;J+1;")";INT(ZE(J,J+1)*10)/10;TAB(53);
- 770 PRINT "; ZO ODD (";J;J+1;")";INT(ZO(J,J+1)*10)/10 :NEXT J
- 780 J=N :PRINT :PRINT "N";J;TAB(6);"Loading CAP.=";INT(C(J)*10^12*100)/100;"pf";
- 790 CG=G/(RT*B*FO)
- 800 PRINT TAB(28);"; Coupling Capacitors=";INT(CG*10^12*100)/100;"pf"
- 810 PRINT :BEEP :PRINT "PRESS";TAB(10);"TO CHANGE:" :PRINT
- 820 PRINT "(N)";TAB(10);"NOTHING" :PRINT "(Z)";TAB(10);"UNMATCHED Z"
- 830 PRINT "(R)";TAB(10);"RESONATOR LENGTH" :PRINT "(S)";TAB(10);"STUB LENGTH"
- 840 E$=INKEY$ :IF E$="" THEN 840
- 850 IF E$="N" THEN 900
- 860 IF E$="Z" THEN INPUT "ENTER NEW UNMATCHED Z ";R :GOTO 520
- 870 IF E$="R" THEN INPUT "ENTER NEW RESONATOR LENGTH (DEGREES) ";AR :GOTO 520
- 880 IF E$="S" AND C$="C" THEN 810
- 890 IF E$="S" THEN INPUT "ENTER NEW STUB LENGTH (DEGREES);AS :GOTO 270
- 900 PRINT :BEEP :PRINT "HARD COPY REQUIRED (Y/N) ?"
- 910 P$=INKEY$ :IF P$="" THEN 910
- 920 IF P$<>"Y" THEN PRINT :BEEP :PRINT "CONTINUE (Y/N) ?"
- 930 C$=INKEY$ :IF C$="" THEN 930 ELSE IF C$="Y" THEN RUN ELSE END
- 940 LPRINT TAB(24);"*** COMBLINE FILTER DESIGN ***" :LPRINT
- 950 LPRINT "TYPE: CAPACITIVE-TAPPED,WITH EQUAL TERMINATIONS"
- 960 LPRINT "CAPACITOR OR STUB LOADED STYLE (C/S) =";C$;
- 970 LPRINT "; NUMBER OF FILTER SECTIONS =";N
- 980 LPRINT "NORMALIZED LOW PASS PROTYPE ELEMENTS ARE:" :LPRINT
- 990 FOR I=0 TO N+1 :LPRINT G(I); :NEXT I :LPRINT :LPRINT
- 1000 LPRINT "CENTER FREQUENCY (Mhz) =";FO/10^6;
- 1010 LPRINT "; FACTIONAL BANDWIDTH (%) =";Q*100
- 1020 LPRINT "TERMINAL ZO (ohms) =";RT;
- 1030 LPRINT "; UNMATCHED Z (ohms) =";R
- 1040 LPRINT "RESONATOR LENGTH (degrees) =";AR;
- 1050 LPRINT "; RESONATOR Z (ohms) =";INT(ZR*10)/10 :LPRINT :IF C$="C" THEN 1120
- 1060 LPRINT "TUNING STUB LENGTH (degrees) =";AS
- 1070 FOR J=1 TO N-1 :ZE(J,J+1)=ZR*(1+A(J,J+1)) :ZO(J,J+1)=ZR*(1-A(J,J+1))
- 1080 LPRINT "N";J;TAB(6);"Z STUB";INT(Z(J)*10)/10;TAB(28);
- 1090 LPRINT "; ZO EVEN (";J;J+1;")";INT(ZE(J,J+1)*10)/10;TAB(53);
- 1100 LPRINT "; ZO ODD (";J;J+1;")";INT(ZO(J,J+1)*10)/10 :NEXT J
- 1110 J=N :LPRINT "N";J;TAB(6);"Z STUB";INT(Z(J)*10)/10; :GOTO 1170
- 1120 FOR J=1 TO N-1 :ZE(J,J+1)=ZR*(1+A(J,J+1)) :ZO(J,J+1)=ZR*(1-A(J,J+1))
- 1130 LPRINT "N";J;TAB(6);"Loading CAP.=";INT(C(J)*10^12*100)/100;"pf";
- 1140 LPRINT TAB(28);"; ZO EVEN (";J;J+1;")";INT(ZE(J,J+1)*10)/10;TAB(53);
- 1150 LPRINT "; ZO ODD (";J;J+1;")";INT(ZO(J,J+1)*10)/10 :NEXT J
- 1160 J=N :LPRINT "N";J;TAB(6);"Loading CAP.=";INT(C(J)*10^12*100)/100;"pf";
- 1170 LPRINT TAB(28);"; Coupling Capacitors=";INT(CG*10^12*100)/100;"pf" :LPRINT
- 1180 PRINT :BEEP :PRINT "DATA ENTERY ERROR!!!" :GOTO 150