home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / design3 / filtrp.bas < prev    next >
BASIC Source File  |  1979-12-31  |  7KB  |  205 lines

  1. 10 REM             FILTER TRANSFORMATION PROGRAM   FILTRP.BAS
  2. 20 REM             LINKED FROM SYNTHESIS PROGRAM   FILSYP.BAS
  3. 30 F0=1:C$="N"
  4. 40 PRINT "NOW RUNNING THE FILTER TRANSFORMATION PROGRAM*********
  5. 50 OPEN "I",1,"PROTO"
  6. 60 INPUT #1,R,G,HCP,F1,F2,A1,Z
  7. 70 REGY=R
  8. 80 IF R=1 GOTO 360
  9. 90 IF HCP=1 THEN HC=1:C$="Y"
  10. 100 IF Z=1 THEN INPUT #1,N:GOTO 120
  11. 110 INPUT #1,A2
  12. 120 IF R=2 THEN INPUT #1,FC,FS:GOTO 140
  13. 130 INPUT #1,BW,SW,FCNTR
  14. 140 IF EOF(1) THEN CLOSE #1
  15. 150 IF R=2 THEN G$="H":R$="HIGHPASS"
  16. 160 IF R=3 THEN G$="B":R$="BANDPASS"
  17. 170 IF R=4 THEN G$="N":R$="NOTCH"
  18. 180 H$="F"
  19. 190 IF G=1 THEN T$="BUTTERWORTH"
  20. 200 IF G=2 THEN T$="CHEBYSHEV"
  21. 210 IF G=3 THEN T$="ELLIPTIC"
  22. 220 GOSUB 1230
  23. 230 F9=1
  24. 240 N9=1
  25. 250 IF G$="H" THEN GOSUB 1370 ELSE 370
  26. 260 PRINT:PRINT "DESIGN COMPLETE..." 
  27. 270 PRINT"     PRESS  T  - TRY ANOTHER FILTER"
  28. 280 PRINT"            R  - CALCULATE GAIN AND PHASE RESPONSE OF THIS FILTER"
  29. 290 PRINT"            E  - END THIS SESSION"
  30. 300 INPUT V$
  31. 310 IF V$="T" OR V$="t" THEN RUN "FILDES.EXE"
  32. 320 IF V$="R" OR V$="r" THEN RUN "FILPLT.EXE"
  33. 330 IF V$="E" OR V$="e" THEN SYSTEM
  34. 340 GOTO 270
  35. 350 RUN "FILDES.EXE"
  36. 360 PRINT:PRINT "LOWPASS FILTERS DON'T NEED TRANSFORMING!!!":GOTO 260
  37. 370 IF (G$="N") AND (N1<>(N0+N2)) THEN N3=2*(N0-N1)+N2
  38. 380 W0=FCNTR:B=BW
  39. 390 B0=B
  40. 400 IF N0=0 THEN 470
  41. 410 FOR K=1 TO N0
  42. 420 S=F(K)/(2*Q(K)):W=SQR(F(K)^2-S^2)
  43. 430 GOSUB 1090
  44. 440 FF(2*K-1)=W1:QQ(2*K-1)=Q1
  45. 450 FF(2*K)=W2:QQ(2*K)=Q2
  46. 460 NEXT K
  47. 470 IF N2=0 THEN 530
  48. 480 FOR K=1 TO N2
  49. 490 W=0:S=RR(K)
  50. 500 GOSUB 1180
  51. 510 FF(2*N0+K)=W2:QQ(2*N0+K)=Q2
  52. 520 NEXT K
  53. 530 IF N1=0 THEN 590
  54. 540 FOR K=1 TO N1
  55. 550 S=0 :W=Z(K)
  56. 560 GOSUB 1090
  57. 570 ZZ(2*K-1)=I1:ZZ(2*K)=I2
  58. 580 NEXT K
  59. 590 FOR I=1 TO 5:PRINT
  60. 600 IF HC=1 THEN LPRINT
  61. 610 NEXT I
  62. 620 PRINT "          TRANSFORMED POLE / ZERO LOCATIONS  "
  63. 630 IF HC=1 THEN LPRINT "          TRANSFORMED POLE / ZERO LOCATIONS  "
  64. 640 PRINT"  For this "T$" "R$" filter:"
  65. 650 IF HC=1 THEN LPRINT"  For this "T$" "R$" filter:"
  66. 660 PRINT:PRINT "FILTER CENTER FREQUENCY ";W0*F9,"BANDWIDTH ";B0*F9
  67. 670 IF HC=1 THEN LPRINT
  68. 680 IF HC=1 THEN LPRINT "FILTER CENTER FREQUENCY ";W0*F9,"BANDWIDTH ";B0*F9
  69. 690 PRINT: PRINT "RESONANT FREQUENCIES:":PRINT: PRINT "FREQUENCY","     Q":PRINT:PRINT
  70. 700 IF HC<>1 THEN 740
  71. 710 LPRINT
  72. 720 LPRINT "RESONANT FREQUENCIES:":LPRINT
  73. 730 LPRINT "FREQUENCY","     Q":LPRINT:LPRINT
  74. 740 OPEN "O",3,"PLTDATA"
  75. 750 PRINT #3,REGY,G,2*N0+N2+2*N1+N3
  76. 760 FOR J1=1 TO 2*N0+N2:PRINT FF(J1)*F9,QQ(J1)
  77. 770 IF HC=1 THEN LPRINT FF(J1)*F9,QQ(J1)
  78. 780 PRINT #3,F9*FF(J1),QQ(J1)
  79. 790 NEXT J1
  80. 800 GOTO 910
  81. 810 OPEN "O",1,"TRNP"
  82. 820 PRINT #1,W0*F9,2*N0+N2,2*N0+N2,0
  83. 830 IF N2=0 THEN 850
  84. 840 IF N3=0 THEN FOR I=1 TO N2: PRINT #1,0,1,0:NEXT I
  85. 850 IF N1<>0 THEN FOR I=1 TO 2* N1:PRINT #1,1,0,ZZ(I)*F9:NEXT I
  86. 860 IF N3<>0 THEN FOR I=1 TO N3:PRINT #1,1,0,W0*F9:NEXT I
  87. 870 IF N1=0 AND N3=0 THEN FOR I=1 TO N0*2:PRINT #1,0,1,0:NEXT I
  88. 880 IF N0=0 AND N2=0 THEN 900
  89. 890 FOR I=1 TO 2*N0+N2:PRINT #1,FF(I)*F9,QQ(I):NEXT I
  90. 900 CLOSE 1
  91. 910 PRINT
  92. 920 IF N1+N3 <> 0 THEN PRINT "ZEROS (or NOTCHES)" ELSE 1060
  93. 930 IF HC=1 THEN LPRINT: LPRINT "ZEROS (or NOTCHES)"
  94. 940 PRINT:IF HC=1 THEN LPRINT 
  95. 950 IF N1=0 THEN 1000
  96. 960 FOR I=1 TO 2*N1:PRINT ZZ(I)*F9
  97. 970 IF HC=1 THEN LPRINT ZZ(I)*F9
  98. 980  PRINT #3,ZZ(I)*F9,-1
  99. 990 NEXT I
  100. 1000 IF N3=0 THEN 1050
  101. 1010 FOR I=1 TO N3:PRINT W0*F9
  102. 1020 IF HC=1 THEN LPRINT W0*F9
  103. 1030 PRINT #3,W0*F9,-2
  104. 1040 NEXT I
  105. 1050 CLOSE 3
  106. 1060 PRINT :PRINT:IF HC=1 THEN LPRINT :IF HC=1 THEN LPRINT 
  107. 1070 REM IF C$="Y" THEN GOSUB 1560
  108. 1080 GOTO 260
  109. 1090 C0=W0^2-(B0^2)*(S^2-W^2)/4:D0=S*W*(B0^2)/2
  110. 1100 A0=SQR((C0+SQR(C0^2+D0^2))/2)
  111. 1110 B=D0/(2*A0)
  112. 1120 R2=B0*S/2+B:I1=A0-W*B0/2
  113. 1130 R1=B0*S/2-B:I2=A0+W*B0/2
  114. 1140 W1=SQR(R1^2+I1^2):W2=SQR(R2^2+I2^2)
  115. 1150 IF R1+R2 =0 THEN 1170
  116. 1160 Q1=W1/(2*R1):Q2=W2/(2*R2)
  117. 1170 RETURN
  118. 1180 R=B0*S/2
  119. 1190 II=SQR(W0^2-R^2)
  120. 1200 W2=SQR(R^2+II^2)
  121. 1210 Q2=W2/(2*R)
  122. 1220 RETURN
  123. 1230 OPEN "I",1,"IDATA"
  124. 1240 INPUT #1,F0,N1,N0,N2
  125. 1250 N3=0
  126. 1260 IF N2<>0 THEN FOR I=1 TO N2:INPUT #1,RR(I):NEXT I 
  127. 1270 IF G$="N" AND N2 <> 0 THEN FOR I=1 TO N2:RR(I)=1/RR(I):NEXT I
  128. 1280 IF N1=0 THEN 1320
  129. 1290 FOR I=1 TO N1:INPUT #1,A(I),B(I),Z(I)
  130. 1300 IF G$="N" THEN Z(I)=1/Z(I)
  131. 1310 NEXT I
  132. 1320 FOR I=1 TO N0:INPUT #1,F(I),Q(I)
  133. 1330 IF G$="N" THEN F(I)=1/F(I)
  134. 1340 NEXT I
  135. 1350 CLOSE 1
  136. 1360 RETURN
  137. 1370 OPEN "O",1,"PLTDATA"
  138. 1380 PRINT #1,2,G,N0+N1+N2
  139. 1390 X(1)=FC
  140. 1400 PRINT:PRINT:PRINT: PRINT "          TRANSFORMED POLE/ZERO LOCATIONS"
  141. 1410 IF HC<>1 THEN 1440
  142. 1420 LPRINT:LPRINT:LPRINT: LPRINT "          TRANSFORMED POLE/ZERO LOCATIONS"
  143. 1430 LPRINT:LPRINT " For this "T$" "R$" filter:":LPRINT
  144. 1440 PRINT:PRINT " For this "T$" "R$" filter:":PRINT
  145. 1450 IF N2<>0 THEN FOR I=1 TO N2:RR(I)=(F0/RR(I))*F9:NEXT I
  146. 1460 IF N1<>0 THEN FOR I=1 TO N1:Z(I)=F0/Z(I)*F9:NEXT I
  147. 1470 IF N0<>0 THEN FOR I=1 TO N0:F(I)=F0/F(I)*F9:NEXT I
  148. 1480 K=1
  149. 1490 PRINT:PRINT "RESONANT FREQUENCIES:":PRINT  
  150. 1500 PRINT "     F","     Q"
  151. 1510 IF HC<>1 THEN 1540
  152. 1520 LPRINT:LPRINT "RESONANT FREQUENCIES:":LPRINT
  153. 1530 LPRINT "     F","     Q"
  154. 1540 IF N0<>0 THEN FOR I=1 TO N0:PRINT F(I)*X(K),Q(I):PRINT #1,F(I)*X(K),Q(I):NEXT I
  155. 1550 IF N2=0 GOTO 1580
  156. 1560 PRINT:PRINT "REAL POLE(S):"
  157. 1570 FOR I=1 TO N2:PRINT RR(I)*X(K):PRINT #1,RR(I)*X(K),0:NEXT I
  158. 1580 PRINT:PRINT "     Z"
  159. 1590 IF N1<>0 THEN FOR I=1 TO N1:PRINT Z(I)*X(K):PRINT #1,Z(I)*X(K),-1:NEXT I
  160. 1600 CLOSE 1
  161. 1610 OPEN "O",1,"TRNP"
  162. 1620 IF N1<>0 THEN PRINT #1,X(K),N1+N2,N0,N2 ELSE PRINT #1,X(K),N0+N2,N0,N2
  163. 1630 IF N2<>0 THEN FOR I=1 TO N2:PRINT #1,RR(I)*X(K):NEXT I
  164. 1640 IF N1<>0 THEN FOR I=1 TO N1:PRINT #1,1,0,Z(I)*X(K):NEXT I
  165. 1650 IF N1=0 THEN FOR I=1 TO N0:PRINT #1,1,0,0:NEXT I
  166. 1660 IF N2<>0 THEN FOR I=1 TO N2:PRINT #1,0,1,0:NEXT I
  167. 1670 IF N0<>0 THEN FOR I=1 TO N0:PRINT #1,F(I)*X(K),Q(I):NEXT I
  168. 1680 IF HC<>1 THEN 1780
  169. 1690 IF N0<>0 THEN FOR I=1 TO N0:LPRINT F(I)*X(K),Q(I):NEXT I
  170. 1700 IF N2=0 GOTO 1730
  171. 1710 LPRINT:LPRINT "REAL POLE(S):"
  172. 1720 FOR I=1 TO N2:LPRINT RR(I)*X(K):NEXT I
  173. 1730 IF N1<>0 GOTO 1760
  174. 1750 GOTO 1780
  175. 1760 LPRINT:LPRINT "     ZEROS"
  176. 1770  FOR I=1 TO N1:LPRINT Z(I)*X(K):NEXT I
  177. 1780 REM IF C$="Y" THEN GOSUB 1700
  178. 1790 CLOSE 1
  179. 1800 RETURN
  180. 1810 OPEN "O",2,"LPT:"
  181. 1820 PRINT #2,"          TRANSFORMATED POLE/ZERO LOCATIONS"
  182. 1830 PRINT #2,"               FILTER #";J
  183. 1840 PRINT #2,:PRINT #2,"POLE LOCATIONS":PRINT #2,"FREQUENCY","     Q"
  184. 1850 FOR J1=1 TO 2*N0+N2:PRINT #2,FF(J1)*F9,QQ(J1):NEXT J1
  185. 1860 IF N1+N3<>0 THEN PRINT #2," JW AXIS ZERO PAIRS" ELSE 1900
  186. 1870 PRINT #2,:FOR I=1 TO 2*N1:PRINT #2,ZZ(I)*F9:NEXT I
  187. 1880 IF N3=0 THEN 1900
  188. 1890 FOR I=1 TO N3 :PRINT #2,W0*F9:NEXT I
  189. 1900 IF N4+N5<>0 THEN PRINT #2,"COMPLEX ZEROS","    Q" ELSE 1930
  190. 1910 FOR I=1 TO 2*N1+1:PRINT #2,ZZ(I)*F9,VV(I):NEXT I
  191. 1920 PRINT #2,
  192. 1930 CLOSE 2
  193. 1940 RETURN
  194. 1950 OPEN "O",2,"LPT:"
  195. 1960 PRINT #2,:PRINT #2,"          TRANSFORMED POLE/ZERO LOCATIONS"
  196. 1970 PRINT #2,:PRINT #2,"               HIGHPASS FILTER"
  197. 1980 PRINT #2,:PRINT #2,"                 FILTER ";K
  198. 1990 PRINT #2,:PRINT #2,"     F","     Q"
  199. 2000 IF N0<>0 THEN FOR I=1 TO N0:PRINT #2,F(I)*X(K),Q(I):NEXT I
  200. 2010 IF N2<>0 THEN FOR I=1 TO N2:PRINT #2,RR(I)*X(K):NEXT I
  201. 2020 PRINT #2,:PRINT #2,"     Z"
  202. 2030 IF N1<>0 THEN FOR I=1 TO N1:PRINT #2,Z(I)*X(K):NEXT I
  203. 2040 CLOSE 2
  204. 2050 RETURN
  205.