pi = ATN(1) * 4 10 CLS : PRINT "ALL DIMENSIONS IN mm." 20 ' 30 ' 40 DEF FNrj (ta, b, c, d) = (b * c - ta * d) / (c * c + d * d) 50 ' 60 ' 70 DIM g(200), c(200), rk(200), ak(200), fr(40), aloss(40) 80 DIM a(200), b(200) 90 ' 100 INPUT "# of elements"; n 105 INPUT "# p-p ripple in passband"; rip 110 ' 120 INPUT "filter center freq (GHz)"; fzgc 121 INPUT "bandwidth (MHz)"; bwmc 122 INPUT "load impedance"; r 130 ' 140 INPUT "ground plane spacing"; h: h = h / 25.4 141 INPUT "rod diameter"; d: d = d / 25.4 150 INPUT "distance to center of 1st and last rod"; e: e = e / 25.4 160 ' 170 ' 180 INPUT "#of freq rej displayed points (max 37)"; nfr 181 INPUT "step size"; stp: PRINT 190 FOR ip = -nfr / 2 TO nfr / 2 200 co = co + 1 210 fr(co) = fzgc + (stp * .001 * ip) 220 NEXT ip 230 idat = 1 240 GOTO 250 250 f1 = fzgc - .0005 * bwmc 260 f2 = fzgc + .0005 * bwmc 270 IF rip > 0 THEN 330 280 bw3gc = f2 - f1 290 bwrgc = 0 300 bw3 = 1 310 GOSUB 1960 320 GOTO 390 330 b = 1 / SQR(10 ^ (.1 * rip) - 1) 340 ca = LOG(b + SQR(b * b - 1)) / n 350 bw3 = (EXP(ca) + EXP(-ca)) / 2 360 GOSUB 1740 370 bwrgc = f2 - f1 380 bw3gc = bwrgc * bw3 390 ' 400 w = 2 * (f2 - f1) / (f2 + f1) 410 qf = fzgc / bw3gc 420 nfm = n - 1 430 qwvl = 11.8028 / 4 / fzgc 440 FOR k = 1 TO nfm 450 ak(k) = 1 / (bw3 * SQR(g(k) * g(k + 1))) 460 rk(k) = ak(k) / qf 470 NEXT k 480 ako = g(1) * bw3 490 ak(n) = ako 500 ak(n + 1) = 0 510 qs = g(1) * bw3 * qf 520 canh = (EXP(2 * pi * e / h) - 1) / (EXP(2 * pi * e / h) + 1) 530 zm = 59.9585 * LOG(4 * h / pi / d) 540 ze = 59.9585 * LOG(canh * h * 4 / pi / d) 550 rkm = rk(1) * SQR(zm / ze) 560 z = pi * d / 2 / h 570 coth = (EXP(z) + 1) / (EXP(z) - 1) 580 y = pi * rkm / 4 590 t = coth ^ y 600 c(1) = h / pi * LOG((t + 1) / (t - 1)) 610 mfl = n - 2 620 ' 630 ON (2 + SGN(n) * 1) GOTO 690, 690, 640 640 FOR k = 2 TO mfl 650 y = pi * rk(k) / 4 660 t = coth ^ y 670 c(k) = h / pi * LOG((t + 1) / (t - 1)) 680 NEXT k 690 c(n - 1) = c(1) 700 x = SQR(pi * r / 4 / ze / qs) 710 aq = 2 * qwvl * ATN(x / SQR(1 - x * x)) / pi 720 qu = 2200 * h * SQR(fzgc) 730 sumg = 0 740 FOR j1 = 1 TO n 750 sumg = sumg + g(j1) 760 NEXT j1 770 bloss = 4.34 * fzgc * sumg / qu / (f2 - f1) 780 delay = sumg / 2 / pi / (f2 - f1) 790 IF rip > 0 THEN 820 800 PRINT "DESIGN DATA FOR "; n; " POLES INTERDIGITAL FILTER, BUTTERWORTH RESPONSE" 810 GOTO 830 820 PRINT "DESIGN DATA FOR"; n; "POLES INTERDIGITAL FILTER, BAND PASS RIPPLE"; rip; " dB": PRINT 830 PRINT "center frequency"; fzgc; "Ghz" 840 PRINT "cut off frequency "; FIX(f1 * 1000 + .5) / 1000; " and "; FIX(f2 * 1000 + .5) / 1000; "Ghz" 850 PRINT "ripple bandwidth"; bwrgc; "Ghz" 860 PRINT "3dB bandwidth"; bw3gc; "Ghz" 870 PRINT "fractionnal bandwidth"; w 880 PRINT "filter Q"; qf 890 PRINT "est. Qu"; qu 900 PRINT "loss based on this est. Qu"; bloss; "dB" 910 PRINT "delay at band center"; delay; "nS" PRINT "print screen then press key": WHILE INKEY$ = "": WEND: CLS 920 FOR jk = 1 TO nfr 930 IF jk = 1 THEN PRINT "FREQUENCY REJECTION INFORMATION": PRINT TAB(65); "F"; TAB(73); "Att": PRINT 940 nfn = ABS(2 * (fr(jk) - fzgc) / (w * fzgc)) 950 IF rip > 0 THEN 980 960 aloss(jk) = 10 * LOG(1 + nfn ^ (2 * n)) / LOG(10) 970 GOTO 1020 980 IF nfn < 1 THEN nfn = 1 990 ang = n * LOG(nfn + SQR(nfn * nfn - 1)) 1000 yak = .5 * (EXP(ang) + EXP(-ang)) 1010 aloss(jk) = 10 * LOG(1 + (10 ^ (.1 * rip) - 1) * yak * yak) / LOG(10) 1020 IF aloss(jk) > 63 THEN aloss = 63 ELSE aloss = aloss(jk) 1030 fr = INT(fr(jk) * 10000) / 10000: alos = INT(aloss(jk)) 1040 PRINT TAB(INT(aloss) + 1); "*"; TAB(65); fr; TAB(73); FIX(alos) 1050 NEXT jk 1060 wo = 2 * pi * fzgc * 1E+09 1070 f = d / h 1080 cf = (-.0000422# + .0857397# * f + .0067853# * f * f - 9.092165000000001D-02 * f ^ 3 + .169088 * f ^ 4) * pi * h * 2.54 1090 ' 1100 ww = wo * 1E-12 1110 b2 = pi * aq / 2 / qwvl 1120 gg = 1 / r 1130 bb = -COS(b2) / ze / SIN(b2) 1140 el1 = .8 * qwvl 1150 ang = el1 * pi / 2 / qwvl 1160 b1 = ang - b2 1170 yl = -COS(ang) / zm / SIN(ang) 1180 cp = ww * (cf + .17655 * d * d / (qwvl - el1)) 1190 y1 = cp + yl 1200 el2 = .87 * qwvl 1210 ang = el2 * pi / 2 / qwvl 1220 b4 = ang - b2 1230 yl = -COS(ang) / zm / SIN(ang) 1240 cd = ww * (cf + .17655 * d * d / (qwvl - el2)) 1250 y2 = cd + yl 1260 el3 = .95 * qwvl 1270 ang = el3 * pi / 2 / qwvl 1280 b5 = ang - b2 1290 yl = -COS(ang) / zm / SIN(ang) 1300 cq = ww * (cf + .17655 * d * d / (qwvl - el3)) 1310 y3 = cq + yl 1320 elem = y3 * y2 * el1 / ((y1 - y2) * (y1 - y3)) + y1 * y3 * el2 / ((y2 - y1) * (y2 - y3)) + y1 * y2 * el3 / ((y3 - y1) * (y3 - y2)) 1330 tann = SIN(b1) / COS(b1) 1340 yl = FNrj(gg, bb + tann / ze, 1 - ze * bb * tann, ze * gg * tann) 1350 y1 = cp + yl 1360 tann = TAN(b4) 1370 yl = FNrj(gg, bb + tann / ze, 1 - ze * bb * tann, ze * gg * tann) 1380 y2 = cd + yl 1390 tann = TAN(b5) 1400 yl = FNrj(gg, bb + tann / ze, 1 - ze * bb * tann, ze * gg * tann) 1410 y3 = cq + yl 1420 eleq = y3 * y2 * el1 / ((y1 - y2) * (y1 - y3)) + y1 * y3 * el2 / ((y2 - y1) * (y2 - y3)) + y1 * y2 * el3 / ((y3 - y1) * (y3 - y2)) 1430 ' PRINT "print screen then press key": WHILE INKEY$ = "": WEND: CLS PRINT "MECHANICAL INFOS" 1440 PRINT "1/4 lambda="; qwvl * 25.4; "mm" 1450 PRINT "lenght of interior elts"; elem * 25.4; "mm" 1460 PRINT "lenght of end elts"; eleq * 25.4; "mm" 1470 PRINT "ground plane spacing"; h * 25.4; "mm" 1480 PRINT "rod diameter"; d * 25.4; "mm" 1490 PRINT "end plates"; e * 25.4; "mm from center of end rods" 1500 PRINT "tap external lines up"; aq * 25.4; "mm from shorted end" 1510 PRINT "line impedances: end rods:"; ze; ",other:"; zm; "Ohms" 1520 PRINT "dimensions:" 1530 PRINT TAB(1); "el N."; TAB(16); "end to C"; TAB(28); "C to C"; TAB(41); "g(k)"; TAB(55); "q/coup" 1540 dom = e 1550 goo = 1 1560 PRINT TAB(1); " 0"; TAB(41); goo; TAB(55); ako 1570 PRINT TAB(1); " 1"; TAB(16); FIX(e * 25.4 + .5); TAB(41); g(1); TAB(55); ak(1) 1580 FOR k = 1 TO nfm 1590 l = k + 1 1600 PRINT TAB(28); FIX(25.4 * c(k) + .5) 1610 dom = dom + c(k) 1620 PRINT TAB(1); l; TAB(16); FIX(dom * 25.4 + .5); TAB(41); g(l); TAB(55); ak(l) 1630 NEXT k 1640 lq = n + 1 1650 PRINT TAB(1); lq; TAB(41); g(lq) 1660 dom = dom + e 1670 PRINT TAB(16); FIX(dom * 25.4 + .5) 1680 IF idat = 1 THEN 2070 1690 ' 1700 ' 1710 ' 1720 'DEF FNrj (ta, b, c, d) = (b * c - ta * d) / (c * c + d * d) 1730 END 1740 'sub cheb 1750 ' 1760 c = 2 * rip / 17.37 1770 beta = LOG((EXP(c) + 1) / (EXP(c) - 1)) 1780 gamma = .5 * (EXP(beta / (2 * n)) - EXP(-beta / (2 * n))) 1790 FOR k = 1 TO n 1800 a(k) = SIN(.5 * (2 * k - 1) * pi / n) 1810 b(k) = gamma ^ 2 + SIN(k * pi / n) ^ 2 1820 NEXT k 1830 g(1) = 2 * a(1) / gamma 1840 FOR k = 2 TO n 1850 g(k) = 4 * a(k - 1) * a(k) / (b(k - 1) * g(k - 1)) 1860 NEXT k 1870 nn = n / 2 1880 nnn = (n + 1) / 2 1890 ' 1900 ON (2 + SGN(nnn - nn) * 1) GOTO 1910, 1910, 1930 1910 g(n + 1) = ((EXP(beta / 2) + 1) / (EXP(beta / 2) - 1)) ^ 2 1920 RETURN 1930 g(n + 1) = 1 1940 RETURN 1950 END 1960 'sub for butt 1970 ' 1980 ' 1990 ' 2000 ' 2010 pov2 = 1.57079633# 2020 FOR k = 1 TO n 2030 g(k) = 2 * SIN(pov2 * (2 * k - 1) / n) 2040 NEXT k 2050 g(n + 1) = 1 2060 RETURN 2070 END