home *** CD-ROM | disk | FTP | other *** search
/ Antennas / Antennas_CD-ROM_Walnut_Creek_September_1996.iso / public / hopkins / filter.bas < prev    next >
BASIC Source File  |  1996-06-30  |  11KB  |  292 lines

  1. 10 CLS
  2. 20 REM*******************************
  3. 30 PRINT
  4. 40 REM DESIGNS INTERDIGITAL FILTERS
  5. 50 REM HAM RADIO JANUARY 1985
  6. 60 REM*******************************
  7. 70 PRINT
  8. 80 DEF FNRJ (TA, B, C, D) = (B * C - TA * D) / (C * C + D * D)
  9. 90 REM G VALUES BASED ON RIPPLE BW . Q/COUP ON 3-BD
  10. 100 REM USING EQUAL DIAMETER RODS
  11. 110 DIM G(200), C(200), RK(200), AK(200), FR(40), ALOSS(40)
  12. 120 DIM A(200), B(200)
  13. 130 PI = 3.14159265#
  14. 140 PRINT
  15. 150 PRINT
  16. 160 PRINT "DIMENSIONS IN INCHES"
  17. 170 PRINT
  18. 180 INPUT "# OF ELEMENTS & P-P RIPPLE IN PASSBAND (DB)"; N, RIP
  19. 190 REM
  20. 200 INPUT "INPUT FILTER CENTER FREQ. (GHZ) ,BW (MHZ) & LOAD IMPEDANCE Zo. "; FZGC, BWMC, R
  21. 210 REM
  22. 220 PRINT "INPUT GROUND PLANE SPACING , ROD DIAMETER"
  23. 230 INPUT "&DISTANCE TO CENTER OF FIRST AND LAST ROD "; H, D, E
  24. 240 REM
  25. 250 INPUT "No. OF FREQ. REJECTION PTS AND STEP SIZE (MHZ)"; NFR, STP
  26. 260 PRINT
  27. 270 PRINT " CALCULATION PROCEEDING  PLEASE WAIT"
  28. 280 PRINT
  29. 290 FOR IP = -NFR / 2 TO NFR / 2
  30. 300 COUNTER = COUNTER + 1
  31. 310 FR(COUNTER) = FZGC + (STP * .001 * IP)
  32. 320 NEXT IP
  33. 330 IDAT = 1
  34. 340 GOTO 350
  35. 350 F1 = FZGC - .0005 * BWMC
  36. 360 F2 = FZGC + .0005 * BWMC
  37. 370  IF RIP > 0 THEN GOTO 430
  38. 380 BW3GC = F2 - F1
  39. 390 BWRGC = 0
  40. 400 BW3 = 1
  41. 410 GOSUB 2070
  42. 420 GOTO 490
  43. 430 B = 1 / SQR(10 ^ (.1 * RIP) - 1)
  44. 440 CA = LOG(B + SQR(B * B - 1)) / (N)
  45. 450 BW3 = (EXP(CA) + EXP(-CA)) / 2
  46. 460 GOSUB 1860
  47. 470 BWRGC = F2 - F1
  48. 480 BW3GC = BWRGC * BW3
  49. 490 REM
  50. 500 W = 2 * (F2 - F1) / (F2 + F1)
  51. 510 QF = FZGC / BW3GC
  52. 520 NFM = N - 1
  53. 530 QWVL = 11.8028 / (4 * FZGC)
  54. 540 FOR K = 1 TO NFM
  55. 550 AK(K) = 1 / (BW3 * SQR(G(K) * G(K + 1)))
  56. 560 RK(K) = AK(K) / QF
  57. 570 NEXT K
  58. 580 AKO = G(1) * BW3
  59. 590 AK(N) = AKO
  60. 600 AK(N + 1) = 0
  61. 610  QS = G(1) * BW3 * QF
  62. 620 CANH = (EXP(2 * PI * E / H) - 1) / (EXP(2 * PI * E / H) + 1)
  63. 630 ZM = 59.9585 * LOG(4 * H / (PI * D))
  64. 640 ZE = 59.9585 * LOG(CANH * H * 4 / (PI * D))
  65. 650 RKM = RK(1) * SQR(ZM / ZE)
  66. 660 Z = PI * D / (2 * H)
  67. 670 COTH = (EXP(Z) + 1) / (EXP(Z) - 1)
  68. 680 Y = PI * RKM / 4
  69. 690 T = COTH ^ Y
  70. 700 C(1) = (H / PI) * LOG((T + 1) / (T - 1))
  71. 710 MFL = N - 2
  72. 720 REM IF N-3<0 THEN AG=1 ELSE IF N-1=0 THEN AG=2 ELSE AG=3
  73. 730 ON (2 + SGN(N) * 1) GOTO 790, 790, 740
  74. 740 FOR K = 2 TO MFL
  75. 750     Y = PI * RK(K) / 4
  76. 760     T = COTH ^ Y
  77. 770     C(K) = (H / PI) * LOG((T + 1) / (T - 1))
  78. 780 NEXT K
  79. 790 C(N - 1) = C(1)
  80. 800 X = SQR(PI * R / (4 * ZE * QS))
  81. 810 AQ = 2 * QWVL * ATN(X / SQR(1 - X * X)) / PI
  82. 820 QU = 2200 * H * SQR(FZGC)
  83. 830 SUMG = 0
  84. 840 FOR J1 = 1 TO N
  85. 850     SUMG = SUMG + G(J1)
  86. 860     NEXT J1
  87. 870 BLOSS = 4.34 * FZGC * SUMG / (QU * (F2 - F1))
  88. 880 DELAY = SUMG / (2 * PI * (F2 - F1))
  89. 890 IF RIP > 0 THEN GOTO 920
  90. 900 PRINT "DESIGN DATA FOR "; N; " POLE INTERDIGITAL FILTER. BUTTERWORTH RESPONSE"
  91. 910 GOTO 930
  92. 920 PRINT "DESIGN DATA FOR "; N; " POLE INTERDIGITAL FILTER . BAND PASS RIPPLE  "; RIP; " DB"
  93. 930 PRINT "CENTER FREQ. "; FZGC; " GHZ"
  94. 940 PRINT "CUTOFF FREQ. "; F1; " GHZ  AND "; F2; " GHZ"
  95. 950 PRINT " RIPPLE BW.  "; BWRGC; " GHZ"
  96. 960 PRINT "  3 DB BW.   "; BW3GC; " GHZ"
  97. 970 PRINT "FRACTIONAL BW "; W
  98. 980 PRINT " FILTER  Q   "; QF
  99. 990 PRINT "  EST  QU    "; QU
  100. 1000 PRINT "LOSS BASED ON QU "; BLOSS; " DB"
  101. 1010 PRINT "DELAY AT BAND CENTER "; DELAY; " NANOSECONDS"
  102. 1020 FOR JK = 1 TO NFR
  103. 1030    IF JK = 1 THEN PRINT "FREQUENCY REJECTION INFORMATION "
  104. 1040    NFN = ABS(2 * (FR(JK) - FZGC) / (W * FZGC))
  105. 1050    IF RIP > 0 THEN GOTO 1080
  106. 1060    ALOSS(JK) = 10 * LOG(1 + NFN ^ (2 * N)) / LOG(10)
  107. 1070    GOTO 1120
  108. 1080    IF NFN < 1 THEN NFN = 1
  109. 1090    ANG = N * LOG(NFN + SQR(NFN * NFN - 1))
  110. 1100    YAK = .5 * (EXP(ANG) + EXP(-ANG))
  111. 1110    ALOSS(JK) = 10 * LOG(1 + (10 ^ (.1 * RIP) - 1) * YAK * YAK) / LOG(10)
  112. 1120    IF ALOSS(JK) > 65 THEN ALOSS = 65 ELSE ALOSS = ALOSS(JK)
  113. 1130    FR = INT(FR(JK) * 10000) / 10000: ALOS = INT(ALOSS(JK))
  114. 1140    PRINT TAB(INT(ALOSS)); "*"; TAB(66); FR; TAB(73); ALOS
  115. 1150 NEXT JK
  116. 1160 WO = 2 * PI * FZGC * 1E+09
  117. 1170 F = D / H
  118. 1180 CF = (-.0000422 + .0857397 * F + .0067853 * F * F - .0909217 * F ^ 3 + .169088 * F ^ 4) * PI * H * 2.54
  119. 1190 REM
  120. 1200 WW = WO * 1E-12
  121. 1210 B2 = PI * AQ / (2 * QWVL)
  122. 1220 GG = 1 / R
  123. 1230 BB = -COS(B2) / (ZE * SIN(B2))
  124. 1240 EL1 = .8 * QWVL
  125. 1250 ANG = EL1 * PI / (2 * QWVL)
  126. 1260 B1 = ANG - B2
  127. 1270 YL = -COS(ANG) / (ZM * SIN(ANG))
  128. 1280 CP = WW * (CF + .17655 * D * D / (QWVL - EL1))
  129. 1290 Y1 = CP + YL
  130. 1300 EL2 = .87 * QWVL
  131. 1310 ANG = EL2 * PI / (2 * QWVL)
  132. 1320 B4 = ANG - B2
  133. 1330 YL = -COS(ANG) / (ZM * SIN(ANG))
  134. 1340 CD = WW * (CF + .17655 * D * D / (QWVL - EL2))
  135. 1350 Y2 = CD + YL
  136. 1360 EL3 = .95 * QWVL
  137. 1370 ANG = EL3 * PI / (2 * QWVL)
  138. 1380 B5 = ANG - B2
  139. 1390 YL = -COS(ANG) / (ZM * SIN(ANG))
  140. 1400 CQ = WW * (CF + .17655 * D * D / (QWVL - EL3))
  141. 1410 Y3 = CQ + YL
  142. 1420 ELEM = Y3 * Y2 * EL1 / ((Y1 - Y2) * (Y1 - Y3)) + Y1 * Y3 * EL2 / ((Y2 - Y1) * (Y2 - Y3)) + Y1 * Y2 * EL3 / ((Y3 - Y1) * (Y3 - Y2))
  143. 1430 TANN = SIN(B1) / COS(B1)
  144. 1440 YL = FNRJ(GG, BB + TANN / ZE, 1 - ZE * BB * TANN, ZE * GG * TANN)
  145. 1450 Y1 = CP + YL
  146. 1460 TANN = SIN(B4) / COS(B4)
  147. 1470 YL = FNRJ(GG, BB + TANN / ZE, 1 - ZE * BB * TANN, ZE * GG * TANN)
  148. 1480 Y2 = CD + YL
  149. 1490 TANN = SIN(B5) / COS(B5)
  150. 1500 IF ALOSS(JK) > 65 THEN ALOSS = 65 ELSE ALOSS = ALOSS(JK)
  151. 1510 FR = INT(FR(JK) * 10000) / 10000: ALOS = INT(ALOSS(JK))
  152. 1520 YL = FNRJ(GG, BB + TANN / ZE, 1 - ZE * BB * TANN, ZE * GG * TANN)
  153. 1530 Y3 = CQ + YL
  154. 1540 ELEQ = Y3 * Y2 * EL1 / ((Y1 - Y2) * (Y1 - Y3)) + Y1 * Y3 * EL2 / ((Y2 - Y1) * (Y2 - Y3)) + Y1 * Y2 * EL3 / ((Y3 - Y1) * (Y3 - Y2))
  155. 1550 REM
  156. 1560 PRINT "QUATER WAVELENGTH ="; QWVL; " INCHES"
  157. 1570 PRINT "THE LENGTH OF THE INTERIOR ELEMENTS ="; ELEM; " INCHES"
  158. 1580 PRINT "  LENGTH OF END ELEMENTS ="; ELEQ; " INCHES"
  159. 1590 PRINT "  GROUND PLANE SPACE     ="; H; " INCHES"
  160. 1600 PRINT "   ROD DIAMETER          ="; D; " INCHES"
  161. 1610 PRINT " END PLATES "; E; " INCHES FROM C/L OF END ROD"
  162. 1620 PRINT "TAP EXTERNAL LINES UP "; AQ; " INCHES FROM SHORTED END "
  163. 1630 PRINT "LINE IMPEDANCES: END ROD "; ZE; " ,OTHER "; ZM; " , EXT. LINES "; R; " OHM"
  164. 1640 PRINT "DIMENSIONS"
  165. 1650 PRINT "EL.No.        END TO C      C TO C       G(K)        Q/COUP"
  166. 1660 DOM = E
  167. 1670 GOO = 1
  168. 1680 PRINT "0"; TAB(41); GOO; TAB(55); AKO
  169. 1690 PRINT "1"; TAB(16); E; TAB(41); G(1); TAB(55); AK(1)
  170. 1700 FOR K = 1 TO NFM
  171. 1710    L = K + 1
  172. 1720   PRINT TAB(28); C(K)
  173. 1730    DOM = DOM + C(K)
  174. 1740   PRINT L; TAB(16); DOM; TAB(41); G(L); TAB(55); AK(L)
  175. 1750 NEXT K
  176. 1760 LQ = N + 1
  177. 1770 PRINT LQ; TAB(41); G(LQ)
  178. 1780 DOM = DOM + E
  179. 1790 PRINT TAB(16); DOM
  180. 1800 IF IDAT = 1 THEN GOTO 2180
  181. 1810 REM
  182. 1820 REM
  183. 1830 REM DEFINE FUNCTION
  184. 1840 REM  DEF FNRJ (TA, B, C, D) = (B * C - TA * D) / (C * C + D * D)
  185. 1850 END
  186. 1860 REM SUB CHEB
  187. 1870 REM
  188. 1880 C = 2 * RIP / 17.37
  189. 1890 BETA = LOG((EXP(C) + 1) / (EXP(C) - 1))
  190. 1900 GAMMA = .5 * (EXP(BETA / (2 * N)) - EXP(-BETA / (2 * N)))
  191. 1910 FOR K = 1 TO N
  192. 1920     A(K) = SIN(.5 * (2 * K - 1) * PI / N)
  193. 1930     B(K) = GAMMA ^ 2 + SIN(K * PI / N) ^ 2
  194. 1940 NEXT K
  195. 1950 G(1) = 2 * A(1) / GAMMA
  196. 1960 FOR K = 2 TO N
  197. 1970     G(K) = 4 * A(K - 1) * A(K) / (B(K - 1) * G(K - 1))
  198. 1980 NEXT K
  199. 1990 NN = N / 2
  200. 2000 NNN = (N + 1) / 2
  201. 2010 REM IF NNN-NN<0 THEN AG=1 ELSE IF NNN-NN=0 THEN AG1=2 ELSE AG1=3
  202. 2020 ON (2 + SGN(NNN - NN) * 1) GOTO 2030, 2030, 2050
  203. 2030 G(N + 1) = ((EXP(BETA / 2) + 1) / (EXP(BETA / 2) - 1)) ^ 2
  204. 2040 RETURN
  205. 2050 G(N + 1) = 1
  206. 2060 RETURN
  207. 2070 REM SUB FOR BUTT
  208. 2080 REM
  209. 2090 REM
  210. 2100 REM
  211. 2110 REM
  212. 2120 POV2 = 1.57079633#
  213. 2130 FOR K = 1 TO N
  214. 2140     G(K) = 2 * SIN(POV2 * (2 * K - 1) / N)
  215. 2150 NEXT K
  216. 2160 G(N + 1) = 1
  217. 2170 RETURN
  218. 2180 INPUT " IS HARD COPY REQUIRED  "; HC$
  219. 2190 IF HC$ = "Y" OR HC$ = "y" THEN GOTO 2240
  220. 2200 IF HC$ = "N" OR HC$ = "n" THEN GOTO 150
  221. 2210 PRINT " PLEASE ANSWER Y OR N"
  222. 2220 GOTO 2180
  223. 2230 PRINT : PRINT : PRINT : PRINT : PRINT
  224. 2240 IF RIP > 0 THEN GOTO 2270
  225. 2250 LPRINT "DESIGN DATA FOR "; N; " POLE INTERDIGITAL FILTER. BUTTERWORTH RESPONSE"
  226. 2260 GOTO 2280
  227. 2270 LPRINT "DESIGN DATA FOR "; N; " POLE INTERDIGITAL FILTER. BAND-PASS RIPPLE "; RIP; " DB"
  228. 2280  LPRINT
  229. 2290 LPRINT " CENTER FREQ. "; FZGC; " GHZ"
  230. 2300 LPRINT " CUTOFF FREQ. "; F1; " GHZ  AND "; F2; " GHZ."
  231. 2310 LPRINT "  RIPPLE B.W. "; BWRGC; " GHZ"
  232. 2320 LPRINT "    3DB  B.W. "; BW3GC; " GHZ"
  233. 2330 LPRINT "FRACTIONAL BW "; W
  234. 2340 LPRINT " FILTER  Q    "; QF
  235. 2350 LPRINT "   EST   QU   "; QU
  236. 2360 LPRINT "LOSS BASED ON QU "; BLOSS; " DB"
  237. 2370 LPRINT "DELAY AT BAND CENTER "; DELAY; " NANOSECONDS"
  238. 2380 LPRINT
  239. 2390 FOR JK = 1 TO NFR
  240. 2400 IF JK = 1 THEN LPRINT " FREQUENCY REJECTION INFORMATION "
  241. 2410 LPRINT
  242. 2420 NFN = ABS(2 * (FR(JK) - FZGC) / (W * FZGC))
  243. 2430 IF RIP > 0 THEN GOTO 2460
  244. 2440 ALOSS(JK) = 10 * LOG(1 + NFN ^ (2 * N)) / LOG(10)
  245. 2450 GOTO 2500
  246. 2460 IF NFN < 1 THEN NFN = 1
  247. 2470 ANG = N * LOG(NFN + SQR(NFN * NFN - 1))
  248. 2480 YAK = .5 * (EXP(ANG) + EXP(-ANG))
  249. 2490 ALOSS(JK) = 10 * LOG(1 + (10 ^ (.1 * RIP) - 1) * YAK * YAK) / LOG(10)
  250. 2500 IF ALOSS(JK) > 65 THEN ALOSS = 65 ELSE ALOSS = ALOSS(JK)
  251. 2510 FR = INT(FR(JK) * 10000) / 10000: ALOS = INT(ALOSS(JK))
  252. 2520 LPRINT TAB(INT(ALOSS)); "*"; TAB(66); FR; TAB(73); ALOS
  253. 2530 NEXT JK
  254. 2540 LPRINT
  255. 2550 LPRINT
  256. 2560 LPRINT
  257. 2570 LPRINT "       QUARTER WAVELENGTH    ="; QWVL; " INCHES"
  258. 2580 LPRINT "LENGTH OF INTERIOR ELEMENTS  ="; ELEM; " INCHES"
  259. 2590 LPRINT "LENGTH  OF  END  ELEMENTS    ="; ELEQ; " INCHES"
  260. 2600 LPRINT "       GROUND  PLANE  SPACE  ="; H; " INCHES"
  261. 2610 LPRINT "           ROD  DIAMETER     ="; D; " INCHES"
  262. 2620 LPRINT "           END  PLATES       ="; E; " INCHES FROM C/L OF END ROD"
  263. 2630 LPRINT
  264. 2640 LPRINT "   TAP EXTERNAL LINES UP "; AQ; " INCHES FROM SHORTED END."
  265. 2650 LPRINT
  266. 2660 LPRINT "  LINE IMPEDANCES:--"
  267. 2670 LPRINT "                    END ROD   "; ZE; "  OHMS"
  268. 2680 LPRINT "                    OTHER     "; ZM; "  OHMS"
  269. 2690 LPRINT "                    EXT LINES "; R; "  OHMS"
  270. 2700 LPRINT
  271. 2710 LPRINT "    DIMENSIONS :--"
  272. 2720 LPRINT
  273. 2730 LPRINT "                             CENTER"
  274. 2740 LPRINT "ELEMENT          END TO        TO        COUPLING COEFFICIENTS "
  275. 2750 LPRINT "NUMBER           CENTER      CENTER       G(K)         Q/COUP  "
  276. 2760 DOM = E
  277. 2770 GOO = 1
  278. 2780 LPRINT " 0"; TAB(41); GOO; TAB(55); AKO
  279. 2790 LPRINT " 1"; TAB(16); E; TAB(41); G(1); TAB(55); AK(1)
  280. 2800 FOR K = 1 TO NFM
  281. 2810 L = K + 1
  282. 2820 LPRINT TAB(28); C(K)
  283. 2830 DOM = DOM + C(K)
  284. 2840 LPRINT L; TAB(16); DOM; TAB(41); G(L); TAB(55); AK(L)
  285. 2850 NEXT K
  286. 2860 LQ = N + 1
  287. 2870 LPRINT LQ; TAB(41); G(LQ)
  288. 2880 DOM = DOM + E
  289. 2890 LPRINT TAB(16); DOM
  290. 2900 RUN "MENU"
  291.  
  292.