home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / design1 / spur-ibm.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1987-09-07  |  8.5 KB  |  147 lines

  1. 10  CLS: PRINT "TRANSPONDER SPUR SEARCH PROGRAM V2.11M 9/6/87": PRINT
  2. 20  PRINT "      *********************************************
  3. 30  PRINT "      *                                           *
  4. 40  PRINT "      *  BY DR. ALLEN KATZ, CHAIRMAN              *
  5. 50  PRINT "      *  DEPT ELECTRONICS ENGINEERING TECHNOLOGY  *
  6. 60  PRINT "      *  TRENTON STATE COLLEGE, CN4700            *
  7. 70  PRINT "      *  TRENTON, NEW JERSEY 08650-4700           *
  8. 80  PRINT "      *                                           *
  9. 90  PRINT "      *  THE AUTHOR RESERVES THE RIGHTS TO THIS   *
  10. 100  PRINT "      *  PROGRAM; HOWEVER, COPYING AND USE FOR    *
  11. 110  PRINT "      *  EDUCATIONAL PURPOSES IS ENCOURAGED.      *
  12. 120  PRINT "      *                                           *
  13. 130  PRINT "      *  PLEASE REPORT ANY ERRORS OR PROBLEMS     *
  14. 140  PRINT "      *  WITH THIS PROGRAM TO THE AUTHOR.         *
  15. 150  PRINT "      *  TEL (609) 771 2487                       *
  16. 160  PRINT "      *                                           *
  17. 170  PRINT "      *********************************************
  18. 180  PRINT: INPUT "USE CAPITALS. WANT EXPLANATION (Y/N)"; Q$: IF Q$<>"Y" THEN 560
  19. 190  CLS: PRINT "THIS PROGRAM DETERMINES IF MIXING (SUM AND DIFFERENCE) PRODUCTS OF 'M' TIMES
  20. 200  PRINT "A LOCAL OSCILLATOR FREQUENCY (LO) AND 'N' TIMES SIGNALS IN CRITICAL FREQUENCY
  21. 210  PRINT "BANDS OF CONCERN WILL FALL IN A SPECIFIED OUTPUT FREQUENCY BAND.": PRINT
  22. 220  PRINT "ALL COMPUTED RESULTS SHOULD NORMALLY BE DIRECTED TO THE PRINTER BECAUSE OF THE
  23. 222  PRINT "VOLUME OF OUTPUT. HOWEVER LISTING CAN BE DIRECTED TO THE MONITOR SCREEN. THIS
  24. 223  PRINT "IS RECOMMENDED ONLY FOR SHORT SEARCHS - NOT DIRTY LO CASE.": PRINT
  25. 230  PRINT "THE PROGRAM FIRST ASKS FOR THE 'DATE' AND 'TITLE'. THESE MY BE SKIPPED BY
  26. 240  PRINT "PRESSING CARRIAGE RETURNS. THE DATE AND TITLE ENTERED WILL APPEAR AT THE TOP
  27. 250  PRINT "OF EACH PAGE OF PRINTED RESULTS": PRINT
  28. 260  PRINT "THE PROGRAM CONSIDERS BOTH 'CLEAN' AND 'DIRTY' LO CASES.": PRINT
  29. 270  PRINT "IN THE CLEAN LO CASE, IT IS ASSUMED A SINGLE LO FREQUENCY EXISTS FROM WHICH
  30. 280  PRINT "HARMONICS ARE GENERATED BY A (MIXER'S) NON-LINEARITY.": PRINT: PRINT "IN THE DIRTY LO CASE, IT IS ASSUMED THAT THE LO IS GENERATED FROM A LOWER
  31. 290  PRINT "FREQUENCY (FP) CRYSTAL OSCILLATER AND THAT SPURIOUS MULTIPLES OF FP AT
  32. 300  PRINT "FREQUENCIES OTHER THAN THE LO ARE PRESENT AT THE (MIXER'S) LO INPUT.": PRINT: INPUT "PRESS CARRIAGE RETURN TO CONTINUE"; Q$: PRINT
  33. 310  PRINT "IF THE DIRTY LO CASE IS SELECTED, THE PROGRAM ASKS FOR FP. IT THEN DIVIDES
  34. 320  PRINT "THE LO FREQ BY FP TO MAKE SURE IT IS AN INTEGRAL FACTOR. IF FP IS NOT AN
  35. 330  PRINT "INTEGRAL FACTOR, IT WILL ROUND FP TO MAKE IT ONE. THE PROGRAM THEN LOOKS
  36. 340  PRINT "FOR M X N PRODUCTS IN THE SPECIFIED OUTPUT BAND FOR ALL HARMONICS OF FP UPTO A
  37. 350  PRINT "DESIGNATED LIMIT (MAX HARMONIC). IN ESSENCE THE CLEAN LO CALCULATION IS REPEATED
  38. 360  PRINT "FOR EVERY POSSIBLE SPURIOUS LO COMPONENT.": PRINT
  39. 370  PRINT "THE PROGRAM REQUESTS THE LOWER AND UPPER EDGES OF THE OUTPUT FREQ BAND. ALL
  40. 380  PRINT "FREQUENCIES ARE NORMALLY ENTERED IN MHz, ALTHOUGH ANY FREQUENCY UNITS MAY BE
  41. 390  PRINT "USED AS LONG AS ALL FREQUENCIES ARE SPECIFIED IN THE SAME UNITS.": PRINT
  42. 400  PRINT "THE PROGRAM ALLOWS ANY NUMBER OF CRITCAL BANDS TO BE ENTERED. THESE ARE FREQ
  43. 410  PRINT "BANDS IN WHICH SIGNALS COULD ENTER THE SYSTEM AND MIX WITH THE LO. TYPICAL BANDS
  44. 420  PRINT "OF CONCERN ARE THE INPUT FREQUENCIES OF THE MIXER, UNFILTERED FREQUENCIES NEAR
  45. 430  PRINT "THE INPUT BAND, THE MIXER OUTPUT BAND, HIGH LEVEL SIGNAL SOURCES NEAR THE MIXER,
  46. 431  PRINT "ETC.": PRINT: INPUT "PRESS CARRIAGE RETURN TO CONTINUE"; Q$: PRINT
  47. 440  PRINT "THE PROGRAM REQUESTS THE MAXIMUM ORDER - MAX VALUE OF M X N. SPURIOUS PRODUCTS
  48. 450  PRINT "GENERALLY DROP OFF 10 dB FOR EACH ORDER ABOVE 2ND. THUS A 9TH ORDER SPUR SHOULD
  49. 460  PRINT"BE APPROXIMATELY 70 dB BELOW THE DESIRED (2ND ORDER) OUTPUT PRODUCT OF A MIXER.
  50. 470  PRINT "SPURS OF ORDER GREATER THAN 12 ARE USUALLY OF LITTLE INTEREST. A SPECIAL FEATURE
  51. 471  PRINT "OF THE PROGRAM ALLOWS THE MAXIMUM VALUE OF THE 'M' AND 'N' MULTIPLIERS TO BE SET
  52. 480  PRINT "INDEPENDENTLY OF EACH OTHER. THIS IS PROVIDED BY THE 'SPECIAL ORDER RESTRICTION'
  53. 490  PRINT "OPTION AND IS MUST USEFULL FOR THE DIRTY LO CASE WHERE THERE IS LITTLE VALUE IN
  54. 500  PRINT "CONSIDERING THE HARMONICS OF A GIVEN SPUR, SINCE THESE FREQUENCIES CORRESPOND
  55. 510  PRINT "TO OTHER HIGHER ORDER SPURS. THUS IN THE DIRTY LO CASE, 'M' IS NORMALLY LIMITED
  56. 520  PRINT "TO '1'.": PRINT
  57. 530  PRINT "SPUR-IBM DISPLAYS: 1) THE PORTION (FREQ RANGE) OF ALL CRITICAL BANDS WHOSE
  58. 540  PRINT "MIXING PRODUCTS FALL IN THE OUTPUT BAND, 2) THE ORDER OF THE PRODUCT, 3) THE 'M'
  59. 550  PRINT "MULTIPLIER OF THE LO (OR FP) FACTOR AND 4) THE 'N' MULTIPLIER OF THE CRITCAL
  60. 551  PRINT "BAND FACTOR. IF REQUESTED THE PROGRAM WILL ALSO DISPLAY (LIST OUTPUT BAND) THE
  61. 552  PRINT "CORRESPONDING FREQ RANGE OF THE OUTPUT BAND WHERE THE UNWANTED PRODUCTS ARE PRESENT.": PRINT
  62. 553  PRINT "AN '*' INDICATES THAT THE SPUR SHOWN IS 2ND ORDER AND A NORMAL MIXING PRODUCT.
  63. 554  PRINT "IF NO FREQUENCIES ARE LISTED THEN NO SPURS WERE FOUND.
  64. 556  PRINT: INPUT "PRESS CARRIAGE RETURN TO CONTINUE"; Q$: CLS
  65. 560  PRINT: INPUT "DATE"; D$: INPUT "TITLE"; TL$: PRINT
  66. 565  PRINT: INPUT "DIRECT OUTPUT TO SCREEN (Y/N)"; Q$: IF Q$="Y" THEN DV=0 ELSE DV=2: PRINT
  67. 570  INPUT "DIRTY L.O. CASE (Y/N)"; Q$: IF Q$="N" THEN INPUT "L.O. FREQ"; FU: LO=FU: LX=1: GOTO 620
  68. 580  INPUT "L.O. FREQ"; LO
  69. 590  INPUT "FUNDEMENTAL FREQ"; FU
  70. 600  P=INT(LO/FU+0.5): U=LO/P: IF U<>FU THEN FU=U: PRINT "NOT FACTOR - USE FUND FREQ ="; FU
  71. 610  INPUT "MAX HARMONIC"; LX
  72. 620  INPUT "LOWER EDGE OUTPUT FREQ"; FL
  73. 630  INPUT "UPPER EDGE OUTPUT FREQ"; FT: FO=FL: DF=FT-FL
  74. 640  INPUT "NUMBER OF CRITCAL PASS BANDS"; NB
  75. 650  FOR K=1 TO NB: PRINT: PRINT "PASS BAND #"; K
  76. 660  INPUT "LOWER EDGE"; LF(K): INPUT "UPPER EDGE"; UF(K): NEXT K
  77. 670  PG=1: PRINT
  78. 680  INPUT "WANT TO LIST OUTPUT BAND (Y/N)"; O$
  79. 690  INPUT "SPECIAL ORDER RESTRICTIONS (Y/N)"; Q$
  80. 700  IF Q$="N" THEN 730
  81. 710  INPUT "MAX ORDER FP (OR LO)"; NJ
  82. 720  INPUT "MAX ORDER SPUR"; NI: NX=NI+NJ: GOTO 740
  83. 730  INPUT "MAX ORDER"; NX: NI=NX: NJ=NX
  84. 740  IF DV=2 THEN LPRINT, "PAGE"; PG; SPC(3); TL$ ELSE CLS: PRINT TL$: GOTO 770
  85. 750  LPRINT: LPRINT : LPRINT: LPRINT:
  86. 760  LPRINT, "TRANSPONDER SPUR SEARCH PROGRAM"; SPC(20); D$
  87. 770  IF DV=2 THEN LPRINT: LPRINT, "CRITICAL BANDS"
  88. 771  IF DV=0 THEN PRINT: PRINT, "CRITICAL BANDS"
  89. 772  FOR K=1 TO NB
  90. 780  IF DV=2 THEN LPRINT, "BAND #"; K; LF(K); " - "; UF(K)
  91. 781  IF DV=0 THEN PRINT, "BAND #"; K; LF(K); " - "; UF(K)
  92. 790  NEXT K
  93. 800  IF DV=2 THEN LPRINT
  94. 801  IF DV=0 THEN PRINT
  95. 802  IF DV=2 THEN CR=NB+9 ELSE CR=6
  96. 803  FOR L=1 TO LX: FP=FU*L: FG=1
  97. 810  FOR I=1 TO NI: FOR J=1 TO NJ: IF J+I>=NX THEN 1120
  98. 820  F1=(FO+FP*J)/I: F2=(FP*J-FO)/I: F3=(FO-FP*J)/I
  99. 830  FOR K=1 TO NB
  100. 840  IF F1+DF/I<LF(K) THEN 930
  101. 850  IF F1<LF(K) THEN LE=LF(K) ELSE LE=F1
  102. 860  IF F1>UF(K) THEN 930
  103. 870  IF F1+DF/I>UF(K) THEN TE=UF(K) ELSE TE=F1+DF/I
  104. 880  IF FG=1 THEN GOSUB 1180
  105. 890  IF LO=J*FP AND DV=2 THEN LPRINT, "*";
  106. 891  IF LO=J*FP AND DV=0 THEN PRINT, "*";
  107. 900  IF DV=2 THEN LPRINT, TAB(1); "SPUR EDGES: LOWER"; LE; TAB(29); "UPPER"; TE; TAB(44); "ORDER"; I+J; TAB(53); "SPUR X"; I; TAB(63); "FP X"; J: CR=CR+1
  108. 901  IF DV=0 THEN PRINT, TAB(1); "SPUR EDGES: LOWER"; LE; TAB(29); "UPPER"; TE; TAB(44); "ORDER"; I+J; TAB(53); "SPUR X"; I; TAB(63); "FP X"; J: CR=CR+1
  109. 910  IF O$="N" THEN 930 ELSE FA=LE*I-FP*J: FB=TE*I-FP*J: CR=CR+1
  110. 920  IF DV=2 THEN LPRINT, TAB(1); "OUTPUT BAND: LOWER EDGE"; FA; TAB(35); "UPPER EDGE"; FB: CR=CR+1
  111. 921  IF DV=0 THEN PRINT, TAB(1); "OUTPUT BAND: LOWER EDGE"; FA; TAB(35); "UPPER EDGE"; FB: CR=CR+1
  112. 930  IF F2<LF(K) THEN 1020
  113. 940  IF F2-DF/I<LF(K) THEN LE=LF(K) ELSE LE=F2-DF/I
  114. 950  IF F2-DF/I>UF(K) THEN 1020
  115. 960  IF F2>UF(K) THEN TE=UF(K) ELSE TE=F2
  116. 970  IF FG=1 THEN GOSUB 1180
  117. 980  IF DV=2 AND LO=J*FP THEN LPRINT, "*";
  118. 981  IF DV=0 AND LO=J*FP THEN PRINT, "*";
  119. 990  IF DV=2 THEN LPRINT, TAB(1); "SPUR EDGES: LOWER"; LE; TAB(29); "UPPER"; TE; TAB(44); "ORDER"; I+J; TAB(53); "SPUR X"; I; TAB(63); "FP X"; J: CR=CR+1
  120. 991  IF DV=0 THEN PRINT, TAB(1); "SPUR EDGES: LOWER"; LE; TAB(29); "UPPER"; TE; TAB(44); "ORDER"; I+J; TAB(53); "SPUR X"; I; TAB(63); "FP X"; J: CR=CR+1
  121. 1000  IF O$="N" THEN 1020 ELSE FA=FP*J-TE*I: FB=FP*J-LE*I
  122. 1010  IF DV=2 THEN LPRINT, TAB(1); "OUTPUT BAND: LOWER EDGE"; FA; TAB(35); "UPPER EDGE"; FB: CR=CR+1
  123. 1011  IF DV=0 THEN PRINT, TAB(1); "OUTPUT BAND: LOWER EDGE"; FA; TAB(35); "UPPER EDGE"; FB: CR=CR+1
  124. 1020  IF F3+DF/I<LF(K) THEN 1110
  125. 1030  IF F3<LF(K) THEN LE=LF(K) ELSE LE=F3
  126. 1040  IF F3>UF(K) THEN 1110
  127. 1050  IF F3+DF/I>UF(K) THEN TE=UF(K) ELSE TE=F3+DF/I
  128. 1060  IF FG=1 THEN GOSUB 1180
  129. 1070  IF DV=2 AND LO=J*FP THEN LPRINT, "*";
  130. 1071  IF DV=0 AND LO=J*FP THEN PRINT, "*";
  131. 1080  IF DV=2 THEN LPRINT, TAB(1); "SPUR EDGES: LOWER"; LE; TAB(29); "UPPER"; TE; TAB(44); "ORDER"; I+J; TAB(53); "SPUR X"; I; TAB(63); "FP X"; J: CR=CR+1
  132. 1081  IF DV=0 THEN PRINT, TAB(1); "SPUR EDGES: LOWER"; LE; TAB(29); "UPPER"; TE; TAB(44); "ORDER"; I+J; TAB(53); "SPUR X"; I; TAB(63); "FP X"; J: CR=CR+1
  133. 1090  IF O$="N" THEN 1110 ELSE FA=LE*I+FP*J: FB=TE*I+FP*J
  134. 1100  IF DV=2 THEN LPRINT, TAB(1); "OUTPUT BAND: LOWER EDGE"; FA; TAB(35); "UPPER EDGE"; FB: CR=CR+1
  135. 1101  IF DV=0 THEN PRINT, TAB(1); "OUTPUT BAND: LOWER EDGE"; FA; TAB(35); "UPPER EDGE"; FB: CR=CR+1
  136. 1110  NEXT K
  137. 1120  NEXT J
  138. 1130  NEXT I
  139. 1140  IF DV=2 AND CR>48 THEN PG=PG+1: LPRINT, CHR$(12), "PAGE"; PG; SPC(3); TL$: CR=600
  140. 1142  IF DV=0 AND CR/18=INT(CR/18) THEN INPUT "PRESS CARRIAGE RETURN TO CONTINUE"; Q$: CR=1
  141. 1150  NEXT L
  142. 1160  IF DV=2 THEN LPRINT, CHR$(12): END ELSE END
  143. 1170  REM ******************* SUB ****************************
  144. 1180  IF DV=2 THEN LPRINT: LPRINT: LPRINT, "FP = FUND FREQ X"; L; "="; FP, "OUTPUT FREQ BAND"; FL; " - "; FT: LPRINT: FG=0: CR=CR+4
  145. 1181  IF DV=0 THEN PRINT: PRINT: PRINT, "FP = FUND FREQ X"; L; "="; FP, "OUTPUT FREQ BAND"; FL; " - "; FT: PRINT: FG=0: CR=CR+4
  146. 1190  RETURN
  147.