home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1987-02-10 | 5.2 KB | 158 lines |
- 100 CLS :REM "FILTER1"
- 110 PRINT TAB(25);"****FILTER RESPONSE PROGRAM****"
- 120 PRINT :PRINT :REM R.BAIN-1985
- 130 BEEP :PRINT "PRESS #1 FOR BUTTERWORTH OR #2 FOR CHEBYSHEV
- 140 A$=INKEY$ :IF A$="" THEN 140
- 150 PRINT TAB(8);A$ :IF A$="2" THEN 750
- 160 IF A$<>"1" THEN 140
- 170 PRINT :PRINT "BUTTERWORTH FILTER ANALYSIS"
- 180 PRINT "---------------------------"
- 190 PRINT :BEEP :INPUT "ENTER Num. of Poles ";NP
- 200 PRINT :BEEP :INPUT "ENTER BW(3DB) IN Mhz ";BW3
- 210 PRINT :BEEP :PRINT "PRESS #1 ATTEN for GIVEN FREQ #2 FREQ for GIVEN ATTEN"
- 220 B$=INKEY$ :IF B$="" THEN 220
- 230 PRINT TAB(8);A$ :IF B$="2" THEN 500 :IF B$<>"1" THEN 220
- 240 GOSUB 1610
- 250 C$=INKEY$ :IF C$="" THEN 250
- 260 IF C$="2" THEN 370 :IF C$="4" THEN 370
- 270 IF VAL(C$)>4 THEN 240
- 280 REM ATTEN AT A GIVEN FREQ FOR LOW & HIGH PASS FILTERS
- 290 IF C$="3" THEN FG=3
- 300 PRINT BEEP :INPUT "ENTER FREQ IN Mhz ";FA
- 310 W=FA/BW3 :IF FG=3 THEN W=1/W
- 320 A=SQR(1+W^(2*NP)) :ADB=20*(LOG(A)/LOG(10))
- 330 PRINT :PRINT "ATTEN @";FA;"Mhz=";INT(ADB*100)/100;"DB"
- 340 PRINT :BEEP :PRINT "ANOTHER FREQ.? (Y/N)
- 350 D$=INKEY$ :IF D$="" THEN 350
- 360 IF D$="Y" THEN 300 ELSE 1630
- 370 REM ATTEN AT GIVEN FREQ FOR BANDPASS & BANDSTOP FILTERS
- 380 IF C$="4" THEN FG=4
- 390 PRINT :BEEP :INPUT "CENTER FREQ IN Mhz=";FC
- 400 PRINT :BEEP :INPUT "ENTER FREQ IN Mhz ";FO
- 410 FX=FC^2/FO :BWX=ABS(FO-FX)
- 420 W=BWX/BW3 :IF FG=4 THEN W=BW3/BWX
- 430 A=SQR(1+W^(2*NP)) :IF A>10^5 THEN 460
- 440 ADB=20*(LOG(A)/LOG(10))
- 450 PRINT :PRINT "ATTEN @";FO;"Mhz=";INT(ADB*100)/100 :GOTO 470
- 460 PRINT :PRINT "ATTEN @";FO;"Mhz >100 DB"
- 470 PRINT :BEEP :PRINT "ANOTHER FREQ.? (Y/N)"
- 480 E$=INKEY$ :IF E$="" THEN 480
- 490 IF E$="Y" THEN 400 ELSE 1630
- 500 GOSUB 1610
- 510 C$=INKEY$ IF C$="" THEN 510
- 520 IF C$="2" THEN 640 :IF C$="4" THEN 640
- 530 IF VAL(C$)>4 THEN 500
- 540 REM FREQ FOR A GIVEN ATTEN FOR LOW & HIGH PASS FILTERS
- 550 IF C$="3" THEN FG=3
- 560 PRINT :BEEP :INPUT "ENTER ATTEN. IN DB ";ADB
- 570 A=10^(ADB/20)
- 580 W=((A^2)-1)^(1/(2*NP)) :IF FG=3 THEN W=1/W :FA=BW3*W
- 590 PRINT :PRINT "FREQ @ ATTEN=";ADB;"DB is"INT(FA*100)/100;"Mhz"
- 600 PRINT :BEEP :PRINT "ANOTHER ATTEN.? (Y/N)"
- 610 D$=INKEY$ :IF D$="" THEN 610
- 620 IF D$="Y" THEN 560 ELSE 1630
- 630 REM FREQ FOR A GIVEN ATTEN FOR BANDPASS & BANDSTOP FILTERS
- 640 IF C$="4" THEN FG=4
- 650 PRINT :BEEP :INPUT "ENTER CENTER FREQ (Mhz)";FC
- 660 PRINT :BEEP :INPUT "ENTER ATTEN IN DB ";ADB
- 670 A=10^(ADB/20) :WX=((A^2)-1)^(1/(2*NP))
- 680 BWX=BW3*WX :IF FG=4 THEN BWX=BW3/WX
- 690 FL=0.5*(-BWX+SQR((BWX^2)+4*FC^2)) :FH=FC^2/FL
- 700 PRINT :PRINT "AT ATTEN=";ADB;"DB" :PRINT :PRINT "HI FREQ.=";INT(FH*100)/100;
- 710 PRINT "Mhz" :PRINT "LO FREQ.=";INT(FL*100)/100;"Mhz"
- 720 PRINT :BEEP :PRINT "ANOTHER ATTEN.? (Y/N)"
- 730 D$=INKEY$ :IF D$="" THEN 730
- 740 IF D$="Y" THEN 660 ELSE 1630
- 750 PRINT :PRINT "CHEBYSHEV FILTER ANALYSIS"
- 760 PRINT "-------------------------"
- 770 PRINT :BEEP :INPUT "ENTER Num. of Poles ";NP
- 780 PRINT :BEEP :INPUT "ENTER RIPPLE IN DB ";R
- 790 PRINT :BEEP
- 800 PRINT "PRESS #1 TO INPUT BW(3DB)";TAB(40);"PRESS #2 FOR EQUI-RIPPLE BW"
- 810 E$=INKEY$ :IF E$="" THEN 810
- 820 IF E$="2" THEN 890
- 830 IF VAL(E$)>2 THEN 810
- 840 PRINT :BEEP :INPUT "ENTER BW(3DB) IN MHz ";BW3
- 850 A=10^(3/20) :CN=SQR(((A^2)-1)/(10^(0.1*R)-1))
- 860 KY=LOG(CN+SQR((CN^2)-1))
- 870 W=0.5*(EXP(KY/NP)+EXP(-KY/NP)) :BWR=BW3/W
- 880 GOTO 900
- 890 PRINT :BEEP :INPUT "EQUI-RIPPLE BANDWIDTH IN MHz=";BWR
- 900 PRINT :BEEP
- 910 PRINT "PRESS #1 ATTEN for GIVEN FREQ";TAB(40);"#2 FREQ for GIVEN ATTEN"
- 920 B$=INKEY$ :IF B$="" THEN 920
- 930 IF B$="2" THEN 1310
- 940 IF VAL(E$)>2 THEN 910
- 950 GOSUB 1610
- 960 C$=INKEY$ :IF C$="" THEN 960
- 970 IF C$="2" THEN 1140 :IF C$="4" THEN 1140
- 980 IF VAL(C$)>4 THEN 960
- 990 REM ATTEN AT A GIVEN FREQ FOR LOW & HIGH PASS FILTERS
- 1000 IF C$="3" THEN FG=3
- 1010 PRINT :BEEP :INPUT "ENTER FREQ IN MHz ";FO
- 1020 IF FG=3 THEN 1040
- 1030 W=FO/BWR :IF W<1 THEN 1100 ELSE 1050
- 1040 W=BWR/FO :IF W<1 THEN 1100
- 1050 KY=(LOG(W+SQR((W^2)-1)))
- 1060 CN=0.5*EXP((NP*KY)+EXP(-NP*KY))
- 1070 A=SQR(1+(10^(0.1*R)-1)*CN^2)
- 1080 ADB=20*(LOG(A)/LOG(10))
- 1090 PRINT :PRINT "ATTEN @";FO;"MHz=";INT(ADB*100)/100;"DB" :GOTO 1110
- 1100 PRINT :PRINT "ATTEN @";FO;"MHz=0 to";R;"DB"
- 1110 PRINT :BEEP :PRINT "ANOTHER FREQ.? (Y/N)"
- 1120 E$=INKEY$ :IF E$="" THEN 1120
- 1130 IF E$="Y" THEN 1010 ELSE 1630
- 1140 REM ATTEN AT A GIVEN FREQ FOR BANDPASS & BANDSTOP FILTERS
- 1150 IF C$="4" THEN FG=4
- 1160 PRINT :BEEP :INPUT "ENTER CENTER FREQ (MHz)";FC
- 1170 PRINT :BEEP :INPUT "ENTER FREQ IN MHz ";FO
- 1180 FX=FC^2/FO :BWX=ABS(FO-FX) :IF FG=4 THEN 1200
- 1190 W=BWX/BW3 :IF W<1 THEN 1270 ELSE 1210
- 1200 W=BWR/BWX :IF W<1 THEN 1270
- 1210 KY=LOG(W+SQR((W^2)-1))
- 1220 CN=0.5*(EXP(NP*KY)+EXP(-NP*KY))
- 1230 A=SQR(1+(10^(0.1*R)-1)*CN^2) :IF A>10^5 THEN 1260
- 1240 ADB=20*(LOG(A)/LOG(10))
- 1250 PRINT :PRINT "ATTEN @";FO;"MHz=";INT(ADB*100)/100;"DB" :GOTO 1280
- 1260 PRINT :PRINT "ATTEN @";FO;"MHz >100 DB" :GOTO 1280
- 1270 PRINT :PRINT "ATTEN @";FO;"MHz=0 to";R;"DB"
- 1280 PRINT :BEEP :PRINT "ANOTHER FREQ.? (Y/N)"
- 1290 E$=INKEY$ :IF E$="" THEN 1290
- 1300 IF E$="Y" THEN 1170 ELSE 1630
- 1310 GOSUB 1610
- 1320 C$=INKEY$ :IF C$="" THEN 1320
- 1330 IF C$="2" THEN 1470 :IF C$="4" THEN 1470
- 1340 IF VAL(E$)>4 THEN 1310
- 1350 REM FREQ AT A GIVEN ATTEN FOR LOW & HIGH PASS FILTERS
- 1360 IF C$="3" THEN FG=3
- 1370 PRINT :BEEP :INPUT "ENTER ATTEN IN DB ";ADB
- 1380 A=10^(ADB/20)
- 1390 CN=SQR((A^2-1)/(10^(0.1*R)-1))
- 1400 KY=LOG(CN+SQR((CN^2)-1))
- 1410 W=0.5*(EXP(KY/NP)+EXO(-KY/NP)) :IF FG=3 THEN W=1/W
- 1420 FO=BWR*W
- 1430 PRINT :PRINT "FREQ @ ATTEN=";ADB;"DB IS";INT(FO*100)/100;"MHz"
- 1440 D$=INKEY$ :IF D$="" THEN 1440
- 1450 IF D$="Y" THEN 1370 ELSE 1630
- 1460 REM FREQ AT A GIVEN ATTEN FOR BANDPASS & BANDSTOP FILTERS
- 1470 IF C$="4" THEN FG=4
- 1480 PRINT :BEEP :INPUT "ENTER CENTER FREQ IN MHz";FC
- 1490 PRINT :BEEP :INPUT "ENTER ATTEN IN DB ";ADB
- 1500 A=10^(ADB/20)
- 1510 CN=SQR(((A^2)-1)/(10^(0.1*R)-1))
- 1520 KY=LOG(CN+SQR((CN^2)-1))
- 1530 W=0.5*(EXP(KY/NP)+EXP(-KY/NP))
- 1540 BWX=BWR*W :IF FG=4 THEN BWX=BWR/W
- 1550 FL=0.5*(-BWX+SQR((BWX^2)+4*FC^2)) :FH=FC^2/FL
- 1560 PRINT :PRINT "AT ATTEN=";ADB;"DB"
- 1570 PRINT :PRINT "HI FREQ=";INT(FH*100)/100;"& LO FREQ=";INT(FL*100)/100;"MHz"
- 1580 PRINT :PRINT "ANOTHER ATTEN.? (Y/N)"
- 1590 D$=INKEY$ :IF D$="" THEN 1590
- 1600 IF D$="Y" THEN 1490 ELSE 1630
- 1610 PRINT :PRINT "PRESS #1 LOW PASS #2 BANDPASS #3 HIGHPASS #4 BANDSTOP"
- 1620 BEEP :RETURN
- 1630 PRINT :BEEP :PRINT "CONTINUE? (Y/N)"
- 1640 F$=INKEY$ :IF F$="" THEN 1640
- 1650 IF F$="Y" THEN 100
- 1660 IF F$<>"N" THEN 1640 ELSE END
-