10 REM ELLIPTIC.BAS
20 REM WRITTEN BY RUSS KINCAID, AUGUST 1997. BASED ON INFO FROM
30 REM "SIMPLIFIED MODERN FILTER DESIGN" BY PHILLIP GEFFE (RIDER 1963)
40 CLS : PRINT "ELLIPTIC FUNCTION FILTERS DESIGNED FROM TABLES"
50 PRINT "FOR LOWPASS ENTER (1) FOR BANDPASS ENTER (2)": INPUT TTYPE
60 PRINT : PRINT "CAPACITOR INPUT CONFIGURATION IS ASSUMED"
70 PRINT "THE BANDPASS CAN MATCH A WIDE RANGE OF Z, BUT THE LOPASS HAS"
80 PRINT "LIMITED CAPABILITY, SEE THE TABLES"
90 PI = 3.1415927#
100 DIM C(11), L(11), CC(11), LL(11), LP(11), CS(11), L0(11)
110 INPUT "WHAT WILL YOU CALL THIS DESIGN "; NAM$
120 INPUT "SOURCE RESISTANCE:"; RS
130 INPUT "LOAD RESISTANCE:"; RL
140 IF TTYPE = 1 THEN 200
150 INPUT "LOWER BANDEDGE FREQUENCY (F1) (HZ) "; F1
160 INPUT "UPPER BANDEDGE FREQUENCY (F2) (HZ) "; F2
170 BW = F2 - F1: F0 = (F1 * F2) ^ .5: W = 2 * PI * F0: Q = F0 / BW
180 PRINT : PRINT "CENTER FREQUENCY IS : "; F0
190 GOTO 220
200 INPUT "UPPER BANDEDGE FREQUENCY(HZ) : "; FU
210 WU = 2 * PI * FU
220 PRINT "ENTER THE NORMALIZED PROTOTYPE VALUES FROM TABLES."
230 PRINT "TO END THE INPUT CYCLE, ENTER ZERO OR JUST PRESS ENTER"
240 FOR J = 1 TO 9
250 PRINT "INPUT C("; J; "):"; : INPUT C(J)
260 IF INT(J / 2) = J / 2 AND C(J) = 0 THEN 290
270 IF C(J) = 0 THEN 320
280 IF INT(J / 2) <> J / 2 THEN 310
290 PRINT "INPUT L("; J; "):"; : INPUT L(J)
300 IF L(J) = 0 THEN 320
310 NEXT J
320 N = J - 1: IF TTYPE = 2 THEN 540
330 REM LOPASS OUTPUT
340 LPRINT NAM$
350 LPRINT "DESIGN DATE: "; DATE$
360 LPRINT "ELLIPTIC FUNCTION FILTER OF "; N; " POLES"
370 LPRINT "THIS IS THE SCHEMATIC:"
380 LPRINT " |-L2-| |-L4-| ETC"
390 LPRINT "----|--------| |----|-----| |--- Ln(EVEN ONLY) "
400 LPRINT " C1 |-C2-| C3 |-C4-| ETC"
410 LPRINT " | |"
420 LPRINT "--------------------------------------ETC"
430 LPRINT "LOWPASS TO "; FU; " HZ"
440 LPRINT "SOURCE RESISTANCE = "; RS
450 LPRINT "LOAD RESISTANCE = "; RL
460 LPRINT : LPRINT "COMPONENT VALUES:"
470 FOR J = 1 TO N
480 LPRINT "C("; J; ") = "; C(J) / RS / WU
490 IF INT(J / 2) <> J / 2 THEN 510
500 LPRINT "L("; J; ") = "; L(J) * RS / WU
510 NEXT J
520 IF TTYPE = 1 THEN 1390
530 REM BANDPASS ROUTINE: RESONATE ALL ELEMENTS
540 FOR J = 1 TO N
550 IF J = N AND INT(N / 2) = N / 2 THEN 620
560 IF J / 2 = INT(J / 2) THEN 590
570 C(J) = C(J) * Q
580 L(J) = 1 / C(J): GOTO 610
590 L(J) = Q * L(J): C(J) = Q * C(J)
600 CS(J) = 1 / L(J): LP(J) = 1 / C(J)
610 NEXT J: GOTO 630
620 L(N) = Q * L(N): C(N) = 1 / L(N)
630 REM LPRINT"J","C","L","CS","LP"
640 REM FOR J=1 TO N:LPRINT J,C(J),L(J),CS(J),LP(J):NEXT J
650 REM TRANSFORM HORIZONTAL ELEMENTS
660 FOR J = 2 TO N STEP 2
670 IF J > N THEN 830
680 IF LP(J) = 0 THEN 770
690 X = L(J) / LP(J)
700 A = 1 + 1 / 2 / X
710 B = (A ^ 2 - 1) ^ .5
720 Y = A + B
730 L0(J) = 1 / (Y + 1)
740 LT1(J) = L0(J) * LP(J): LT2(J) = Y * L0(J) * LP(J)
750 REM PRINT"LT1=";LT1(J),"LT2=";LT2(J),"L1=";L(J);" MUST BE GREATER THAN L2"
760 CT2(J) = 1 / LP(J) / L0(J): CT1(J) = 1 / LP(J) / L0(J) / Y
770 NEXT J
780 REM LPRINT J,"SHUNT C","SHUNT L","LT1","CT1","LT2","CT2"
790 REM FOR J=1 TO N:LPRINT J,C(J),L(J),LT1(J),CT1(J),LT2(J),CT2(J):NEXT J
800 REM THE FIRST TRANSFORMATION (BELOW) DOES WORK NOW.
810 PRINT "PHI IS A FREE CHOICE VARIABLE, 0 100000! THEN K = 1E-12: CUNIT$ = "PF": S = 1E-09: LUNIT$ = "NH"
1070 IF F0 <= 100000! THEN S = .001: LUNIT$ = "MH": K = 1E-09: CUNIT$ = "NF"
1080 REM NOW SCALE FOR F0 & RS & PRINT OUT
1090 LPRINT "ELLIPTIC BANDPASS FILTER WITH REDUNDENT COIL", DATE$
1100 LPRINT NAM$
1110 LPRINT "CENTER FREQUENCY = "; F0
1120 LPRINT "BANDWIDTH = "; BW
1130 LPRINT "THIS IS THE SCHEMATIC:"
1140 LPRINT " --L2-- --L3-- "
1150 LPRINT " | | | | "
1160 LPRINT "----------------C2--------------C3------------- LN-CN- (EVEN ORDER"
1170 LPRINT " | | | | | | ONLY)"
1180 LPRINT " C1 L1 L0 C0 C1 L1 etc. "
1190 LPRINT " | | | | | | "
1200 LPRINT "------------------------------------------------"
1210 LPRINT
1220 LPRINT "COMPONENTS"
1230 LPRINT "UNITS ARE "; CUNIT$; " AND "; LUNIT$: PRINT
1240 FOR J = 1 TO N
1250 IF J = N AND INT(J / 2) = J / 2 THEN 1380
1260 IF INT(J / 2) = J / 2 THEN 1310
1270 LPRINT "SECTION "; J: LPRINT "C1= "; CC(J) / RS / W / K
1280 LPRINT "L1= "; LL(J) * RS / W / S, "F0= "; F0 / (LL(J) * CC(J)) ^ .5
1290 IF J = N THEN 1390
1300 GOTO 1370
1310 LPRINT "L2= "; LL2(J) * RS / W / S
1320 LPRINT "C2= "; 1 / LL3(J) / RS/W/K,"F0= ";F0/(LL2(J)/LL3(J)) ^ .5
1330 LPRINT "L3= "; LL3(J) * RS / W / S
1340 LPRINT "C3= "; 1 / LL2(J) / RS/W/K,"F0= ";F0/(LL3(J)/LL2(J)) ^ .5
1345 IF PHI=1 THEN LPRINT"L0 & C0 ARE ELIMINATED":GOTO 1370
1350 LPRINT "L0 = "; L0(J) * RS / W / S
1360 LPRINT "C0 = "; C0(J) / RS / W / K, "F0= "; F0 / (L0(J) * C0(J)) ^ .5
1370 NEXT J: LPRINT : GOTO 1390
1380 LPRINT "LN= "; L(N) * RS / W / S: LPRINT "CN= "; C(N) / RS / W / K
1390 LPRINT CHR$(12)
1395 CHAIN "C:\AUTOMENU\FILTMENU"
1400 END
               (
geocities.com/russlk)