home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 1
/
HamRadio.cdr
/
tech
/
design3
/
idbpf.asc
< prev
next >
Wrap
Text File
|
1986-10-15
|
7KB
|
215 lines
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