home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / misc / ham_bas / filter1.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1987-02-10  |  5.2 KB  |  158 lines

  1. 100  CLS :REM "FILTER1"
  2. 110  PRINT TAB(25);"****FILTER RESPONSE PROGRAM****"
  3. 120  PRINT :PRINT :REM R.BAIN-1985
  4. 130  BEEP :PRINT "PRESS #1 FOR BUTTERWORTH  OR  #2 FOR CHEBYSHEV
  5. 140  A$=INKEY$ :IF A$="" THEN 140
  6. 150  PRINT TAB(8);A$ :IF A$="2" THEN 750
  7. 160  IF A$<>"1" THEN 140
  8. 170  PRINT :PRINT "BUTTERWORTH FILTER ANALYSIS"
  9. 180  PRINT "---------------------------"
  10. 190  PRINT :BEEP :INPUT "ENTER Num. of Poles  ";NP
  11. 200  PRINT :BEEP :INPUT "ENTER BW(3DB) IN Mhz ";BW3
  12. 210  PRINT :BEEP :PRINT "PRESS #1 ATTEN for GIVEN FREQ  #2 FREQ for GIVEN ATTEN"
  13. 220  B$=INKEY$ :IF B$="" THEN 220
  14. 230  PRINT TAB(8);A$ :IF B$="2" THEN 500 :IF B$<>"1" THEN 220
  15. 240  GOSUB 1610
  16. 250  C$=INKEY$ :IF C$="" THEN 250
  17. 260  IF C$="2" THEN 370 :IF C$="4" THEN 370
  18. 270  IF VAL(C$)>4 THEN 240
  19. 280  REM ATTEN AT A GIVEN FREQ FOR LOW & HIGH PASS FILTERS
  20. 290  IF C$="3" THEN FG=3
  21. 300  PRINT BEEP :INPUT "ENTER FREQ IN Mhz ";FA
  22. 310  W=FA/BW3 :IF FG=3 THEN W=1/W
  23. 320  A=SQR(1+W^(2*NP)) :ADB=20*(LOG(A)/LOG(10))
  24. 330  PRINT :PRINT "ATTEN @";FA;"Mhz=";INT(ADB*100)/100;"DB"
  25. 340  PRINT :BEEP :PRINT "ANOTHER FREQ.? (Y/N)
  26. 350  D$=INKEY$ :IF D$="" THEN 350
  27. 360  IF D$="Y" THEN 300 ELSE 1630
  28. 370  REM ATTEN AT GIVEN FREQ FOR BANDPASS & BANDSTOP FILTERS
  29. 380  IF C$="4" THEN FG=4
  30. 390  PRINT :BEEP :INPUT "CENTER FREQ IN Mhz=";FC
  31. 400  PRINT :BEEP :INPUT "ENTER FREQ IN Mhz ";FO
  32. 410  FX=FC^2/FO :BWX=ABS(FO-FX)
  33. 420  W=BWX/BW3 :IF FG=4 THEN W=BW3/BWX
  34. 430  A=SQR(1+W^(2*NP)) :IF A>10^5 THEN 460
  35. 440  ADB=20*(LOG(A)/LOG(10))
  36. 450  PRINT :PRINT "ATTEN @";FO;"Mhz=";INT(ADB*100)/100 :GOTO 470
  37. 460  PRINT :PRINT "ATTEN @";FO;"Mhz >100 DB"
  38. 470  PRINT :BEEP :PRINT "ANOTHER FREQ.? (Y/N)"
  39. 480  E$=INKEY$ :IF E$="" THEN 480
  40. 490  IF E$="Y" THEN 400 ELSE 1630
  41. 500  GOSUB 1610
  42. 510  C$=INKEY$ IF C$="" THEN 510
  43. 520  IF C$="2" THEN 640 :IF C$="4" THEN 640
  44. 530  IF VAL(C$)>4 THEN 500
  45. 540  REM FREQ FOR A GIVEN ATTEN FOR LOW & HIGH PASS FILTERS
  46. 550  IF C$="3" THEN FG=3
  47. 560  PRINT :BEEP :INPUT "ENTER ATTEN. IN DB ";ADB
  48. 570  A=10^(ADB/20)
  49. 580  W=((A^2)-1)^(1/(2*NP)) :IF FG=3 THEN W=1/W :FA=BW3*W
  50. 590  PRINT :PRINT "FREQ @ ATTEN=";ADB;"DB is"INT(FA*100)/100;"Mhz"
  51. 600  PRINT :BEEP :PRINT "ANOTHER ATTEN.? (Y/N)"
  52. 610  D$=INKEY$ :IF D$="" THEN 610
  53. 620  IF D$="Y" THEN 560 ELSE 1630
  54. 630  REM FREQ FOR A GIVEN ATTEN FOR BANDPASS & BANDSTOP FILTERS
  55. 640  IF C$="4" THEN FG=4
  56. 650  PRINT :BEEP :INPUT "ENTER CENTER FREQ (Mhz)";FC
  57. 660  PRINT :BEEP :INPUT "ENTER ATTEN IN DB ";ADB
  58. 670  A=10^(ADB/20) :WX=((A^2)-1)^(1/(2*NP))
  59. 680  BWX=BW3*WX :IF FG=4 THEN BWX=BW3/WX
  60. 690  FL=0.5*(-BWX+SQR((BWX^2)+4*FC^2)) :FH=FC^2/FL
  61. 700  PRINT :PRINT "AT ATTEN=";ADB;"DB" :PRINT :PRINT "HI FREQ.=";INT(FH*100)/100;
  62. 710  PRINT "Mhz" :PRINT "LO FREQ.=";INT(FL*100)/100;"Mhz"
  63. 720  PRINT :BEEP :PRINT "ANOTHER ATTEN.? (Y/N)"
  64. 730  D$=INKEY$ :IF D$="" THEN 730
  65. 740  IF D$="Y" THEN 660 ELSE 1630
  66. 750  PRINT :PRINT "CHEBYSHEV FILTER ANALYSIS"
  67. 760  PRINT "-------------------------"
  68. 770  PRINT :BEEP :INPUT "ENTER Num. of Poles  ";NP
  69. 780  PRINT :BEEP :INPUT "ENTER RIPPLE IN DB   ";R
  70. 790  PRINT :BEEP
  71. 800  PRINT "PRESS  #1 TO INPUT BW(3DB)";TAB(40);"PRESS  #2 FOR EQUI-RIPPLE  BW"
  72. 810  E$=INKEY$ :IF E$="" THEN 810
  73. 820  IF E$="2" THEN 890
  74. 830  IF VAL(E$)>2 THEN 810
  75. 840  PRINT :BEEP :INPUT "ENTER BW(3DB) IN MHz ";BW3
  76. 850  A=10^(3/20) :CN=SQR(((A^2)-1)/(10^(0.1*R)-1))
  77. 860  KY=LOG(CN+SQR((CN^2)-1))
  78. 870  W=0.5*(EXP(KY/NP)+EXP(-KY/NP)) :BWR=BW3/W
  79. 880  GOTO 900
  80. 890  PRINT :BEEP :INPUT "EQUI-RIPPLE BANDWIDTH IN MHz=";BWR
  81. 900  PRINT :BEEP
  82. 910  PRINT "PRESS #1 ATTEN for GIVEN FREQ";TAB(40);"#2 FREQ for GIVEN ATTEN"
  83. 920  B$=INKEY$ :IF B$="" THEN 920
  84. 930  IF B$="2" THEN 1310
  85. 940  IF VAL(E$)>2 THEN 910
  86. 950  GOSUB 1610
  87. 960  C$=INKEY$ :IF C$="" THEN 960
  88. 970  IF C$="2" THEN 1140 :IF C$="4" THEN 1140
  89. 980  IF VAL(C$)>4 THEN 960
  90. 990  REM ATTEN AT A GIVEN FREQ FOR LOW & HIGH PASS FILTERS
  91. 1000  IF C$="3" THEN FG=3
  92. 1010  PRINT :BEEP :INPUT "ENTER FREQ IN MHz ";FO
  93. 1020  IF FG=3 THEN 1040
  94. 1030  W=FO/BWR :IF W<1 THEN 1100 ELSE 1050
  95. 1040  W=BWR/FO :IF W<1 THEN 1100
  96. 1050  KY=(LOG(W+SQR((W^2)-1)))
  97. 1060  CN=0.5*EXP((NP*KY)+EXP(-NP*KY))
  98. 1070  A=SQR(1+(10^(0.1*R)-1)*CN^2)
  99. 1080  ADB=20*(LOG(A)/LOG(10))
  100. 1090  PRINT :PRINT "ATTEN @";FO;"MHz=";INT(ADB*100)/100;"DB" :GOTO 1110
  101. 1100  PRINT :PRINT "ATTEN @";FO;"MHz=0 to";R;"DB"
  102. 1110  PRINT :BEEP :PRINT "ANOTHER FREQ.? (Y/N)"
  103. 1120  E$=INKEY$ :IF E$="" THEN 1120
  104. 1130  IF E$="Y" THEN 1010 ELSE 1630
  105. 1140  REM ATTEN AT A GIVEN FREQ FOR BANDPASS & BANDSTOP FILTERS
  106. 1150  IF C$="4" THEN FG=4
  107. 1160  PRINT :BEEP :INPUT "ENTER CENTER FREQ (MHz)";FC
  108. 1170  PRINT :BEEP :INPUT "ENTER FREQ IN MHz ";FO
  109. 1180  FX=FC^2/FO :BWX=ABS(FO-FX) :IF FG=4 THEN 1200
  110. 1190  W=BWX/BW3 :IF W<1 THEN 1270 ELSE 1210
  111. 1200  W=BWR/BWX :IF W<1 THEN 1270
  112. 1210  KY=LOG(W+SQR((W^2)-1))
  113. 1220  CN=0.5*(EXP(NP*KY)+EXP(-NP*KY))
  114. 1230  A=SQR(1+(10^(0.1*R)-1)*CN^2) :IF A>10^5 THEN 1260
  115. 1240  ADB=20*(LOG(A)/LOG(10))
  116. 1250  PRINT :PRINT "ATTEN @";FO;"MHz=";INT(ADB*100)/100;"DB" :GOTO 1280
  117. 1260  PRINT :PRINT "ATTEN @";FO;"MHz >100 DB" :GOTO 1280
  118. 1270  PRINT :PRINT "ATTEN @";FO;"MHz=0 to";R;"DB"
  119. 1280  PRINT :BEEP :PRINT "ANOTHER FREQ.? (Y/N)"
  120. 1290  E$=INKEY$ :IF E$="" THEN 1290
  121. 1300  IF E$="Y" THEN 1170 ELSE 1630
  122. 1310  GOSUB 1610
  123. 1320  C$=INKEY$ :IF C$="" THEN 1320
  124. 1330  IF C$="2" THEN 1470 :IF C$="4" THEN 1470
  125. 1340  IF VAL(E$)>4 THEN 1310
  126. 1350  REM FREQ AT A GIVEN ATTEN FOR LOW & HIGH PASS FILTERS
  127. 1360  IF C$="3" THEN FG=3
  128. 1370  PRINT :BEEP :INPUT "ENTER ATTEN IN DB ";ADB
  129. 1380  A=10^(ADB/20)
  130. 1390  CN=SQR((A^2-1)/(10^(0.1*R)-1))
  131. 1400  KY=LOG(CN+SQR((CN^2)-1))
  132. 1410  W=0.5*(EXP(KY/NP)+EXO(-KY/NP)) :IF FG=3 THEN W=1/W
  133. 1420  FO=BWR*W
  134. 1430  PRINT :PRINT "FREQ @ ATTEN=";ADB;"DB IS";INT(FO*100)/100;"MHz"
  135. 1440  D$=INKEY$ :IF D$="" THEN 1440
  136. 1450  IF D$="Y" THEN 1370 ELSE 1630
  137. 1460  REM FREQ AT A GIVEN ATTEN FOR BANDPASS & BANDSTOP FILTERS
  138. 1470  IF C$="4" THEN FG=4
  139. 1480  PRINT :BEEP :INPUT "ENTER CENTER FREQ IN MHz";FC
  140. 1490  PRINT :BEEP :INPUT "ENTER ATTEN IN DB ";ADB
  141. 1500  A=10^(ADB/20)
  142. 1510  CN=SQR(((A^2)-1)/(10^(0.1*R)-1))
  143. 1520  KY=LOG(CN+SQR((CN^2)-1))
  144. 1530  W=0.5*(EXP(KY/NP)+EXP(-KY/NP))
  145. 1540  BWX=BWR*W :IF FG=4 THEN BWX=BWR/W
  146. 1550  FL=0.5*(-BWX+SQR((BWX^2)+4*FC^2)) :FH=FC^2/FL
  147. 1560  PRINT :PRINT "AT ATTEN=";ADB;"DB"
  148. 1570  PRINT :PRINT "HI FREQ=";INT(FH*100)/100;"& LO FREQ=";INT(FL*100)/100;"MHz"
  149. 1580  PRINT :PRINT "ANOTHER ATTEN.? (Y/N)"
  150. 1590  D$=INKEY$ :IF D$="" THEN 1590
  151. 1600  IF D$="Y" THEN 1490 ELSE 1630
  152. 1610  PRINT :PRINT "PRESS  #1 LOW PASS   #2 BANDPASS   #3 HIGHPASS   #4 BANDSTOP"
  153. 1620  BEEP :RETURN
  154. 1630  PRINT :BEEP :PRINT "CONTINUE?  (Y/N)"
  155. 1640  F$=INKEY$ :IF F$="" THEN 1640
  156. 1650  IF F$="Y" THEN 100
  157. 1660  IF F$<>"N" THEN 1640 ELSE END
  158.