1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        ACTFIL:   ACTIVE FILTER DESIGN
4  REM
5  REM        36293 REV  A   6/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
8  PRINT "THIS PROGRAM WILL DESIGN BUTTERWORTH OR TCHEBYSCHEFF ACTIVE"
9  PRINT "FILTERS WITH A ROLL OFF OF 12,24,36,OR 48 DB PER OCTAVE FOR"
10  PRINT "BUTTERWORTH OR 12,24,OR 36 DB FOR TCHEBYSCHEFF. IT DOES NOT"
11  PRINT "ALLOW FOR THE ADDITION OF ANY GAIN IN THE FILTERS"
12  PRINT "YOU WILL BE REQUIRED TO ENTER THE FOLLOWING INFORMATION:"
13  PRINT 
14  PRINT "TCHEBYSCHEFF OR BUTTERWORTH"
15  PRINT "HIGH OR LOW PASS"
16  PRINT "CUT-OFF FREQUENCY"
17  PRINT "DB OF ATTENUATION PER OCTAVE"
18  PRINT "VALUE OF  C  FOR HIGH PASS OR  R  FOR LOW PASS"
19  PRINT 
20  PRINT "BE SURE TO PUSH RETURN AFTER EVERY ENTRY"
21  PRINT 
22  PRINT "IF YOURE READY,LETS BEGIN"
23  PRINT 
24  PRINT 
25  GOTO 35
30  PRINT "NOT A VALID ENTRY. TRY AGAIN"
35  PRINT "ENTER A  1  FOR TCHEBYSCHEFF,  2  FOR BUTTERWORTH:";
40  INPUT T
45  IF T=1 THEN 695
50  IF T=2 THEN 60
55  GOTO 30
60  GOTO 70
65  PRINT "NOT A VALID ENTRY. TRY AGAIN"
70  PRINT "ENTER  1  FOR LOW PASS,  2  FOR HIGH PASS:";
75  INPUT P
80  IF P=1 THEN 95
85  IF P=2 THEN 395
90  GOTO 65
95  GOTO 105
100  PRINT "NOT A VALID ENTRY. TRY AGAIN"
105  PRINT "ENTER CUT-OFF FREQUENCY IN HERTZ:";
110  INPUT F
115  PRINT "ENTER  R  IN OHMS:";
120  INPUT R
125  GOTO 135
130  PRINT "NOT A VALID ENTRY. TRY AGAIN"
135  PRINT "ENTER DB OF ATTENUATION PER OCTAVE:";
140  INPUT A
145  IF A=12 THEN 170
150  IF A=24 THEN 195
155  IF A=36 THEN 240
160  IF A=48 THEN 305
165  GOTO 130
170  LET C2=.707/((6.28*F)*R)
175  LET C1=1/(R*(6.28*F)*.707)
180  PRINT "C1=";C1
185  PRINT "C2=";C2
190  GOTO 1225
195  LET C2=.3827/((6.28*F)*R)
200  LET C1=1/(R*(6.28*F)*.3827)
205  LET C4=.9239/((6.28*F)*R)
210  LET C3=1/(R*(6.28*F)*.9239)
215  PRINT "C1=";C1
220  PRINT "C2=";C2
225  PRINT "C3=";C3
230  PRINT "C4=";C4
235  GOTO 1225
240  LET C2=.2588/((6.28*F)*R)
245  LET C1=1/(R*(6.28*F)*.2588)
250  LET C4=.7071/((6.28*F)*R)
255  LET C3=1/(R*(6.28*F)*.7071)
260  LET C6=.9659/((6.28*F)*R)
265  LET C5=1/(R*(6.28*F)*.9659)
270  PRINT "C1=";C1
275  PRINT "C2=";C2
280  PRINT "C3=";C3
285  PRINT "C4=";C4
290  PRINT "C5=";C5
295  PRINT "C6=";C6
300  GOTO 1225
305  LET C2=.1951/((6.28*F)*R)
310  LET C1=1/(R*(6.28*F)*.1951)
315  LET C4=.5556/((6.28*F)*R)
320  LET C3=1/(R*(6.28*F)*.5556)
325  LET C6=.8315/((6.28*F)*R)
330  LET C5=1/(R*(6.28*F)*.8315)
340  LET C8=.9808/((6.28*F)*R)
345  LET C7=1/(R*(6.28*F)*.9808)
350  PRINT "C1=";C1
355  PRINT "C2=";C2
360  PRINT "C3=";C3
365  PRINT "C4=";C4
370  PRINT "C5=";C5
375  PRINT "C6=";C6
380  PRINT "C7=";C7
385  PRINT "C8=";C8
390  GOTO 1225
395  PRINT "ENTER CUT OFF FREQUENCY IN HERTZ:";
400  INPUT F
405  PRINT "ENTER  C  IN MICROFARADS:";
410  INPUT C
415  LET C=C*.000001
420  GOTO 430
425  PRINT "NOT A VALID ENTRY. TRY AGAIN"
430  PRINT "ENTER DB OF ATTENUATION PER OCTAVE:";
435  INPUT A
440  IF A=12 THEN 465
445  IF A=24 THEN 490
450  IF A=36 THEN 540
455  IF A=48 THEN 605
460  GOTO 425
465  LET R1=(.707/(12.56*F*C))*2
470  LET R2=1/(R1*(C^2)*((6.28*F)^2))
475  PRINT "R1=";R1
480  PRINT "R2=";R2
485  GOTO 1225
490  LET R1=(.3827/(12.56*F*C))*2
495  LET R2=1/(R1*(C^2)*((6.28*F)^2))
500  LET R3=(.9239/(12.56*F*C))*2
505  LET R4=1/(R3*(C^2)*((6.28*F)^2))
515  PRINT "R1=";R1
520  PRINT "R2=";R2
525  PRINT "R3=";R3
530  PRINT "R4=";R4
535  GOTO 1225
540  LET R1=(.2588/(12.56*F*C))*2
545  LET R2=1/(R1*(C^2)*((6.28*F)^2))
550  LET R3=(.7071/(12.56*F*C))*2
555  LET R4=1/(R3*(C^2)*((6.28*F)^2))
560  LET R5=(.9656/(12.56*F*C))*2
565  LET R6=1/(R5*(C^2)*((6.28*F)^2))
570  PRINT "R1=";R1
575  PRINT "R2=";R2
580  PRINT "R3=";R3
585  PRINT "R4=";R4
590  PRINT "R5=";R5
595  PRINT "R6=";R6
600  GOTO 1225
605  LET R1=(.1951/(12.56*F*C))*2
610  LET R2=1/(R1*(C^2)*((6.28*F)^2))
615  LET R3=(.5556/(12.56*F*C))*2
620  LET R4=1/(R3*(C^2)*((6.28*F)^2))
625  LET R5=(.8315/(12.56*F*C))*2
630  LET R6=1/(R5*(C^2)*((6.28*F)^2))
635  LET R7=(.9808/(12.56*F*C))*2
640  LET R8=1/(R7*(C^2)*((6.28*F)^2))
645  PRINT "R1=";R1
650  PRINT "R2=";R2
655  PRINT "R3=";R3
660  PRINT "R4=";R4
665  PRINT "R5=";R5
670  PRINT "R6=";R6
675  PRINT "R7=";R7
680  PRINT "R8=";R8
685  GOTO 1225
690  PRINT "NOT A VALID ENTRY. TRY AGAIN"
695  PRINT "ENTER A  1  FOR LOW PASS,  2  FOR HIGH PASS:";
700  INPUT P
705  IF P=1 THEN 720
710  IF P=2 THEN 1005
715  GOTO 690
720  PRINT "ENTER CUT-OFF FREQUENCY IN HERTZ:";
725  INPUT F
730  PRINT "ENTER  R  IN OHMS:";
735  INPUT R
740  GOTO 750
745  PRINT "NOT A VALID ENTRY,TRY AGAIN"
750  PRINT "ENTER DB OF ATTENUATION PER OCTAVE:";
755  INPUT A
760  IF A=12 THEN 785
765  IF A=24 THEN 820
770  IF A=36 THEN 890
780  GOTO 745
785  LET B1=.579/(12.56*(F*1.231)*R)
790  LET B2=1/(6.28*(F*1.231)*R)
795  LET C2=B1+(B2*(SQR((.579^2)/4)))
800  LET C1=1/((R^2)*C2*((6.28*(F*1.231))^2))
805  PRINT "C1=";C1
810  PRINT "C2=";C2
815  GOTO 1225
820  LET M1=.17/(12.56*(F*1.031)*R)
825  LET M2=1/(6.28*(F*1.031)*R)
830  LET C2=M1+(M2*(SQR((.17^2)/4)))
835  LET C1=1/((R^2)*C2*((6.28*(F*1.031))^2))
840  LET N1=.709/(12.56*(F*.597)*R)
850  LET N2=1/(6.28*(F*.579)*R)
855  LET C4=N1+(N2*(SQR((.709^2)/4)))
860  LET C3=1/((R^2)*C4*((6.28*(F*1.231))^2))
865  PRINT "C1=";C1
870  PRINT "C2=";C2
875  PRINT "C3=";C3
880  PRINT "C4=";C4
885  GOTO 1225
890  LET M1=.077/(12.56*(F*1.011)*R)
895  LET M2=1/(6.28*(F*1.011)*R)
900  LET C2=M1+(M2*(SQR((.077^2)/4)))
905  LET C1=1/((R^2)*C2*((6.28*(F*1.011))^2))
910  LET N1=.276/(12.56*(F*.768)*R)
915  LET N2=1/(6.28*(F*.768)*R)
920  LET C4=N1+(N2*(SQR((.276^2)/4)))
925  LET C3=1/((R^2)*C4*((6.28*(F*.768))^2))
930  LET P1=.732/(12.56*(F*.396)*R)
935  LET P2=1/(6.28*(F*.396)*R)
940  LET C6=P1+(P2*(SQR((.732^2)/4)))
945  LET C5=1/((R^2)*C6*((6.28*(F*.396))^2))
950  PRINT "C1=";C1
955  PRINT "C2=";C2
960  PRINT "C3=";C3
965  PRINT "C4=";C4
970  PRINT "C5=";C5
975  PRINT "C6=";C6
980  GOTO 1225
1005  PRINT "ENTER CUT-OFF FREQUENCY IN HERTZ:";
1010  INPUT F
1015  PRINT "ENTER  C  IN MICROFARADS:";
1020  INPUT C
1025  LET C=C*.000001
1030  PRINT "ENTER DB OF ATTENUATION:";
1035  INPUT A
1040  IF A=12 THEN 1065
1045  IF A=24 THEN 1090
1050  IF A=36 THEN 1135
1060  GOTO 1030
1065  LET R1=(.579/(2*(6.28*(F*.815))*C))*2
1070  LET R2=1/(R1*(C^2)*((6.28*(F*.815))^2))
1075  PRINT "R1=";R1
1080  PRINT "R2=";R2
1085  GOTO 1225
1090  LET R1=(.17/(2*(6.28*(F*.97))*C))*2
1095  LET R2=1/(R1*(C^2)*((6.28*(F*.97))^2))
1100  LET R3=(.709/(2*(6.28*(F*1.675))*C))*2
1105  LET R4=1/(R3*(C^2)*((6.28*(F*1.675))^2))
1110  PRINT "R1=";R1
1115  PRINT "R2=";R2
1120  PRINT "R3=";R3
1125  PRINT "R4=";R4
1130  GOTO 1225
1135  LET R1=(.077/(2*(6.28*(F*.989))*C))*2
1140  LET R2=1/(R1*(C^2)*((6.28*(F*.989))^2))
1145  LET R3=(.276/(2*(6.28*(F*1.31))*C))*2
1150  LET R4=1/(R3*(C^2)*((6.28*(F*1.31))^2))
1155  LET R5=(.732/(2*(6.28*(F*2.52))*C))*2
1160  LET R6=1/(R5*(C^2)*((6.28*(F*2.52))^2))
1165  PRINT "R1=";R1
1170  PRINT "R2=";R2
1175  PRINT "R3=";R3
1180  PRINT "R4=";R4
1185  PRINT "R5=";R5
1190  PRINT "R6=";R6
1195  GOTO 1225
1220  PRINT "NOT A VALID ENTRY. TRY AGAIN"
1225  PRINT "DO YOU WANT A SCHEMATIC? 1 IF YES, 2 IF NO:";
1226  INPUT W
1227  IF W=1 THEN 1900
1228  IF W=2 THEN 1300
1229  GOTO 1225
1290  PRINT "TRY AGAIN"
1300  PRINT "IF YOU HAVE MORE TO DESIGN,ENTER 1. IF NOT, 2:";
1310  INPUT Z
1320  IF Z=1 THEN 35
1330  IF Z=2 THEN 5000
1340  GOTO 1290
1900  PRINT "IF YOU ARE USING THE TEKTRONIX, ENTER A 1. IF TTY,A 2:";
1901  INPUT K
1902  IF K=2 THEN 1975
1903  IF K=1 THEN 1910
1904  GOTO 1900
1910  PRINT "GET A COPY OF THE CIRCUIT VALUES NOW. AFTER YOU HAVE YOUR"
1915  PRINT "COPY,PRESS ERASE THEN HOME ON THE TEKTRONIX. THIS WILL"
1920  PRINT "INSURE THAT THE ENTIRE SCHEMATIC IS PRINTED ON ONE"
1925  PRINT "PAGE. AFTER YOU HAVE PRESSED ERASE AND HOME, ENTER A"
1930  PRINT " 1 AND THE SCHEMATIC WILL BE PRINTED:";
1935  INPUT H
1940  IF H=1 THEN 1975
1945  IF H#1 THEN 1950
1950  PRINT "TRY AGAIN"
1960  GOTO 1935
1975  IF P=1 THEN 2000
1976  IF P=2 THEN 3000
1999  REM *****LOW PASS PRINT ROUTINE********
2000  PRINT "                -----------------)(-----------------"
2010  PRINT "                I                C1                I"
2020  PRINT "                I                C3                I"
2030  PRINT "                I                C5                I"
2040  PRINT "                I                C7                I"
2050  PRINT "                I                    *             I"
2060  PRINT "                I                    **            I"
2070  PRINT "                I                    * *           I"
2080  PRINT " IN             I                    *  *          I"
2090  PRINT "                I                    *   *         I"
2100  PRINT " O-------XXXX----------XXXX----------* -  *        I"
2110  PRINT "           R             R     I     *     *       I"
2120  PRINT "                               I     *      *      I"
2130  PRINT "                        ---)(---     *       *-----------O"
2140  PRINT "                        I            *      *      I"
2150  PRINT "                        I  C2        *     *       I"
2160  PRINT "                        I  C4    ----* +  *        I"
2170  PRINT "                        I  C6    I   *   *         I"
2180  PRINT "                        I  C8    I   *  *          I"
2190  PRINT "                        I        I   * *           I"
2200  PRINT "                        I        I   **            I"
2210  PRINT "                        I        I   *             I"
2220  PRINT "                        I        I                 I"
2230  PRINT "                     -------     -------------------"
2240  PRINT "                      ----- "
2250  PRINT "                       ---  "
2260  PRINT "                        -   "
2270  PRINT 
2280  PRINT 
2290  PRINT "THIS REPRESENTS ONE 12 DB SECTION. FOR ONE SECTION"
2300  PRINT "USE C1 AND C2. FOR TWO SECTIONS, USE C1 AND C2 FOR"
2310  PRINT "THE FIRST--C3 AND C4 FOR THE SECOND. FOR THREE,"
2320  PRINT "USE C1 AND C2 FOR THE FIRST, ETC."
2330  PRINT 
2340  PRINT 
2350  PRINT "THE VALUE OF R YOU SELECTED AT THE START OF THE "
2360  PRINT "FILTER DESIGN IS USED FOR BOTH  VALUES OF  R."
2370  GOTO 1300
2999  REM  ****HIGH PASS PRINT ROUTINE*******
3000  PRINT "               ----------------XXXX----------------"
3010  PRINT "               I                R1                I"
3020  PRINT "               I                R3                I"
3030  PRINT "               I                R5                I"
3040  PRINT "               I                R7                I"
3050  PRINT "               I                   *              I"
3060  PRINT "               I                   **             I"
3070  PRINT "               I                   * *            I"
3080  PRINT " IN            I                   *  *           I"
3090  PRINT "               I                   *   *          I"
3100  PRINT " O------)(------------)(-----------* -  *         I"
3110  PRINT "        C             C      I     *     *        I"
3120  PRINT "                             I     *      *       I"
3130  PRINT "                -----XXXX-----     *       *-------------O"
3140  PRINT "                I                  *      *       I"
3150  PRINT "                I                  *     *        I  OUT"
3160  PRINT "                I    R2      ------* +  *         I"
3170  PRINT "                I    R4      I     *   *          I"
3180  PRINT "                I    R6      I     *  *           I"
3190  PRINT "                I    R8      I     * *            I"
3200  PRINT "                I            I     **             I"
3210  PRINT "                I            I     *              I"
3220  PRINT "            --------         I                    I"
3230  PRINT "              ----           ----------------------"
3240  PRINT "               -- "
3250  PRINT 
3260  PRINT 
3270  PRINT 
3340  PRINT " THIS REPRESENTS ONE 12 DB SECTION."
3350  PRINT "FOR ONE SECTION, USE R1,R2."
3360  PRINT "FOR 2 SECTIONS, USE R1,R2 FOR THE FIRST AND R3,R4 FOR"
3370  PRINT "THE SECOND."
3380  PRINT "FOR 3,USE R1,R2 FOR THE FIRST-R3,R4 FOR THE SECOND-ETC."
3400  PRINT " THE VALUE OF C YOU SELECTED AT THE START OF THE"
3410  PRINT " DESIGN, IS USED FOR BOTH VALUES OF  C"
3420  GOTO 1300
5000  END 
