home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1979-12-31 | 12.6 KB | 264 lines |
- 10 CLS: PRINT "MODERN FILTER DESIGN PROGRAM V3.1.2M 4/14/86
- 20 PRINT " *********************************************
- 30 PRINT " * *
- 40 PRINT " * BY DR. ALLEN KATZ, CHAIRMAN *
- 50 PRINT " * DEPT ELECTRONICS ENGINEERING TECHNOLOGY *
- 60 PRINT " * TRENTON STATE COLLEGE, CN550 *
- 70 PRINT " * TRENTON, NEW JERSEY 8625 *
- 80 PRINT " * *
- 90 PRINT " * THE AUTHOR RESERVES RIGHTS TO THIS *
- 100 PRINT " * PROGRAM; HOWEVER, COPYING AND USE FOR *
- 110 PRINT " * EDUCATIONAL PURPOSES IS ENCOURAGED. *
- 120 PRINT " * *
- 130 PRINT " * PLEASE REPORTS ANY ERRORS OR PROBLEMS *
- 140 PRINT " * WITH THIS PROGRAM TO THE AUTHOR. *
- 150 PRINT " * TEL (609) 771 2487 *
- 160 PRINT " * *
- 170 PRINT " *********************************************
- 180 PRINT: PRINT: PRINT: DL=0: PI=4*ATN(1): P2=2*PI
- 190 DIM TP(20),C(20),L(20),CP(11,20),LP(11,20),M(20),K(20),E(9),B(10,5),T(8,5,5)
- 200 PRINT: INPUT "LOW PASS (L), HIGH PASS (H), BAND PASS (B), BAND STOP (BS)"; Q$
- 210 PRINT : INPUT "FREQUENCY IN (H)Z, (K)HZ, OR (M)HZ ="; A$
- 220 IF A$ = "H" THEN KF = 1 ELSE IF A$ = "K" THEN KF = 1000 ELSE IF A$ = "M" THEN KF = 1E+06 ELSE GOTO 210
- 230 RESTORE
- 240 INPUT "IMPEDANCE LEVEL = "; R: ZO=R
- 250 IF Q$="L" OR Q$="H" THEN 270 ELSE IF Q$="B" THEN 330 ELSE IF Q$="BS" THEN 2370 ELSE 200
- 260 REM ********************** LP & HP ********************************
- 270 PRINT: INPUT "CUT OFF FREQ "; FC: FC=FC*KF
- 280 INPUT "STOP BAND FREQ"; FS: FS=FS*KF
- 290 INPUT "STOP BAND ATTENUATION IN DB"; AS
- 300 IF Q$="L" THEN NS=FS/FC ELSE NS=FC/FS
- 310 PRINT "NORMALIZED CUT OFF FREQ"; NS: GOTO 400
- 320 REM ********************** BPF ************************************
- 330 PRINT: INPUT "CENTER FREQUENCY ="; F0: F0=F0*KF: W0=P2*F0
- 340 INPUT "BANDPASS WIDTH ="; FP: FP=FP*KF: WP=P2*FP
- 350 QL=F0/FP: INPUT "START OF STOP BAND ="; FS: FS=FS*KF
- 360 INPUT "STOP BAND ATTENUATION IN DB"; AS
- 370 FD=F0^2/FS: NS=ABS(FS-FD)/FP
- 380 PRINT: PRINT "QL ="; QL, "NORM FREQ RATIO ="; NS
- 390 REM **************** CALC OF # OF POLES **************************
- 400 PRINT: INPUT "BUTTERWORTH (B) OR TCHEBYCHEFF (T)"; B$: N=0
- 410 IF B$="T" THEN 430 ELSE IF B$="B" THEN 420 ELSE 400
- 420 N=N+1: AT=10*LOG(1+NS^(2*N))/LOG(10): IF AT>AS THEN 460 ELSE 420
- 430 INPUT "RIPPLE IN DB"; R: TP(0)=1: TP(1)=NS: RE=10^(R/10)-1
- 440 N=N+1:P=N:IF N>19 THEN GOTO 540 ELSE TP(N+1)=2*NS*TP(N)-TP(N-1)
- 450 AT=10*LOG(1+RE*TP(N+1)^2)/LOG(10): IF AT>AS THEN 460 ELSE 440
- 460 PRINT "NUMBER OF SECTION REQUIRED"; N: P=N: RP=R
- 470 REM ****************** LOAD BUTTERWORTH DATA *****************
- 480 FOR N=1 TO 10: Q=(-1)^N: IF Q<0 THEN AB=INT(N/2)+1 ELSE AB=N/2
- 490 FOR I=1 TO AB: READ B(N,I): NEXT I: NEXT N
- 500 REM ****************** LOAD TCHEBYCHEFF DATA *****************
- 510 FOR R=1 TO 8: FOR N=1 TO 5: FOR I=1 TO N
- 520 READ T(R,N,I): NEXT: NEXT: NEXT
- 530 IF B$="B" THEN 690
- 540 Q=(-1)^P: IF P>10 THEN PRINT "LARGEST VALUE 10": GOTO 200
- 550 IF Q>0 THEN P=P+1: PRINT "MUST USE ODD # FOR BAL TCH: P="; P
- 560 IF RP <=0.01 THEN R=1: RP=0.01: GOTO 650
- 570 IF RP <=0.1 THEN R=2: RP=0.1: GOTO 650
- 580 IF RP <=0.2 THEN R=3: RP=0.2: GOTO 650
- 590 IF RP <=0.28 THEN R=8: RP=0.28: GOTO 650
- 600 IF RP <=0.5 THEN R=4: RP=0.5: GOTO 650
- 610 IF RP <=1 THEN R=5: RP=1: GOTO 650
- 620 IF RP <=2 THEN R=6: RP=2: GOTO 650
- 630 IF RP <=3 THEN R=7: RP=3: GOTO 650
- 640 PRINT "RIPPLE EXCEEDS MAXIMUN LIMIT": GOTO 200
- 650 PRINT: PRINT "# POLES"; "="; P, "RIPPLE"; "="; RP: PRINT
- 660 N=(P+1)/2: FOR J=1 TO P: IF J<=N THEN I=J ELSE I=P+1-J
- 670 E(J)=T(R,N,I):NEXT:GOTO 730
- 680 REM *************** BUTTERWORTH CALC ********************
- 690 IF P>10 THEN PRINT "LARGEST VALUE 10": GOTO 200
- 700 Q=(-1)^P: IF Q<0 THEN AB=INT(P/2)+1 ELSE AB=P/2
- 710 FOR J=1 TO P: IF J<=AB THEN I=J ELSE I=P+1-J
- 720 E(J)=B(P,I):NEXT
- 730 IF Q$="H" THEN FOR I=1 TO P: E(I)= 1/E(I): NEXT
- 740 R=ZO
- 750 N=P: GOTO 1010
- 760 DATA 2,1.414,1,2,.765,1.848,.618,1.618,2,.518,1.414,1.932
- 770 DATA .445,1.247,1.802,2,.390,1.111,1.663,1.962,.347,1
- 780 DATA 1.532,1.879,2,.313,.908,1.414,1.782,1.975
- 790 REM ****************** DATA FOR TCHEBYCHEFF ****************
- 800 DATA .096,.6291,.9702,.7563,1.3049,1.5773,.7969,1.394
- 810 DATA 1.7481,1.6331,.8144,1.427,1.8043,1.7125,1.9057
- 820 DATA .3052,1.0315,1.1474,1.1468,1.3712,1.9750,1.1811
- 830 DATA 1.4228,2.0966,1.5733,1.1956,1.4425,2.1345,1.6167
- 840 DATA 2.2053,.4342,1.2275,1.1525,1.3394,1.3370,2.1660
- 850 DATA 1.3722,1.3781,2.2756,1.5001,1.386,1.3938,2.3093
- 860 DATA 1.5340,2.3728,.6986,1.5963,1.0967,1.7058,1.2296
- 870 DATA 2.5408,1.7372,1.2583,2.6381,1.3444,1.7504,1.2690
- 880 DATA 2.6678,1.3673,2.7239,1.0177,2.0236,.9941,2.1349
- 890 DATA 1.0911,3.0009,2.1664,1.1116,3.0934,1.1736,2.1797
- 900 DATA 1.1192,3.1215,1.1897,3.1747,1.5296,2.7107,.8327
- 910 DATA 2.8310,.8985,3.7827,2.8655,.9119,3.8780,.9535,2.8790
- 920 DATA .9171,3.9056,.9643,3.9598,1.9953,3.3487,.7117,3.4817
- 930 DATA .7618,4.5381,3.5182,.7723,4.6386,.8039,3.5340,.7760
- 940 DATA 4.6692,.8118,4.7272
- 950 REM ******************* DATA FOR .28 DB RIPPLE *******************
- 960 DATA 1.3451,1.1412,1.3451,1.146,1.513,1.513,1.1461,1.456
- 970 DATA 1.307,2.283,1.307,1.456,1.277,1.528,1.878,1.878,1.528
- 980 DATA 1.277,1.488,1.343,2.388,1.451,2.388,1.343,1.488,1.340
- 990 DATA 1.508,2.019,1.844,1.844,2.019,1.508,1.340,1.502,1.357
- 1000 DATA 2.420,1.481,2.480,1.481,2.420,1.357,1.502
- 1010 IF Q$="H" THEN 1130 ELSE IF Q$="BS" THEN 1240 ELSE IF Q$="B" THEN 1240
- 1020 PRINT "LOW PASS (CPLS)"
- 1030 FOR I=1 TO N STEP 2
- 1040 J=I+1:C(I)=E(I)/(P2*FC*R):PRINT "C";I;"= ";C(I)
- 1050 IF J<=N THEN L(J)=E(J)*R/(P2*FC): PRINT "L";J;"= ";L(J)
- 1060 NEXT
- 1070 PRINT "LOW PASS (LSCP)"
- 1080 FOR I=1 TO N STEP 2
- 1090 J=I+1:L(I)=E(I)*R/(P2*FC):PRINT "L";I;"= ";L(I)
- 1100 IF J<=N THEN C(J)=E(J)/(P2*FC*R): PRINT "C";J;"= ";C(J)
- 1110 NEXT
- 1120 GOTO 1230
- 1130 PRINT "HIGH PASS (LPCS)"
- 1140 FOR I=1 TO N STEP 2
- 1150 J=I+1:L(I)=E(I)*R/(P2*FC):PRINT "L";I;"= ";L(I)
- 1160 IF J<=N THEN C(J)=E(J)/(P2*FC*R):PRINT "C";J;"= ";C(J)
- 1170 NEXT
- 1180 PRINT "HIGH PASS (CSLP)"
- 1190 FOR I=1 TO N STEP 2
- 1200 J=I+1:C(I)=E(I)/(P2*FC*R):PRINT "C";I;"= ";C(I)
- 1210 IF J<=N THEN L(J)=E(J)*R/(P2*FC):PRINT "L";J;"= ";L(J)
- 1220 NEXT
- 1230 INPUT"WANT TO CALCULATE ANOTHER FILTER Y OR N ";Y$:IF Y$="Y" THEN 200 ELSE END
- 1240 PRINT: FOR I=1 TO N
- 1250 IF ((-1)^I)<0 THEN C(I)=E(I): CP(1,I)=C(I)/(R*FP*P2): LP(1,I)=1/(W0^2*CP(1,I)): GOTO 1270
- 1260 L(I)=E(I):LP(1,I)=R*L(I)/WP:CP(1,I)=1/(W0^2*LP(1,I))
- 1270 NEXT
- 1280 IF Q$="BS" THEN 2460
- 1290 PRINT: PRINT "ELEMENTS PROTOTYPE #1 (CPLP/CSLS/CPLP)": PRINT
- 1300 FOR I=1 TO N
- 1310 PRINT "C"; I; "="; CP(1,I), "L"; I; "="; LP(1,I): NEXT I
- 1320 REM ****************** CALC MUTUAL INDUCTANCE ***************
- 1330 IF L(1)=0 THEN L(1)=C(1)
- 1340 FOR I=1 TO N-1
- 1350 IF C(I)=0 THEN C(I)=L(I): L(I+1)=C(I+1)
- 1360 M(I)=(L(1)/W0)*SQR(1/(C(I)*L(I+1))): NEXT I
- 1370 PRINT: INPUT "PROTOTYPE # (2-6, NEW, END) ="; P$
- 1380 IF P$="2" THEN 1440
- 1390 IF P$="3" THEN 1520
- 1400 IF P$="4" THEN 1900
- 1410 IF P$="5" THEN 2150
- 1420 IF P$="6" THEN 1770
- 1430 IF P$="NEW" THEN 200 ELSE IF P$="END" THEN END ELSE PRINT "DON'T UNDERSTAND ?":GOTO 1370
- 1440 PRINT: PRINT "ELEMENT VALUES FOR PROTOTYPE #2 (CSLS/CPLP/CSLS)"
- 1450 PRINT: FOR I=1 TO N
- 1460 IF ((-1)^I)<0 THEN CP(2,I)=1/(W0*QL*R*C(I)): LP(2,I)=R*C(I)/WP: PRINT "C"; I; "="; CP(2,I), "L"; I; "="; LP(2,I): GOTO 1480
- 1470 CP(2,I)=L(I)/(R*WP): LP(2,I)=R/(W0*QL*L(I)): PRINT "C"; I; "="; CP(2,I), "L"; I; "="; LP(2,I)
- 1480 NEXT
- 1490 PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
- 1500 IF Q$="YES" THEN 1370 ELSE IF Q$="CHANGE" THEN 2310 ELSE IF Q$="NEW" THEN 200 ELSE IF Q$="END" THEN END ELSE GOTO 1490
- 1510 REM *******************************************************
- 1520 PRINT:PRINT "ELEMENT VALUES FOR PROTOTYPE #3 (CSTCP/TCS/TCP)"
- 1530 PRINT: IF N<3 THEN PRINT "TOO SMALL": GOTO 1370
- 1540 CP(3,1)=1/(W0*QL*R*C(1)): PRINT "C 1 ="; CP(3,1)
- 1550 LP(3,2)=2*R/(W0*QL*L(2)): LP(3,1)=R*C(1)/WP+LP(3,2): K(1)=SQR(LP(3,2)/LP(3,1)): CP(3,2)=L(2)/(R*WP)
- 1560 PRINT "T 1 : L 1 ="; LP(3,1), "L 2 ="; LP(3,2)
- 1570 PRINT SPC(6); "K 1 ="; K(1), "C 2 ="; CP(3,2)
- 1580 IF N=3 THEN GOTO 1680
- 1590 FOR I=3 TO N-1
- 1600 IF ((-1)^I)<0 THEN GOTO 1640
- 1610 LP(3,I)=2*R/(W0*QL*L(I)): LP(3,I-1)=R*C(I-1)/(2*WP)+LP(3,I): K(I-1)=SQR(LP(3,I)/LP(3,I-1)): CP(3,I)=L(I)/(R*WP)
- 1620 PRINT "T"; I-1; ": L"; I-1; "="; LP(3,I-1), "L"; I; "="; LP(3,I)
- 1630 PRINT SPC(6); "K"; I-1; "="; K(I-1), "C"; I; "="; CP(3,I): GOTO 1670
- 1640 LP(3,I)=R*C(I)/(2*WP)+LP(3,I-1): CP(3,I)=1/(W0*QL*R*C(I)): K(I-1)=SQR(LP(3,I-1)/LP(3,I))
- 1650 PRINT "T"; I-1; ": L"; I-1; "="; LP(3,I-1), "L"; I; "="; LP(3,I)
- 1660 PRINT SPC(6); "K"; I-1; "="; K(I-1), "C"; I; "="; CP(3,I)
- 1670 NEXT
- 1680 IF ((-1)^N)<0 THEN GOTO 1720
- 1690 LP(3,N)=R/(W0*QL*L(N)): LP(3,N-1)=R*C(N-1)/(2*WP)+LP(3,N): K(N-1)=SQR(LP(3,N)/LP(3,N-1)): CP(3,N)=L(N)/(R*WP)
- 1700 PRINT "T"; N-1; ": L"; N-1; "="; LP(3,N-1), "L"; N; "="; LP(3,N)
- 1710 PRINT SPC(6); "K"; N-1; "="; K(N-1), "C"; N; "="; CP(3,N): GOTO 1750
- 1720 LP(3,N)=R*C(N)/WP+LP(3,N-1): CP(3,N)=1/(W0*QL*R*C(N)): K(N-1)=SQR(LP(3,N-1)/LP(3,N))
- 1730 PRINT "T"; N-1; ": L"; N-1; "="; LP(3,N-1), "L"; N; "="; LP(3,N)
- 1740 PRINT SPC(6); "K"; N-1; "="; K(N-1), "C"; N; "="; CP(3,N)
- 1750 PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
- 1760 IF Q$="YES" THEN 1370 ELSE IF Q$="CHANGE" THEN 2310 ELSE IF Q$="NEW" THEN 200 ELSE IF Q$="END" THEN END ELSE GOTO 1750
- 1770 PRINT: PRINT "ELEMENT VALUES FOR PROTOTYPE #6 (CPLP/CS/CPLP)"
- 1780 CP(7,1)=L(1)/(R*WP)-M(1)/R: LP(7,1)=R/(W0*QL*L(1))
- 1790 PRINT: PRINT "C 1 ="; CP(7,1), "L 1 ="; LP(7,1): IF N<3 THEN 1850
- 1800 FOR I=2 TO 2*N-4 STEP 2
- 1810 CP(7,I)=M(I/2)/R: PRINT "C"; I; "="; CP(7,I)
- 1820 CP(7,I+1)=L(1)/(R*WP)-M(I/2)/R-M(I/2+1)/R: LP(7,I+1)=LP(7,1)
- 1830 PRINT "C"; I+1; "="; CP(7,I+1), "L"; I+1; "="; LP(7,I+1)
- 1840 NEXT
- 1850 CP(7,2*N-2)=M(N-1)/R: CP(7,2*N-1)=L(1)/(R*WP)-M(N-1)/R: LP(7,2*N-1)=LP(7,1)
- 1860 PRINT "C"; 2*N-2; "="; CP(7,2*N-2)
- 1870 PRINT "C"; 2*N-1; "="; CP(7,2*N-1), "L"; 2*N-1; "="; LP(7,2*N-1)
- 1880 PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
- 1890 IF Q$="YES" THEN 1370 ELSE IF Q$="CHANGE" THEN 2310 ELSE IF Q$="NEW" THEN 1520 ELSE IF Q$="END" THEN END ELSE GOTO 1880
- 1900 PRINT: PRINT "ELEMENT VALUES FOR PROTOTYPE #4 (CPTCS/TCP/TCS)"
- 1910 PRINT: IF N<3 THEN PRINT "TOO SMALL": GOTO 1370
- 1920 CP(4,1)=C(1)/(R*WP): PRINT "C 1 ="; CP(4,1)
- 1930 LP(4,1)=R/(W0*QL*C(1)): LP(4,2)=R*L(2)/(2*WP)+LP(4,1): K(1)=SQR(LP(4,1)/LP(4,2)): CP(4,2)=1/(W0*QL*R*L(2))
- 1940 PRINT "T 1 : L 1 ="; LP(4,1), "L 2 ="; LP(4,2)
- 1950 PRINT SPC(6); "K 1 ="; K(1), "C 2 ="; CP(4,2)
- 1960 IF N=3 THEN GOTO 2060
- 1970 FOR I=3 TO N-1
- 1980 IF ((-1)^I)>0 THEN GOTO 2020
- 1990 LP(4,I)=2*R/(W0*QL*C(I)): LP(4,I-1)=R*L(I-1)/(2*WP)+LP(4,I): K(I-1)=SQR(LP(4,I-1)/LP(4,I)): CP(4,I)=C(I)/(R*WP)
- 2000 PRINT "T"; I-1; ": L"; I-1; "="; LP(4,I-1), "L"; I; "="; LP(4,I)
- 2010 PRINT SPC(6); "K"; I-1; "="; K(I-1), "C"; I; "="; CP(4,I): GOTO 2050
- 2020 LP(4,I)=R*L(I)/(2*WP)+LP(4,I-1): CP(4,I)=1/(W0*QL*R*L(I)): K(I-1)=SQR(LP(4,I)/LP(4,I-1))
- 2030 PRINT "T"; I-1; ": L"; I-1; "="; LP(4,I-1), "L"; I; "="; LP(4,I)
- 2040 PRINT SPC(6); "K"; I-1; "="; K(I-1), "C"; I; "="; CP(4,I)
- 2050 NEXT
- 2060 IF ((-1)^N)>0 THEN GOTO 2100
- 2070 LP(4,N)=R/(W0*QL*C(N)): LP(4,N-1)=R*L(N-1)/(2*WP)+LP(4,N): K(N-1)=SQR(LP(4,N)/LP(4,N-1)): CP(4,N)=C(N)/(R*WP)
- 2080 PRINT "T"; N-1; ": L"; N-1; "="; LP(4,N-1), "L"; N; "="; LP(4,N)
- 2090 PRINT SPC(6); "K"; N-1; "="; K(N-1), "C"; N; "="; CP(4,N): GOTO 2130
- 2100 LP(4,N)=R*L(N)/WP+LP(4,N-1)/2: CP(4,N)=1/(W0*QL*R*L(N)): K(N-1)=SQR(LP(4,N-1)/LP(4,N))
- 2110 PRINT "T"; N-1; ": L"; N-1; "="; LP(4,N-1), "L"; N; "="; LP(4,N)
- 2120 PRINT SPC(6); "K"; N-1; "="; K(N-1), "C"; N; "="; CP(4,N)
- 2130 PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
- 2140 IF Q$="YES" THEN 1370 ELSE IF Q$="CHANGE" THEN 2310 ELSE IF Q$="NEW" THEN 1520 ELSE IF Q$="END" THEN END ELSE GOTO 1750
- 2150 PRINT: PRINT "ELEMENT VALUES FOR PROTOTYPE #5 (CST/CST/CST)"
- 2160 PRINT: IF N<2 THEN PRINT "TOO SMALL": GOTO 1370
- 2170 CP(5,1)=1/(W0*QL*R*L(1)): LP(5,1)=R*L(1)/WP
- 2180 CP(5,N)=CP(5,1): LP(5,N)=LP(5,1)
- 2190 PRINT "C 1 ="; CP(5,1)
- 2200 IF N=2 THEN GOTO 2260 ELSE LI=R*L(1)/(2*WP)
- 2210 FOR I=2 TO N-1: LP(5,I)=LI
- 2220 IF ((-1)^I)<0 THEN M(I-1)=L(1)*SQR(1/(C(I-1)*L(I)))/W0 ELSE M(I-1)=L(1)*SQR(1/(L(I-1)*C(I)))/W0
- 2230 PRINT "T"; I-1; ":", "L"; I-1; "="; LP(5,I-1), "L"; I; "="; LP(5,I)
- 2240 PRINT "M"; I-1; "="; M(I-1)
- 2250 NEXT
- 2260 IF ((-1)^I)<0 THEN M(N-1)=L(1)*SQR(1/(C(N-1)*L(N)))/W0 ELSE M(N-1)=L(1)*SQR(1/(L(N-1)*C(N)))/W0
- 2270 PRINT "T"; N-1; ":", "L"; N-1; "="; LP(5,N-1), "L"; N; "="; LP(5,N)
- 2280 PRINT "M"; N-1; "="; M(N-1): PRINT "C"; N; "="; CP(5,N)
- 2290 PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
- 2300 IF Q$="YES" THEN 1370 ELSE IF Q$="CHANGE" THEN 2310 ELSE IF Q$="NEW" THEN 1520 ELSE IF Q$="END" THEN END ELSE GOTO 2300
- 2310 INPUT "WANT TO CHANGE Z0 (Y/N)"; Q$: IF Q$="Y" THEN INPUT "IMPEDANCE LEVEL ="; R
- 2320 INPUT "WANT TO CHANGE BANDPASS"; Q$: IF Q$="Y" THEN INPUT "BANDPASS WIDTH ="; FP: FP=FP*KF: WP=P2*FP
- 2330 PRINT: FOR I=1 TO N
- 2340 IF ((-1)^I)<0 THEN CP(1,I)=C(I)/(R*FP*P2): LP(1,I)=1/(W0^2*CP(1,I)): GOTO 2360
- 2350 LP(1,I)=R*L(I)/WP: CP(1,I)=1/(W0^2*LP(1,I))
- 2360 NEXT: GOTO 1370
- 2370 REM ******************** BAND STOP FILTER ******************
- 2380 PRINT:INPUT "CENTER FREQUENCY =";F0: F0=F0*KF: W0=P2*F0
- 2390 INPUT "BANDSTOP WIDTH =";FP: FP=FP*KF: WP=FP*P2
- 2400 QL=F0/FP: INPUT "START OF PASS BAND =";FS:FS=FS*KF
- 2410 INPUT "STOP BAND ATTENUATION IN DB";AS
- 2420 FD=F0^2/FS: NS=ABS(FS-FD)/FP
- 2430 PRINT: PRINT "QL =";QL, "NORM FREQ RATIO =";NS
- 2440 IF QL<20 THEN PRINT: PRINT "STOP BAND FILTER TOO WIDE FOR TRANSFORM; USE CASCADED LP AND HP FILTERS"
- 2450 GOTO 400
- 2460 FOR I=1 TO N
- 2470 IF ((-1)^I) <0 THEN C(I)=CP(1,I)*(R*FP*P2): D(I)=C(I)/QL:GOTO 2530
- 2480 IF CS(I)>0 THEN D(I)=(D(I)*CS(I))/(D(I)+CS(I))
- 2490 L(I)=LP(1,I)*(WP/R): LE(I)=L(I)*QL
- 2500 CE(I)=1/LE(I)
- 2510 CA(I) =1/(W0^2*CP(1,I))
- 2520 CD(I)=QL*CA(I):CK(I)=1/CD(I)
- 2530 NEXT I
- 2540 FOR I=1 TO N
- 2550 UD(I)=D(I)/(R*WP):LS(I)=LE(I)*R/WP:CS(I)=CE(I)/(R*WP)
- 2560 CF(I)=CD(I)/(R*WP):LF(I)=R*CF(I)/WP
- 2570 IF ((-1)^I) <0 THEN PRINT :PRINT "CAPACITOR IN SERIES C";I"=";UD(I):GOTO 2620
- 2580 PRINT:PRINT "CAPACITOR AND INDUCTOR PARRALLEL COMBO."
- 2590 PRINT:PRINT "C";I"="CF(I),"L";I"=";LF(I)
- 2600 IF CS(I)=0 THEN 2620
- 2610 PRINT:PRINT "C";I+1"=";CS,"L";I+1"=";LS
- 2620 NEXT I
- 2630 GOTO 200
-