home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 1
/
HamRadio.cdr
/
tech
/
ee8
/
mtwk.bas
< prev
next >
Wrap
BASIC Source File
|
1989-01-23
|
10KB
|
297 lines
1000 ' Name: MTWK
1010 CLEAR:CLS:GOSUB 3110
1020 INPUT"Enter number of nodes";Y:PRINT
1030 DIM A(Y,Y),A1(Y,Y),B(Y,Y),B1(Y,Y)
1040 DIM P(Y,Y),P1(Y,Y),Q(Y,Y),Q1(Y,Y)
1050 INPUT"Number of coax lines=";O:PRINT
1060 IF O=0 THEN 1070:DIM T(0-1,5)
1070 PI=3.14159265#:LGTEN=20/LOG(10)
1080 INPUT"Enter element symbol ";Z$
1090 E$=Z$:Z$=LEFT$(Z$,1):S$="RCLFNATE"
1100 Z=INSTR(1,S$,Z$):IF Z=0 OR E$="" THEN 1120
1110 ON Z GOSUB 1130,1160,1190,1220,1250,1290,1340,1400
1120 PRINT"Enter symbol from list!!!!!!":GOTO 1080
1130 INPUT"Nodes & ohms are";I,J,V
1140 IF PR THEN GOSUB 3410
1150 V=1/V:GOSUB 1930:GOTO 1080
1160 INPUT"Nodes and ufds are";I,J,V
1170 IF PR THEN GOSUB 3410
1180 V=V*.000001:GOSUB 2010:GOTO 1080
1190 INPUT"Nodes and henrys are";I,J,V
1200 IF PR THEN GOSUB 3410
1210 V=-1/V:GOSUB 2070:GOTO 1080
1220 INPUT"G,S,D,Nodes & A/V are";K,J,I,V
1230 IF PR THEN GOSUB 3420
1240 L=J:GOTO 1330
1250 INPUT"B,E,C,Beta & B-E ohms";K,J,I,B1,V
1260 IF PR THEN GOSUB 3430
1270 L=I:I=K:V=1/V:GOSUB 1930
1280 I=L:L=J:GOTO 1320
1290 PRINT"For the OP-AMP enter IN+,-,OUT+,-,Gain,ohms"
1300 INPUT K,L,J,I,B1,V:IF PR THEN GOSUB 3440
1310 V=1/V:GOSUB 1930
1320 V=B1*V
1330 GOSUB 2130:GOTO 1080
1340 IF O=0 THEN GOTO 1080
1350 FOR I=0 TO O-1:PRINT"IN,OUT,ZO,L,ER,a";
1360 INPUT T(I,0),T(I,1),T(I,2),T(I,3),T(I,4),T(I,5)
1370 IF PR THEN GOSUB 3450
1380 NEXT I:GOTO 1080
1390 ' Compute I/O ratios
1400 INPUT"Input & output nodes are ";E,F
1410 FOR I=0 TO N:FOR J=0 TO N
1420 P(I,J)=A(I,J):Q1(I,J)=B1(I,J)
1430 Q(I,J)=B(I,J):NEXT J:NEXT I
1440 IF PR THEN 3470 ELSE 1540
1450 PRINT:INPUT"Want printed results Y/N";Z$:PRINT
1460 IF Z$="Y" OR Z$="y" THEN PR=1 ELSE PR=0
1470 INPUT"Want time delay list Y/N";Z$:PRINT
1480 IF Z$="Y" OR Z$="y" THEN ND=0 ELSE ND=1
1490 INPUT"Want impedance format Y/N";Z$:PRINT
1500 IF Z$="Y" OR Z$="y" THEN QR=1 ELSE QR=0
1510 INPUT"Want new I/O nodes Y/N";Z$
1520 IF Z$="Y" OR Z$="y" THEN 1530 ELSE 1540
1530 INPUT"Input & output nodes are";E,F
1540 PRINT"The frequency range is"
1550 INPUT"Start, end, increment";G,H,D
1560 IF PR THEN GOSUB 3500
1570 PRINT:IF QR=0 THEN GOSUB 3520
1580 IF QR=0 AND PR THEN GOSUB 3530
1590 IF QR THEN GOSUB 3740
1600 IF QR AND PR THEN GOSUB 3760
1610 IF D<0 THEN F2=-D ELSE F2=1+(H-G)/D
1620 IF D<0 THEN D=-((H/G)^(1/(-D-1)))
1630 F1=G:FOR I1=1 TO F2
1640 I2=0:IF ND OR QR THEN 1660
1650 FOR I2=0 TO 1
1660 W=2*PI*F1:D1=E:D2=F:GOSUB 2870
1670 V=B1:U=D2
1680 IF(-1)^(E+F)>0 THEN 1700
1690 U=U-180
1700 D1=E:D2=E:GOSUB 2870
1710 IF V=0 OR B1=0 THEN 1730
1720 V=V/B1:DB=LGTEN*LOG(V)
1730 U=U-D2:IF U>180 THEN U=U-360
1740 IF U<-180 THEN U=U+360
1750 IF QR THEN 1780
1760 IF PR=0 AND I2=0 THEN GOSUB 3560
1770 IF PR AND I2=0 THEN GOSUB 3640
1780 IF QR AND PR=0 THEN 3810
1790 IF QR AND PR THEN 3870
1800 DU=U1-U:U1=U:IF ND THEN 1840
1810 F1=F1*1.001:NEXT I2
1820 U2=DU/U3/360*1000
1830 IF PR THEN 3700 ELSE 3610
1840 IF PR THEN LPRINT ELSE PRINT
1850 '
1860 IF D<0 THEN F1=-U3*D ELSE F1=U3+D
1870 NEXT I1:IF PR THEN GOSUB 3950
1880 PRINT:INPUT"Want to continue Y/N";Z$
1890 IF Z$="Y" OR Z$="y" THEN 1450
1900 PRINT"**Now in basic mode**"
1910 END
1920 ' Form element matrices
1930 IF I=0 THEN 1970
1940 A(I,I)=A(I,I)+V
1950 IF J=0 THEN 1980
1960 A(I,J)=A(I,J)-V:A(J,I)=A(J,I)-V
1970 A(J,J)=A(J,J)+V
1980 IF I>N THEN N=I
1990 IF J>N THEN N=J
2000 RETURN
2010 IF I=0 THEN 2050
2020 B(I,I)=B(I,I)+V
2030 IF J=0 THEN 1980
2040 B(I,J)=B(I,J)-V:B(J,I)=B(J,I)-V
2050 B(J,J)=B(J,J)+V
2060 GOTO 1980
2070 IF I=0 THEN 2110
2080 B1(I,I)=B1(I,I)+V
2090 IF J=0 THEN 1980
2100 B1(I,J)=B1(I,J)-V:B1(J,I)=B1(J,I)-V
2110 B1(J,J)=B1(J,J)+V
2120 GOTO 1980
2130 IF I<>0 AND K<>0 THEN A(I,K)=A(I,K)+V
2140 IF J<>0 AND L<>0 THEN A(J,L)=A(J,L)+V
2150 IF J<>0 AND K<>0 THEN A(J,K)=A(J,K)-V
2160 IF I<>0 AND L<>0 THEN A(I,L)=A(I,L)-V
2170 IF K>N THEN N=K
2180 IF L>N THEN N=L
2190 GOTO 1980
2200 X=W*T4*SQR(T5)/3E+08:X1=COS(X):X2=SIN(X)
2210 IF X=0 OR X=PI OR X=2*PI THEN X2=-.0000001
2220 M=T6*T4/LGTEN:M1=.5*(EXP(M)+EXP(-M))
2230 M2=.5*(EXP(M)-EXP(-M)):X=X2/T3/(M2*M2+X2*X2)
2240 M=M2/T3/(M2*M2+X2*X2):IF T1=0 THEN 2290
2250 P1(T1,T1)=P1(T1,T1)+M1*M:A1(T1,T1)=A1(T1,T1)+X1*X
2260 IF T2=0 THEN 2300
2270 P1(T1,T2)=P1(T1,T2)-X1*M:P1(T2,T1)=P1(T2,T1)-X1*M
2280 A1(T1,T2)=A1(T1,T2)-M1*X:A1(T2,T1)=A1(T2,T1)-M1*X
2290 P1(T2,T2)=P1(T2,T2)+M1*M:A1(T2,T2)=A1(T2,T2)+X1*X
2300 IF T1>N THEN N=T1
2310 IF T2>N THEN N=T2
2320 RETURN
2330 ' Compute determinate
2340 IF N>1 THEN 2360
2350 D1=A(N,N):D2=B(N,N):RETURN
2360 D1=1:D2=0:K=1
2370 L=K
2380 S=ABS(A(K,K))+ABS(B(K,K))
2390 FOR I=K TO N
2400 T=ABS(A(I,K))+ABS(B(I,K))
2410 IF S>=T THEN 2430
2420 L=I:S=T
2430 NEXT I
2440 IF L=K THEN 2520
2450 FOR J=1 TO N
2460 S=-A(K,J)
2470 A(K,J)=A(L,J)
2480 A(L,J)=S
2490 S1=-B(K,J)
2500 B(K,J)=B(L,J):B(L,J)=S1
2510 NEXT J
2520 L=K+1
2530 FOR I=L TO N
2540 S1=A(K,K)*A(K,K)+B(K,K)*B(K,K)
2550 S=(A(I,K)*A(K,K)+B(I,K)*B(K,K))/S1
2560 B(I,K)=(A(K,K)*B(I,K)-A(I,K)*B(K,K))/S1
2570 A(I,K)=S:NEXT I
2580 J2=K-1
2590 IF J2=0 THEN 2650
2600 FOR J=L TO N
2610 FOR I=1 TO J2
2620 A(K,J)=A(K,J)-A(K,I)*A(I,J)+B(K,I)*B(I,J)
2630 B(K,J)=B(K,J)-B(K,I)*A(I,J)-A(K,I)*B(I,J)
2640 NEXT I:NEXT J
2650 J2=K:K=K+1
2660 FOR I=K TO N
2670 FOR J=1 TO J2
2680 A(I,K)=A(I,K)-A(I,J)*A(J,K)+B(I,J)*B(J,K)
2690 B(I,K)=B(I,K)-B(I,J)*A(J,K)-A(I,J)*B(J,K)
2700 NEXT J:NEXT I
2710 IF K<>N THEN 2370
2720 L=1
2730 J2=INT(N/2)
2740 IF N=2*J2 THEN 2780
2750 L=0
2760 D1=A(N,N)
2770 D2=B(N,N)
2780 FOR I=1 TO J2
2790 J=N-I+L
2800 S=A(I,I)*A(J,J)-B(I,I)*B(J,J)
2810 S1=A(I,I)*B(J,J)+A(J,J)*B(I,I)
2820 T=D1*S-D2*S1
2830 D2=D2*S+D1*S1
2840 D1=T
2850 NEXT I
2860 RETURN
2870 FOR I=0 TO Y:FOR J=0 TO Y:P1(I,J)=0
2880 A1(I,J)=0:NEXT J:NEXT I
2890 FOR I=0 TO O-1:T1=T(I,0):T2=T(I,1)
2900 T3=T(I,2):T4=T(I,3):T5=T(I,4):T6=T(I,5)
2910 IF T1<>T2 THEN GOSUB 2200:NEXT I
2920 N1=N:N=N-1:I=0
2930 FOR K=1 TO N
2940 IF K<>D1 THEN 2960
2950 I=1
2960 J=0
2970 FOR L=1 TO N
2980 IF L<>D2 THEN 3000
2990 J=1
3000 A(K,L)=P(K+I,L+J)+P1(K+I,L+J)
3010 B(K,L)=W*Q(K+I,L+J)+Q1(K+I,L+J)/W-A1(K+I,L+J)
3020 NEXT L:NEXT K
3030 GOSUB 2340
3040 N=N1
3050 B1=SQR(D1*D1+D2*D2)
3060 IF D1=0 AND D2=0 THEN 3100
3070 IF D1<0 AND D2=0 THEN 3090
3080 D2=360/PI*ATN(D2/(B1+D1)):RETURN
3090 D2=180
3100 RETURN
3110 ' Info about pgm
3120 PRINT"The Network Element Format is"
3130 PRINT"R (Resistor)"
3140 PRINT"From node #, to node #, ohms"
3150 PRINT"C (Capacitor)"
3160 PRINT"From node #, to node #, ufds"
3170 PRINT"L (Inductor)"
3180 PRINT"From node #, to node #, hrys"
3190 PRINT"F (FET)"
3200 PRINT"Gate,Source,Drain,Gain(A/V)"
3210 PRINT"N (NPN)"
3220 PRINT"Base,Emit,Coll,Beta,B-E ohms"
3230 PRINT"A (OP AMP)"
3240 PRINT"+IN,-IN,+OUT,-OUT,Gain,Ohms out"
3250 PRINT"T (COAX LINE)"
3260 PRINT"Nodes, ZO, L meters, ER, a db/m"
3270 ' Screen break
3280 PRINT"E (Exit)"
3290 PRINT"Input node #, Output node #"
3300 PRINT"For log freq, use -D for number"
3310 PRINT"of frequencies wanted. In lines"
3320 PRINT"1810 & 1820, use 1E-5 & 1E5 for"
3330 PRINT"MSBASIC; 1E-3 & 1E3 for GWBASIC"
3340 PRINT:INPUT"Want printed results Y/N";Z$
3350 PRINT:IF Z$="Y" OR Z$="y" THEN PR=1 ELSE PR=0
3360 INPUT"Want time delay list Y/N";Z$:PRINT
3370 IF Z$="Y" OR Z$="y" THEN ND=0 ELSE ND=1
3380 INPUT"Want impedance format Y/N";Z$:PRINT
3390 IF Z$="Y" OR Z$="y" THEN QR=1 ELSE QR=0
3400 RETURN
3410 LPRINT E$;" =";I;J;V:RETURN
3420 LPRINT E$;" =";K;J;I;V:RETURN
3430 LPRINT E$;" =";K;J;I;B1;V:RETURN
3440 LPRINT E$;" =";K;L;J;I;B1;V:RETURN
3450 LPRINT "T";I+1;" =";T(I,0);T(I,1);T(I,2);
3460 LPRINT T(I,3);T(I,4);T(I,5):RETURN
3470 LPRINT:LPRINT"Network has";N;"nodes"
3480 LPRINT"Input & output nodes are";E;",";F
3490 GOTO 1540
3500 LPRINT:LPRINT"Frequency range is";
3510 LPRINT G;",";H;",";D:RETURN
3520 PRINT" FREQ DB PHASE DELAY":RETURN
3530 PRINT"**Wait for the printed results**"
3540 LPRINT:LPRINT" FREQ DB ";
3550 LPRINT"PHASE DELAY(SEC)":RETURN
3560 U3=F1:PRINT USING"##.##^^^^";F1;
3570 IF V=0 OR B1=0 THEN 3590
3580 PRINT USING"####.#";DB;:GOTO 3600
3590 PRINT" inf";
3600 PRINT" ";:PRINT USING"####.#";U;:RETURN
3610 IF U2>0 THEN 3630
3620 PRINT" NA":GOTO 1850
3630 PRINT" ";:PRINT USING"##.##^^^^";U2:GOTO 1850
3640 U3=F1:LPRINT USING"##.##^^^^";F1;
3650 LPRINT" ";:IF V=0 OR B1=0 THEN 3670
3660 LPRINT USING"####.##";DB;:GOTO 3680
3670 LPRINT" inf";
3680 LPRINT" ";
3690 LPRINT USING"####.#";U;:RETURN
3700 IF U2>0 THEN 3720
3710 LPRINT" NA":GOTO 1850
3720 LPRINT" ";:LPRINT USING"##.##^^^^";U2
3730 GOTO 1850
3740 PRINT"The input impedance is":PRINT
3750 PRINT" FREQ REAL IMAG":RETURN
3760 PRINT"**Wait for the printed results**"
3770 LPRINT"The input impedance is"
3780 LPRINT:LPRINT" FREQ REAL";
3790 LPRINT" IMAG AMPL";
3800 LPRINT" ANGLE":RETURN
3810 U3=F1:U=(180+U)*PI/180
3820 PRINT USING"##.##^^^^";F1;
3830 IF V=0 OR B1=0 THEN 3860
3840 PRINT USING"#######.#";V*COS(U),V*SIN(U)
3850 GOTO 1850
3860 PRINT" inf inf":GOTO 1850
3870 U3=F1:U=(180+U)*PI/180
3880 LPRINT USING"##.##^^^^";F1;:LPRINT" ";
3890 LPRINT USING"#######.#";V*COS(U);
3900 LPRINT" ";
3910 LPRINT USING"#######.#";V*SIN(U);
3920 LPRINT" ";
3930 LPRINT USING"#######.#";V;:LPRINT" ";
3940 LPRINT USING"####.#";U*180/PI:GOTO 1850
3950 LPRINT:LPRINT:RETURN