home *** CD-ROM | disk | FTP | other *** search
- { originally written for HP85 by E. GREENWALD
- converted to Apple by C J Dockstader 12/15/84 last Rev 9/9/85
- converted to MS DOS Turbo Pascal 3.02A July 87 .... C J D}
-
- program SPURFREQ;
- const TDN = '8 12 PM July 23 1987';
- var Ch : char;
- LIF, HIF, LRF, HRF, FLO, TempS : string[10];
- A, B, L, P, R, X1, X2, Y, Y1, Y2, Y3, Y4, Y5, Y6, Z : real;
- Err, I, J, JJ, M, N, Q : integer;
-
- procedure Zero;
- begin draw(I-1,J,I+1,J,1); draw(I+2,J+1,I+2,J+5,1);
- draw(I+1,J+6,I-1,J+6,1); draw(I-2,J+5,I-2,J+1,1); end;
-
- procedure One;
- begin plot(I-1,J+1,1); draw(I,J,I,J+5,1); draw(I-1,J+6,I+1,J+6,1); end;
-
- procedure Two;
- begin plot(I-2,J+1,1); draw(I-1,J,I+1,J,1); draw(I+2,J+1,I-2,J+5,1);
- draw(I-2,J+6,I+2,J+6,1); end;
-
- procedure Three;
- begin plot(I-2,J+1,1);draw(I-1,J,I+1,J,1);draw(I+2,J+1,I+2,J+2,1);plot(I+1,J
- +3,1);draw(I+2,J+4,I+2,J+5,1);draw(I+1,J+6,I-1,J+6,1);plot(I-2,J+5,1); end;
-
- procedure Four;
- begin draw(I+1,J,I+1,J+6,1); draw(I-2,J+4,I+2,J+4,1);
- draw(I-2,J+3,I+1,J,1); end;
-
- procedure Five;
- begin draw(I+2,J,I-2,J,1); draw(I-2,J,I-1,J+2,1); draw(I-2,J+2,I+1,J+2,1);
- draw(I+2,J+3,I+2,J+5,1); draw(I+1,J+6,I-1,J+6,1); plot(I-2,J+5,1); end;
-
- procedure Six;
- begin draw(I+1,J,I-1,J,1); draw(I-2,J+1,I-2,J+5,1); draw(I-1,J+6,I+1,J+6,1);
- draw(I+2,J+5,I+2,J+4,1); draw(I+1,J+3,I-1,J+3,1); end;
-
- procedure Seven;
- begin draw(I-2,J,I+2,J,1); draw(I+2,J+1,I-2,J+5,1); plot(I-2,J+6,1); end;
-
- procedure Eight;
- begin draw(I-1,J,I+1,J,1); draw(I+2,J+1,I+2,J+2,1); draw(I+2,J+4,I+2,J+5,1);
- draw(I+1,J+6,I-1,J+6,1); draw(I-2,J+5,I-2,J+4,1); draw(I-2,J+2,I-2,J+1,1);
- draw(I-1,J+3,I+1,J+3,1); end;
-
- procedure Nine;
- begin draw(I-1,J,I+1,J,1); draw(I+2,J+1,I+2,J+5,1); draw(I+1,J+6,I-1,J+6,1);
- draw(I+1,J+3,I-1,J+3,1); draw(I-2,J+2,I-2,J+1,1); end;
-
- procedure DP;
- begin draw(I-1,J+4,I+1,J+4,1); plot(I-1,J+5,1); plot(I+1,J+5,1);
- draw(I-1,J+6,I+1,J+6,1); end;
-
- procedure Equals;
- begin draw(I-1,J+2,I+1,J+2,1); draw(I-1,J+4,I+1,J+4,1); end;
-
- procedure LetterF;
- begin draw(I-2,J,I-2,J+6,1); draw(I-1,J,I+2,J,1); draw(I-1,J+3,I+1,J+3,1);
- end;
-
- procedure LetterI;
- begin draw(I-1,J,I+1,J,1); draw(I,J+1,I,J+5,1); draw(I-1,J+6,I+1,J+6,1);
- end;
-
- procedure LetterL;
- begin draw(I-2,J,I-2,J+6,1); draw(I-1,J+6,I+2,J+6,1); end;
-
- procedure LetterO;
- begin draw(I-1,J,I+1,J,1); draw(I+2,J+1,I+2,J+5,1); draw(I-2,J+1,I-2,J+5,1);
- draw(I-1,J+6,I+1,J+6,1); end;
-
- procedure LetterR;
- begin draw(I-2,J,I-2,J+6,1); draw(I-1,J,I+1,J,1); draw(I+2,J+1,I+2,J+2,1);
- draw(I-1,J+3,I+1,J+3,1); draw(I,J+4,I+2,J+6,1); end;
-
- procedure Beep; begin Sound(440); Delay(150); NoSound end;
-
- procedure LowIF;
- begin gotoXY(43,5); read(TempS); writeln(' ');
- if TempS = '' then
- begin str(A:4:4,TempS); gotoXY(43,5); writeln(TempS,' '); end
- else begin LIF := TempS; val(TempS,A,Err); str(A:4:4,TempS);
- gotoXY(43,5); writeln(TempS,' '); end;
- end;
-
- procedure HighIF;
- begin gotoXY(43,6); read(TempS); writeln(' ');
- if TempS = '' then
- begin str(B:4:4,TempS); gotoXY(43,6); writeln(TempS,' '); end
- else begin HIF := TempS; val(TempS,B,Err); str(B:4:4,TempS);
- gotoXY(43,6); writeln(TempS,' '); end;
- end;
-
- procedure LowRF;
- begin gotoXY(43,7); read(TempS); writeln(' ');
- if TempS = '' then
- begin str(Y:4:4,TempS); gotoXY(43,7); writeln(TempS,' '); end
- else begin LRF := TempS; val(TempS,Y,Err); str(Y:4:4,TempS);
- gotoXY(43,7); writeln(TempS,' '); end;
- end;
-
- procedure HighRF;
- begin gotoXY(43,8); read(TempS); writeln(' ');
- if TempS = '' then
- begin str(Z:4:4,TempS); gotoXY(43,8); writeln(TempS,' '); end
- else begin HRF := TempS; val(TempS,Z,Err); str(Z:4:4,TempS);
- gotoXY(43,8); writeln(TempS,' '); end;
- end;
-
- procedure FixedLO;
- begin gotoXY(43,9); read(TempS); writeln(' ');
- if TempS = '' then
- begin str(L:4:4,TempS); gotoXY(43,9); writeln(TempS,' '); end
- else begin FLO := TempS; val(TempS,L,Err); str(L:4:4,TempS);
- gotoXY(43,9); writeln(TempS,' '); end;
- end;
-
- procedure Order;
- begin gotoXY(43,10); read(TempS); writeln(' ');
- if TempS = '' then
- begin str(Q:4,TempS); gotoXY(43,10); writeln(TempS,' '); end
- else val(TempS,Q,Err);
- end;
-
-
- procedure Menu;
- begin clrscr; gotoXY(16,1);
- writeln('MIXER SPURIOUS FREQUENCY RESPONSES'); gotoXY(5,3);
- writeln('"I"nstructions "E"nter data "C"alculate "Q"uit');
- str(A:4:4,TempS); gotoXY(15,5);
- writeln(' Low frequency end of I.F. ',TempS);
- str(B:4:4,TempS); gotoXY(15,6);
- writeln(' High frequency end of I.F. ',TempS);
- str(Y:4:4,TempS); gotoXY(15,7);
- writeln(' Low frequency end of R.F. ',TempS);
- str(Z:4:4,TempS); gotoXY(15,8);
- writeln(' High frequency end of R.F. ',TempS);
- str(L:4:4,TempS); gotoXY(15,9);
- writeln(' Fixed Local Oscillator ',TempS);
- gotoXY(15,10); writeln(' Maximum order required ',Q);
- end;
-
- procedure Instructions;
- begin clrscr; gotoXY(16,1); writeln('MIXER SPURIOUS FREQUENCY RESPONSES');
- writeln; writeln(' Use a common frequency unit.'); writeln;
- writeln(' For the I.F. Low and High frequencies, use a bandpass that');
- writeln(' spurs are objectionable.'); writeln;
- write(' For the R.F. Low and High frequencies, do the same as for ');
- writeln('the I.F.'); writeln;
- writeln(' On the graph the left digit is the L.O. multiple.'); writeln;
- writeln(' The right digit is the R.F. multiple.');
- writeln; writeln; writeln;
- writeln(' originally written for HP85 by E. GREENWALD');
- writeln(' converted to Apple by C J Dockstader 12/15/84 last Rev 9/9/85');
- writeln(' converted to MS DOS Turbo Pascal July 87 C J D');
- writeln('Rev. ',TDN,' C J D'); read(kbd,Ch);
- end;
-
- procedure Border;
- begin draw(0,0,319,0,2); draw(319,0,319,199,2);
- draw(319,199,0,199,2); draw(0,199,0,0,2);
- end;
-
- procedure Hticks;
- begin Y1 := ln((Z-Y)/3)/ln(10);
- Y2 := exp(int(Y1)*ln(10))/2*exp(int((Y1-int(Y1))/0.34)*ln(2));
- Y3 := int(Y/Y2)*Y2; Y4 := 320*((int(Y/Y2)+1)*Y2-Y)/(Z-Y);
- while Y4 < 320 do
- begin Y5 := 0.0; while Y5 < 200 do
- begin draw(round(Y4),round(Y5),round(Y4),round(Y5+4),2); Y5:=Y5+195;
- end; Y4 := Y4 + 320*Y2/(Z-Y);
- end;
- end;
-
- procedure Vticks;
- begin Y1 := ln((B-A)/3)/ln(10);
- Y2 := exp(int(Y1)*ln(10))/2*exp(int((Y1-int(Y1))/0.34)*ln(2));
- Y3 := int(A/Y2)*Y2; Y4 := 200-200*((int(A/Y2)+1)*Y2-A)/(B-A);
- while Y4 > 0 do
- begin Y5 := 0.0; while Y5 < 320 do
- begin draw(round(Y5),round(Y4),round(Y5+4),round(Y4),2); Y5:=Y5+315;
- end; Y4 := Y4 - 200*Y2/(B-A);
- end;
- end;
-
- procedure Hlabel;
- begin I := 150; J:= 190; LetterR; I := 156; LetterF; end;
-
- procedure Vlabel;
- begin I := 6; J := 97; LetterI; I := 12; LetterF; end;
-
- procedure LOlabel;
- begin I := 268; J := 170; LetterL; I := 274; LetterO;
- I := 280; Equals; end;
-
- procedure LabelValue;
- begin I := I + 6; if TempS = '0' then Zero;
- if TempS = '1' then One; if TempS = '2' then Two;
- if TempS = '3' then Three; if TempS = '4' then Four;
- if TempS = '5' then Five; if TempS = '6' then Six;
- if TempS = '7' then Seven; if TempS = '8' then Eight;
- if TempS = '9' then Nine; if TempS = '.' then DP;
- end;
-
- procedure Hvariables;
- begin I := 12; J := 190; M := length(LRF);
- for N := 1 to M do begin TempS := copy(LRF,N,1); LabelValue; end;
- I := 280; J := 190; M := length(HRF);
- for N := 1 to M do begin TempS := copy(HRF,N,1); LabelValue; end;
- end;
-
- procedure Vvariables;
- begin I := 0; J := 5; M := length(HIF);
- for N := 1 to M do begin TempS := copy(HIF,N,1); LabelValue; end;
- I := 0; J := 180; M := length(LIF);
- for N := 1 to M do begin TempS := copy(LIF,N,1); LabelValue; end;
- end;
-
- procedure LOvariable;
- begin I := 280; J := 170; M := length(FLO);
- for N := 1 to M do begin TempS := copy(FLO,N,1); LabelValue; end;
- end;
-
- procedure Sub1; begin X1 := 319.0 * (A-P)/(R-P); end;
-
- procedure Sub2; begin X1 := 319.0 * (B-P)/(R-P); end;
-
- procedure Sub3; begin X2 := 319.0 * (B-P)/(R-P); end;
-
- procedure Sub4; begin X2 := 319.0 * (A-P)/(R-P); end;
-
- procedure Sub5; begin Y1 := 199.0 * (B-P)/(B-A); end;
-
- procedure Sub6; begin Y2 := 199.0 * (B-R)/(B-A); end;
-
- procedure Interpolation;
- begin if P > R then
- begin
- if (P>B) and (A>=R) then begin Sub2; Y1 := 0.0; Sub4; Y2 := 199.0; end
- else if A>=R then begin X1 := 0.0; Sub5; Sub4; Y2 := 199.0; end
- else if P>B then begin Sub2; Y1 := 0.0; X2 := 319.0; Sub6; end
- else begin X1 := 0.0; Sub5; X2 := 319.0; Sub6; end;
- end else
- begin
- if (P<=A) and (R>B) then begin Sub1; Y1 := 199.0; Sub3; Y2 := 0.0; end
- else if A>=P then begin Sub1; Y1 := 199.0; X2 := 319.0; Sub6; end
- else if R>B then begin X1 := 0.0; Sub5; Sub3; Y2 := 0.0; end
- else begin X1 := 0.0; Sub5; X2 := 319.0; Sub6; end;
- end;
- end;
-
- procedure OrderLabel;
- begin J := J + 8; JJ := J;
- if (Y1<1) and (Y2>198) then I := round((J+4)/200.0*(X2-X1)+X1)
- else begin if (Y1>198) and (Y2<1) then I := round((J+4)/200.0*(X1-X2)+X2)
- else begin JJ := JJ-8; I := round((X2-X1)/2+X1); J := round((Y2-Y1)/2+Y1);
- end; end; draw(I,J+3,I+8,J+3,1); I := I + 12;
- if M = 1 then One; if M = 2 then Two; if M = 3 then Three;
- if M = 4 then Four; if M = 5 then Five; if M = 6 then Six;
- if M = 7 then Seven; if M = 8 then Eight; if M = 9 then Nine;
- if M = 10 then begin One; I := I+6; Zero; end;
- if M = 11 then begin One; I := I+6; One; end;
- if M = 12 then begin One; I := I+6; Two; end;
- if M = 13 then begin One; I := I+6; Three; end;
- if M = 14 then begin One; I := I+6; Four; end;
- if M = 15 then begin One; I := I+6; Five; end;
- draw(I+4,J+3,I+6,J+3,1); I := I+10;
- if N = 1 then One; if N = 2 then Two; if N = 3 then Three;
- if N = 4 then Four; if N = 5 then Five; if N = 6 then Six;
- if N = 7 then Seven; if N = 8 then Eight; if N = 9 then Nine;
- if N = 10 then begin One; I := I+6; Zero; end;
- if N = 11 then begin One; I := I+6; One; end;
- if N = 12 then begin One; I := I+6; Two; end;
- if N = 13 then begin One; I := I+6; Three; end;
- if N = 14 then begin One; I := I+6; Four; end;
- if N = 15 then begin One; I := I+6; Five; end;
- if N = 16 then begin One; I := I+6; Six; end;
- if N = 17 then begin One; I := I+6; Seven; end; J := JJ;
- end;
-
- procedure Graph1;
- begin Interpolation; draw(round(X1),round(Y1),round(X2),round(Y2),3);
- OrderLabel;
- end;
-
- procedure Graph2;
- begin R:=-R; Interpolation; draw(round(X1),round(Y1),round(X2),round(Y2),3);
- OrderLabel; R:=-R; P:=-P; Interpolation;
- draw(round(X1),round(Y1),round(X2),round(Y2),3); OrderLabel;
- end;
-
- procedure SpurHunt;
- begin J := 16; N := 1; for M := 1 to Q-N+1 do
- begin for N := 1 to Q-M do
- begin P := M*L+N*Y; R := M*L+N*Z;
- if (P>=A) and (P<=B) then Graph1
- else if (R>=A) and (R<=B) then Graph1
- else if (P<=A) and (R>=B) then Graph1;
- P := M*L-N*Y; R := M*L-N*Z;
- if ((P<0.0) and (R>0.0)) or ((P>0.0) and (R<0.0)) then
- begin P := abs(P); R := abs(R);
- if (P<A) and (A>R) then else Graph2;
- end else
- begin P := abs(P); R := abs(R);
- if (P>=A) and (P<=B) then Graph1
- else if (R>=A) and (R<=B) then Graph1
- else if (P<=A) and (R>=B) then Graph1
- else if (R<=A) and (P>=B) then Graph1;
- end;
- end;
- end;
- end;
-
- procedure ZeroVar;
- begin A := 0.0; B := 0.0; Y := 0.0; Z := 0.0; L := 0.0; Q := 10; end;
-
- BEGIN
- ZeroVar;
- repeat Menu; gotoXY(60,3); read(kbd,Ch);
- if (Ch <> 'Q') and (Ch <> 'q') then
- begin if (Ch = 'I') or (Ch = 'i') then Instructions
- else begin if ((Ch = 'C') or (Ch = 'c')) and (L <> 0.0) and (Q > 1)
- and (A * B * Y * Z <> 0.0) then begin clrscr;
- GraphColorMode; Border; Hticks; Vticks; SpurHunt;
- Hlabel; Hvariables; Vlabel; Vvariables; LOlabel; LOvariable;
- Beep; read(kbd,Ch); TextMode end
- else begin LowIF; HighIF; LowRF; HighRF; FixedLO; Order; end;
- end;
- end;
- until (Ch = 'Q') or (Ch = 'q'); clrscr;
- END.
-