home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 1
/
HamRadio.cdr
/
tech
/
eepub10
/
combline.asc
< prev
next >
Wrap
Text File
|
1986-10-20
|
6KB
|
110 lines
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