home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / ant / array / array.bas
Encoding:
BASIC Source File  |  1989-07-29  |  11.2 KB  |  337 lines

  1. 1 CLS
  2. 10 PRINT"THIS PROGRAM IS USED TO FIGURE ARRAY CHARACTERISTICS AND FIELD INTENSITY"
  3. 20 PRINT"RATIOS FOR MULTI ANTENNA DIRECTIONAL ARRAYS."
  4. 30 LOCATE 5,1:PRINT"WRITTEN BY DAVID MATHEWS CHIEF ENGINEER, WMNI RADIO COL. OHIO"
  5. 40 PRINT:PRINT"IT IS NOT INTENDED TO BE USED FOR GETTING INFORMATION TO SUBMIT TO"
  6. 50 PRINT"THE FEDERAL COMMUNICATIONS COMMISSION (FCC) AND CAN'T BE USED FOR THAT "
  7. 60 PRINT"PURPOSE. IT IS HOWEVER A LOT OF FUN TO USE AND CAN BE VERY ENLIGHTENING."
  8. 70 PRINT:PRINT"PROGRAM REQUIREMENTS ARE 1) 640K OF MEMORY  2) CGA BOARD OR CGA SIMULATOR"
  9. 80 LOCATE 24,1:INPUT"HIT ENTER TO BEGIN";ZZ$
  10. 90 'INPUT DATA HERE
  11. 100 CLS
  12. 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)
  13. 120 DIM Q(1440):PI=3.141593
  14. 130 Z1=57.2958
  15. 160 REM ** SET UP FUNCTION KEYS **
  16. 170 KEY 1,"FIELD"+CHR$(13)
  17. 180 KEY 2,"PHASE"+CHR$(13)
  18. 190 KEY 3,"SPACING"+CHR$(13)
  19. 200 KEY 4,"ORIENT"+CHR$(13)
  20. 210 KEY 5,"STEP"+CHR$(13)
  21. 220 KEY 6,"REMOVE"+CHR$(13)
  22. 230 KEY 7,"ADD"+CHR$(13)
  23. 240 KEY 8,"K FACT"+CHR$(13)
  24. 250 KEY 9,"NONE"+CHR$(13)
  25. 260 E$(1)="BR1R1NR1U6G1BD5BR3"
  26. 270 E$(2)="BR1NR3E3U2H1L1G1BD5BR3"
  27. 280 E$(3)="BR1BU1F1R1E1U1H1NL1E1U1H1L1G1BD5BR3"
  28. 290 E$(4)="BR4U6G2D1R3BD3"
  29. 300 E$(5)="BE1F1R1E1U1H1L1H1U2R3BD6"
  30. 310 E$(6)="BE4BU2L2G1D4F1R1E1U1H1L2BD3BR3"
  31. 320 E$(7)="BR1U2E3U1L3BD6BR3"
  32. 330 E$(8)="BE1F1R1E1U1H1L1H1U1E1R1F1D1G1L1G1D1BD1BR3"
  33. 340 E$(9)="BR1R2E1U4H1L1G1D1F1R2BD3"
  34. 350 E$(0)="BE1F1R1E1U4H1L1G1D3NE3D1BD1BR3"
  35. 360 SLA$="BR2U1E4U1BD6BR3"
  36. 370 DG$="BE3E1U1H1L1G1D1F1R1BD3BR2"
  37. 380 DOT$="BR1L1"
  38. 381 INPUT "DO YOU WANT TO LOAD A SAVED SET OF ARRAY VARIABLES? Y/N";Z$
  39. 382 IF Z$="Y" OR Z$="y" THEN 3355
  40. 385 INPUT"ENTER NAME OF STATION ";STNAME$
  41. 390 INPUT"ENTER FREQUENCY IN KHz   ";KHZ
  42. 400 INPUT"ENTER POWER IN KWs       ";KWS
  43. 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
  44. 410 FOR T=1 TO TOWERS
  45. 420 CLS
  46. 430 PRINT"TOWER #";T:PRINT STRING$(70,"-")
  47. 440 PRINT "FIELD        ";
  48. 450 INPUT F(T)
  49. 460 PRINT"PHASE         ";
  50. 470 INPUT P(T):PP(T)=P(T)
  51. 480 PRINT"SPACING       ";
  52. 490 INPUT S(T):SS(T)=S(T):SS$(T)=STR$(SS(T))
  53. 500 PRINT"ORIENTATION   ";
  54. 510 INPUT D(T):DD(T)=D(T):DD$(T)=STR$(DD(T))
  55. 520 PRINT"HEIGHT        ";
  56. 530 INPUT H(T)
  57. 540 IF H(T)=0 THEN PRINT"YOU CAN'T HAVE A 0 DEG. TOWER. TRY AGAIN":GOTO 520
  58. 550 PRINT STRING$(70,"-")
  59. 560 NEXT T
  60. 580 FOR T=1 TO TOWERS
  61. 590 P(T)=P(T)/Z1:S(T)=S(T)/Z1:D(T)=D(T)/Z1
  62. 600 NEXT T
  63. 610 CLS
  64. 620 C=2:REM INITIAL SETTING OF STEP RANGE =2
  65. 630 K1=1
  66. 640 GOSUB 1400
  67. 650 FA$="####":FB$="#####.#":FC$="###.###"
  68. 660 '
  69. 670 'START MAIN PROGRAM HERE
  70. 680 R=0
  71. 690 M1=TOWERS
  72. 700 FOR AO=0 TO 90 STEP C
  73. 710 A1=AO/Z1
  74. 720 A2=(AO+90)/Z1
  75. 730 A3=(AO+180)/Z1
  76. 740 A4=(AO+270)/Z1
  77. 750 X=0:Y=0
  78. 760 FOR L%=1 TO M1
  79. 770 S1=S(L%)*COS(A1-D(L%))
  80. 780 B=S1+P(L%)
  81. 790 X=F(L%)*COS(B)+X
  82. 800 Y=F(L%)*COS(B)+Y
  83. 810 NEXT L%
  84. 820 E1=K1*SQR(X*X+Y*Y)
  85. 830 X=0:Y=0
  86. 840 FOR L%=1 TO M1
  87. 850 S2=S(L%)*COS(A2-D(L%))
  88. 860 B=S2+P(L%)
  89. 870 X=F(L%)*COS(B)+X
  90. 880 Y=F(L%)*COS(B)+Y
  91. 890 NEXT L%
  92. 900 E2=K1*SQR(X*X+Y*Y)
  93. 910 X=0:Y=0
  94. 920 FOR L%=1 TO M1
  95. 930 S3=S(L%)*COS(A3-D(L%))
  96. 940 B=S3+P(L%)
  97. 950 X=F(L%)*COS(B)+X
  98. 960 Y=F(L%)*COS(B)+Y
  99. 970 NEXT L%
  100. 980 E3=K1*SQR(X*X+Y*Y)
  101. 990 X=0:Y=0
  102. 1000 FOR L%=1 TO M1
  103. 1010 S4=S(L%)*COS(A4-D(L%))
  104. 1020 B=S4+P(L%)
  105. 1030 X=F(L%)*COS(B)+X
  106. 1040 Y=F(L%)*COS(B)+Y
  107. 1050 NEXT L%
  108. 1060 E4=K1*SQR(X*X+Y*Y)
  109. 1070 X=0:Y=0
  110. 1080 Q(R)=E1:Q(R+90)=E2:Q(R+180)=E3:Q(R+270)=E4
  111. 1090 R=R+C
  112. 1100 NEXT AO
  113. 1110 GOSUB 1800
  114. 1150 INPUT"DO YOU WANT A COMPLETE PRINT OUT OF DATA ";ZX$
  115. 1160 IF ZX$="Y" OR ZX$="y" THEN 1170 ELSE 1380
  116. 1170 REM ADD A CHR$(12) HERE FOR A FORM FEED AT BEGINNING OF PRINTOUT
  117. 1180 LPRINT TAB(20);"FIELD";TAB(30);"PHASE";TAB(40);"SPACING";TAB(50);"ORIENT";TAB(60);"HEIGHT"
  118. 1190 FOR T=1 TO TOWERS
  119. 1200 LPRINT "TOWER #";T;TAB(20);F(T);TAB(30);PP(T);TAB(40);SS(T);TAB(50);DD(T);TAB(60);H(T)
  120. 1210 NEXT T
  121. 1220 LPRINT:LPRINT:LPRINT
  122. 1230 LPRINT"THEORETICAL HORIZONTAL PATTERN AT ONE MILE."
  123. 1240 LPRINT:LPRINT:LPRINT
  124. 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"
  125. 1260 LPRINT STRING$(79,"-")
  126. 1270 R=0:P=0
  127. 1280 LPRINT USING"###";P;:LPRINT TAB(10);USING"###.###";Q(R);:PRINT USING"###";P;:PRINT TAB(10);USING"###.###";Q(R);
  128. 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);
  129. 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);
  130. 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)
  131. 1320 R=R+C:P=P+C
  132. 1330 IF R<81 THEN 1280
  133. 1340 GOTO 1360
  134. 1350 STOP
  135. 1360 PRINT:PRINT:INPUT"DO YOU WANT A COMPLETE PRINT OUT?";Z$
  136. 1370 IF Z$="Y" OR Z$="y" THEN 1270
  137. 1380 'CHANGE INFORMATION HERE
  138. 1400 CLS:PRINT"CHANGE INFORMATION FOR WHAT?:"
  139. 1410 GOSUB 1730
  140. 1420 PRINT
  141. 1430 PRINT"F1)  FIELD"
  142. 1440 PRINT"F2)  PHASE"
  143. 1450 PRINT"F3)  SPACING"
  144. 1460 PRINT"F4)  ORIENTATION"
  145. 1470 PRINT"F5)  STEP FACTOR";" <";C;">"
  146. 1471 PRINT"F6)  REMOVE A TOWER"
  147. 1472 PRINT"F7)  ADD A TOWER"
  148. 1480 PRINT"F8)  K FACTOR";" <";K1;">"
  149. 1481 PRINT"F9)  NONE
  150. 1482 PRINT"77)  LOAD NEW PARAMETERS"
  151. 1495 PRINT"88)  SAVE ARRAY SETTINGS"
  152. 1500 PRINT"99)  QUIT"
  153. 1510 PRINT:PRINT:INPUT"SELECT USING FUNCTION KEYS ";N$
  154. 1512 IF N$="77" THEN GOTO 3355
  155. 1515 IF N$="88" THEN GOSUB 3300
  156. 1520 IF N$="REMOVE" THEN GOTO 2780
  157. 1530 IF N$="ADD" THEN GOTO 2850
  158. 1540 IF N$="99" THEN STOP
  159. 1560 IF N$="STEP" THEN INPUT"WHAT IS THE NEW STEP FACTOR";C:CLS:GOTO 1380
  160. 1570 IF N$="K FACT" THEN INPUT"WHAT IS THE NEW K FACTOR";K1:CLS:GOTO 1380
  161. 1580 IF N$="NONE" THEN 660
  162. 1590 IF N$="FIELD" THEN N=1
  163. 1600 IF N$="PHASE" THEN N=2
  164. 1610 IF N$="SPACING" THEN N=3
  165. 1620 IF N$="ORIENT" THEN N=4
  166. 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"
  167. 1640 INPUT "ON WHICH TOWER? ";M
  168. 1650 PRINT "ENTER NEW ";Y$;" FOR TOWER ";M;:INPUT KL
  169. 1660 IF N=1 THEN F(M)=KL:PG=F(M)
  170. 1670 IF N=2 THEN P(M)=KL:PG=P(M):P(M)=P(M)/Z1:PP(M)=KL
  171. 1680 IF N=3 THEN S(M)=KL:PG=S(M):S(M)=S(M)/Z1:SS(M)=KL:SS$(M)=STR$(KL)
  172. 1690 IF N=4 THEN D(M)=KL:PG=D(M):D(M)=D(M)/Z1:DD(M)=KL:DD$(M)=STR$(KL)
  173. 1700 REM
  174. 1710 CLS:GOTO 1400
  175. 1720 CLS
  176. 1730 REM PRINT ON SCREEN LAST INFORMATION ON TOWERS
  177. 1740 PRINT TAB(20);"FIELD";TAB(30);"PHASE";TAB(40);"SPACING";TAB(50);"ORIENT"
  178. 1750 FOR T=1 TO TOWERS
  179. 1760 IF H(T)=0 THEN 1780
  180. 1770 PRINT "TOWER #";T;TAB(20);F(T);TAB(30);PP(T);TAB(40);SS$(T);TAB(50);DD$(T)
  181. 1780 NEXT T
  182. 1790 RETURN
  183. 1800 REM  PLOT THE PATTERN
  184. 1810  SCREEN 2:CLS
  185. 1820 INPUT"(E)XPANDED SCALE OR (S)TANDARD SCALE";CX$
  186. 1830 LOCATE 1,55:PRINT"K FACTOR= ";K1
  187. 1840 DEF SEG=&HB800:BLOAD"POLAR.BIN",0
  188. 1850 GOSUB 2120
  189. 1860 GOSUB 2460
  190. 1870 LOCATE 12,1:PRINT "1/4 WAVE = ";INT(WL)/4;
  191. 1890 RADIUS=200
  192. 1900 QHI=Q(1):QLO=10000
  193. 1910 FOR HI=0 TO 360 STEP C
  194. 1920 IF Q(HI)>QHI THEN QHI=Q(HI):IQ$=STR$(HI):QHI$=STR$(QHI):QHI$=LEFT$(QHI$,5)
  195. 1930 IF Q(HI)<QLO THEN QLO=Q(HI):II$=STR$(HI):QLO$=STR$(QLO):QLO$=LEFT$(QLO$,5)
  196. 1940 NEXT HI
  197. 1950 QH$=STR$(QHI)
  198. 1960 FOR TY=0 TO 360 STEP C
  199. 1970 RATIO=Q(TY)/QHI
  200. 1980 X1=TY*(PI/180)
  201. 1990 X=SIN(X1)*RATIO
  202. 2000 Y=COS(X1)*RATIO
  203. 2010 Y=100-((Y*.42)*150)
  204. 2020 X=420+(X*150)
  205. 2030 IF FIRST=0 THEN X3=X:Y3=Y:FIRST=1
  206. 2040 PSET (X,Y):LINE (X3,Y3)-(X,Y):X3=X:Y3=Y
  207. 2050 NEXT TY
  208. 2052 LOCATE 2,66:PRINT"LO=";INT(QLO);"/";II$
  209. 2053 LOCATE 1,66:PRINT"HI=";INT(QHI);"/";IQ$
  210. 2060 IF CX$="E" OR CX$="e" THEN GOSUB 3060
  211. 2065 LOCATE 24,70:PRINT "HIT ANY KEY";
  212. 2066 I$=INKEY$:IF I$="" THEN 2066
  213. 2070 FIRST=0
  214. 2110 SCREEN 0:RETURN
  215. 2120 REM PUT PARAMETERS ON THE SCREEN
  216. 2130 B=5
  217. 2140 LOCATE 1,2:PRINT"PARAMETERS:";
  218. 2150 LOCATE 2,2:PRINT"FREQ. ";KHZ;"KHz";
  219. 2160 LOCATE 3,2:PRINT"POWER ";KWS;"KW";
  220. 2170 LOCATE 4,2
  221. 2180 PRINT"   FIELD  PHASE";
  222. 2190 LOCATE B,2
  223. 2200 FOR T=1 TO TOWERS
  224. 2210 IF H(T)=0 THEN 2250
  225. 2220 PRINT T;TAB(5);F(T);TAB(11);PP(T);
  226. 2230 B=B+1
  227. 2240 LOCATE B,2
  228. 2250 NEXT T
  229. 2260 RETURN
  230. 2460 LODIS=0
  231. 2470 FOR YT=1 TO TOWERS
  232. 2480 IF SS(YT)>LODIS THEN LODIS=SS(YT)
  233. 2490 NEXT YT
  234. 2500 WL=984000!/KHZ
  235. 2510 FOR I=1 TO TOWERS
  236. 2520 IF H(I)=0 THEN 2540
  237. 2530 S1(I)=(SS(I)/360)*WL
  238. 2540 NEXT I
  239. 2550 LINE(0,99)-(185,198),,B
  240. 2560 FOR TY=1 TO TOWERS
  241. 2570 IF H(TY)=0 THEN 2670
  242. 2580 RATIO=SS(TY)/LODIS
  243. 2590 X1=DD(TY)*(PI/180)
  244. 2600 X=SIN(X1)*RATIO
  245. 2610 Y=COS(X1)*RATIO
  246. 2620 Y=145-((Y*.42)*70)
  247. 2630 X=100+(X*70)
  248. 2640 CIRCLE(X,Y),3
  249. 2650 CIRCLE(100,145),3:PSET(X,Y)
  250. 2660 GOSUB 2690
  251. 2670 NEXT TY
  252. 2680 RETURN
  253. 2690 REM PUT NUMBERS NEXT TO THE TOWERS
  254. 2700 DRAW "BR8"+E$(TY)+"BD8BL10"
  255. 2710 FOR UU=1 TO LEN(SS$(TY))
  256. 2720 LL=VAL(MID$(SS$(TY),UU,1)):DRAW E$(LL)+"BR2"
  257. 2730 NEXT UU:DRAW SLA$+"BR3"
  258. 2740 FOR UU=1 TO LEN(DD$(TY))
  259. 2750 LL=VAL(MID$(DD$(TY),UU,1)):DRAW E$(LL)+"BR2"
  260. 2760 NEXT UU
  261. 2770 RETURN
  262. 2780 REM REMOVE A TOWER FROM THE ARRAY
  263. 2790 IF TOWERS=2 THEN PRINT"YOU CAN'T TAKE AWAY A TOWER OR IT WON'T BA AN ARRAY.":GOTO 3030
  264. 2800 CLS:PRINT"REMOVE A TOWER FROM THE ARRAY"
  265. 2810 LOCATE 6,1:INPUT"REMOVE WHICH TOWER";RTOW
  266. 2820 IF RTOW<1 OR RTOW>TOWERS THEN 2780
  267. 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"
  268. 2840 GOTO 1380
  269. 2850 REM ADD A TOWER
  270. 2860 FOR Y=1 TO 6
  271. 2870 IF H(Y)=0 THEN 2930
  272. 2880 NEXT Y
  273. 2890 PRINT"TOTAL NUMBER OF TOWERS ALLOWED ARE ALREADY ALLOCATED."
  274. 2900 FOR PO=1 TO 2000
  275. 2910 NEXT PO
  276. 2920 GOTO 1380
  277. 2930 CLS:PRINT"ADD A TOWER TO THE ARRAY"
  278. 2940 IF Y>TOWERS THEN TOWERS=TOWERS+1
  279. 2950 LOCATE 6,1:PRINT"THIS WILL BE TOWER #";Y
  280. 2960 LOCATE 9,1:PRINT"ENTER FIELD FOR TOWER";Y;:INPUT F(Y)
  281. 2970 INPUT"ENTER PHASE";P(Y):PP(Y)=P(Y):P(Y)=P(Y)/Z1
  282. 2980 INPUT"ENTER SPACING";S(Y):SS(Y)=S(Y):SS$(Y)=STR$(S(Y)):S(Y)=S(Y)/Z1
  283. 2990 INPUT"ENTER ORIENTATION";D(Y):DD(Y)=D(Y):DD$(Y)=STR$(D(Y)):D(Y)=D(Y)/Z1
  284. 3000 INPUT"ENTER HEIGHT";H(Y)
  285. 3010 IF H(Y)=0 THEN PRINT"YOU CAN'T HAVE A 0 DEG. TOWER. TRY AGAIN.":GOTO 3000
  286. 3020 PRINT:PRINT:PRINT"NEW TOWER HAS BEEN ALLOCATED"
  287. 3030 FOR P1=1 TO 2000
  288. 3040 NEXT P1
  289. 3050 GOTO 1380
  290. 3060 REM EXPANDED SCALE
  291. 3070 GOSUB 3280
  292. 3080 LOCATE 1,20:INPUT"ENTER SCALE FACTOR >200";SF
  293. 3085 VIEW SCREEN (255,40)-(585,150)
  294. 3090 RADIUS=200
  295. 3100 QHI=Q(1)
  296. 3110 FOR HI=0 TO 360
  297. 3120 IF Q(HI)>QHI THEN QHI=Q(HI)
  298. 3130 NEXT HI
  299. 3140 QLO=QHI/K1
  300. 3150 FOR TY=0 TO 360 STEP C
  301. 3160 RATIO=Q(TY)/QHI
  302. 3170 X1=TY*(PI/180)
  303. 3180 X=SIN(X1)*RATIO
  304. 3190 Y=COS(X1)*RATIO
  305. 3200 Y=100-((Y*.42)*SF)
  306. 3210 X=420+(X*SF)
  307. 3220 IF FIRST=0 THEN X3=X:Y3=Y:FIRST=1
  308. 3230 PSET(X,Y)
  309. 3240 NEXT TY
  310. 3245 VIEW
  311. 3250 GOSUB 3280
  312. 3260 LOCATE 1,20:INPUT"ENTER 'A' FOR ANOTHER SCALE";CV$
  313. 3270 IF CV$="A" OR CV$="a" THEN 3060 ELSE CLS:RETURN
  314. 3280 LOCATE 1,20:PRINT SPACE$(30);
  315. 3290 RETURN
  316. 3300 REM SAVE AND LOAD ROUTINES
  317. 3305 CLS:PRINT"SAVING INFORMANTION UNDER THE NAME ";STNAME$;".DAT"
  318. 3306 MB$=STNAME$+".DAT"
  319. 3310 OPEN "O",2,MB$
  320. 3315 WRITE #2,TOWERS
  321. 3316 WRITE #2,STNAME$,KHZ,KWS
  322. 3320 FOR GX=1 TO TOWERS
  323. 3330 WRITE #2,F(GX),P(GX),PP(GX),S(GX),SS(GX),SS$(GX),D(GX),DD(GX),DD$(GX),H(GX)
  324. 3340 NEXT GX
  325. 3345 CLOSE #2
  326. 3350 GOTO 1380
  327. 3355 CLS:INPUT"ENTER NAME OF FILE (NO EXTENSIONS)";MB$:MB$=MB$+".DAT"
  328. 3360 OPEN "I",2,MB$
  329. 3370 INPUT #2,TOWERS:TJ=TOWERS
  330. 3371 INPUT #2,STNAME$,KHZ,KWS
  331. 3372 PRINT"LOADING INFORMATION FOR ";STNAME$
  332. 3375 FOR T=1 TO TJ
  333. 3380 INPUT #2,F(T),P(T),PP(T),S(T),SS(T),SS$(T),D(T),DD(T),DD$(T),H(T)
  334. 3392 NEXT T
  335. 3400 CLOSE #2
  336. 3410 GOTO 610
  337.