10 REM BANDSTOP.BAS 20 REM THIS PROGRAM ADDS TO THE HIPASS CALC TO MAKE A BANDSTOP FILTER 30 REM HIPASXFM.BAS MODIFIED JAN 2000 40 PI=3.14162 50 CLS:PRINT"THIS PROGRAM PRODUCES THE VALUES FOR A BANDSTOP FILTER, GIVEN" 60 PRINT"THE LOWPASS PROTOTYPE VALUES. REMEMBER THAT LOPASS INDUCTORS" 70 PRINT"BECOME BANDSTOP CAPACITORS & LOPASS CAPACITORS BECOME INDUCTORS." 80 PRINT"THE SHUNT ELEMENTS ARE SERIES RESONANT, SERIES ELEMENTS ARE PARALLEL" 90 PRINT"RESONANT" 100 PRINT"" 110 INPUT"WILL YOU GIVE 3DB FREQS (1) OR CENTER FREQ & BANDWIDTH (2) ";A 120 ON A GOTO 180, 130 130 INPUT"CENTER FREQ = ";F0 140 INPUT"BANDWIDTH = ";BW 150 F1=-BW/2+(BW^2+4*F0^2)^.5/2:NUM=F1:GOSUB 1570: F1=NUM :F1$=UNIT$ 155 NUM=BW:GOSUB 1570:WB=NUM:WB$=UNIT$ 160 F2=F1+WB 170 QC=F0/BW : GOTO 200 180 INPUT"WHAT ARE THE 3DB FREQUENCIES (F1, F2) ";F1,F2 190 F0=SQR(F1*F2) :BW=F2-F1: QC=F0/BW 200 FC=1/2/PI/QC : WC=1/QC : W0=2*PI*F0 210 INPUT"WHAT IS THE IMPEDANCE LEVEL ";Z 215 NUM=F0:GOSUB 1570:FC=NUM:FC$=UNIT$ 220 PRINT"IF THE LOPASS IMPEDANCE IS NOT ONE OHM, WHAT IS IT?" 230 INPUT"PRESS RETURN FOR 1 OHM OR ELSE ENTER NUMBER",R 240 IF R>1 THEN R=R ELSE R=1 250 PRINT"R=";R 260 INPUT"WHAT IS THE PROTOTYPE (BUTTERWORTH, CHEBYCHEV, ELIPTIC, ETC)";TYPE$ 270 PRINT:PRINT: 280 PRINT"FOR INDUCTOR INPUT LOWPASS PROTOTYPE, ENTER 1." 290 PRINT"FOR CAPACITOR INPUT LOWPASS PROTOTYPE, ENTER 2." 300 INPUT"CAP INPUT (2) OR INDUCTOR INPUT (1)";TYPE 310 ON TYPE GOTO 320,920 320 FOR J=1 TO 10 STEP 2 330 PRINT"GIVE SECTION";J;" INDUCTANCE:";:INPUT LL(J) 334 IF LL(J)=0 THEN N=J-1:PRINT"N=";N:GOTO 400 340 PRINT"GIVE SECTION";J+1;" CAPACITANCE:";:INPUT CL(J+1) 360 IF CL(J+1)=0 THEN N=J:PRINT"N=";N:GOTO 400 370 NEXT J : N=J-1 : GOTO 400 390 REM FIRST FORM HIPASS PROTOTYPE BY INVERTING ELEMENTS 400 FOR J=1 TO N STEP 2 405 IF LL(J)=0 THEN 450 410 CH(J)=1/LL(J) 412 IF CL(J+1)=0 THEN 450 415 LH(J+1)=1/CL(J+1) 420 NEXT J 430 REM NOW CHANGE THE BANDEDGE TO BW/F0 (MULT ALL ELEMENTS BY F0/BW) 450 FOR J=1 TO N STEP 2 460 CH(J)=CH(J)*F0/BW:LH(J+1)=LH(J+1)*F0/BW 470 NEXT J 480 REM NOW FORM THE BANDSTOP PROTOTYPE BY RESONATING AT W=1 490 FOR J=1 TO N STEP 2 495 IF CH(J)=0 THEN 530 500 LBS(J)=1/CH(J) 504 IF LH(J+1)=0 THEN 530 506 CBS(J+1)=1/LH(J+1) 510 NEXT J 520 REM NOW SCALE FOR FREQ & IMPEDANCE 530 FOR J=1 TO N STEP 2 540 CH(J)=CH(J)/Z/W0 :NUM=CH(J):GOSUB 1570:CH(J)=NUM:CH$(J)=UNIT$ 550 LBS(J)=LBS(J)*Z/W0 :NUM=LBS(J):GOSUB 1570:LBS(J)=NUM:LBS$(J)=UNIT$ 560 LH(J+1)=LH(J+1)*Z/W0:NUM=LH(J+1):GOSUB 1570:LH(J+1)=NUM:LH$(J+1)=UNIT$ 570 CBS(J+1)=CBS(J+1)/Z/W0:NUM=CBS(J+1):GOSUB 1570:CBS(J+1)=NUM:CBS$(J+1)=UNIT$ 580 NEXT J 590 CLS 610 PRINT"BANDSTOP VALUES:" 620 FOR J=1 TO N STEP 2 630 PRINT J,"CS = ";CH(J);CH$(J),"LS = ";LBS(J);LBS$(J) 640 PRINT J+1,"CP = ";CBS(J+1);CBS$(J+1),"LP = ";LH(J+1);LH$(J+1) 650 NEXT J 660 INPUT"PREPARE THE PRINTER AND PRESS ENTER";Y$ 670 OPEN "PRN" FOR OUTPUT AS #1 680 PRINT#1,TAB(20);TYPE$;" RESPONSE" 690 PRINT#1,:PRINT#1,TAB(20);"BANDSTOP FILTER VALUES" 700 PRINT#1, TAB(20);FC;" ";FC$;"HERTZ";" CENTER FREQUENCY 710 PRINT#1,TAB(20);"CUTOFF FREQUENCIES = ";F1;" ";F2 ;" ";F1$;"HERTZ" 720 PRINT#1,TAB(20);"IMPEDANCE LEVEL = ";Z;" OHMS" 730 PRINT:PRINT#1,"IF THE LOPASS PROTOTYPE LOOKS LIKE THIS:" 740 PRINT#1,"-----L-----|-------|" 750 PRINT#1," C |" 760 PRINT#1," | R" 770 PRINT#1," | |" 780 PRINT#1," GND GND" 790 PRINT#1,:PRINT#1,"THEN THE BANDSTOP LOOKS LIKE THIS:" 800 PRINT#1, 810 PRINT#1,"---|---CS--|----|-------|" 820 PRINT#1," |---LS--| LP R" 830 PRINT#1," | |" 840 PRINT#1," CP |" 850 PRINT#1," | |" 860 PRINT#1," GND GND" 865 PRINT#1, 870 FOR J=1 TO N STEP 2 880 PRINT#1, J,"CS = ";CH(J);CH$(J);"FARAD","LS = ";LBS(J);LBS$(J);"HENRY" 884 IF CBS(J+1)=0 THEN 910 890 PRINT#1, J+1,"CP = ";CBS(J+1);CBS$(J+1);"FARAD","LP = ";LH(J+1);LH$(J+1);"HENRY" 900 NEXT J 910 CLOSE#1 :GOTO 1800 920 FOR J=1 TO 10 STEP 2 930 PRINT"GIVE SECTION";J;" CAPACITANCE:";:INPUT CL(J) 934 IF CL(J)=0 THEN N=J-1:PRINT "N=";N:GOTO 990 940 PRINT"GIVE SECTION";J+1; " INDUCTANCE :";:INPUT LL(J+1) 950 IF LL(J+1)=0 THEN N=J:PRINT"N=";N:GOTO 990 960 NEXT J : N=J-1 : GOTO 990 980 REM FIRST FORM HIPASS PROTOTYPE BY INVERTING ELEMENTS 990 FOR J=1 TO N STEP 2 995 IF CL(J)=0 THEN 1060 1000 LH(J)=1/CL(J) 1004 IF LL(J+1)=0 THEN 1060 1006 CH(J+1)=1/LL(J+1) 1020 REM 1030 NEXT J 1040 REM NOW CHANGE THE BANDEDGE TO BW/F0 (MULT ALL ELEMENTS BY F0/BW) 1060 FOR J=1 TO N STEP 2 1070 LH(J)=LH(J)*F0/BW:CH(J+1)=CH(J+1)*F0/BW 1080 PRINT"LH = ";LH(J),"CH = ";CH(J+1) 1090 REM 1100 NEXT J 1110 REM NOW FORM THE BANDSTOP PROTOTYPE BY RESONATING AT W=1 1120 FOR J=1 TO N STEP 2 1125 IF LH(J)=0 THEN 1180 1130 CBS(J)=1/LH(J) 1134 IF CH(J+1)=0 THEN 1180 1136 LBS(J+1)=1/CH(J+1) 1140 PRINT "CBS = ";CBS(J),"LBS = ";LBS(J+1) 1150 REM 1160 NEXT J 1170 REM NOW SCALE FOR FREQ & IMPEDANCE 1180 FOR J=1 TO N STEP 2 1190 LH(J)=LH(J)*Z/W0:NUM=LH(J):GOSUB 1570:LH(J)=NUM:LH$(J)=UNIT$ 1200 CBS(J)=CBS(J)/Z/W0:NUM=CBS(J):GOSUB 1570:CBS(J)=NUM:CBS$(J)=UNIT$ 1210 CH(J+1)=CH(J+1)/Z/W0 :NUM=CH(J+1):GOSUB 1570:CH(J+1)=NUM:CH$(J+1)=UNIT$ 1220 LBS(J+1)=LBS(J+1)*Z/W0 :NUM=LBS(J+1):GOSUB 1570:LBS(J+1)=NUM:LBS$(J+1)=UNIT$ 1230 NEXT J 1240 CLS 1260 PRINT"BANDSTOP VALUES:" 1270 FOR J=1 TO N STEP 2 1280 PRINT J,"CP = ";CBS(J);CBS$(J),"LP = ";LH(J);LH$(J) 1290 PRINT J+1,"CS = ";CH(J+1);CH$(J+1),"LS = ";LBS(J+1);LBS$(J+1) 1300 NEXT J 1310 INPUT"PREPARE THE PRINTER AND PRESS ENTER";Y$ 1320 OPEN "PRN" FOR OUTPUT AS #1 1330 PRINT#1,TAB(20);TYPE$;" RESPONSE" 1340 PRINT#1,:PRINT#1,TAB(20);"BANDSTOP FILTER VALUES" 1350 PRINT#1, TAB(20);FC;" ";FC$;"HERTZ";" CENTER FREQUENCY 1360 PRINT#1,TAB(20);"CUTOFF FREQUENCIES = ";F1;" ";F2;" ";F1$;"HERTZ" 1370 PRINT#1,TAB(20);"IMPEDANCE LEVEL = ";Z;" OHMS" 1380 PRINT:PRINT#1,"IF THE LOPASS PROTOTYPE LOOKS LIKE THIS:" 1390 PRINT#1,"-----|------L------|" 1400 PRINT#1," C |" 1410 PRINT#1," | R" 1420 PRINT#1," | |" 1430 PRINT#1," GND GND" 1440 PRINT#1,:PRINT#1,"THEN THE BANDSTOP LOOKS LIKE THIS:" 1450 PRINT#1, 1460 PRINT#1,"-------|---|---CS--|----|" 1470 PRINT#1," LP |---LS--| R" 1480 PRINT#1," | |" 1490 PRINT#1," CP |" 1500 PRINT#1," | |" 1510 PRINT#1," GND GND" 1520 PRINT#1, 1530 FOR J=1 TO N STEP 2 1540 PRINT#1, J,"CP = ";CBS(J);CBS$(J);"FARAD","LP = ";LH(J);LH$(J);"HENRY" 1544 IF CH(J+1)=0 THEN 1565 1550 PRINT#1, J+1,"CS = ";CH(J+1);CH$(J+1);"FARAD","LS = ";LBS(J+1);LBS$(J+1);"HENRY" 1560 NEXT J 1565 CLOSE#1:GOTO 1800 1570 REM ROUNDOFF.BAS 1580 REM A ROUTINE TO ROUNDOFF TO 3 DIGITS AND PUT IN KILO, NANO, PICO UNITS 1590 REM INPUT NUMBER IS "NUM" 1600 IF NUM=<1000 AND NUM>1 THEN PRINT"50, NUM=";NUM:GOTO 1680 1610 IF NUM=<999999! AND NUM>1 THEN 1690 1620 IF NUM=<999999999# AND NUM>1 THEN 1700 1630 IF NUM>999999999# THEN 1710 1640 IF NUM=>.001 AND NUM<1 THEN 1720 1650 IF NUM=>.000001 AND NUM<1 THEN 1730 1660 IF NUM=>1E-09 AND NUM<1 THEN 1740 1670 IF NUM=>1E-12 AND NUM<1 THEN 1750 1680 UNIT$="" : GOTO 1760 1690 UNIT$="KILO": NUM=NUM/1000 : GOTO 1760 1700 UNIT$="MEGA" : NUM=NUM/1000000! : GOTO 1760 1710 UNIT$="GIGA" : NUM=NUM/1E+09 : GOTO 1760 1720 UNIT$="MILLI" : NUM=NUM*1000 :GOTO 1760 1730 UNIT$="MICRO" : NUM=NUM*1000000! : GOTO 1760 1740 UNIT$="NANO" : NUM=NUM*1E+09 : GOTO 1760 1750 UNIT$="PICO" : NUM=NUM*1E+12 : GOTO 1760 1760 IF NUM>0 AND NUM<10 THEN NUM=INT(NUM*100+.5)/100 1770 IF NUM>=10 AND NUM<100 THEN NUM=INT(NUM*10+.5)/10 1780 IF NUM>=100 AND NUM <1000 THEN NUM=INT(NUM+.5) 1790 RETURN 1800 REM BANDSTOP.BAS 1810 REM 1820 CHAIN "FILTMENU" 1830 END