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

    Source: geocities.com/russlk/filters

               ( geocities.com/russlk)