home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / eepub10 / tunedamp.bas < prev    next >
BASIC Source File  |  1986-06-02  |  10KB  |  304 lines

  1. 10  REM:PC DOS FIXES BY G.H. 6/2/86:LINE 1440 & 2910
  2. 19 CLS
  3. 20  PRINT "PLEASE SENT FIXES OR ENHANCEMENTS TO:"
  4. 21  PRINT "E.E. PUBLIC DOMAIN LIBRARY"
  5. 22  PRINT "36 IRENE LANE E."
  6. 23  PRINT "PLAINVIEW,11803,NY"
  7. 25 FOR I=1 TO 2000
  8. 26 NEXT I
  9. 27 I=0
  10. 100 'Program TUNEDAMP
  11. 110 'Ref: Jack Porter, "Multiple-Tuned Amplifiers",
  12. 120 ' r.f. design vol. 6, no. 1, pp. 38-48, Jan/Feb 1983
  13. 130 CLEAR
  14. 140 DEFINT I-J
  15. 150 DIM B(4,2), C(8), G(4,2), M(8), P(8), T$(21), Y(8,20), Y$(8)
  16. 160 FOR J1=1 TO 8: READ Y$(J1): NEXT J1
  17. 170 DATA "11", "21", "12", "22", "ia", "oa", "ib", "ob"
  18. 180 PI=3.14159: DP=10/LOG(10)
  19. 190 'Read transistor data in data statements beginning at line 3000
  20. 200 FOR J5=1 TO 21
  21. 210 READ T$(J5)
  22. 220 IF T$(J5)="***" THEN 260
  23. 230 FOR J1=1 TO 8
  24. 240 READ Y(J1,J5)
  25. 250 NEXT J1, J5
  26. 260 J5=J5-1
  27. 270 F1$="TUNED AMPLIFIERS"
  28. 280 F2$=CHR$(13)
  29. 290 F3$="Transistors"
  30. 300 F6$="Prototype element values"
  31. 310 F7$="Y\\= +#.###^^^^ +#.###^^^^j"
  32. 320 'Enter Am=0 for Butterworth filters, Am=-1 to enter prototype
  33. 330 ' values from the keyboard, e.g. for Bessel filters
  34. 340 CLS: PRINT F1$; TAB(60) DATE$: INPUT "N, Am(dB)"; N%, A1
  35. 350 IF N%<1 THEN 4000
  36. 360 I1=0: I3=0: A6=0: A7=0: R3=1
  37. 370 IF A1>=0 THEN 440
  38. 380 PRINT F6$
  39. 390 FOR J1=1 TO N%
  40. 400 PRINT J1;: INPUT P(J1)
  41. 410 NEXT J1
  42. 420 GOTO 720
  43. 430 'Calculate prototype element values for Butterworth and Chebyshev filters
  44. 440 FOR J1=1 TO N%
  45. 450 P(J1)=2*SIN((2*J1-1)*PI/(2*N%))
  46. 460 NEXT J1
  47. 470 IF A1=0 THEN 720
  48. 480 INPUT "Specify:  1. Ripple BW   2. 3 dB BW"; I3
  49. 490 A2=EXP(A1/DP): A3=2
  50. 500 B2=LOG(1+2/(SQR(A2)-1))/2
  51. 510 X1=EXP(B2/N%)
  52. 520 G1=(X1-1/X1)/2: G2=G1*G1
  53. 530 U1=P(1): P(1)=U1/G1
  54. 540 IF N%<2 THEN 650
  55. 550 FOR J1=2 TO N%
  56. 560 U2=P(J1)
  57. 570 T1=SIN((J1-1)*PI/N%)
  58. 580 B1=G2+T1*T1
  59. 590 P(J1)=U1*U2/(B1*P(J1-1))
  60. 600 U1=U2
  61. 610 NEXT J1
  62. 620 IF N%>2*INT(N%/2) THEN 650
  63. 630 T1=1-2/(EXP(B2)+1)
  64. 640 R3=T1*T1: A3=A3*A2: A6=A1
  65. 650 IF I3<2 THEN 720
  66. 660 T1=SQR((A3-1)/(A2-1))
  67. 670 T2=LOG(T1+SQR(T1*T1-1))
  68. 680 X1=EXP(T2/N%): W1=(X1+1/X1)/2
  69. 690 FOR J1=1 TO N%
  70. 700 P(J1)=W1*P(J1)
  71. 710 NEXT J1
  72. 720 IF N%<3 THEN 760
  73. 730 FOR J1=2 TO N%-1
  74. 740 A7=A7+P(J1)
  75. 750 NEXT J1
  76. 760 PRINT F6$; ":"
  77. 770 FOR J1=1 TO N%: PRINT J1; P(J1),: NEXT J1
  78. 780 PRINT F2$; " r="; R3
  79. 790 PRINT: INPUT "Print element values"; I$
  80. 800 IF LEFT$(I$,1)="Y" THEN GOSUB 2600
  81. 810 CLS: PRINT F1$; "   N="; N%; "   Am="; A1; TAB(60) DATE$
  82. 820 PRINT F3$; ":"
  83. 830 J2=1: J6=42
  84. 840 FOR J1=1 TO J5
  85. 850 PRINT TAB(J2) STR$(J1); ". "; T$(J1);
  86. 860 J2=J6-J2
  87. 870 IF J2=1 THEN PRINT
  88. 880 NEXT J1
  89. 890 IF J2>1 THEN PRINT
  90. 900 PRINT "Coupling network types:"
  91. 910 INPUT "1. Interstage  2. Input  3. Output"; I1
  92. 920 ON I1+2 GOTO 4000, 340, 930, 950, 950
  93. 930 PRINT F3$;: INPUT I5, I6
  94. 940 GOTO 970
  95. 950 INPUT "Transistor"; I5
  96. 960 I6=I5
  97. 970 FOR J1=1 TO 4
  98. 980 IF I1=2 THEN 1010
  99. 990 G(J1,1)=Y(2*J1-1,I5): B(J1,1)=Y(2*J1,I5)
  100. 1000 IF I1=3 THEN 1020
  101. 1010 G(J1,2)=Y(2*J1-1,I6): B(J1,2)=Y(2*J1,I6)
  102. 1020 NEXT J1
  103. 1030 ON I1 GOTO 1040, 1080, 1140
  104. 1040 INPUT "Mia, Moa, Mib, Mob"; M3, M1, M2, M4
  105. 1050 GOSUB 2040
  106. 1060 PRINT "Ka="; K1; "  Sa="; S1; TAB(42) "Kb="; K2; "  Sb="; S2
  107. 1070 GOTO 1180
  108. 1080 INPUT "GS, BS, MS, Mib, Mob"; G(4,1), B(4,1), M1, M2, M4
  109. 1090 G1=G(4,1): B1=B(4,1)
  110. 1100 G3=G1: Y2=4
  111. 1110 GOSUB 2150
  112. 1120 PRINT "K="; K2, "S="; S2
  113. 1130 GOTO 1180
  114. 1140 INPUT "Mia, Moa, ML, GL, BL"; M3, M1, M2, G(1,2), B(1,2)
  115. 1150 G2=G(1,2): B2=B(1,2)
  116. 1160 GOSUB 2040
  117. 1170 PRINT "K="; K1, "S="; S1
  118. 1180 INPUT "Are K and S OK"; I$
  119. 1190 IF LEFT$(I$,1)="N" THEN 1030
  120. 1200 IF I1=2 THEN 1220
  121. 1210 Y2=(G(2,1)*G(2,1)+B(2,1)*B(2,1))/(G(4,1)*G(4,1))
  122. 1220 CLS: PRINT F1$; "   N="; N%; "   Am="; A1; TAB(60) DATE$
  123. 1230 IF I1=1 THEN PRINT "Transistors:": ELSE PRINT "Transistor:"
  124. 1240 PRINT STR$(I5); ". "; T$(I5);
  125. 1250 IF I1=1 THEN PRINT TAB(41) STR$(I6); ". "; T$(I6): ELSE PRINT
  126. 1260 ON I1 GOTO 1270, 1320, 1350
  127. 1270 PRINT "Mia="; M3; TAB(20) "Moa="; M1;
  128. 1280 PRINT TAB(40) "Mib="; M2; TAB(60) "Mob="; M4
  129. 1290 PRINT " Ka="; K1; TAB(20) " Sa="; S1;
  130. 1300 PRINT TAB(40) " Kb="; K2; TAB(60) " Sb="; S2
  131. 1310 GOTO 1370
  132. 1320 PRINT " MS="; M1; TAB(40) "Mib="; M2; TAB(60) "Mob="; M4
  133. 1330 PRINT TAB(40) "  K="; K2; TAB(60) "  S="; S2
  134. 1340 GOTO 1370
  135. 1350 PRINT "Mia="; M3; TAB(20) "Moa="; M1; TAB(40) "  ML="; M2
  136. 1360 PRINT "  K="; K1; TAB(20) "  S="; S1
  137. 1370 PRINT
  138. 1380 INPUT "F0(MHz), BW(MHz), Qu"; F0, B0, Q3
  139. 1390 T1=B0/2
  140. 1400 F1=SQR(F0*F0-T1*T1)
  141. 1410 W0=.000002*PI*F1: Q0=F1/B0
  142. 1420 Q1=Q0*P(1): Q2=Q0*P(N%)/R3
  143. 1430 A8=A6+DP*A7*Q0/Q3
  144. 1440 REM: PRINT @ (7,0), CHR$(31);:    'Clear screen starting at line 8
  145. 1450 PRINT "Options:  1. Select C12  2. Select Ct";
  146. 1460 INPUT "  3. N1=1  4. N2=1"; I2
  147. 1470 ON I2 GOTO 1480, 1510, 1520, 1540
  148. 1480 IF N%=1 THEN 1510
  149. 1490 INPUT "C12(pF)"; X1
  150. 1500 C0=X1*Q0*SQR(P(1)*P(2)): GOTO 1560
  151. 1510 INPUT "Ct(pF)"; C0: GOTO 1560
  152. 1520 X1=(M1*G(4,1)+G1)/2
  153. 1530 C0=Q1*X1/W0: GOTO 1560
  154. 1540 X1=(M2*G(1,2)+G2)/2
  155. 1550 C0=Q2*X1/W0
  156. 1560 X1=W0*C0
  157. 1570 L1=.001/(W0*X1)
  158. 1580 G5=X1/Q1: G6=X1/Q2
  159. 1590 N3=(M1*G(4,1)+G1)/(2*G5)
  160. 1600 N1=SQR(N3)
  161. 1610 N4=(M2*G(1,2)+G2)/(2*G6)
  162. 1620 N2=SQR(N4)
  163. 1630 G7=G5*(1-Q1/Q3)-G1/N3
  164. 1640 G8=G6*(1-Q2/Q3)-G2/N4
  165. 1650 IF N%=1 THEN G7=G7+G8+X1/Q3
  166. 1660 M(0)=B1/(W0*N3)
  167. 1670 M(N%)=B2/(W0*N4)
  168. 1680 R1=1/G7
  169. 1690 IF N%=1 THEN 1740
  170. 1700 R2=1/G8: T1=C0/Q0
  171. 1710 FOR J1=1 TO N%-1
  172. 1720 M(J1)=T1/SQR(P(J1)*P(J1+1))
  173. 1730 NEXT J1
  174. 1740 FOR J1=1 TO N%
  175. 1750 C(J1)=C0-M(J1-1)-M(J1)
  176. 1760 NEXT J1
  177. 1770 X2=1+M1
  178. 1780 X1=Y2/(X2*X2)
  179. 1790 X2=N3*G5*G2/(N4*G6*G3)
  180. 1800 A5=DP*LOG(X1*X2)-A8
  181. 1810 PRINT "Fc="; F1; "MHz",,
  182. 1820 IF I1=2 THEN PRINT "Ap(Transducer)="; A5; "dB": ELSE PRINT "Ap="; A5; "dB"
  183. 1830 IF N%=1 THEN PRINT "QL="; Q1/2,: ELSE PRINT "Q1="; Q1, "Q2="; Q2,
  184. 1840 PRINT "Qu="; Q3
  185. 1850 PRINT "R1="; R1,
  186. 1860 IF N%=1 THEN PRINT,: ELSE PRINT "R2="; R2,
  187. 1870 PRINT "N1="; N1, "N2="; N2
  188. 1880 PRINT " L="; L1; "nH", "Ct="; C0; "pF"
  189. 1890 FOR J1=1 TO N%
  190. 1900 PRINT "C"; J1; "="; C(J1),
  191. 1910 NEXT J1: PRINT
  192. 1920 IF N%=1 THEN 1970
  193. 1930 FOR J1=1 TO N%-1
  194. 1940 J2=11*J1+1
  195. 1950 PRINT "C"; J2; "="; M(J1),
  196. 1960 NEXT J1
  197. 1970 PRINT F2$: INPUT "Print results"; I$
  198. 1980 IF LEFT$(I$,1)="Y" THEN GOSUB 2270
  199. 1990 INPUT "New C"; I$
  200. 2000 IF LEFT$(I$,1)="Y" THEN 1440
  201. 2010 INPUT "New M's"; I$
  202. 2020 IF LEFT$(I$,1)="Y" THEN 1030: ELSE 810
  203. 2030 'Subroutines for input & output impedances and stability factors
  204. 2040 T1=G(2,1)*G(3,1)-B(2,1)*B(3,1)
  205. 2050 T2=G(2,1)*B(3,1)+G(3,1)*B(2,1)
  206. 2060 T3=SQR(T1*T1+T2*T2)
  207. 2070 X1=(1+M3)*G(1,1)
  208. 2080 G1=G(4,1)-T1/X1: B1=B(4,1)-T2/X1
  209. 2090 X2=(1+M1)*G(4,1)
  210. 2100 G3=G(1,1)-T1/X2: B3=B(1,1)-T2/X2
  211. 2110 X2=X2*X1: K1=2*X2/(T1+T3)
  212. 2120 X1=X2-T1: X2=X1*X1+T2*T2
  213. 2130 S1=T3/SQR(X2)
  214. 2140 IF I1>1 THEN 2250
  215. 2150 T4=G(2,2)*G(3,2)-B(2,2)*B(3,2)
  216. 2160 T5=G(2,2)*B(3,2)+G(3,2)*B(2,2)
  217. 2170 T6=SQR(T4*T4+T5*T5)
  218. 2180 X1=(1+M4)*G(4,2)
  219. 2190 G2=G(1,2)-T4/X1: B2=B(1,2)-T5/X1
  220. 2200 X2=(1+M2)*G(1,2)
  221. 2210 G4=G(4,2)-T4/X2: B4=B(4,2)-T5/X2
  222. 2220 X2=X2*X1: K2=2*X2/(T4+T6)
  223. 2230 X1=X2-T4: X2=X1*X1+T5*T5
  224. 2240 S2=T6/SQR(X2)
  225. 2250 RETURN
  226. 2260 'Line printer output subroutines
  227. 2270 IF I7=0 THEN GOSUB 2900
  228. 2280 LPRINT: IF I1=1 THEN LPRINT F3$+":": ELSE LPRINT "Transistor:"
  229. 2290 IF I1=2 THEN 2320
  230. 2300 LPRINT T$(I5);
  231. 2310 IF I1=3 THEN 2330
  232. 2320 LPRINT TAB(40) T$(I6);
  233. 2330 LPRINT: FOR J1=1 TO 4
  234. 2340 IF I1=2 THEN 2370
  235. 2350 LPRINT USING F7$; Y$(J1); Y(2*J1-1,I5); Y(2*J1,I5);
  236. 2360 IF I1=3 THEN 2380
  237. 2370 LPRINT TAB(40) USING F7$; Y$(J1); Y(2*J1-1,I6); Y(2*J1,I6);
  238. 2380 LPRINT: NEXT J1
  239. 2390 LPRINT: ON I1 GOTO 2400, 2490, 2550
  240. 2400 LPRINT "Mia="; M3; TAB(20) "Moa="; M1;
  241. 2410 LPRINT TAB(40) "Mib="; M2; TAB(60) "Mob="; M4
  242. 2420 LPRINT " Ka="; K1; TAB(20) " Sa="; S1;
  243. 2430 LPRINT TAB(40) " Kb="; K2; TAB(60) " Sb="; S2
  244. 2440 LPRINT USING F7$; Y$(5); G3; B3;
  245. 2450 LPRINT TAB(40) USING F7$; Y$(7); G2; B2
  246. 2460 LPRINT USING F7$; Y$(6); G1; B1;
  247. 2470 LPRINT TAB(40) USING F7$; Y$(8); G4; B4
  248. 2480 GOTO 2600
  249. 2490 LPRINT " MS="; M1; TAB(40) "Mib="; M2; TAB(60) "Mob="; M4
  250. 2500 LPRINT TAB(40) "  K="; K2; TAB(60) "  S="; S2
  251. 2510 LPRINT " GS="; G(4,1); TAB(20) " BS="; B(4,1);
  252. 2520 LPRINT TAB(40) USING F7$; Y$(7); G2; B2
  253. 2530 LPRINT TAB(40) USING F7$; Y$(8); G4; B4
  254. 2540 GOTO 2600
  255. 2550 LPRINT "Mia="; M3; TAB(20) "Moa="; M1; TAB(40) "  ML="; M2
  256. 2560 LPRINT "  K="; K1; TAB(20) "  S="; S1
  257. 2570 LPRINT USING F7$; Y$(5); G3; B3
  258. 2580 LPRINT USING F7$; Y$(6); G1; B1;
  259. 2590 LPRINT TAB(40) " GL="; G(1,2); TAB(60) " BL="; B(1,2)
  260. 2600 IF I7=0 THEN GOSUB 2900
  261. 2610 LPRINT F2$; "  N="; N%;
  262. 2620 IF A1>=0 THEN LPRINT TAB(20) " Am="; A1; "dB";
  263. 2630 IF I3=1 THEN LPRINT TAB(40) "Ripple BW";
  264. 2640 IF I3=2 THEN LPRINT TAB(40) "3 dB BW";
  265. 2650 LPRINT: IF I1>0 THEN 2740
  266. 2660 J2=0: LPRINT F6$; ":"
  267. 2670 FOR J1=1 TO N%
  268. 2680 LPRINT TAB(J2) J1; P(J1);
  269. 2690 J2=J2+20: IF J2>60 THEN J2=0: LPRINT
  270. 2700 NEXT J1
  271. 2710 IF J2>0 THEN LPRINT
  272. 2720 LPRINT " r="; R3
  273. 2730 RETURN
  274. 2740 LPRINT " F0="; F0; "MHz"; TAB(20) " BW="; B0; "MHz";
  275. 2750 LPRINT TAB(40) " Fc="; F1; "MHz"
  276. 2760 IF I1=2 THEN LPRINT " Ap(Transducer)="; A5; "dB": ELSE LPRINT " Ap="; A5; "dB"
  277. 2770 IF N%=1 THEN LPRINT " QL="; Q1/2;: ELSE LPRINT " Q1="; Q1; TAB(20) " Q2="; Q2;
  278. 2780 LPRINT TAB(40) " Qu="; Q3; F2$; " R1="; R1; CHR$(182);
  279. 2790 IF N%>1 THEN LPRINT TAB(20) " R2="; R2; CHR$(182): ELSE LPRINT
  280. 2800 LPRINT " N1="; N1; TAB(20) " N2="; N2
  281. 2810 LPRINT F2$; "  L="; L1; "nH"; TAB(20) " Ct="; C0; "pF"
  282. 2820 FOR J1=1 TO N%
  283. 2830 T1$=" C"+RIGHT$(STR$(J1),1)+"="
  284. 2840 LPRINT T1$; C(J1); "pF"
  285. 2850 IF J1=N% THEN 2880
  286. 2860 T1$="C"+RIGHT$(STR$(11*J1+1),2)+"="
  287. 2870 LPRINT TAB(20) T1$; M(J1); "pF"
  288. 2880 NEXT J1
  289. 2890 LPRINT CHR$(12): I7=0: RETURN
  290. 2900 IF I8=1 THEN 2950
  291. 2910 REM:  SYSTEM "FORMS (R,L=60)":                         'Set 60 lines/page
  292. 2920 LPRINT CHR$(27)+CHR$(64); CHR$(27)+CHR$(66)+CHR$(2);:      'Set 12 char/in
  293. 2930 LPRINT CHR$(27)+CHR$(77)+CHR$(10);:             'Set left margin to col 10
  294. 2940 LPRINT CHR$(27)+CHR$(81)+CHR$(89);: I8=1:      'Set line length to 80 char
  295. 2950 LPRINT F2$; CHR$(14); F1$; TAB(27) DATE$: I7=1: RETURN: 'Double-width mode
  296. 3000 DATA "MRF904 10V 2.5mA  180 MHz"
  297. 3010 DATA 1.730E-3, 5.063E-3, 6.583E-2, -2.481E-2
  298. 3020 DATA -2.305E-5, -5.248E-4, 7.946E-5, 1.590E-3
  299. 3030 DATA "2N4957 10V 2.0mA  180 MHz"
  300. 3040 DATA 2.585E-3, 6.348E-3, 5.396E-2, -2.084E-2
  301. 3050 DATA -7.264E-8, -4.480E-4, 1.397E-4, 1.296E-3
  302. 3990 DATA "***"
  303. 4000 END
  304.