home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / design1 / filter.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1979-12-31  |  12.6 KB  |  264 lines

  1. 10  CLS: PRINT "MODERN FILTER DESIGN PROGRAM V3.1.2M 4/14/86
  2. 20  PRINT "      *********************************************
  3. 30  PRINT "      *                                           *
  4. 40  PRINT "      *  BY DR. ALLEN KATZ, CHAIRMAN              *
  5. 50  PRINT "      *  DEPT ELECTRONICS ENGINEERING TECHNOLOGY  *
  6. 60  PRINT "      *  TRENTON STATE COLLEGE, CN550             *
  7. 70  PRINT "      *  TRENTON, NEW JERSEY 8625                 *
  8. 80  PRINT "      *                                           *
  9. 90  PRINT "      *  THE AUTHOR RESERVES RIGHTS TO THIS       *
  10. 100  PRINT "      *  PROGRAM; HOWEVER, COPYING AND USE FOR    *
  11. 110  PRINT "      *  EDUCATIONAL PURPOSES IS ENCOURAGED.      *
  12. 120  PRINT "      *                                           *
  13. 130  PRINT "      *  PLEASE REPORTS ANY ERRORS OR PROBLEMS    *
  14. 140  PRINT "      *  WITH THIS PROGRAM TO THE AUTHOR.         *
  15. 150  PRINT "      *  TEL (609) 771 2487                       *
  16. 160  PRINT "      *                                           *
  17. 170  PRINT "      *********************************************
  18. 180  PRINT: PRINT: PRINT: DL=0: PI=4*ATN(1): P2=2*PI
  19. 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) 
  20. 200  PRINT: INPUT "LOW PASS (L), HIGH PASS (H), BAND PASS (B), BAND STOP (BS)"; Q$
  21. 210  PRINT : INPUT "FREQUENCY IN (H)Z, (K)HZ, OR (M)HZ ="; A$
  22. 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
  23. 230  RESTORE
  24. 240  INPUT "IMPEDANCE LEVEL = "; R: ZO=R
  25. 250  IF Q$="L" OR Q$="H" THEN 270 ELSE IF Q$="B" THEN 330 ELSE IF Q$="BS" THEN 2370 ELSE 200
  26. 260  REM ********************** LP & HP ********************************
  27. 270  PRINT: INPUT "CUT OFF FREQ "; FC: FC=FC*KF
  28. 280  INPUT "STOP BAND FREQ"; FS: FS=FS*KF
  29. 290  INPUT "STOP BAND ATTENUATION IN DB"; AS
  30. 300  IF Q$="L" THEN NS=FS/FC ELSE NS=FC/FS
  31. 310  PRINT "NORMALIZED CUT OFF FREQ"; NS: GOTO 400
  32. 320  REM ********************** BPF ************************************
  33. 330  PRINT: INPUT "CENTER FREQUENCY ="; F0: F0=F0*KF: W0=P2*F0
  34. 340  INPUT "BANDPASS WIDTH ="; FP: FP=FP*KF: WP=P2*FP
  35. 350  QL=F0/FP: INPUT "START OF STOP BAND ="; FS: FS=FS*KF
  36. 360  INPUT "STOP BAND ATTENUATION IN DB"; AS
  37. 370  FD=F0^2/FS: NS=ABS(FS-FD)/FP
  38. 380  PRINT: PRINT "QL ="; QL, "NORM FREQ RATIO ="; NS
  39. 390  REM **************** CALC OF # OF POLES **************************
  40. 400  PRINT: INPUT "BUTTERWORTH (B) OR TCHEBYCHEFF (T)"; B$: N=0
  41. 410  IF B$="T" THEN 430 ELSE IF B$="B" THEN 420 ELSE 400
  42. 420  N=N+1: AT=10*LOG(1+NS^(2*N))/LOG(10): IF AT>AS THEN 460 ELSE 420
  43. 430  INPUT "RIPPLE IN DB"; R: TP(0)=1: TP(1)=NS: RE=10^(R/10)-1
  44. 440  N=N+1:P=N:IF N>19 THEN GOTO 540 ELSE  TP(N+1)=2*NS*TP(N)-TP(N-1)
  45. 450  AT=10*LOG(1+RE*TP(N+1)^2)/LOG(10): IF AT>AS THEN 460 ELSE 440
  46. 460  PRINT "NUMBER OF SECTION REQUIRED"; N: P=N: RP=R
  47. 470  REM ****************** LOAD BUTTERWORTH DATA *****************
  48. 480  FOR N=1 TO 10: Q=(-1)^N: IF Q<0 THEN AB=INT(N/2)+1 ELSE AB=N/2
  49. 490  FOR I=1 TO AB: READ B(N,I): NEXT I: NEXT N
  50. 500  REM ****************** LOAD TCHEBYCHEFF DATA *****************
  51. 510  FOR R=1 TO 8: FOR N=1 TO 5: FOR I=1 TO N
  52. 520  READ T(R,N,I): NEXT: NEXT: NEXT
  53. 530  IF B$="B" THEN 690
  54. 540  Q=(-1)^P: IF P>10 THEN PRINT "LARGEST VALUE 10": GOTO 200
  55. 550  IF Q>0 THEN P=P+1: PRINT "MUST USE ODD # FOR BAL TCH: P="; P
  56. 560  IF RP <=0.01 THEN R=1: RP=0.01: GOTO 650
  57. 570  IF RP <=0.1 THEN R=2: RP=0.1: GOTO 650
  58. 580  IF RP <=0.2 THEN R=3: RP=0.2: GOTO 650
  59. 590  IF RP <=0.28 THEN R=8: RP=0.28: GOTO 650
  60. 600  IF RP <=0.5 THEN R=4: RP=0.5: GOTO 650
  61. 610  IF RP <=1 THEN R=5: RP=1: GOTO 650
  62. 620  IF RP <=2 THEN R=6: RP=2: GOTO 650
  63. 630  IF RP <=3 THEN R=7: RP=3: GOTO 650
  64. 640  PRINT "RIPPLE EXCEEDS MAXIMUN LIMIT": GOTO 200
  65. 650  PRINT: PRINT "# POLES"; "="; P, "RIPPLE"; "="; RP: PRINT
  66. 660  N=(P+1)/2: FOR J=1 TO P: IF J<=N THEN I=J ELSE I=P+1-J
  67. 670  E(J)=T(R,N,I):NEXT:GOTO 730
  68. 680  REM *************** BUTTERWORTH CALC ********************
  69. 690  IF P>10 THEN PRINT "LARGEST VALUE 10": GOTO 200
  70. 700  Q=(-1)^P: IF Q<0 THEN AB=INT(P/2)+1 ELSE AB=P/2
  71. 710  FOR J=1 TO P: IF J<=AB THEN I=J ELSE I=P+1-J
  72. 720  E(J)=B(P,I):NEXT
  73. 730  IF Q$="H" THEN FOR I=1 TO P: E(I)= 1/E(I): NEXT
  74. 740  R=ZO
  75. 750  N=P: GOTO 1010
  76. 760  DATA 2,1.414,1,2,.765,1.848,.618,1.618,2,.518,1.414,1.932
  77. 770  DATA .445,1.247,1.802,2,.390,1.111,1.663,1.962,.347,1
  78. 780  DATA 1.532,1.879,2,.313,.908,1.414,1.782,1.975
  79. 790  REM ****************** DATA FOR TCHEBYCHEFF ****************
  80. 800  DATA .096,.6291,.9702,.7563,1.3049,1.5773,.7969,1.394
  81. 810  DATA 1.7481,1.6331,.8144,1.427,1.8043,1.7125,1.9057
  82. 820  DATA .3052,1.0315,1.1474,1.1468,1.3712,1.9750,1.1811
  83. 830  DATA 1.4228,2.0966,1.5733,1.1956,1.4425,2.1345,1.6167
  84. 840  DATA 2.2053,.4342,1.2275,1.1525,1.3394,1.3370,2.1660
  85. 850  DATA 1.3722,1.3781,2.2756,1.5001,1.386,1.3938,2.3093
  86. 860  DATA 1.5340,2.3728,.6986,1.5963,1.0967,1.7058,1.2296
  87. 870  DATA 2.5408,1.7372,1.2583,2.6381,1.3444,1.7504,1.2690
  88. 880  DATA 2.6678,1.3673,2.7239,1.0177,2.0236,.9941,2.1349
  89. 890  DATA 1.0911,3.0009,2.1664,1.1116,3.0934,1.1736,2.1797
  90. 900  DATA 1.1192,3.1215,1.1897,3.1747,1.5296,2.7107,.8327
  91. 910  DATA 2.8310,.8985,3.7827,2.8655,.9119,3.8780,.9535,2.8790
  92. 920  DATA .9171,3.9056,.9643,3.9598,1.9953,3.3487,.7117,3.4817
  93. 930  DATA .7618,4.5381,3.5182,.7723,4.6386,.8039,3.5340,.7760
  94. 940  DATA 4.6692,.8118,4.7272
  95. 950  REM ******************* DATA FOR .28 DB RIPPLE *******************
  96. 960  DATA 1.3451,1.1412,1.3451,1.146,1.513,1.513,1.1461,1.456 
  97. 970  DATA 1.307,2.283,1.307,1.456,1.277,1.528,1.878,1.878,1.528
  98. 980  DATA 1.277,1.488,1.343,2.388,1.451,2.388,1.343,1.488,1.340
  99. 990  DATA 1.508,2.019,1.844,1.844,2.019,1.508,1.340,1.502,1.357
  100. 1000  DATA 2.420,1.481,2.480,1.481,2.420,1.357,1.502
  101. 1010  IF Q$="H" THEN 1130 ELSE IF Q$="BS" THEN 1240 ELSE IF Q$="B" THEN 1240
  102. 1020  PRINT "LOW PASS (CPLS)"
  103. 1030  FOR I=1 TO N STEP 2
  104. 1040  J=I+1:C(I)=E(I)/(P2*FC*R):PRINT "C";I;"= ";C(I)
  105. 1050  IF J<=N THEN L(J)=E(J)*R/(P2*FC): PRINT "L";J;"= ";L(J)
  106. 1060  NEXT
  107. 1070  PRINT  "LOW PASS (LSCP)"
  108. 1080  FOR I=1 TO N STEP 2
  109. 1090  J=I+1:L(I)=E(I)*R/(P2*FC):PRINT "L";I;"= ";L(I)
  110. 1100  IF J<=N THEN C(J)=E(J)/(P2*FC*R): PRINT "C";J;"= ";C(J)
  111. 1110  NEXT
  112. 1120  GOTO 1230
  113. 1130  PRINT "HIGH PASS (LPCS)"
  114. 1140  FOR I=1 TO N STEP 2
  115. 1150  J=I+1:L(I)=E(I)*R/(P2*FC):PRINT "L";I;"= ";L(I)
  116. 1160  IF J<=N THEN C(J)=E(J)/(P2*FC*R):PRINT "C";J;"= ";C(J)
  117. 1170  NEXT
  118. 1180  PRINT "HIGH PASS (CSLP)"
  119. 1190  FOR I=1 TO N STEP 2
  120. 1200  J=I+1:C(I)=E(I)/(P2*FC*R):PRINT "C";I;"= ";C(I)
  121. 1210  IF J<=N THEN L(J)=E(J)*R/(P2*FC):PRINT "L";J;"= ";L(J)
  122. 1220  NEXT
  123. 1230  INPUT"WANT TO CALCULATE ANOTHER FILTER Y OR N ";Y$:IF Y$="Y" THEN 200 ELSE END
  124. 1240  PRINT: FOR I=1 TO N
  125. 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
  126. 1260  L(I)=E(I):LP(1,I)=R*L(I)/WP:CP(1,I)=1/(W0^2*LP(1,I))
  127. 1270  NEXT
  128. 1280  IF Q$="BS" THEN 2460
  129. 1290  PRINT: PRINT "ELEMENTS PROTOTYPE #1 (CPLP/CSLS/CPLP)": PRINT
  130. 1300  FOR I=1 TO N
  131. 1310  PRINT "C"; I; "="; CP(1,I), "L"; I; "="; LP(1,I): NEXT I
  132. 1320  REM ****************** CALC MUTUAL INDUCTANCE ***************
  133. 1330  IF L(1)=0 THEN L(1)=C(1)
  134. 1340  FOR I=1 TO N-1
  135. 1350  IF C(I)=0 THEN C(I)=L(I): L(I+1)=C(I+1)
  136. 1360  M(I)=(L(1)/W0)*SQR(1/(C(I)*L(I+1))): NEXT I
  137. 1370  PRINT: INPUT "PROTOTYPE # (2-6, NEW, END) ="; P$
  138. 1380  IF P$="2" THEN 1440
  139. 1390  IF P$="3" THEN 1520
  140. 1400  IF P$="4" THEN 1900
  141. 1410  IF P$="5" THEN 2150
  142. 1420  IF P$="6" THEN 1770
  143. 1430  IF P$="NEW" THEN 200 ELSE IF P$="END" THEN END ELSE PRINT "DON'T UNDERSTAND ?":GOTO 1370
  144. 1440  PRINT: PRINT "ELEMENT VALUES FOR PROTOTYPE #2 (CSLS/CPLP/CSLS)"
  145. 1450  PRINT: FOR I=1 TO N
  146. 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
  147. 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)
  148. 1480  NEXT
  149. 1490  PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
  150. 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
  151. 1510  REM *******************************************************
  152. 1520  PRINT:PRINT "ELEMENT VALUES FOR PROTOTYPE #3 (CSTCP/TCS/TCP)"
  153. 1530  PRINT: IF N<3 THEN PRINT "TOO SMALL": GOTO 1370
  154. 1540  CP(3,1)=1/(W0*QL*R*C(1)): PRINT "C 1 ="; CP(3,1)
  155. 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)
  156. 1560  PRINT "T 1 : L 1 ="; LP(3,1), "L 2 ="; LP(3,2)
  157. 1570  PRINT SPC(6); "K 1 ="; K(1), "C 2 ="; CP(3,2)
  158. 1580  IF N=3 THEN GOTO 1680
  159. 1590  FOR I=3 TO N-1
  160. 1600  IF ((-1)^I)<0 THEN GOTO 1640
  161. 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)
  162. 1620  PRINT "T"; I-1; ": L"; I-1; "="; LP(3,I-1), "L"; I; "="; LP(3,I)
  163. 1630  PRINT SPC(6); "K"; I-1; "="; K(I-1), "C"; I; "="; CP(3,I): GOTO 1670
  164. 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))
  165. 1650  PRINT "T"; I-1; ": L"; I-1; "="; LP(3,I-1), "L"; I; "="; LP(3,I)
  166. 1660  PRINT SPC(6); "K"; I-1; "="; K(I-1), "C"; I; "="; CP(3,I)
  167. 1670  NEXT
  168. 1680  IF ((-1)^N)<0 THEN GOTO 1720
  169. 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)
  170. 1700  PRINT "T"; N-1; ": L"; N-1; "="; LP(3,N-1), "L"; N; "="; LP(3,N)
  171. 1710  PRINT SPC(6); "K"; N-1; "="; K(N-1), "C"; N; "="; CP(3,N): GOTO 1750
  172. 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))
  173. 1730  PRINT "T"; N-1; ": L"; N-1; "="; LP(3,N-1), "L"; N; "="; LP(3,N)
  174. 1740  PRINT SPC(6); "K"; N-1; "="; K(N-1), "C"; N; "="; CP(3,N)
  175. 1750  PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
  176. 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
  177. 1770  PRINT: PRINT "ELEMENT VALUES FOR PROTOTYPE #6 (CPLP/CS/CPLP)"
  178. 1780  CP(7,1)=L(1)/(R*WP)-M(1)/R: LP(7,1)=R/(W0*QL*L(1))
  179. 1790  PRINT: PRINT "C 1 ="; CP(7,1), "L 1 ="; LP(7,1): IF N<3 THEN 1850
  180. 1800  FOR I=2 TO 2*N-4 STEP 2
  181. 1810  CP(7,I)=M(I/2)/R: PRINT "C"; I; "="; CP(7,I)
  182. 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)
  183. 1830  PRINT "C"; I+1; "="; CP(7,I+1), "L"; I+1; "="; LP(7,I+1)
  184. 1840  NEXT
  185. 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)
  186. 1860  PRINT "C"; 2*N-2; "="; CP(7,2*N-2)
  187. 1870  PRINT "C"; 2*N-1; "="; CP(7,2*N-1), "L"; 2*N-1; "="; LP(7,2*N-1)
  188. 1880  PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
  189. 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
  190. 1900  PRINT: PRINT "ELEMENT VALUES FOR PROTOTYPE #4 (CPTCS/TCP/TCS)"
  191. 1910  PRINT: IF N<3 THEN PRINT "TOO SMALL": GOTO 1370
  192. 1920  CP(4,1)=C(1)/(R*WP): PRINT "C 1 ="; CP(4,1)
  193. 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))
  194. 1940  PRINT "T 1 : L 1 ="; LP(4,1), "L 2 ="; LP(4,2)
  195. 1950  PRINT SPC(6); "K 1 ="; K(1), "C 2 ="; CP(4,2)
  196. 1960  IF N=3 THEN GOTO 2060
  197. 1970  FOR I=3 TO N-1
  198. 1980  IF ((-1)^I)>0 THEN GOTO 2020
  199. 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)
  200. 2000  PRINT "T"; I-1; ": L"; I-1; "="; LP(4,I-1), "L"; I; "="; LP(4,I)
  201. 2010  PRINT SPC(6); "K"; I-1; "="; K(I-1), "C"; I; "="; CP(4,I): GOTO 2050
  202. 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))
  203. 2030  PRINT "T"; I-1; ": L"; I-1; "="; LP(4,I-1), "L"; I; "="; LP(4,I)
  204. 2040  PRINT SPC(6); "K"; I-1; "="; K(I-1), "C"; I; "="; CP(4,I)
  205. 2050  NEXT
  206. 2060  IF ((-1)^N)>0 THEN GOTO 2100
  207. 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)
  208. 2080  PRINT "T"; N-1; ": L"; N-1; "="; LP(4,N-1), "L"; N; "="; LP(4,N)
  209. 2090  PRINT SPC(6); "K"; N-1; "="; K(N-1), "C"; N; "="; CP(4,N): GOTO 2130
  210. 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))
  211. 2110  PRINT "T"; N-1; ": L"; N-1; "="; LP(4,N-1), "L"; N; "="; LP(4,N)
  212. 2120  PRINT SPC(6); "K"; N-1; "="; K(N-1), "C"; N; "="; CP(4,N)
  213. 2130  PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
  214. 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
  215. 2150  PRINT: PRINT "ELEMENT VALUES FOR PROTOTYPE #5 (CST/CST/CST)"
  216. 2160  PRINT: IF N<2 THEN PRINT "TOO SMALL": GOTO 1370
  217. 2170  CP(5,1)=1/(W0*QL*R*L(1)): LP(5,1)=R*L(1)/WP
  218. 2180  CP(5,N)=CP(5,1): LP(5,N)=LP(5,1)
  219. 2190  PRINT "C 1 ="; CP(5,1)
  220. 2200  IF N=2 THEN GOTO 2260 ELSE LI=R*L(1)/(2*WP)
  221. 2210  FOR I=2 TO N-1: LP(5,I)=LI
  222. 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
  223. 2230  PRINT "T"; I-1; ":", "L"; I-1; "="; LP(5,I-1), "L"; I; "="; LP(5,I)
  224. 2240  PRINT "M"; I-1; "="; M(I-1)
  225. 2250  NEXT
  226. 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
  227. 2270  PRINT "T"; N-1; ":", "L"; N-1; "="; LP(5,N-1), "L"; N; "="; LP(5,N)
  228. 2280  PRINT "M"; N-1; "="; M(N-1): PRINT "C"; N; "="; CP(5,N)
  229. 2290  PRINT: INPUT "WANT TO TRY ANOTHER PROTOTYPE (YES, CHANGE, NEW OR END)"; Q$: PRINT
  230. 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
  231. 2310  INPUT "WANT TO CHANGE Z0 (Y/N)"; Q$: IF Q$="Y" THEN INPUT "IMPEDANCE LEVEL ="; R
  232. 2320  INPUT "WANT TO CHANGE BANDPASS"; Q$: IF Q$="Y" THEN INPUT "BANDPASS WIDTH ="; FP: FP=FP*KF: WP=P2*FP
  233. 2330  PRINT: FOR I=1 TO N
  234. 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 
  235. 2350  LP(1,I)=R*L(I)/WP: CP(1,I)=1/(W0^2*LP(1,I))
  236. 2360  NEXT: GOTO 1370
  237. 2370  REM ******************** BAND STOP FILTER ******************
  238. 2380  PRINT:INPUT "CENTER FREQUENCY =";F0: F0=F0*KF: W0=P2*F0
  239. 2390  INPUT "BANDSTOP WIDTH =";FP: FP=FP*KF: WP=FP*P2
  240. 2400  QL=F0/FP: INPUT "START OF PASS BAND =";FS:FS=FS*KF
  241. 2410  INPUT "STOP BAND ATTENUATION IN DB";AS
  242. 2420  FD=F0^2/FS: NS=ABS(FS-FD)/FP
  243. 2430  PRINT: PRINT "QL =";QL, "NORM FREQ RATIO =";NS
  244. 2440  IF QL<20 THEN PRINT: PRINT "STOP BAND FILTER TOO WIDE FOR TRANSFORM; USE CASCADED LP AND HP FILTERS"
  245. 2450  GOTO 400
  246. 2460  FOR I=1 TO N
  247. 2470  IF ((-1)^I) <0 THEN C(I)=CP(1,I)*(R*FP*P2): D(I)=C(I)/QL:GOTO 2530 
  248. 2480  IF CS(I)>0 THEN D(I)=(D(I)*CS(I))/(D(I)+CS(I))
  249. 2490  L(I)=LP(1,I)*(WP/R): LE(I)=L(I)*QL
  250. 2500  CE(I)=1/LE(I)
  251. 2510  CA(I) =1/(W0^2*CP(1,I))
  252. 2520  CD(I)=QL*CA(I):CK(I)=1/CD(I)
  253. 2530  NEXT I
  254. 2540  FOR I=1 TO N
  255. 2550  UD(I)=D(I)/(R*WP):LS(I)=LE(I)*R/WP:CS(I)=CE(I)/(R*WP)
  256. 2560  CF(I)=CD(I)/(R*WP):LF(I)=R*CF(I)/WP
  257. 2570  IF ((-1)^I) <0 THEN PRINT :PRINT "CAPACITOR IN SERIES C";I"=";UD(I):GOTO 2620
  258. 2580  PRINT:PRINT  "CAPACITOR AND INDUCTOR PARRALLEL COMBO."
  259. 2590  PRINT:PRINT "C";I"="CF(I),"L";I"=";LF(I)
  260. 2600  IF CS(I)=0 THEN 2620
  261. 2610  PRINT:PRINT "C";I+1"=";CS,"L";I+1"=";LS
  262. 2620  NEXT I
  263. 2630  GOTO 200
  264.