home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 1
/
HamRadio.cdr
/
tech
/
eepub10
/
tunedamp.bas
< prev
next >
Wrap
BASIC Source File
|
1986-06-02
|
10KB
|
304 lines
10 REM:PC DOS FIXES BY G.H. 6/2/86:LINE 1440 & 2910
19 CLS
20 PRINT "PLEASE SENT FIXES OR ENHANCEMENTS TO:"
21 PRINT "E.E. PUBLIC DOMAIN LIBRARY"
22 PRINT "36 IRENE LANE E."
23 PRINT "PLAINVIEW,11803,NY"
25 FOR I=1 TO 2000
26 NEXT I
27 I=0
100 'Program TUNEDAMP
110 'Ref: Jack Porter, "Multiple-Tuned Amplifiers",
120 ' r.f. design vol. 6, no. 1, pp. 38-48, Jan/Feb 1983
130 CLEAR
140 DEFINT I-J
150 DIM B(4,2), C(8), G(4,2), M(8), P(8), T$(21), Y(8,20), Y$(8)
160 FOR J1=1 TO 8: READ Y$(J1): NEXT J1
170 DATA "11", "21", "12", "22", "ia", "oa", "ib", "ob"
180 PI=3.14159: DP=10/LOG(10)
190 'Read transistor data in data statements beginning at line 3000
200 FOR J5=1 TO 21
210 READ T$(J5)
220 IF T$(J5)="***" THEN 260
230 FOR J1=1 TO 8
240 READ Y(J1,J5)
250 NEXT J1, J5
260 J5=J5-1
270 F1$="TUNED AMPLIFIERS"
280 F2$=CHR$(13)
290 F3$="Transistors"
300 F6$="Prototype element values"
310 F7$="Y\\= +#.###^^^^ +#.###^^^^j"
320 'Enter Am=0 for Butterworth filters, Am=-1 to enter prototype
330 ' values from the keyboard, e.g. for Bessel filters
340 CLS: PRINT F1$; TAB(60) DATE$: INPUT "N, Am(dB)"; N%, A1
350 IF N%<1 THEN 4000
360 I1=0: I3=0: A6=0: A7=0: R3=1
370 IF A1>=0 THEN 440
380 PRINT F6$
390 FOR J1=1 TO N%
400 PRINT J1;: INPUT P(J1)
410 NEXT J1
420 GOTO 720
430 'Calculate prototype element values for Butterworth and Chebyshev filters
440 FOR J1=1 TO N%
450 P(J1)=2*SIN((2*J1-1)*PI/(2*N%))
460 NEXT J1
470 IF A1=0 THEN 720
480 INPUT "Specify: 1. Ripple BW 2. 3 dB BW"; I3
490 A2=EXP(A1/DP): A3=2
500 B2=LOG(1+2/(SQR(A2)-1))/2
510 X1=EXP(B2/N%)
520 G1=(X1-1/X1)/2: G2=G1*G1
530 U1=P(1): P(1)=U1/G1
540 IF N%<2 THEN 650
550 FOR J1=2 TO N%
560 U2=P(J1)
570 T1=SIN((J1-1)*PI/N%)
580 B1=G2+T1*T1
590 P(J1)=U1*U2/(B1*P(J1-1))
600 U1=U2
610 NEXT J1
620 IF N%>2*INT(N%/2) THEN 650
630 T1=1-2/(EXP(B2)+1)
640 R3=T1*T1: A3=A3*A2: A6=A1
650 IF I3<2 THEN 720
660 T1=SQR((A3-1)/(A2-1))
670 T2=LOG(T1+SQR(T1*T1-1))
680 X1=EXP(T2/N%): W1=(X1+1/X1)/2
690 FOR J1=1 TO N%
700 P(J1)=W1*P(J1)
710 NEXT J1
720 IF N%<3 THEN 760
730 FOR J1=2 TO N%-1
740 A7=A7+P(J1)
750 NEXT J1
760 PRINT F6$; ":"
770 FOR J1=1 TO N%: PRINT J1; P(J1),: NEXT J1
780 PRINT F2$; " r="; R3
790 PRINT: INPUT "Print element values"; I$
800 IF LEFT$(I$,1)="Y" THEN GOSUB 2600
810 CLS: PRINT F1$; " N="; N%; " Am="; A1; TAB(60) DATE$
820 PRINT F3$; ":"
830 J2=1: J6=42
840 FOR J1=1 TO J5
850 PRINT TAB(J2) STR$(J1); ". "; T$(J1);
860 J2=J6-J2
870 IF J2=1 THEN PRINT
880 NEXT J1
890 IF J2>1 THEN PRINT
900 PRINT "Coupling network types:"
910 INPUT "1. Interstage 2. Input 3. Output"; I1
920 ON I1+2 GOTO 4000, 340, 930, 950, 950
930 PRINT F3$;: INPUT I5, I6
940 GOTO 970
950 INPUT "Transistor"; I5
960 I6=I5
970 FOR J1=1 TO 4
980 IF I1=2 THEN 1010
990 G(J1,1)=Y(2*J1-1,I5): B(J1,1)=Y(2*J1,I5)
1000 IF I1=3 THEN 1020
1010 G(J1,2)=Y(2*J1-1,I6): B(J1,2)=Y(2*J1,I6)
1020 NEXT J1
1030 ON I1 GOTO 1040, 1080, 1140
1040 INPUT "Mia, Moa, Mib, Mob"; M3, M1, M2, M4
1050 GOSUB 2040
1060 PRINT "Ka="; K1; " Sa="; S1; TAB(42) "Kb="; K2; " Sb="; S2
1070 GOTO 1180
1080 INPUT "GS, BS, MS, Mib, Mob"; G(4,1), B(4,1), M1, M2, M4
1090 G1=G(4,1): B1=B(4,1)
1100 G3=G1: Y2=4
1110 GOSUB 2150
1120 PRINT "K="; K2, "S="; S2
1130 GOTO 1180
1140 INPUT "Mia, Moa, ML, GL, BL"; M3, M1, M2, G(1,2), B(1,2)
1150 G2=G(1,2): B2=B(1,2)
1160 GOSUB 2040
1170 PRINT "K="; K1, "S="; S1
1180 INPUT "Are K and S OK"; I$
1190 IF LEFT$(I$,1)="N" THEN 1030
1200 IF I1=2 THEN 1220
1210 Y2=(G(2,1)*G(2,1)+B(2,1)*B(2,1))/(G(4,1)*G(4,1))
1220 CLS: PRINT F1$; " N="; N%; " Am="; A1; TAB(60) DATE$
1230 IF I1=1 THEN PRINT "Transistors:": ELSE PRINT "Transistor:"
1240 PRINT STR$(I5); ". "; T$(I5);
1250 IF I1=1 THEN PRINT TAB(41) STR$(I6); ". "; T$(I6): ELSE PRINT
1260 ON I1 GOTO 1270, 1320, 1350
1270 PRINT "Mia="; M3; TAB(20) "Moa="; M1;
1280 PRINT TAB(40) "Mib="; M2; TAB(60) "Mob="; M4
1290 PRINT " Ka="; K1; TAB(20) " Sa="; S1;
1300 PRINT TAB(40) " Kb="; K2; TAB(60) " Sb="; S2
1310 GOTO 1370
1320 PRINT " MS="; M1; TAB(40) "Mib="; M2; TAB(60) "Mob="; M4
1330 PRINT TAB(40) " K="; K2; TAB(60) " S="; S2
1340 GOTO 1370
1350 PRINT "Mia="; M3; TAB(20) "Moa="; M1; TAB(40) " ML="; M2
1360 PRINT " K="; K1; TAB(20) " S="; S1
1370 PRINT
1380 INPUT "F0(MHz), BW(MHz), Qu"; F0, B0, Q3
1390 T1=B0/2
1400 F1=SQR(F0*F0-T1*T1)
1410 W0=.000002*PI*F1: Q0=F1/B0
1420 Q1=Q0*P(1): Q2=Q0*P(N%)/R3
1430 A8=A6+DP*A7*Q0/Q3
1440 REM: PRINT @ (7,0), CHR$(31);: 'Clear screen starting at line 8
1450 PRINT "Options: 1. Select C12 2. Select Ct";
1460 INPUT " 3. N1=1 4. N2=1"; I2
1470 ON I2 GOTO 1480, 1510, 1520, 1540
1480 IF N%=1 THEN 1510
1490 INPUT "C12(pF)"; X1
1500 C0=X1*Q0*SQR(P(1)*P(2)): GOTO 1560
1510 INPUT "Ct(pF)"; C0: GOTO 1560
1520 X1=(M1*G(4,1)+G1)/2
1530 C0=Q1*X1/W0: GOTO 1560
1540 X1=(M2*G(1,2)+G2)/2
1550 C0=Q2*X1/W0
1560 X1=W0*C0
1570 L1=.001/(W0*X1)
1580 G5=X1/Q1: G6=X1/Q2
1590 N3=(M1*G(4,1)+G1)/(2*G5)
1600 N1=SQR(N3)
1610 N4=(M2*G(1,2)+G2)/(2*G6)
1620 N2=SQR(N4)
1630 G7=G5*(1-Q1/Q3)-G1/N3
1640 G8=G6*(1-Q2/Q3)-G2/N4
1650 IF N%=1 THEN G7=G7+G8+X1/Q3
1660 M(0)=B1/(W0*N3)
1670 M(N%)=B2/(W0*N4)
1680 R1=1/G7
1690 IF N%=1 THEN 1740
1700 R2=1/G8: T1=C0/Q0
1710 FOR J1=1 TO N%-1
1720 M(J1)=T1/SQR(P(J1)*P(J1+1))
1730 NEXT J1
1740 FOR J1=1 TO N%
1750 C(J1)=C0-M(J1-1)-M(J1)
1760 NEXT J1
1770 X2=1+M1
1780 X1=Y2/(X2*X2)
1790 X2=N3*G5*G2/(N4*G6*G3)
1800 A5=DP*LOG(X1*X2)-A8
1810 PRINT "Fc="; F1; "MHz",,
1820 IF I1=2 THEN PRINT "Ap(Transducer)="; A5; "dB": ELSE PRINT "Ap="; A5; "dB"
1830 IF N%=1 THEN PRINT "QL="; Q1/2,: ELSE PRINT "Q1="; Q1, "Q2="; Q2,
1840 PRINT "Qu="; Q3
1850 PRINT "R1="; R1,
1860 IF N%=1 THEN PRINT,: ELSE PRINT "R2="; R2,
1870 PRINT "N1="; N1, "N2="; N2
1880 PRINT " L="; L1; "nH", "Ct="; C0; "pF"
1890 FOR J1=1 TO N%
1900 PRINT "C"; J1; "="; C(J1),
1910 NEXT J1: PRINT
1920 IF N%=1 THEN 1970
1930 FOR J1=1 TO N%-1
1940 J2=11*J1+1
1950 PRINT "C"; J2; "="; M(J1),
1960 NEXT J1
1970 PRINT F2$: INPUT "Print results"; I$
1980 IF LEFT$(I$,1)="Y" THEN GOSUB 2270
1990 INPUT "New C"; I$
2000 IF LEFT$(I$,1)="Y" THEN 1440
2010 INPUT "New M's"; I$
2020 IF LEFT$(I$,1)="Y" THEN 1030: ELSE 810
2030 'Subroutines for input & output impedances and stability factors
2040 T1=G(2,1)*G(3,1)-B(2,1)*B(3,1)
2050 T2=G(2,1)*B(3,1)+G(3,1)*B(2,1)
2060 T3=SQR(T1*T1+T2*T2)
2070 X1=(1+M3)*G(1,1)
2080 G1=G(4,1)-T1/X1: B1=B(4,1)-T2/X1
2090 X2=(1+M1)*G(4,1)
2100 G3=G(1,1)-T1/X2: B3=B(1,1)-T2/X2
2110 X2=X2*X1: K1=2*X2/(T1+T3)
2120 X1=X2-T1: X2=X1*X1+T2*T2
2130 S1=T3/SQR(X2)
2140 IF I1>1 THEN 2250
2150 T4=G(2,2)*G(3,2)-B(2,2)*B(3,2)
2160 T5=G(2,2)*B(3,2)+G(3,2)*B(2,2)
2170 T6=SQR(T4*T4+T5*T5)
2180 X1=(1+M4)*G(4,2)
2190 G2=G(1,2)-T4/X1: B2=B(1,2)-T5/X1
2200 X2=(1+M2)*G(1,2)
2210 G4=G(4,2)-T4/X2: B4=B(4,2)-T5/X2
2220 X2=X2*X1: K2=2*X2/(T4+T6)
2230 X1=X2-T4: X2=X1*X1+T5*T5
2240 S2=T6/SQR(X2)
2250 RETURN
2260 'Line printer output subroutines
2270 IF I7=0 THEN GOSUB 2900
2280 LPRINT: IF I1=1 THEN LPRINT F3$+":": ELSE LPRINT "Transistor:"
2290 IF I1=2 THEN 2320
2300 LPRINT T$(I5);
2310 IF I1=3 THEN 2330
2320 LPRINT TAB(40) T$(I6);
2330 LPRINT: FOR J1=1 TO 4
2340 IF I1=2 THEN 2370
2350 LPRINT USING F7$; Y$(J1); Y(2*J1-1,I5); Y(2*J1,I5);
2360 IF I1=3 THEN 2380
2370 LPRINT TAB(40) USING F7$; Y$(J1); Y(2*J1-1,I6); Y(2*J1,I6);
2380 LPRINT: NEXT J1
2390 LPRINT: ON I1 GOTO 2400, 2490, 2550
2400 LPRINT "Mia="; M3; TAB(20) "Moa="; M1;
2410 LPRINT TAB(40) "Mib="; M2; TAB(60) "Mob="; M4
2420 LPRINT " Ka="; K1; TAB(20) " Sa="; S1;
2430 LPRINT TAB(40) " Kb="; K2; TAB(60) " Sb="; S2
2440 LPRINT USING F7$; Y$(5); G3; B3;
2450 LPRINT TAB(40) USING F7$; Y$(7); G2; B2
2460 LPRINT USING F7$; Y$(6); G1; B1;
2470 LPRINT TAB(40) USING F7$; Y$(8); G4; B4
2480 GOTO 2600
2490 LPRINT " MS="; M1; TAB(40) "Mib="; M2; TAB(60) "Mob="; M4
2500 LPRINT TAB(40) " K="; K2; TAB(60) " S="; S2
2510 LPRINT " GS="; G(4,1); TAB(20) " BS="; B(4,1);
2520 LPRINT TAB(40) USING F7$; Y$(7); G2; B2
2530 LPRINT TAB(40) USING F7$; Y$(8); G4; B4
2540 GOTO 2600
2550 LPRINT "Mia="; M3; TAB(20) "Moa="; M1; TAB(40) " ML="; M2
2560 LPRINT " K="; K1; TAB(20) " S="; S1
2570 LPRINT USING F7$; Y$(5); G3; B3
2580 LPRINT USING F7$; Y$(6); G1; B1;
2590 LPRINT TAB(40) " GL="; G(1,2); TAB(60) " BL="; B(1,2)
2600 IF I7=0 THEN GOSUB 2900
2610 LPRINT F2$; " N="; N%;
2620 IF A1>=0 THEN LPRINT TAB(20) " Am="; A1; "dB";
2630 IF I3=1 THEN LPRINT TAB(40) "Ripple BW";
2640 IF I3=2 THEN LPRINT TAB(40) "3 dB BW";
2650 LPRINT: IF I1>0 THEN 2740
2660 J2=0: LPRINT F6$; ":"
2670 FOR J1=1 TO N%
2680 LPRINT TAB(J2) J1; P(J1);
2690 J2=J2+20: IF J2>60 THEN J2=0: LPRINT
2700 NEXT J1
2710 IF J2>0 THEN LPRINT
2720 LPRINT " r="; R3
2730 RETURN
2740 LPRINT " F0="; F0; "MHz"; TAB(20) " BW="; B0; "MHz";
2750 LPRINT TAB(40) " Fc="; F1; "MHz"
2760 IF I1=2 THEN LPRINT " Ap(Transducer)="; A5; "dB": ELSE LPRINT " Ap="; A5; "dB"
2770 IF N%=1 THEN LPRINT " QL="; Q1/2;: ELSE LPRINT " Q1="; Q1; TAB(20) " Q2="; Q2;
2780 LPRINT TAB(40) " Qu="; Q3; F2$; " R1="; R1; CHR$(182);
2790 IF N%>1 THEN LPRINT TAB(20) " R2="; R2; CHR$(182): ELSE LPRINT
2800 LPRINT " N1="; N1; TAB(20) " N2="; N2
2810 LPRINT F2$; " L="; L1; "nH"; TAB(20) " Ct="; C0; "pF"
2820 FOR J1=1 TO N%
2830 T1$=" C"+RIGHT$(STR$(J1),1)+"="
2840 LPRINT T1$; C(J1); "pF"
2850 IF J1=N% THEN 2880
2860 T1$="C"+RIGHT$(STR$(11*J1+1),2)+"="
2870 LPRINT TAB(20) T1$; M(J1); "pF"
2880 NEXT J1
2890 LPRINT CHR$(12): I7=0: RETURN
2900 IF I8=1 THEN 2950
2910 REM: SYSTEM "FORMS (R,L=60)": 'Set 60 lines/page
2920 LPRINT CHR$(27)+CHR$(64); CHR$(27)+CHR$(66)+CHR$(2);: 'Set 12 char/in
2930 LPRINT CHR$(27)+CHR$(77)+CHR$(10);: 'Set left margin to col 10
2940 LPRINT CHR$(27)+CHR$(81)+CHR$(89);: I8=1: 'Set line length to 80 char
2950 LPRINT F2$; CHR$(14); F1$; TAB(27) DATE$: I7=1: RETURN: 'Double-width mode
3000 DATA "MRF904 10V 2.5mA 180 MHz"
3010 DATA 1.730E-3, 5.063E-3, 6.583E-2, -2.481E-2
3020 DATA -2.305E-5, -5.248E-4, 7.946E-5, 1.590E-3
3030 DATA "2N4957 10V 2.0mA 180 MHz"
3040 DATA 2.585E-3, 6.348E-3, 5.396E-2, -2.084E-2
3050 DATA -7.264E-8, -4.480E-4, 1.397E-4, 1.296E-3
3990 DATA "***"
4000 END