home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / design3 / d_stub.pas < prev    next >
Pascal/Delphi Source File  |  1986-03-13  |  13KB  |  329 lines

  1.  
  2. { This code was written for the microwave lab at the University Of Central
  3.   Florida by Robert Middelveen. March 11, 1986                             }
  4.  
  5. Program Double_Stub_Impedance_Matching;
  6.  
  7. Const Conv = 1.7453292e-2; { CONVERT FROM DEGREES TO RADIANS                }
  8.       C    = 2.998e8;      { SPEED OF LIGHT IN FREE SPACE  (Meters/Sec)     }
  9.  
  10. VAR   Z0,                  { CHARACTERISTIC IMPEDANCE OF THE LINE           }
  11.       ZST1,                {       ''           ''    ''  '' 1st STUB       }
  12.       ZST2,                {       ''           ''    ''  '' 2nd STUB       }
  13.       F,                   { FREQUENCY (Hz)                                 }
  14.       D,DD,                { DISTANCE FROM THE LOAD D,   Wavelengths        }
  15.                            {                       DD,   Degrees            }
  16.       DBS,                 { DISTANCE BETWEEN THE STUBS, Wavelengths        }
  17.       ZZR,                 { LOAD IMPEDANCE, REAL PART                      }
  18.       ZZI,                 {  ''      ''   , IMAGINARY PART                 }
  19.       ZLR,                 { NORMALIZED LOAD IMPEDANCE, REAL PART           }
  20.       ZLI,                 {      ''     ''      ''    , IMAGINARY PART     }
  21.       YLR, YLM, LAM_LM,    { Y's ARE NORMALIZED LOAD ADMITTANCES            }
  22.                            { R's ARE REAL, I'S ARE IMAGINARY,               }
  23.                            { M's ARE THE MAGNITUDES, P'S ARE THE PHASE.     }
  24.       YLI, YLP, LAM_LP,    { LAM's ARE THE REFLECTION COEFFICIENT           }
  25.                            { AT THIS POINT                                  }
  26.       YD1R,                { THE NORMALIZED ADMITTANCE LOOKING AT THE LOAD  }
  27.       YD1I,                { FROM DISTANCE D                                }
  28.       A,B,                 { 2 PARAMETERS USED BY PROCEDURE CIRCLE          }
  29.  
  30.       Y11R_1, LAM_11_1R, LAM_11_1M,
  31.       Y11I_1, LAM_11_1I, LAM_11_1P,
  32.       Y11R_2, LAM_11_2R, LAM_11_2M,
  33.       Y11I_2, LAM_11_2I, LAM_11_2P,
  34.  
  35.       { THE ABOVE: THE NORMALIZED ADMITTANCE AND THE REFLECTION COEFFICIENT }
  36.       { LOOKING AT THE PARALLEL COMBINATION OF YD1 AND THE FIRST STUB.      }
  37.       { THERE ARE 2 POSSIBLE SOLUTIONS AT THIS POINT.                       }
  38.       { R, I, M, P: REAL, IMAGINARY, MAGNITUDE, PHASE                       }
  39.  
  40.       YS1_1, LAM_S1_1P,    { THE NORMALIZED ADMITTANCE OF THE FIRST STUB    }
  41.       YS1_2, LAM_S1_2P,    { 2 SOLUTIONS. LAM's ARE REFLECTION              }
  42.       DUMMY,               { DUMMY REAL VARIABLE                            }
  43.       L1_1,                { LENGTH OF THE FIRST STUB IN WAVELENGTHS        }
  44.       L1_2,                { THERE ARE 2 SOLUTIONS.                         }
  45.       LGTH1_1,
  46.       LGTH1_2,             { SAME LENGTHS BUT IN METERS.                    }
  47.  
  48.       Y22R_1, Y22I_1, LAM_22_1M, LAM_22_1P,
  49.       Y22R_2, Y22I_2, LAM_22_2M, LAM_22_2P,
  50.  
  51.       { THE ABOVE: THE NORMALIZED ADMITTANCE AND THE REFLECTION COEFFICIENT }
  52.       { LOCATED AT POINT 22 ON THE CHART. LOCATED DOWN THE LINE DISTANCE D  }
  53.       { + THE DISTANCE BETWEEN  THE STUBS. REPRESENTS THE PARALLEL          }
  54.       { COMBINATION OF THE LINE AT 22 AND THE SECOND STUB.                  }
  55.  
  56.       YS2_1, LAM_S2_1P,    { THE NORMALIZED ADMITTANCE OF THE SECOND STUB.  }
  57.       YS2_2, LAM_S2_2P,    { THE LAM's ARE REFLECTION                       }
  58.       L2_1,                { THE LENGTH OF THE SECOND STUB IN WAVELENGTHS   }
  59.       L2_2,
  60.       LGTH2_1,             { AND IN METERS.                                 }
  61.       LGTH2_2,
  62.       SWR_1, SWR_2: REAL;  { THE STANDING WAVE RATIO BETWEEN THE TWO        }
  63.                            { SECTIONS OF STUBS. 2 SOLUTIONS.                }
  64.  
  65.       Q1,Q2:        CHAR;  { ANSWERS TO QUESTIONS.                          }
  66.  
  67. (*$I B:ATAN2.PAS *)
  68. (* A TWO ARGUMENT ARCTANGENT FUNCTION NOT PRESENT IN STANDARD PASCAL *)
  69. (* CALCULATES ANGLES IN DEGREES FOR ALL 4 QUADRENTS *)
  70.  
  71. PROCEDURE R_P(VAR MAG,PHASE:REAL; RE,IM:REAL);
  72.  
  73. { RECTANGULAR TO POLAR CONVERSION                                           }
  74.  
  75. BEGIN
  76.   MAG:=SQRT(SQR(RE)+SQR(IM));
  77.   PHASE:=ATAN(RE,IM);
  78.   IF PHASE<0.0 THEN PHASE:=PHASE+360.0
  79. END;
  80.  
  81. PROCEDURE P_R(VAR RE,IM:REAL; MAG,PHASE:REAL);
  82.  
  83. { POLAR TO RECTANGULAR CONVERSION                                           }
  84.  
  85. BEGIN
  86.   RE:=MAG*COS(PHASE*CONV);
  87.   IM:=MAG*SIN(PHASE*CONV)
  88. END;
  89.  
  90. PROCEDURE ADM_REF(VAR LAMBDA_M,LAMBDA_P:REAL; Y_R,Y_I:REAL);
  91.  
  92. { NORMALIZED ADMISSION TO REFLECTION CONVERSION                             }
  93.  
  94. VAR NR,NI,DR,DI,NM,NP,DM,DP:REAL;
  95.  
  96. BEGIN
  97.   NR:=Y_R-1.0; NI:=Y_I; R_P(NM,NP,NR,NI);
  98.   DR:=Y_R+1.0; DI:=Y_I; R_P(DM,DP,DR,DI);
  99.   LAMBDA_M:=NM/DM; LAMBDA_P:=NP-DP;
  100.   IF LAMBDA_P<0.0 THEN LAMBDA_P:=LAMBDA_P+360.0
  101. END;
  102.  
  103. PROCEDURE REF_ADM(VAR Y_R,Y_I:REAL; LAMBDA_M,LAMBDA_P:REAL);
  104.  
  105. { REFECTION TO NORMALIZED ADMISSION CONVERSION                              }
  106.  
  107. VAR LAMBDA_R,LAMBDA_I,Y_M,Y_P,NR,NI,NM,NP,DR,DI,DM,DP:REAL;
  108.  
  109. BEGIN
  110.   P_R(LAMBDA_R,LAMBDA_I,LAMBDA_M,LAMBDA_P);
  111.   NR:=1.0+LAMBDA_R; NI:=LAMBDA_I; R_P(NM,NP,NR,NI);
  112.   DR:=1.0-LAMBDA_R; DI:=-LAMBDA_I; R_P(DM,DP,DR,DI);
  113.   Y_M:=NM/DM; Y_P:=NP-DP;
  114.   P_R(Y_R,Y_I,Y_M,Y_P)
  115. END;
  116.  
  117. PROCEDURE CIRCLE(VAR X1,Y1,X2,Y2:REAL; A,B,C,D,E:REAL);
  118.  
  119. { THIS PROCEDURE CALCULATES THE INTERSECTION OF THE SPACING CIRCLE AND A    }
  120. { CIRCLE OF CONSTANT CONDUCTANCE ON THE SMITH CHART. THE INPUTS ARE THE     }
  121. { PARAMETERS OF THE TWO CIRCLES AND THE OUTPUTS ARE THE X AND Y COORDINATES }
  122. { OF THE TWO SOLUTIONS. THESE TWO SOLUTIONS DENOTE THE REFLECTION           }
  123. { COEFFICIENT AT THE POINT Y11 ON THE CHART.                                }
  124.  
  125. CONST TOLERANCE=0.001;
  126.  
  127. VAR F,G,H,I,J,YSQ:REAL;
  128.  
  129. BEGIN
  130.   F:=C*C-B*B+D*D-E*E-A*A;
  131.   G:=2.0*A-2.0*D;
  132.   H:=4.0*B*B*(E*E-D*D)-F*F;
  133.   I:=8.0*B*B*D-2.0*G*F;
  134.   J:=-(4.0*B*B+G*G);
  135.   X1:=(-I+SQRT(I*I-4.0*J*H))/(2.0*J);
  136.   X2:=(-I-SQRT(I*I-4.0*J*H))/(2.0*J);
  137.   YSQ:=E*E-SQR(X1-D);
  138.   IF ABS(SQR(X1-A)+SQR(SQRT(YSQ)-B)-C*C)>TOLERANCE THEN Y1:=-SQRT(YSQ)
  139.                                                    ELSE Y1:=SQRT(YSQ);
  140.   YSQ:=E*E-SQR(X2-D);
  141.   IF ABS(SQR(X2-A)+SQR(SQRT(YSQ)-B)-C*C)>TOLERANCE THEN Y2:=-SQRT(YSQ)
  142.                                                    ELSE Y2:=SQRT(YSQ);
  143. END;
  144.  
  145.  
  146. PROCEDURE GET_DATA;
  147.  
  148. { THIS PROCEDURE PROMPTS THE USER AND INPUTS THE VARIABLES NEEDED TO SOLVE }
  149. { THE DOUBLE STUB PROBLEM.                                                 }
  150.  
  151. BEGIN
  152.   ClrScr;
  153.   WRITELN;
  154.   WRITELN;
  155.   WRITE('Z0=?   ');                          READLN(Z0);
  156.   WRITE('ZST1=? ');                          READLN(ZST1);
  157.   WRITE('ZST2=? ');                          READLN(ZST2);
  158.   WRITELN;
  159.   WRITELN('Will distances be in wavelengths or meters?');
  160.   WRITELN('from the load and between the stubs ( 1=WAVELENGTHS 2=METERS ) ');
  161.                                              READLN(Q1);
  162.   WRITELN;
  163.   WRITE('Distance from the load?     ');     READLN(D);
  164.   WRITE('Distance between the stubs? ');     READLN(DBS);
  165.   WRITELN;
  166.   WRITE('ZLR=?     ');                       READLN(ZZR);
  167.   WRITE('ZLI=?     ');                       READLN(ZZI);
  168.   WRITELN;
  169.   WRITE('F=? (GHz) ');                       READLN(F); F:=F*1E9;
  170. END;
  171.  
  172. PROCEDURE CALCULATIONS;
  173.  
  174. { THIS PROCEDURE SOLVES THE PROBLEM.                                        }
  175.  
  176. BEGIN
  177.   ZLR:=ZZR/Z0; { NORMALIZE THE LOAD RESISTANCE                              }
  178.   ZLI:=ZZI/Z0;
  179.  
  180.   R_P(YLM,YLP,ZLR,ZLI); { FIND THE NORMALIZED ADMITTANCE AT THE LOAD.       }
  181.   YLM:=1.0/YLM; YLP:=-YLP;
  182.   P_R(YLR,YLI,YLM,YLP);
  183.   ADM_REF(LAM_LM,LAM_LP,YLR,YLI); { FIND THE REFLECTION COEFFICIENT         }
  184.                                   { AT THE LOAD.                            }
  185.  
  186.   IF Q1='2' THEN { ADJUST DISTANCES TO WAVELENGTHS IF NEEDED.               }
  187.   BEGIN
  188.     D:=D*F/C;
  189.     DBS:=DBS*F/C
  190.   END;
  191.  
  192. DD:=D*720.0; LAM_LP:=LAM_LP-DD; { MOVE DISTANCE D AWAY FROM THE LOAD.       }
  193.  
  194. REF_ADM(YD1R,YD1I,LAM_LM,LAM_LP); { FIND THE NORMALIZED ADMITTANCE AT THIS  }
  195.                                   { POINT.                                  }
  196.  
  197. P_R(A,B,0.5,720*DBS); { CALCULATE CIRCLE PARAMETERS A AND B.                }
  198.  
  199. CIRCLE(LAM_11_1R,LAM_11_1I,LAM_11_2R,LAM_11_2I,
  200.        A,B,0.5,YD1R/(1.0+YD1R),1.0/(1.0+YD1R));
  201.  
  202. { CIRCLE FINDS THE REFLECTION COEFFICIENT AT POINT 11 ON THE CHART. THERE   }
  203. { ARE 2 POSSIBLE SOLUTIONS. SOLUTIONS ARE IN RETANGULAR COORDINATES.        }
  204.  
  205. R_P(LAM_11_1M,LAM_11_1P,LAM_11_1R,LAM_11_1I);
  206. R_P(LAM_11_2M,LAM_11_2P,LAM_11_2R,LAM_11_2I);
  207.  
  208. { CONVERT THESE TO POLAR COORDINATES.                                       }
  209.  
  210. SWR_1:=(1.0+LAM_11_1M)/(1.0-LAM_11_1M);
  211. SWR_2:=(1.0+LAM_11_2M)/(1.0-LAM_11_2M);
  212.  
  213. { THE STANDING WAVE RATIO ON THE SECTION OF LINE BTWEEN THE STUBS CAN NOW   }
  214. { BE CALCULATED.                                                            }
  215.  
  216. REF_ADM(Y11R_1,Y11I_1,LAM_11_1M,LAM_11_1P);
  217. REF_ADM(Y11R_2,Y11I_2,LAM_11_2M,LAM_11_2P);
  218.  
  219. { FIND THE ADMITTANCE AT 11.                                                }
  220.  
  221. YS1_1:=(Y11I_1-YD1I)*ZST1/Z0;
  222. YS1_2:=(Y11I_2-YD1I)*ZST1/Z0;
  223.  
  224. { THE NORMALIZED SUSCEPTANCE OF THE FIRST STUB CAN NOW BE FOUND.            }
  225.  
  226. ADM_REF(DUMMY,LAM_S1_1P,0.0,YS1_1);
  227. ADM_REF(DUMMY,LAM_S1_2P,0.0,YS1_2);
  228.  
  229. { THE PHASE OF THE REFLECTION COEFFICIENT CORRESPONDING TO A CONDUCTANCE OF }
  230. { ZERO AND A SUCEPTANCE OF THE STUB IS CALCULATED.                          }
  231.  
  232. L1_1:=0.5-LAM_S1_1P/720.0;
  233. L1_2:=0.5-LAM_S1_2P/720.0;
  234.  
  235. { CALCULATE THE LENGTH OF THE FIRST STUB IN WAVELENGTHS.                    }
  236.  
  237. LGTH1_1:=C*L1_1/F;
  238. LGTH1_2:=C*L1_2/F;
  239.  
  240. { AND IN METERS.                                                            }
  241.  
  242. LAM_22_1M:=LAM_11_1M; LAM_22_1P:=LAM_11_1P-DBS*720.0;
  243. REF_ADM(Y22R_1,Y22I_1,LAM_22_1M,LAM_22_1P);
  244.  
  245. LAM_22_2M:=LAM_11_2M; LAM_22_2P:=LAM_11_2P-DBS*720.0;
  246. REF_ADM(Y22R_2,Y22I_2,LAM_22_2M,LAM_22_2P);
  247.  
  248. { MOVE TO POSITION 22 ON THE CHART.                                         }
  249.  
  250. YS2_1:=-Y22I_1;
  251. YS2_2:=-Y22I_2;
  252.  
  253. { CALCULATE THE NORMALIZED SUSCEPTANCE OF THE SECOND STUB.                  }
  254.  
  255. ADM_REF(DUMMY,LAM_S2_1P,0.0,YS2_1);
  256. ADM_REF(DUMMY,LAM_S2_2P,0.0,YS2_2);
  257.  
  258. { SAME PROCEDURE USED WITH THE FIRST STUB.                                  }
  259.  
  260. L2_1:=0.50-LAM_S2_1P/720.0;
  261. L2_2:=0.50-LAM_S2_2P/720.0;
  262.  
  263. { CALCULATE THE LENGTH OF THE SECOND STUB IN WAVELENGTHS.                   }
  264.  
  265. LGTH2_1:=C*L2_1/F;
  266. LGTH2_2:=C*L2_2/F;
  267.  
  268. { AND IN METERS.                                                            }
  269.  
  270. END;
  271.  
  272.  
  273. PROCEDURE ANSWER;
  274.  
  275. { THIS PROCEDURE OUTPUTS THE LENGTHS OF THE STUBS NEEDED AND INFORMATION    }
  276. { CONCERNING THE PROBLEM.                                                   }
  277.  
  278. BEGIN
  279.   ClrScr;
  280.   WRITELN;
  281.   WRITELN('Z0=     ',Z0:10:5);
  282.   WRITELN('ZST1=   ',ZST1:10:5);
  283.   WRITELN('ZST2=   ',ZST2:10:5);
  284.   WRITELN('ZL=     ',ZZR:10:5,'  +j  ',ZZI:10:5);
  285.   WRITELN('zl=     ',ZLR:10:5,'  +j  ',ZLI:10:5);
  286.   WRITELN('yl=     ',YLR:10:5,'  +j  ',YLI:10:5);
  287.   WRITELN('yd1=    ',YD1R:10:5,'  +j  ',YD1I:10:5);
  288.   WRITELN('y11_1=  ',Y11R_1:10:5,'  +j  ',Y11I_1:10:5);
  289.   WRITELN('y11_2=  ',Y11R_2:10:5,'  +j  ',Y11I_2:10:5);
  290.   WRITELN('ys1_1=              +j  ',YS1_1:10:5);
  291.   WRITELN('ys1_2=              +j  ',YS1_2:10:5);
  292.   WRITELN('l1_1=   ',L1_1:10:5,'  Wavelengths');
  293.   WRITELN('l1_2=   ',L1_2:10:5,'  Wavelengths');
  294.   IF LGTH1_1>1.0
  295.     THEN WRITELN('LGHT1_1=',LGTH1_1:10:5,' Meters')
  296.     ELSE WRITELN('LGHT1_1=',(LGTH1_1*100):10:5,' Cm');
  297.   IF LGTH1_2>1.0
  298.     THEN WRITELN('LGTH1_2=',LGTH1_2:10:5,' Meters')
  299.     ELSE WRITELN('LGHT1_2=',(LGTH1_2*100):10:2,' Cm');
  300.   WRITELN;
  301.   WRITELN('TYPE <RETURN> TO CONTINUE'); READLN(Q2);
  302.   ClrScr;
  303.   WRITELN;
  304.   WRITELN('y22_1=  ',Y22R_1:10:5,'  +j  ',Y22I_1:10:5);
  305.   WRITELN('y22_2=  ',Y22R_2:10:5,'  +j  ',Y22I_2:10:5);
  306.   WRITELN('ys2_1=              +j  ',YS2_1:10:5);
  307.   WRITELN('ys2_2=              +j  ',YS2_2:10:5);
  308.   WRITELN('l2_1 =  ',L2_1:10:5,'  Wavelengths');
  309.   WRITELN('l2_2 =  ',L2_2:10:5,'  Wavelengths');
  310.   IF LGTH2_1>1.0
  311.     THEN WRITELN('LGHT2_1=',LGTH2_1:10:5,' Meters')
  312.     ELSE WRITELN('LGTH2_1=',(LGTH2_1*100):10:5,' Cm');
  313.   IF LGTH2_2>1.0
  314.     THEN WRITELN('LGTH2_2=',LGTH2_2:10:5,' Meters')
  315.     ELSE WRITELN('LGHT2_2=',(LGTH2_2*100):10:5,' Cm');
  316.   WRITELN('SWR_1=  ',SWR_1:10:5,' v/v');
  317.   WRITELN('SWR_2=  ',SWR_2:10:5,' v/v');
  318.   WRITELN('F=      ',(F/1E9):10:5,' GHz')
  319. END;
  320.  
  321. {                             MAIN PROGRAM                                  }
  322.  
  323. BEGIN
  324.   GET_DATA;
  325.   CALCULATIONS;
  326.   ANSWER;
  327. END.
  328.  
  329.