home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1979-12-31 | 3.3 KB | 79 lines |
- 10 PRINT: PRINT: PRINT "MODERN FILTER DESIGN PROGRAM": DIM TP(20)
- 20 PRINT: INPUT "LOW PASS (L), HIGH PASS (H), BAND PASS (B)"; Q$
- 30 INPUT "FREQUENCY IN HZ, KHZ OR MHZ"; A$: KF=1: P2=PI*2
- 40 IF A$="KHZ" THEN KF=1000 ELSE IF A$="MHZ" THEN KF=1E+06
- 50 IF Q$="L" OR Q$="H" THEN 60 ELSE IF Q$="B" THEN 120 ELSE 20
- 60 PRINT: INPUT "CUT OFF FREQ "; FC: FC=FC*KF
- 70 INPUT "STOP BAND FREQ"; FS: FS=FS*KF
- 80 INPUT "STOP BAND ATTENUATION IN DB"; AS
- 90 IF Q$="L" THEN NS=FS/FC ELSE NS=FC/FS
- 100 PRINT "NORMALIZED CUT OFF FREQ"; NS: GOTO 190
- 110 REM BANDPASS FILTER
- 120 PRINT: INPUT "CENTER FREQUENCY ="; F0: F0=F0*KF: W0=P2*F0
- 130 INPUT "BANDPASS WIDTH ="; FP: FP=FP*KF: WP=P2*FP
- 140 QL=F0/FP: INPUT "START OF STOP BAND ="; FS: FS=FS*KF
- 150 INPUT "STOP BAND ATTENUATION IN DB"; AS
- 160 NS=2*ABS(F0-FS)/FP
- 170 PRINT: PRINT "QL ="; QL, "NORM FREQ RATIO ="; NS
- 180 REM CALC OF # OF POLES
- 190 PRINT: INPUT "BUTTERWORTH (B) OR TCHEBYCHEFF (T)"; B$: N=0
- 200 IF B$="T" THEN 220 ELSE IF B$<>"B" THEN 190
- 210 N=N+1: AT=10*LOG(1+NS^(2*N))/LOG(10): IF AT>AS THEN 250 ELSE 210
- 220 INPUT "RIPPLE IN DB"; R: TP(0)=1: TP(1)=NS: RE=10^(R/10)-1
- 230 N=N+1: TP(N+1)=2*NS*TP(N)-TP(N-1)
- 240 AT=10*LOG(1+RE*TP(N+1)^2)/LOG(10): IF AT>AS THEN 250 ELSE 230
- 250 PRINT "NUMBER OF SECTION REQUIRED"; N: P=N: RP=R
- 260 PRINT: INPUT "WANT TO TRY DIFFERENT N (Y/N)"; D$
- 270 IF D$="Y" THEN INPUT "WANT TO TRY DIFFERENT ATTN (Y/N)"; A$ ELSE GOTO 300
- 280 IF A$="Y" THEN INPUT "NEW ATT IN DB"; AS: N=0: GOTO 200
- 290 INPUT "NEW N"; N: PRINT: P=N
- 300 REM LOAD BUTTERWORTH DATA
- 310 DIM B(10,5), T(7,5,5)
- 320 FOR N=1 TO 10: Q=(-1)^N: IF Q<0 THEN AB=INT(N/2)+1 ELSE AB=N/2
- 330 FOR I=1 TO AB: READ B(N,I): NEXT: NEXT
- 340 REM LOAD TCHEBYCHEFF DATA
- 350 FOR R=1 TO 7: FOR N=1 TO 5: FOR I=1 TO N
- 360 READ T(R,N,I): NEXT: NEXT: NEXT
- 370 IF B$="B" THEN 520
- 380 Q=(-1)^P: IF P>10 THEN PRINT "LARGEST VALUE 10": GOTO 20
- 390 IF Q>0 THEN P=P+1: PRINT "MUST USE ODD # FOR BAL TCH: P="; P
- 400 IF RP <=0.01 THEN R=1: RP=0.01: GOTO 480
- 410 IF RP <=0.1 THEN R=2: RP=0.1: GOTO 480
- 420 IF RP <=0.2 THEN R=3: RP=0.2: GOTO 480
- 430 IF RP <=0.5 THEN R=4: RP=0.5: GOTO 480
- 440 IF RP <=1 THEN R=5: RP=1: GOTO 480
- 450 IF RP <=2 THEN R=6: RP=2: GOTO 480
- 460 IF RP <=3 THEN R=7: RP=3: GOTO 480
- 470 PRINT "RIPPLE EXCEEDS MAXIMUN LIMIT": GOTO 20
- 480 PRINT: PRINT "# POLES"; "="; P, "RIPPLE"; "="; RP: PRINT
- 490 N=(P+1)/2: FOR J=1 TO P: IF J<=N THEN I=J ELSE I=P+1-J
- 500 PRINT"ELEMENT"; J; "="; T(R,N,I): NEXT: GOTO 780
- 510 REM BUTTERWORTH CALC
- 520 IF P>10 THEN PRINT "LARGEST VALUE 10": GOTO 20
- 530 Q=(-1)^P: IF Q<0 THEN AB=INT(P/2)+1 ELSE AB=P/2
- 540 FOR J=1 TO P: IF J<=AB THEN I=J ELSE I=P+1-J
- 550 PRINT "ELEMENT"; J; "="; B(P,I): NEXT
- 560 PRINT: INPUT "WANT TO CONTINUE (Y/N)"; Q$
- 570 END: REM DATA FOR BUTTERWORTH
- 580 DATA 2,1.414,1,2,.765,1.848,.618,1.618,2,.518,1.414,1.932
- 590 DATA .445,1.247,1.802,2,.390,1.111,1.663,1.962,.347,1
- 600 IF Q$="Y" THEN 260
- 610 DATA 1.532,1.879,2,.313,.908,1.414,1.782,1.975
- 620 REM DATA FOR TCHEBYCHEFF
- 630 DATA .096,.6291,.9702,.7563,1.3049,1.5773,.7969,1.394
- 640 DATA 1.7481,1.6331,.8144,1.427,1.8043,1.7125,1.9057
- 650 DATA .3052,1.0315,1.1474,1.1468,1.3712,1.9750,1.1811
- 660 DATA 1.4228,2.0966,1.5733,1.1956,1.4425,2.1345,1.6167
- 670 DATA 2.2053,.4342,1.2275,1.1525,1.3394,1.3370,2.1660
- 680 DATA 1.3722,1.3781,2.2756,1.5001,1.386,1.3938,2.3093
- 690 DATA 1.5340,2.3728,.6986,1.5963,1.0967,1.7058,1.2296
- 700 DATA 2.5408,1.7372,1.2583,2.6381,1.3444,1.7504,1.2690
- 710 DATA 2.6678,1.3673,2.7239,1.0177,2.0236,.9941,2.1349
- 720 DATA 1.0911,3.0009,2.1664,1.1116,3.0934,1.1736,2.1797
- 730 DATA 1.1192,3.1215,1.1897,3.1747,1.5296,2.7107,.8327
- 740 DATA 2.8310,.8985,3.7827,2.8655,.9119,3.8780,.9535,2.8790
- 750 DATA .9171,3.9056,.9643,3.9598,1.9953,3.3487,.7117,3.4817
- 760 DATA .7618,4.5381,3.5182,.7723,4.6386,.8039,3.5340,.7760
- 770 DATA 4.6692,.8118,4.7272
- 780 END
-