home *** CD-ROM | disk | FTP | other *** search
/ Antennas / Antennas_CD-ROM_Walnut_Creek_September_1996.iso / public / penstate / circular.bas < prev    next >
BASIC Source File  |  1996-06-30  |  5KB  |  143 lines

  1. 5 '//////////////////// CIRCULAR ////////////////////
  2. 10 SCREEN 2,0:CLS:KEY OFF :ON ERROR GOTO 1700
  3. 20 '      JUNE 12, 1986
  4. 30 '      ARRAY FACTOR OF CIRCULAR ARRAY
  5. 40 '      AHMAD FAIZAL MOHD ZAIN
  6. 50 '
  7. 60 PRINT"          ARRAY FACTOR OF UNIFORM CIRCULAR ARRAY":PRINT:PRINT
  8. 70 DEF FN LOGTEN(X)=LOG(X)/LOG(10)
  9. 80 DIM AF(370),Y(400)
  10. 90 PI=3.141592:TWOPI=2*PI
  11. 100 PRINT"Specify main beam direction":PRINT
  12. 110 INPUT"DIRECTION IN THETA ";THE0
  13. 120 INPUT"DIRECTION IN PHI ";PHI0
  14. 130 INPUT"NUMBER OF ELEMENTS ";N
  15. 140 INPUT"RADIUS OF ARRAY ";A
  16. 150 TH=THE0*PI/180:PH=PHI0*PI/180
  17. 160 STHE0=SIN(TH):SPHI0=SIN(PH):CPHI0=COS(PH)
  18. 170 STP0=STHE0*SPHI0:CTP0=STHE0*CPHI0
  19. 180 P=0    'xz-plane
  20. 190 YMAX=0:YMIN=0
  21. 200 LOCATE 24,1:PRINT"Please wait...";
  22. 210 GOSUB 390
  23. 220 CLS
  24. 230 GOSUB 660
  25. 240 LOCATE 24,1
  26. 250 INPUT"Type return to continue";QQ
  27. 260 GOSUB 740
  28. 270 LOCATE 22,10:PRINT"Antenna pattern in xz-plane (PHI=0)"
  29. 280 LOCATE 23,1:PRINT"I'm doing yz-plane calculation.  Please wait...";
  30. 290 P=90   'yz-plane
  31. 300 YMAX=0:YMIN=0
  32. 310 GOSUB 390
  33. 320 LOCATE 23,1:PRINT"Type return to continue...                   ";:INPUT QQ
  34. 330 GOSUB 740
  35. 340 LOCATE 22,10:PRINT"Antenna pattern in yz-plane (PHI=90)"
  36. 350 GOSUB 1270
  37. 360 '
  38. 370 END
  39. 380 '
  40. 390   FOR THE=0 TO 360
  41. 400     TH=THE*PI/180
  42. 410     PHI=P*PI/180
  43. 420     REAL=0:IMAG=0
  44. 430     FOR I=1 TO N
  45. 440       STH=SIN(TH):SPHI=SIN(PHI)
  46. 450       CPHI=COS(PHI)
  47. 460       YY=STH*SPHI-STP0:XX=STH*CPHI-CTP0
  48. 470       IF XX>0 THEN EPSI=ATN(YY/XX)
  49. 480       IF XX<0 THEN EPSI=PI*SGN(YY)+ATN(YY/XX)
  50. 490       IF XX=0 THEN EPSI=(PI/2)*SGN(YY)
  51. 500       IF XX<0 AND YY=0 THEN EPSI=PI
  52. 510       RHO=A*SQR((STH*CPHI-CTP0)^2+(STH*SPHI-STP0)^2)
  53. 520       PHIN=TWOPI*I/N:CPE=COS(PHIN-EPSI)
  54. 530       TPIRHO=TWOPI*RHO*CPE
  55. 540       REAL=REAL+COS(TPIRHO)
  56. 550       IMAG=IMAG+SIN(TPIRHO)
  57. 560     NEXT I
  58. 570     AF(THE)=SQR(REAL*REAL+IMAG*IMAG)
  59. 580   Y(THE)=ABS(AF(THE))
  60. 590     Y(THE)=20*FN LOGTEN(Y(THE))
  61. 600     IF Y(THE)>YMAX THEN YMAX=Y(THE)
  62. 610     IF Y(THE)<YMIN THEN YMIN=Y(THE)
  63. 620   NEXT THE
  64. 630 YMAX=YMAX-YMIN
  65. 640 RETURN
  66. 650 '
  67. 660 PRINT"PHASE SHIFTS FOR EACH ELEMENTS ARE :-"
  68. 670 FOR I=1 TO N
  69. 680   PHIN=2*PI*I/N
  70. 690   ALPN=-2*PI*SIN(THE0)*COS(PHI0-PHIN)
  71. 700   ALPN=ALPN*180/PI
  72. 710   PRINT "ALPHA(";I;:PRINT USING ") = ####.##";ALPN
  73. 720 NEXT I
  74. 730 RETURN
  75. 740 SCREEN 2,0:CLS
  76. 750 VIEW (10,2)-(400,164),,1
  77. 760 WINDOW (-YMAX,-YMAX)-(YMAX,YMAX)
  78. 770 CLS
  79. 780 '
  80. 790 CIRCLE (0,0),YMAX,1
  81. 800 CIRCLE (0,0),.75*YMAX,1
  82. 810 CIRCLE (0,0),.5*YMAX,1
  83. 820 CIRCLE (0,0),.25*YMAX,1
  84. 830 '
  85. 840 LINE (-YMAX,0)-(YMAX,0),1
  86. 850 LINE (0,YMAX)-(0,-YMAX),1
  87. 860 LINE (-.707*YMAX,.707*YMAX)-(.707*YMAX,-.707*YMAX),1
  88. 870 LINE (-.707*YMAX,-.707*YMAX)-(.707*YMAX,.707*YMAX),1
  89. 880 '
  90. 890 PSET (0,Y(0))
  91. 900 FOR TH=0 TO 360
  92. 910   XX=TH*PI/180
  93. 920   Y(TH)=Y(TH)-YMIN
  94. 930   Y=Y(TH)*COS(XX)
  95. 940   X=Y(TH)*SIN(XX)
  96. 950   LINE -(X,Y),2
  97. 960 NEXT TH
  98. 970 LOCATE 1,53:PRINT"      CIRCULAR ARRAY"
  99. 980 LOCATE 2,53:PRINT USING "No. OF ELEMENTS = ###";N
  100. 990 LOCATE 3,53:PRINT USING "Radius of array = ###.##";A
  101. 1000 LOCATE 5,53:PRINT USING "MAIN BEAM IN THETA = ###";THE0
  102. 1010 LOCATE 6,53:PRINT USING "MAIN BEAM IN PHI   = ###";PHI0
  103. 1020 LOCATE 11,53:PRINT USING"dB SCALE = ###.##";YMAX*.25;:PRINT" dB/div"
  104. 1030 LOCATE 12,53:PRINT"0 dB on largest circle"
  105. 1040 LOCATE 2,26:PRINT"0":LOCATE 20,25:PRINT"180"
  106. 1050 RETURN
  107. 1060 A$=INKEY$
  108. 1070 IF LEN(A$)<>2 THEN 1060
  109. 1080 ANS=ASC(MID$(A$,2,1))
  110. 1090 IF ANS=72 THEN L=L+.1
  111. 1100 IF ANS=80 THEN L=L-.1
  112. 1110 IF ANS=75 THEN L=L-1
  113. 1120 IF ANS=77 THEN L=L+1
  114. 1130 IF L<=0 THEN L=.1
  115. 1140 IF ANS=84 THEN 1160
  116. 1150 GOTO 1060
  117. 1160 T$="DO YOU WANT TO RUN AGAIN (Y/N)?":LC=25:GOSUB 1220
  118. 1170 AN$=INKEY$
  119. 1180 IF AN$="Y" OR AN$="y" THEN RUN
  120. 1190 IF AN$="N" OR AN$="n" THEN END
  121. 1200 GOTO 1160
  122. 1210 :
  123. 1220 LOCATE LC,(40-LEN(T$))/2+1:PRINT T$;:RETURN    'SUBROUTINE TO CENTRE TEXT
  124. 1230 END
  125. 1240 LOCATE 24,1:PRINT"TYPE <RETURN> TO CONTINUE...";:INPUT W:SCREEN 0,0
  126. 1250 PRINT"I'M D      OME CALCULATION.  PLEASE WAIT..."
  127. 1260 RETURN
  128. 1270 T$="   DO YOU WANT TO RUN THIS PROGRAM AGAIN (Y/N)? ":LC=23:GOSUB 1330
  129. 1280 AN$=INKEY$
  130. 1290 IF AN$="Y" OR AN$="y" THEN RUN
  131. 1300 IF AN$="N" OR AN$="n" THEN END
  132. 1310 GOTO 1270
  133. 1320 :
  134. 1330 LOCATE LC,1:PRINT T$:RETURN
  135. 1500 SCREEN 0,0,0:SOUND 1510,10:COLOR 7,0:LOCATE 25,10:PRINT "Key: Esc to End or `R' to Run Again or `S' to Return Start";CHR$(29);:COLOR 15,0:LOCATE 25,15:PRINT "Esc";:LOCATE 25,30:PRINT "R";:LOCATE 25,50:PRINT "S";CHR$(29);:COLOR 7,0
  136. 1510 E$=INKEY$:IF E$="" THEN 1510 ELSE IF E$=CHR$(27) THEN CLS:END ELSE IF E$="R" OR E$="r" THEN RUN ELSE IF E$="S" OR E$="s" THEN RUN "START
  137. 1520 GOTO 1510
  138. 1600 '//////////////// Routine to Draw a Box //////////////////
  139. 1610 LOCATE Y1,X1+1:PRINT STRING$(X2-X1-1,"─");:LOCATE Y1,X1:PRINT "┌";:LOCATE Y1,X2:PRINT "╖";:FOR I= Y1+1 TO Y2-1:LOCATE I,X1:PRINT "│";:LOCATE I,X2:PRINT "║";:NEXT:LOCATE Y2,X1:PRINT "╘";:LOCATE Y2,X1+1
  140. 1620 PRINT STRING$(X2-X1-1,"═");:LOCATE Y2,X2:PRINT "╝";:RETURN
  141. 1700 SCREEN 0,0,0:COLOR 31,0:LOCATE 24,1:PRINT "Fault Detected";CHR$(29);:COLOR 7,0
  142. 1710 RESUME 1500
  143.