home *** CD-ROM | disk | FTP | other *** search
- 1 CLS
- 10 PRINT"THIS PROGRAM IS USED TO FIGURE ARRAY CHARACTERISTICS AND FIELD INTENSITY"
- 20 PRINT"RATIOS FOR MULTI ANTENNA DIRECTIONAL ARRAYS."
- 30 LOCATE 5,1:PRINT"WRITTEN BY DAVID MATHEWS CHIEF ENGINEER, WMNI RADIO COL. OHIO"
- 40 PRINT:PRINT"IT IS NOT INTENDED TO BE USED FOR GETTING INFORMATION TO SUBMIT TO"
- 50 PRINT"THE FEDERAL COMMUNICATIONS COMMISSION (FCC) AND CAN'T BE USED FOR THAT "
- 60 PRINT"PURPOSE. IT IS HOWEVER A LOT OF FUN TO USE AND CAN BE VERY ENLIGHTENING."
- 70 PRINT:PRINT"PROGRAM REQUIREMENTS ARE 1) 640K OF MEMORY 2) CGA BOARD OR CGA SIMULATOR"
- 80 LOCATE 24,1:INPUT"HIT ENTER TO BEGIN";ZZ$
- 90 'INPUT DATA HERE
- 100 CLS
- 110 DIM F(6),P(6),S(6),D(6),H(6),BV(6),DD(6),SS(6),PP(6),S1(6),E$(10),SS$(6),DD$(6)
- 120 DIM Q(1440):PI=3.141593
- 130 Z1=57.2958
- 160 REM ** SET UP FUNCTION KEYS **
- 170 KEY 1,"FIELD"+CHR$(13)
- 180 KEY 2,"PHASE"+CHR$(13)
- 190 KEY 3,"SPACING"+CHR$(13)
- 200 KEY 4,"ORIENT"+CHR$(13)
- 210 KEY 5,"STEP"+CHR$(13)
- 220 KEY 6,"REMOVE"+CHR$(13)
- 230 KEY 7,"ADD"+CHR$(13)
- 240 KEY 8,"K FACT"+CHR$(13)
- 250 KEY 9,"NONE"+CHR$(13)
- 260 E$(1)="BR1R1NR1U6G1BD5BR3"
- 270 E$(2)="BR1NR3E3U2H1L1G1BD5BR3"
- 280 E$(3)="BR1BU1F1R1E1U1H1NL1E1U1H1L1G1BD5BR3"
- 290 E$(4)="BR4U6G2D1R3BD3"
- 300 E$(5)="BE1F1R1E1U1H1L1H1U2R3BD6"
- 310 E$(6)="BE4BU2L2G1D4F1R1E1U1H1L2BD3BR3"
- 320 E$(7)="BR1U2E3U1L3BD6BR3"
- 330 E$(8)="BE1F1R1E1U1H1L1H1U1E1R1F1D1G1L1G1D1BD1BR3"
- 340 E$(9)="BR1R2E1U4H1L1G1D1F1R2BD3"
- 350 E$(0)="BE1F1R1E1U4H1L1G1D3NE3D1BD1BR3"
- 360 SLA$="BR2U1E4U1BD6BR3"
- 370 DG$="BE3E1U1H1L1G1D1F1R1BD3BR2"
- 380 DOT$="BR1L1"
- 381 INPUT "DO YOU WANT TO LOAD A SAVED SET OF ARRAY VARIABLES? Y/N";Z$
- 382 IF Z$="Y" OR Z$="y" THEN 3355
- 385 INPUT"ENTER NAME OF STATION ";STNAME$
- 390 INPUT"ENTER FREQUENCY IN KHz ";KHZ
- 400 INPUT"ENTER POWER IN KWs ";KWS
- 401 INPUT"ENTER # OF TOWERS ";TOWERS:IF TOWERS<2 THEN PRINT"YOU HAVE TO HAVE MORE THAN 1 TOWER OR IT ISN'T AN ARRAY.":GOTO 401
- 410 FOR T=1 TO TOWERS
- 420 CLS
- 430 PRINT"TOWER #";T:PRINT STRING$(70,"-")
- 440 PRINT "FIELD ";
- 450 INPUT F(T)
- 460 PRINT"PHASE ";
- 470 INPUT P(T):PP(T)=P(T)
- 480 PRINT"SPACING ";
- 490 INPUT S(T):SS(T)=S(T):SS$(T)=STR$(SS(T))
- 500 PRINT"ORIENTATION ";
- 510 INPUT D(T):DD(T)=D(T):DD$(T)=STR$(DD(T))
- 520 PRINT"HEIGHT ";
- 530 INPUT H(T)
- 540 IF H(T)=0 THEN PRINT"YOU CAN'T HAVE A 0 DEG. TOWER. TRY AGAIN":GOTO 520
- 550 PRINT STRING$(70,"-")
- 560 NEXT T
- 580 FOR T=1 TO TOWERS
- 590 P(T)=P(T)/Z1:S(T)=S(T)/Z1:D(T)=D(T)/Z1
- 600 NEXT T
- 610 CLS
- 620 C=2:REM INITIAL SETTING OF STEP RANGE =2
- 630 K1=1
- 640 GOSUB 1400
- 650 FA$="####":FB$="#####.#":FC$="###.###"
- 660 '
- 670 'START MAIN PROGRAM HERE
- 680 R=0
- 690 M1=TOWERS
- 700 FOR AO=0 TO 90 STEP C
- 710 A1=AO/Z1
- 720 A2=(AO+90)/Z1
- 730 A3=(AO+180)/Z1
- 740 A4=(AO+270)/Z1
- 750 X=0:Y=0
- 760 FOR L%=1 TO M1
- 770 S1=S(L%)*COS(A1-D(L%))
- 780 B=S1+P(L%)
- 790 X=F(L%)*COS(B)+X
- 800 Y=F(L%)*COS(B)+Y
- 810 NEXT L%
- 820 E1=K1*SQR(X*X+Y*Y)
- 830 X=0:Y=0
- 840 FOR L%=1 TO M1
- 850 S2=S(L%)*COS(A2-D(L%))
- 860 B=S2+P(L%)
- 870 X=F(L%)*COS(B)+X
- 880 Y=F(L%)*COS(B)+Y
- 890 NEXT L%
- 900 E2=K1*SQR(X*X+Y*Y)
- 910 X=0:Y=0
- 920 FOR L%=1 TO M1
- 930 S3=S(L%)*COS(A3-D(L%))
- 940 B=S3+P(L%)
- 950 X=F(L%)*COS(B)+X
- 960 Y=F(L%)*COS(B)+Y
- 970 NEXT L%
- 980 E3=K1*SQR(X*X+Y*Y)
- 990 X=0:Y=0
- 1000 FOR L%=1 TO M1
- 1010 S4=S(L%)*COS(A4-D(L%))
- 1020 B=S4+P(L%)
- 1030 X=F(L%)*COS(B)+X
- 1040 Y=F(L%)*COS(B)+Y
- 1050 NEXT L%
- 1060 E4=K1*SQR(X*X+Y*Y)
- 1070 X=0:Y=0
- 1080 Q(R)=E1:Q(R+90)=E2:Q(R+180)=E3:Q(R+270)=E4
- 1090 R=R+C
- 1100 NEXT AO
- 1110 GOSUB 1800
- 1150 INPUT"DO YOU WANT A COMPLETE PRINT OUT OF DATA ";ZX$
- 1160 IF ZX$="Y" OR ZX$="y" THEN 1170 ELSE 1380
- 1170 REM ADD A CHR$(12) HERE FOR A FORM FEED AT BEGINNING OF PRINTOUT
- 1180 LPRINT TAB(20);"FIELD";TAB(30);"PHASE";TAB(40);"SPACING";TAB(50);"ORIENT";TAB(60);"HEIGHT"
- 1190 FOR T=1 TO TOWERS
- 1200 LPRINT "TOWER #";T;TAB(20);F(T);TAB(30);PP(T);TAB(40);SS(T);TAB(50);DD(T);TAB(60);H(T)
- 1210 NEXT T
- 1220 LPRINT:LPRINT:LPRINT
- 1230 LPRINT"THEORETICAL HORIZONTAL PATTERN AT ONE MILE."
- 1240 LPRINT:LPRINT:LPRINT
- 1250 LPRINT"AZ.";TAB(10);"MV/M";TAB(20);"AZ.";TAB(30);"MV/M";TAB(40);"AZ.";TAB(50);"MV/M";TAB(60);"AZ.";TAB(70);"MV/M"
- 1260 LPRINT STRING$(79,"-")
- 1270 R=0:P=0
- 1280 LPRINT USING"###";P;:LPRINT TAB(10);USING"###.###";Q(R);:PRINT USING"###";P;:PRINT TAB(10);USING"###.###";Q(R);
- 1290 LPRINT TAB(20);USING"###";P+90;:LPRINT TAB(30);USING"###.###";Q(R+90);:PRINT TAB(20);USING"###";P+90;:PRINT TAB(30);USING"###.###";Q(R+90);
- 1300 LPRINT TAB(40);USING"###";P+180;:LPRINT TAB(50);USING"###.###";Q(R+180);:PRINT TAB(40);USING"###";P+180;:PRINT TAB(50);USING"###.###";Q(R+180);
- 1310 LPRINT TAB(60);USING"###";P+270;:LPRINT TAB(70);USING"###.###";Q(R+270):PRINT TAB(60);USING"###";P+270;:PRINT TAB(70);USING"###.###";Q(R+270)
- 1320 R=R+C:P=P+C
- 1330 IF R<81 THEN 1280
- 1340 GOTO 1360
- 1350 STOP
- 1360 PRINT:PRINT:INPUT"DO YOU WANT A COMPLETE PRINT OUT?";Z$
- 1370 IF Z$="Y" OR Z$="y" THEN 1270
- 1380 'CHANGE INFORMATION HERE
- 1400 CLS:PRINT"CHANGE INFORMATION FOR WHAT?:"
- 1410 GOSUB 1730
- 1420 PRINT
- 1430 PRINT"F1) FIELD"
- 1440 PRINT"F2) PHASE"
- 1450 PRINT"F3) SPACING"
- 1460 PRINT"F4) ORIENTATION"
- 1470 PRINT"F5) STEP FACTOR";" <";C;">"
- 1471 PRINT"F6) REMOVE A TOWER"
- 1472 PRINT"F7) ADD A TOWER"
- 1480 PRINT"F8) K FACTOR";" <";K1;">"
- 1481 PRINT"F9) NONE
- 1482 PRINT"77) LOAD NEW PARAMETERS"
- 1495 PRINT"88) SAVE ARRAY SETTINGS"
- 1500 PRINT"99) QUIT"
- 1510 PRINT:PRINT:INPUT"SELECT USING FUNCTION KEYS ";N$
- 1512 IF N$="77" THEN GOTO 3355
- 1515 IF N$="88" THEN GOSUB 3300
- 1520 IF N$="REMOVE" THEN GOTO 2780
- 1530 IF N$="ADD" THEN GOTO 2850
- 1540 IF N$="99" THEN STOP
- 1560 IF N$="STEP" THEN INPUT"WHAT IS THE NEW STEP FACTOR";C:CLS:GOTO 1380
- 1570 IF N$="K FACT" THEN INPUT"WHAT IS THE NEW K FACTOR";K1:CLS:GOTO 1380
- 1580 IF N$="NONE" THEN 660
- 1590 IF N$="FIELD" THEN N=1
- 1600 IF N$="PHASE" THEN N=2
- 1610 IF N$="SPACING" THEN N=3
- 1620 IF N$="ORIENT" THEN N=4
- 1630 IF N=1 THEN Y$="FIELD" ELSE IF N=2 THEN Y$="PHASE" ELSE IF N=3 THEN Y$="SPACING" ELSE IF N=4 THEN Y$="ORIENTATION"
- 1640 INPUT "ON WHICH TOWER? ";M
- 1650 PRINT "ENTER NEW ";Y$;" FOR TOWER ";M;:INPUT KL
- 1660 IF N=1 THEN F(M)=KL:PG=F(M)
- 1670 IF N=2 THEN P(M)=KL:PG=P(M):P(M)=P(M)/Z1:PP(M)=KL
- 1680 IF N=3 THEN S(M)=KL:PG=S(M):S(M)=S(M)/Z1:SS(M)=KL:SS$(M)=STR$(KL)
- 1690 IF N=4 THEN D(M)=KL:PG=D(M):D(M)=D(M)/Z1:DD(M)=KL:DD$(M)=STR$(KL)
- 1700 REM
- 1710 CLS:GOTO 1400
- 1720 CLS
- 1730 REM PRINT ON SCREEN LAST INFORMATION ON TOWERS
- 1740 PRINT TAB(20);"FIELD";TAB(30);"PHASE";TAB(40);"SPACING";TAB(50);"ORIENT"
- 1750 FOR T=1 TO TOWERS
- 1760 IF H(T)=0 THEN 1780
- 1770 PRINT "TOWER #";T;TAB(20);F(T);TAB(30);PP(T);TAB(40);SS$(T);TAB(50);DD$(T)
- 1780 NEXT T
- 1790 RETURN
- 1800 REM PLOT THE PATTERN
- 1810 SCREEN 2:CLS
- 1820 INPUT"(E)XPANDED SCALE OR (S)TANDARD SCALE";CX$
- 1830 LOCATE 1,55:PRINT"K FACTOR= ";K1
- 1840 DEF SEG=&HB800:BLOAD"POLAR.BIN",0
- 1850 GOSUB 2120
- 1860 GOSUB 2460
- 1870 LOCATE 12,1:PRINT "1/4 WAVE = ";INT(WL)/4;
- 1890 RADIUS=200
- 1900 QHI=Q(1):QLO=10000
- 1910 FOR HI=0 TO 360 STEP C
- 1920 IF Q(HI)>QHI THEN QHI=Q(HI):IQ$=STR$(HI):QHI$=STR$(QHI):QHI$=LEFT$(QHI$,5)
- 1930 IF Q(HI)<QLO THEN QLO=Q(HI):II$=STR$(HI):QLO$=STR$(QLO):QLO$=LEFT$(QLO$,5)
- 1940 NEXT HI
- 1950 QH$=STR$(QHI)
- 1960 FOR TY=0 TO 360 STEP C
- 1970 RATIO=Q(TY)/QHI
- 1980 X1=TY*(PI/180)
- 1990 X=SIN(X1)*RATIO
- 2000 Y=COS(X1)*RATIO
- 2010 Y=100-((Y*.42)*150)
- 2020 X=420+(X*150)
- 2030 IF FIRST=0 THEN X3=X:Y3=Y:FIRST=1
- 2040 PSET (X,Y):LINE (X3,Y3)-(X,Y):X3=X:Y3=Y
- 2050 NEXT TY
- 2052 LOCATE 2,66:PRINT"LO=";INT(QLO);"/";II$
- 2053 LOCATE 1,66:PRINT"HI=";INT(QHI);"/";IQ$
- 2060 IF CX$="E" OR CX$="e" THEN GOSUB 3060
- 2065 LOCATE 24,70:PRINT "HIT ANY KEY";
- 2066 I$=INKEY$:IF I$="" THEN 2066
- 2070 FIRST=0
- 2110 SCREEN 0:RETURN
- 2120 REM PUT PARAMETERS ON THE SCREEN
- 2130 B=5
- 2140 LOCATE 1,2:PRINT"PARAMETERS:";
- 2150 LOCATE 2,2:PRINT"FREQ. ";KHZ;"KHz";
- 2160 LOCATE 3,2:PRINT"POWER ";KWS;"KW";
- 2170 LOCATE 4,2
- 2180 PRINT" FIELD PHASE";
- 2190 LOCATE B,2
- 2200 FOR T=1 TO TOWERS
- 2210 IF H(T)=0 THEN 2250
- 2220 PRINT T;TAB(5);F(T);TAB(11);PP(T);
- 2230 B=B+1
- 2240 LOCATE B,2
- 2250 NEXT T
- 2260 RETURN
- 2460 LODIS=0
- 2470 FOR YT=1 TO TOWERS
- 2480 IF SS(YT)>LODIS THEN LODIS=SS(YT)
- 2490 NEXT YT
- 2500 WL=984000!/KHZ
- 2510 FOR I=1 TO TOWERS
- 2520 IF H(I)=0 THEN 2540
- 2530 S1(I)=(SS(I)/360)*WL
- 2540 NEXT I
- 2550 LINE(0,99)-(185,198),,B
- 2560 FOR TY=1 TO TOWERS
- 2570 IF H(TY)=0 THEN 2670
- 2580 RATIO=SS(TY)/LODIS
- 2590 X1=DD(TY)*(PI/180)
- 2600 X=SIN(X1)*RATIO
- 2610 Y=COS(X1)*RATIO
- 2620 Y=145-((Y*.42)*70)
- 2630 X=100+(X*70)
- 2640 CIRCLE(X,Y),3
- 2650 CIRCLE(100,145),3:PSET(X,Y)
- 2660 GOSUB 2690
- 2670 NEXT TY
- 2680 RETURN
- 2690 REM PUT NUMBERS NEXT TO THE TOWERS
- 2700 DRAW "BR8"+E$(TY)+"BD8BL10"
- 2710 FOR UU=1 TO LEN(SS$(TY))
- 2720 LL=VAL(MID$(SS$(TY),UU,1)):DRAW E$(LL)+"BR2"
- 2730 NEXT UU:DRAW SLA$+"BR3"
- 2740 FOR UU=1 TO LEN(DD$(TY))
- 2750 LL=VAL(MID$(DD$(TY),UU,1)):DRAW E$(LL)+"BR2"
- 2760 NEXT UU
- 2770 RETURN
- 2780 REM REMOVE A TOWER FROM THE ARRAY
- 2790 IF TOWERS=2 THEN PRINT"YOU CAN'T TAKE AWAY A TOWER OR IT WON'T BA AN ARRAY.":GOTO 3030
- 2800 CLS:PRINT"REMOVE A TOWER FROM THE ARRAY"
- 2810 LOCATE 6,1:INPUT"REMOVE WHICH TOWER";RTOW
- 2820 IF RTOW<1 OR RTOW>TOWERS THEN 2780
- 2830 F(RTOW)=0:P(RTOW)=0:S(RTOW)=0:D(RTOW)=0:H(RTOW)=0:SS(RTOW)=0:PP(RTOW)=0:DD(RTOW)=0:SS$(RTOW)="0":DD$(RTOW)="0"
- 2840 GOTO 1380
- 2850 REM ADD A TOWER
- 2860 FOR Y=1 TO 6
- 2870 IF H(Y)=0 THEN 2930
- 2880 NEXT Y
- 2890 PRINT"TOTAL NUMBER OF TOWERS ALLOWED ARE ALREADY ALLOCATED."
- 2900 FOR PO=1 TO 2000
- 2910 NEXT PO
- 2920 GOTO 1380
- 2930 CLS:PRINT"ADD A TOWER TO THE ARRAY"
- 2940 IF Y>TOWERS THEN TOWERS=TOWERS+1
- 2950 LOCATE 6,1:PRINT"THIS WILL BE TOWER #";Y
- 2960 LOCATE 9,1:PRINT"ENTER FIELD FOR TOWER";Y;:INPUT F(Y)
- 2970 INPUT"ENTER PHASE";P(Y):PP(Y)=P(Y):P(Y)=P(Y)/Z1
- 2980 INPUT"ENTER SPACING";S(Y):SS(Y)=S(Y):SS$(Y)=STR$(S(Y)):S(Y)=S(Y)/Z1
- 2990 INPUT"ENTER ORIENTATION";D(Y):DD(Y)=D(Y):DD$(Y)=STR$(D(Y)):D(Y)=D(Y)/Z1
- 3000 INPUT"ENTER HEIGHT";H(Y)
- 3010 IF H(Y)=0 THEN PRINT"YOU CAN'T HAVE A 0 DEG. TOWER. TRY AGAIN.":GOTO 3000
- 3020 PRINT:PRINT:PRINT"NEW TOWER HAS BEEN ALLOCATED"
- 3030 FOR P1=1 TO 2000
- 3040 NEXT P1
- 3050 GOTO 1380
- 3060 REM EXPANDED SCALE
- 3070 GOSUB 3280
- 3080 LOCATE 1,20:INPUT"ENTER SCALE FACTOR >200";SF
- 3085 VIEW SCREEN (255,40)-(585,150)
- 3090 RADIUS=200
- 3100 QHI=Q(1)
- 3110 FOR HI=0 TO 360
- 3120 IF Q(HI)>QHI THEN QHI=Q(HI)
- 3130 NEXT HI
- 3140 QLO=QHI/K1
- 3150 FOR TY=0 TO 360 STEP C
- 3160 RATIO=Q(TY)/QHI
- 3170 X1=TY*(PI/180)
- 3180 X=SIN(X1)*RATIO
- 3190 Y=COS(X1)*RATIO
- 3200 Y=100-((Y*.42)*SF)
- 3210 X=420+(X*SF)
- 3220 IF FIRST=0 THEN X3=X:Y3=Y:FIRST=1
- 3230 PSET(X,Y)
- 3240 NEXT TY
- 3245 VIEW
- 3250 GOSUB 3280
- 3260 LOCATE 1,20:INPUT"ENTER 'A' FOR ANOTHER SCALE";CV$
- 3270 IF CV$="A" OR CV$="a" THEN 3060 ELSE CLS:RETURN
- 3280 LOCATE 1,20:PRINT SPACE$(30);
- 3290 RETURN
- 3300 REM SAVE AND LOAD ROUTINES
- 3305 CLS:PRINT"SAVING INFORMANTION UNDER THE NAME ";STNAME$;".DAT"
- 3306 MB$=STNAME$+".DAT"
- 3310 OPEN "O",2,MB$
- 3315 WRITE #2,TOWERS
- 3316 WRITE #2,STNAME$,KHZ,KWS
- 3320 FOR GX=1 TO TOWERS
- 3330 WRITE #2,F(GX),P(GX),PP(GX),S(GX),SS(GX),SS$(GX),D(GX),DD(GX),DD$(GX),H(GX)
- 3340 NEXT GX
- 3345 CLOSE #2
- 3350 GOTO 1380
- 3355 CLS:INPUT"ENTER NAME OF FILE (NO EXTENSIONS)";MB$:MB$=MB$+".DAT"
- 3360 OPEN "I",2,MB$
- 3370 INPUT #2,TOWERS:TJ=TOWERS
- 3371 INPUT #2,STNAME$,KHZ,KWS
- 3372 PRINT"LOADING INFORMATION FOR ";STNAME$
- 3375 FOR T=1 TO TJ
- 3380 INPUT #2,F(T),P(T),PP(T),S(T),SS(T),SS$(T),D(T),DD(T),DD$(T),H(T)
- 3392 NEXT T
- 3400 CLOSE #2
- 3410 GOTO 610
-