home *** CD-ROM | disk | FTP | other *** search
- 100 CLS :KEY OFF :REM "IDBPF"
- 110 REM E.CRISTAL -1964, J.HINSHAW -1985, REVISED by V.HEESEN -1986
- 120 PRINT TAB(13);"**** THIS PROGRAM DESIGNS INTERDIGITAL BP FILTERS ****":PRINT
- 130 PRINT TAB(21);"USING RESONATOR RODS OF EQUAL DIAMETER."
- 140 DEF FNRJ(TA,B,C,D)=(B*C-TA*D)/(C*C+D*D)
- 150 REM g values based on ripple bw . q/coup on -3db
- 160 DIM G(200) , C(200) , RK(200) , AK(200) , FR(40) , ALOSS(40)
- 170 DIM A(200), B(200)
- 180 PI=4*ATN(1)
- 190 PRINT :BEEP :INPUT"ENTER: NUMBER of ELEMENTS ";N
- 200 PRINT :BEEP :INPUT" PASSBAND RIPPLE (DB)";RIP
- 210 PRINT :BEEP :INPUT" CENTER FREQ. (Mhz)"; FO :FZGC=FO*10^-3
- 220 PRINT :BEEP :INPUT" BANDWIDTH (Mhz)";BWMC
- 230 PRINT :BEEP :INPUT" LOAD IMPEDANCE (Zo) ";R
- 240 PRINT :BEEP :INPUT" GROUND PLANE SPACING (inches)";H
- 250 PRINT :BEEP :INPUT" RESONATOR ROD DIA. (inches)";D
- 260 PRINT :PRINT " END PLATE DISTANCE to CENTER"
- 270 BEEP :INPUT" of FIRST & LAST RODS (inches)";E
- 280 PRINT :BEEP :INPUT" NO. of SWEEP FREQ. DATA PTS. ";NFR
- 290 PRINT :BEEP :INPUT" STEP SIZE of DATA POINTS(Mhz)";STP
- 300 FOR IP=-NFR/2 TO NFR/2
- 310 COUNTER=COUNTER+1
- 320 FR(COUNTER)=FZGC+(STP*.001*IP)
- 330 NEXT IP
- 340 IDAT=1
- 350 F1=FZGC-.0005*BWMC
- 360 F2=FZGC+.0005*BWMC
- 370 IF RIP>0 THEN 430
- 380 BW3GC=F2-F1
- 390 BWRGC=0
- 400 BW3=1
- 410 GOSUB 2170
- 420 GOTO 490
- 430 B=1/SQR(10^(.1*RIP)-1)
- 440 CA=LOG(B+SQR(B*B-1))/(N)
- 450 BW3=(EXP(CA)+EXP(-CA))/2
- 460 GOSUB 1970
- 470 BWRGC=F2-F1
- 480 BW3GC=BWRGC*BW3
- 490 W=2*(F2-F1)/(F2+F1)
- 500 QF=FZGC/BW3GC
- 510 NFM=N-1
- 520 QWVL=11.8028/(4*FZGC)
- 530 FOR K=1 TO NFM
- 540 AK(K)=1/(BW3*SQR(G(K)*G(K+1)))
- 550 RK(K)=AK(K)/QF
- 560 NEXT K
- 570 AKO=G(1)*BW3
- 580 AK(N)=AKO
- 590 AK(N+1)=0
- 600 QS=G(1)*BW3*QF
- 610 CANH=(EXP(2*PI*E/H)-1)/(EXP(2*PI*E/H)+1)
- 620 ZM=60*LOG(4*H/(PI*D))
- 630 ZE=60*LOG(CANH*H*4/(PI*D))
- 640 RKM=RK(1)*SQR(ZM/ZE)
- 650 Z=PI*D/(2*H)
- 660 COTH=(EXP(Z)+1)/(EXP(Z)-1)
- 670 Y=PI*RKM/4
- 680 T=COTH^Y
- 690 C(1)=(H/PI)*LOG((T+1)/(T-1))
- 700 MFL=N-2
- 710 REM IF N-3<0 THEN AG=1 ELSE IF N-3=0 THEN AG=2 ELSE AG=3
- 720 ON (2+SGN(N)*1) GOTO 780,780,730
- 730 FOR K=2 TO MFL
- 740 Y=PI*RK(K)/4
- 750 T=COTH^Y
- 760 C(K)=(H/PI)*LOG((T+1)/(T-1))
- 770 NEXT K
- 780 C(N-1)=C(1)
- 790 X=SQR(PI*R/(4*ZE*QS))
- 800 AQ=2*QWVL*ATN(X/SQR(1-X*X))/PI
- 810 QU=2200*H*SQR(FZGC)
- 820 SUMG=0
- 830 FOR J1=1 TO N
- 840 SUMG=SUMG+G(J1)
- 850 NEXT J1
- 860 BLOSS=4.34*FZGC*SUMG/(QU*(F2-F1))
- 870 DELAY=SUMG/(2*PI*(F2-F1))
- 880 CLS :IF RIP > 0 THEN 910
- 890 PRINT "*** DESIGN DATA FOR";N;"Pole (BUTTERWORTH) INTERDIGITAL FILTER ***"
- 900 GOTO 920
- 910 PRINT"*** DESIGN DATA for";N;"Pole";RIP;"DB (CHEBY) INTERDIGITAL FILTER ***"
- 920 PRINT :PRINT"CENTER FREQ. =";FO;"Mhz"
- 930 PRINT :PRINT"CUTOFF FREQ. =";F1*10^3;"Mhz and ";F2*10^3;"Mhz"
- 940 PRINT :PRINT"RIPPLE BW =";INT(BWRGC*10^3*1000)/1000;"Mhz"
- 950 PRINT :PRINT"3 DB BANDWITH=";INT(BW3GC*10^3*1000)/1000;"Mhz"
- 960 PRINT :PRINT"PERCENT BW =";INT(W*10^2*100)/100;"%"
- 970 PRINT :PRINT"FILTER Q =";INT(QF*100)/100
- 980 PRINT :PRINT"ESTIMATED QU =";INT(QU*100)/100
- 990 PRINT :PRINT"LOSS BASED ON THIS QU= ";INT(BLOSS*100)/100;"DB"
- 1000 PRINT :PRINT"DELAY AT BAND CENTER = ";INT(DELAY);"nonoseconds"
- 1010 PRINT :BEEP :PRINT "PRESS <SPACE> TO CONTINUE"
- 1020 C$=INKEY$ :IF C$="" THEN 1020
- 1030 CLS :FOR JK=1 TO NFR
- 1040 IF JK=1 THEN PRINT TAB(21);"*** SWEPT FREQUENCY PASS-BAND DATA ***"
- 1050 NFN=ABS(2*(FR(JK)-FZGC)/(W*FZGC))
- 1060 IF RIP >0 THEN 1090
- 1070 ALOSS(JK)=10*LOG(1+NFN^(2*N))/LOG(10)
- 1080 GOTO 1130
- 1090 IF NFN<1 THEN NFN=1
- 1100 ANG=N*LOG(NFN+SQR(NFN*NFN-1))
- 1110 YAK=.5*(EXP(ANG)+EXP(-ANG))
- 1120 ALOSS(JK)=10*LOG(1+(10^(.1*RIP)-1)*YAK*YAK)/LOG(10)
- 1130 IF ALOSS(JK)>65 THEN ALOSS=65 ELSE ALOSS=ALOSS(JK)
- 1140 FR=INT(FR(JK)*10000)/10000 :ALOS=INT(ALOSS(JK))
- 1150 PRINT TAB(INT(ALOSS))"*";TAB(66)INT(FR*10^3*1000)/1000;TAB(75)ALOS
- 1160 NEXT JK
- 1170 WO=2*PI*FZGC*1E+09
- 1180 F=D/H
- 1190 CF=(-.0000422+.08574*F+.0067853*F*F-9.092165E-02*F^3+.16909*F^4)*PI*H*2.54
- 1200 WW=WO*1E-12
- 1210 B2=PI*AQ/(2*QWVL)
- 1220 GG=1/R
- 1230 BB=-COS(B2)/(ZE*SIN(B2))
- 1240 EL1=.8*QWVL
- 1250 ANG=EL1*PI/(2*QWVL)
- 1260 B1=ANG-B2
- 1270 YL=-COS(ANG)/(ZM*SIN(ANG))
- 1280 CP=WW*(CF+.17655*D*D/(QWVL-EL1))
- 1290 Y1=CP+YL
- 1300 EL2=.87*QWVL
- 1310 ANG=EL2*PI/(2*QWVL)
- 1320 B4=ANG-B2
- 1330 YL=-COS(ANG)/(ZM*SIN(ANG))
- 1340 CD=WW*(CF+.17655*D*D/(QWVL-EL2))
- 1350 Y2=CD+YL
- 1360 EL3=.95*QWVL
- 1370 ANG=EL3*PI/(2*QWVL)
- 1380 B5=ANG-B2
- 1390 YL=-COS(ANG)/(ZM*SIN(ANG))
- 1400 CQ=WW*(CF+.17655*D*D/(QWVL-EL3))
- 1410 Y3=CQ+YL
- 1420 A=Y3*Y2*EL1/((Y1-Y2)*(Y1-Y3))
- 1430 B=Y1*Y3*EL2/((Y2-Y1)*(Y2-Y3))
- 1440 C=Y1*Y2*EL3/((Y3-Y1)*(Y3-Y2))
- 1450 ELEM=A+B+C
- 1460 TANN=SIN(B1)/COS(B1)
- 1470 YL=FNRJ(GG,BB+TANN/ZE,1-ZE*BB*TANN,ZE*GG*TANN)
- 1480 Y1=CP+YL
- 1490 TANN=SIN(B4)/COS(B4)
- 1500 YL=FNRJ(GG,BB+TANN/ZE,1-ZE*BB*TANN,ZE*GG*TANN)
- 1510 Y2=CD+YL
- 1520 TANN=SIN(B5)/COS(B5)
- 1530 YL=FNRJ(GG,BB+TANN/ZE,1-ZE*BB*TANN,ZE*GG*TANN)
- 1540 Y3=CQ+YL
- 1550 A=Y3*Y2*EL1/((Y1-Y2)*(Y1-Y3))
- 1560 B=Y1*Y3*EL2/((Y2-Y1)*(Y2-Y3))
- 1570 C=Y1*Y2*EL3/((Y3-Y1)*(Y3-Y2))
- 1580 ELEQ=A+B+C
- 1590 PRINT :BEEP :PRINT "PRESS <SPACE> TO CONTINUE"
- 1600 A$=INKEY$ :IF A$="" THEN 1600
- 1610 CLS :PRINT "DIMENSIONS:" :PRINT
- 1620 PRINT"QUARTER WAVELENGTH =";INT(QWVL*1000)/1000;"inches" :PRINT
- 1630 PRINT"LENGTH OF INTERIOR ROD(S) =";INT(ELEM*1000)/1000;"inches" :PRINT
- 1640 PRINT "LENGTH OF END RODS =";INT(ELEQ*1000)/1000;"inches" :PRINT
- 1650 PRINT "GROUND-PLANE SPACING =";H;"inches" :PRINT
- 1660 PRINT "ROD DIAMETER =";D;"inches" :PRINT
- 1670 PRINT "END PLATES";E;"inches from center of END RODS" :PRINT
- 1680 PRINT "TAP EXTERNAL LINES UP ";INT(AQ*1000)/1000;"inches from SHORTED END "
- 1690 PRINT :PRINT "LINE IMPEDANCES: END RODS";INT(ZE*10)/10;
- 1700 PRINT ",OTHER(S)";INT(ZM*10)/10;",EXT.LINES";R;"ohms"
- 1710 PRINT :BEEP :PRINT "PRESS <SPACE> TO CONTINUE"
- 1720 A$=INKEY$ :IF A$="" THEN 1720
- 1730 CLS :PRINT "DIMENSIONS: (cont.)" :PRINT
- 1740 PRINT"ELEM.# End to Ctr. Ctr.- Ctr. G(K) Q/COUP"
- 1750 PRINT " (inches) (inches)"
- 1760 DOM=E
- 1770 GOO=1
- 1780 PRINT " 0";TAB(41)GOO;TAB(55);INT(AKO*1000)/1000 :PRINT
- 1790 PRINT " 1";TAB(16)INT(E*1000)/1000;TAB(41)G(1);
- 1800 PRINT TAB(55);INT(AK(1)*1000)/1000
- 1810 FOR K=1 TO NFM
- 1820 L=K+1
- 1830 PRINT TAB(28);INT(C(K)*1000)/1000
- 1840 DOM=DOM+C(K)
- 1850 PRINT L;TAB(16);INT(DOM*1000)/1000;TAB(41);G(L);
- 1860 PRINT TAB(55);INT(AK(L)*1000)/1000
- 1870 NEXT K
- 1880 LQ=N+1
- 1890 DOM=DOM+E :PRINT
- 1900 PRINT LQ;TAB(16);INT(DOM*1000)/1000;TAB(41);G(LQ)
- 1910 IF IDAT=1 THEN PRINT :PRINT :PRINT "*** COMPLETE ***" :PRINT :PRINT
- 1920 PRINT :BEEP :PRINT "RERUN PROGRAM? (Y/N)"
- 1930 C$=INKEY$ :IF C$="" THEN 1930
- 1940 IF C$="Y" THEN RUN ELSE END
- 1950 REM DEFINE FUNCTION
- 1960 DEF FNRJ(TA,B,C,D)=(B*C-TA*D)/(C*C+D*D)
- 1970 REM SUB CHEB
- 1980 C=2*RIP/17.37
- 1990 BETA=LOG((EXP(C)+1)/(EXP(C)-1))
- 2000 GAMMA=.5*(EXP(BETA/(2*N))-EXP(-BETA/(2*N)))
- 2010 FOR K=1 TO N
- 2020 A(K)=SIN(.5*(2*K-1)*PI/N)
- 2030 B(K)=GAMMA^2+SIN(K*PI/N)^2
- 2040 NEXT K
- 2050 G(1)=2*A(1)/GAMMA
- 2060 FOR K=2 TO N
- 2070 G(K)=4*A(K-1)*A(K)/(B(K-1)*G(K-1))
- 2080 NEXT K
- 2090 NN=N/2
- 2100 NNN=(N+1)/2
- 2110 REM IF NNN-NN<0 THEN AG1=1 ELSE IF NNN-NN=0 THEN AG1=2 ELSE AG1=3
- 2120 ON (2+SGN(NNN-NN)*1) GOTO 2130,2130,2150
- 2130 G(N+1)=((EXP(BETA/2)+1)/(EXP(BETA/2)-1))^2
- 2140 RETURN
- 2150 G(N+1)=1
- 2160 RETURN
- 2170 REM SUB FOR BUTT
- 2180 POV2=1.5708
- 2190 FOR K=1 TO N
- 2200 G(K)=2*SIN(POV2*(2*K-1)/N)
- 2210 NEXT K
- 2220 G(N+1)=1
- 2230 RETURN