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

  1. 5 '///////////////////// WOODAF //////////////////////
  2. 10 CLS:KEY OFF :ON ERROR GOTO 1700
  3. 20 PRINT"                       WOODWARD-LAWSON ARRAY SYNTHESIS"
  4. 30 REM  WOODWARD-LAWSON SAMPLING METHOD
  5. 40 REM       ARRAY SYNTHESIS
  6. 50 REM            7/14/86
  7. 60 REM     AHMAD FAIZAL MOHD ZAIN
  8. 70 '
  9. 80 PI=3.141596
  10. 90 INPUT"NUMBER OF ELEMENTS ";NE
  11. 100 INPUT"SPACING BETWEEN ELEMENTS ";D
  12. 110 NMAX=NE*D
  13. 120 NM=NMAX*2+1
  14. 130 DIM W(200),A(200),F(181),I(200),Z(200),ANG(200)
  15. 140 DIM Y(200),PHI(200)
  16. 150 CLS:PRINT"Sample point","  w(n)","angle(n)","desired"
  17. 160 I=0
  18. 170 FOR N=-NMAX TO NMAX
  19. 180  I=I+1
  20. 190   W(I)=N/(NE*D)
  21. 200  X=W(I)
  22. 210  IF X*X=1 AND X>0 THEN ANG(I)=0:GOTO 240
  23. 220  IF X*X=1 AND X<0 THEN ANG(I)=-180:GOTO 240
  24. 230  ACOS=1.570796-ATN(X/SQR(1-X*X)):ANG(I)=180*ACOS/PI
  25. 240   PRINT USING "###        ##.##         ####.##        ";-N,W(I),ANG(I),:INPUT A(I)
  26. 250 NEXT N
  27. 260 GOSUB 1030
  28. 270 CLS:GOSUB 1490
  29. 280 '
  30. 290 FOR THETA=0 TO 180
  31. 300 W=COS(THETA*PI/180)
  32. 310 F(THETA)=0
  33. 320 I=0
  34. 330 FOR N=-NMAX TO NMAX
  35. 340   I=I+1
  36. 350   A=SIN((NE/2)*(W-W(I))*(2*PI)*D)
  37. 360   B=NE*SIN(.5*(W-W(I))*(2*PI)*D)
  38. 370   IF A=0 AND B=0 THEN F(THETA)=F(THETA)+A(I):GOTO 390
  39. 380   F(THETA)=F(THETA)+A(I)*A/B
  40. 390 NEXT N
  41. 400 Y(THETA)=F(THETA)
  42. 410 IF F(THETA)>YMAX THEN YMAX=F(THETA)
  43. 420 IF F(THETA)<YMIN THEN YMIN=F(THETA)
  44. 430 NEXT THETA
  45. 440 '
  46. 450 GOSUB 1100
  47. 460 GOSUB 1190
  48. 470 GOSUB 1480
  49. 480 '
  50. 490 '    calculate current
  51. 500 CLS
  52. 510 PRINT"element number     element position     excitation current        PHASE SHIFT"
  53. 520 '
  54. 530 I=0
  55. 540 YMAX=0:YMIN=0
  56. 550 PMAX=0:PMIN=0
  57. 560 EVEN=0
  58. 570 IF NE MOD 2=0 THEN EVEN=1
  59. 580 IF EVEN=1 THEN NN=NE/2 ELSE NN=(NE-1)/2
  60. 590 FOR M=-NN TO -1
  61. 600   I=I+1
  62. 610   CR=0:CI=0:J=0
  63. 620   IF EVEN<>1 THEN Z(I)=M*D ELSE Z(I)=(2*M+1)*D/2
  64. 630 GOSUB 780
  65. 640 GOSUB 850
  66. 650 NEXT M
  67. 660 M=0:CR=0:CI=0:I=0
  68. 670 IF EVEN=0 THEN Z(M)=M*D ELSE 700
  69. 680 GOSUB 780:GOSUB 850
  70. 690 I=0
  71. 700 FOR M=1 TO NN
  72. 710   I=I+1
  73. 720   CR=0:CI=0:J=0
  74. 730   IF EVEN<>1 THEN Z(I)=M*D ELSE Z(I)=(2*I-1)*D/2
  75. 740   GOSUB 780
  76. 750 GOSUB 850
  77. 760 NEXT M
  78. 770 GOSUB 1510
  79. 780   FOR N=-NMAX TO NMAX
  80. 790     A=2*PI*Z(I)*W(J)
  81. 800     CR=CR+A(J)*COS(A)
  82. 810     CI=CI+A(J)*SIN(A)
  83. 820     J=J+1
  84. 830   NEXT N
  85. 840 RETURN
  86. 850 CR=CR/NE:CI=CI/NE
  87. 860 IF CR>0 THEN PHI(I)=(180/PI)*ATN(CI/CR):GOTO 910
  88. 870 IF CR<0 THEN PHI(I)=180*SGN(CI)+(180/PI)*ATN(CI/CR):GOTO 910
  89. 880 IF CR=0 THEN PHI(I)=90*SGN(CI):GOTO 910
  90. 890 IF CI=0 AND CR<0 THEN PHI(I)=180:GOTO 910
  91. 900 PHI=ATN(CI/CR):PHI(I)=PHI*180/PI
  92. 910 IF PHI(I)=-180 THEN PHI(I)=180
  93. 920 IF PHI(I)=-0 THEN PHI(I)=0
  94. 930 I(I)=SQR(CR*CR+CI*CI)
  95. 940 IF PHI(I)>PMAX THEN PMAX=PHI(I)
  96. 950 IF PHI(I)<PMIN THEN PMIN=PHI(I)
  97. 960 PRINT USING "    ###                ##.##               ###.#####              ####.## ";M;Z(I);I(I),PHI(I)
  98. 970 RETURN
  99. 980 INPUT"DO YOU WANT TO MAKE ANY CHANGES";AN$
  100. 990 IF AN$="N" OR AN$="n" THEN RETURN
  101. 1000 INPUT"TYPE SAMPLING POINT TO CHANGE ";Q
  102. 1010 PRINT USING "###        ##.##         ####.##       ##.## ";Q,W(Q),ANG(Q),A(Q),:INPUT A(Q)
  103. 1020 '
  104. 1030 CLS:PRINT"sample no    w(n)         angle      desired sample"
  105. 1040 I=0:FOR N=-NMAX TO NMAX :I=I+1
  106. 1050 PRINT USING "###        ##.##         ####.##          ##.## ";I,W(I),ANG(I),A(I)
  107. 1060 NEXT N
  108. 1070 PRINT
  109. 1080 GOSUB 980
  110. 1090 RETURN
  111. 1100 '      MAY 29, 1986
  112. 1110 '      RECTANGULAR PLOT OF DATA
  113. 1120 SCREEN 2:CLS
  114. 1130 FOR K=7 TO 67 STEP 10:LOCATE 20,K:PRINT"+";:NEXT K
  115. 1150 VIEW (52,28)-(530,154),,1
  116. 1160 LINE (239,0)-(239,154)
  117. 1170 RETURN
  118. 1180 '
  119. 1190 PSET (0,Y(0))
  120. 1200 WINDOW (0,YMIN)-(180,YMAX)
  121. 1202 LINE (0,0)-(180,0),,,&HF0F0
  122. 1204 PRESET (0,1)
  123. 1206 LINE (0,1)-(180,1),,,&HF0F0
  124. 1208 PRESET (0,Y(0))
  125. 1210 FOR X=0 TO 180
  126. 1220   LINE -(X,Y(X))
  127. 1230 NEXT X
  128. 1240 LOCATE 3,20:PRINT"MAGNITUDE OF SYNTHESISED PATTERN"
  129. 1260 LOCATE 21,6:PRINT"180":LOCATE 21,37:PRINT"90":LOCATE 21,67:PRINT"0"
  130. 1270 RETURN
  131. 1280 '
  132. 1290 '      MAY 29, 1986
  133. 1300 '      RECTANGULAR PLOT OF DATA
  134. 1310 LOCATE 3,20:PRINT"MAGNITUDE OF CURRENT DISTRIBUTION"
  135. 1320 '
  136. 1330 WINDOW (1,YMIN)-(I,YMAX)
  137. 1340 '
  138. 1350 PSET (1,Y(1))
  139. 1360 FOR X=1 TO I
  140. 1370   LINE -(X,Y(X))
  141. 1380 NEXT X
  142. 1390 LOCATE 21,6:PRINT-L/2:LOCATE 21,37:PRINT"0":LOCATE 21,66:PRINT L/2
  143. 1400 RETURN
  144. 1410 '
  145. 1420 WINDOW (1,PMIN)-(I,PMAX)
  146. 1430 PSET (1,PHI(1))
  147. 1440 FOR X=1 TO I
  148. 1450   LINE -(X,PHI(X))
  149. 1460 NEXT X
  150. 1470 RETURN
  151. 1480 LOCATE 24,1:PRINT"TYPE <RETURN> TO CONTINUE...";:INPUT W:SCREEN 0,0
  152. 1490 PRINT"I'M DOING SOME CALCULATION.  PLEASE WAIT..."
  153. 1500 RETURN
  154. 1510 T$="DO YOU WANT TO RUN THIS PROGRAM AGAIN (Y/N)? ":LC=23:GOSUB 1570
  155. 1520 AN$=INKEY$
  156. 1530 IF AN$="Y" OR AN$="y" THEN RUN
  157. 1540 IF AN$="N" OR AN$="n" THEN END
  158. 1550 GOTO 1510
  159. 1560 :
  160. 1570 LOCATE LC,(80-LEN(T$))/2+1:PRINT T$:RETURN    'SUBROUTINE TO CENTRE TEXT
  161. 1600 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
  162. 1610 E$=INKEY$:IF E$="" THEN 1610 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
  163. 1620 GOTO 1610
  164. 1630 '//////////////// Routine to Draw a Box //////////////////
  165. 1640 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
  166. 1650 PRINT STRING$(X2-X1-1,"═");:LOCATE Y2,X2:PRINT "╝";:RETURN
  167. 1700 SCREEN 0,0,0:COLOR 31,1:LOCATE 24,1:PRINT "Fault Detected";CHR$(29);:COLOR 7,0
  168. 1710 RESUME 1600
  169.