Advertisement
Guest User

Untitled

a guest
Apr 5th, 2020
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 24.42 KB | None | 0 0
  1. %C*****************************************************************
  2. %C     MoM
  3. %C*****************************************************************
  4. %C     This is a MATLAB based program using
  5. %C
  6. %C       I.   POCKLINGTON'S INTEGRAL EQUATION (8-24)
  7. %C       II.  HALLEN'S INTEGRAL EQUATION (8-27)
  8. %C
  9. %C     That computes:
  10. %C
  11. %C       A.  CURRENT DISTRIBUTION
  12. %C       B.  INPUT IMPEDANCE  
  13. %C       C.  NORMALIZED AMPLITUDE RADIATION PATTERN
  14. %C
  15. %C     Of a linear symmetrically-excited dipole.  
  16. %C
  17. %C     THIS PROGRAM USES PULSE EXPANSION FOR THE ELECTRIC CURRENT MODE  
  18. %C     AND POINT-MATCHING FOR THE ELECTRIC FIELD AT THE CENTER OF EACH  
  19. %C     WIRE SEGMENT.
  20. %C
  21. %C     DELTA-GAP FEED MODEL IS USED IN BOTH FORMULATIONS.  IN ADDITION,
  22. %C     MAGNETIC-FRILL GENERATOR IS AVAILABLE IN THE POCKLINGTON'S
  23. %C     INTEGRAL EQUATION.
  24. %C
  25. %C       OPTION I.   POCKLINGTON'S INTEGRAL EQUATION
  26. %C       OPTION II.  HALLEN'S INTEGRAL EQUATION  
  27. %C
  28. %C                                                                      
  29. %C         ** INPUT DATA:                                                        
  30. %C
  31. %C         TL  = TOTAL DIPOLE LENGTH (IN WAVELENGTHS)                  
  32. %C         RA  = RADIUS OF THE WIRE (IN WAVELENGTHS)                        
  33. %C         NM  = TOTAL NUMBER OF SUBSECTIONS (MUST BE AN ODD INTEGER)        
  34. %C         IEX = OPTION TO USE EITHER MAGNETIC-FRILL GENERATOR OR DELTA GAP  
  35. %C          
  36. %C         IEX = 1 :  MAGNETIC-FRILL GENERATOR                            
  37. %C         IEX = 2 :  DELTA-GAP FEED                                            
  38. %C
  39. %C         ** NOTE:  IGNORE INPUT PARAMETER IEX WHEN CHOOSING OPTION II
  40. %C                   (i.e., HALLEN'S FORMULATION)
  41. %C     *****************************************************************
  42.  
  43. clear;
  44. close;
  45. %*********************************************************
  46. %***  OUTPUT DEVICE OPTION # : 1 ---> SCREEN
  47. %                              2 ---> OUTPUT FILE
  48. %*********************************************************
  49. disp('OUTPUT DEVICE OPTION FOR THE OUTPUT PARAMETERS');
  50. disp('        OPTION (1):SCREEN');
  51. disp('        OPTION (2):OUTPUT FILE');
  52. option_a=0; option_b=0; filename=0;
  53. while((option_a~=1)&(option_a~=2))
  54.    option_a=input('OUTPUT DEVICE =');
  55.    if(option_a==2)
  56.       filename=input('INPUT THE DESIRED OUTPUT FILENAME <in single quotes> = ','s');
  57.    end
  58. end
  59. %*********************************************************
  60. %***  READING OPTION # : 1 ---> POCKLINGTON'S EQUATIONS
  61. %                        2 ---> HALLEN'S EQUATION
  62. %*********************************************************
  63. disp('CHOICE OF POCKLINGTON''S OR HALLEN''S EQN.');
  64. disp('        OPTION (1):POCKLINGTON''S EQN.');
  65. disp('        OPTION (2):HALLEN''S EQN.');
  66. option=input('OPTION NUMBER =');
  67. switch option
  68.    
  69.    
  70. %^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
  71. %***********************************************************************
  72. %***           %POCKLINGTON'S INTEGRAL EQUATIONS                     ***
  73. %***********************************************************************  
  74.  
  75.  
  76.  
  77. case 1
  78. %******************************************************
  79. %     SOME CONSTANTS AND ARRAYS  
  80. %******************************************************
  81. nmax=200;
  82. nmt=2*nmax-1;
  83. cgaw=zeros(nmax);
  84. cga=cgaw(1,1:nmax);
  85. zmnw=zeros(nmt);
  86. zmn=zmnw(1,1:nmt);
  87. waw=zeros(nmt);
  88. wa=waw(1,1:nmt);
  89. etm=zeros(361);
  90. etmm=etm(1,1:361);
  91. pi=3.14159265;
  92. rad=pi/180;
  93. k=2.0*pi;
  94. eta=120*pi;
  95. %******************************************************
  96. %***  INPUT DATA
  97. %******************************************************
  98. np=input('NUMBER OF SUBDIVISIONS <ODD NUMBER> =');
  99. tl=input('TOTAL DIPOLE LENGTH <WAVELENGTHS> =');
  100. radius=input('RADIUS OF DIPOLE <WAVELENGTHS> =');
  101. %*********************************************************
  102. %***  EXITATION OPTION # : 1 ---> MAGNETIC-FRILL
  103. %                          2 ---> DELTA-GAP
  104. %**********************************************************
  105. disp('EXCITATION :');
  106. disp('        OPTION (1):MAGNETIC-FRILL');
  107. disp('        OPTION (2):DELTA-GAP');
  108. iex=input('OPTION NUMBER :');
  109. height=tl/2;
  110. fg=0.5*(np+1);
  111. secLength=2*height/np;
  112. zSec1minushalfFg=height-0.5*secLength; %length - (1/2)*sect
  113. posSecBound=0.5*secLength;
  114. negSecBound=-0.5*secLength;
  115. n=79;
  116. simpFitSec=(posSecBound-negSecBound)/(n+1);
  117. endpointTest = 0;
  118. %*********************************************************************
  119. %     THE IMPEDANCE MATRIX HAS A TOEPLITZ PROPERTY, THEREFORE ONLY
  120. %     NM ELEMENTS NEED TO BE COMPUTED, AND THE MATRIX IS FILLED IN A
  121. %     FORM THAT CAN BE SOLVED BY A TOEPLITZ MATRIX SOLVING  
  122. %**********************************************************************
  123. for secNum = 1: np                
  124.          ITERsecMid=height-(secNum-0.5)*secLength; %half length - (Section Number - 1/2) * section length
  125.          ITERsecMidPosBound=ITERsecMid-zSec1minushalfFg+negSecBound;
  126.           %******************************************************************
  127.           %     FAST ALGORITHM FORM OF THE SIMPSON'S INTEGRAL ROUTINE
  128.           %******************************************************************
  129.           rEVENcgp=sqrt(radius*radius+ITERsecMidPosBound*ITERsecMidPosBound);
  130.           cgp1=exp(-j*k*rEVENcgp)*((1.0+j*k*rEVENcgp)*(2.0*rEVENcgp*rEVENcgp-3.0*radius*radius)+(k*radius*rEVENcgp)^2)/(2.0*k*rEVENcgp^5);                                
  131.           zb1=ITERsecMid-zSec1minushalfFg+posSecBound;
  132.           rODDc=sqrt(radius*radius+zb1*zb1);
  133.           cgp2=exp(-j*k*rODDc)*((1.0+j*k*rODDc)*(2.0*rODDc*rODDc-3.0*radius*radius)+(k*radius*rODDc)^2)/(2.0*k*rODDc^5);      
  134.           crt=cgp1+cgp2;
  135.           endpointTest = endpointTest + 1;
  136.           for ITER = 1: n
  137.                 xk=negSecBound+ITER*simpFitSec;
  138.                 zx1=ITERsecMid-zSec1minushalfFg+xk;
  139.                 r=sqrt(radius*radius+zx1*zx1);
  140.                 cgp3=exp(-j*k*r)*((1.0+j*k*r)*(2.0*r*r-3.0*radius*radius)+(k*radius*r)^2)/(2.0*k*r^5);            
  141.                 if mod(ITER,2)~=0
  142.                       crt=crt+4.0*cgp3;
  143.                 else
  144.                       crt=crt+2.0*cgp3;
  145.                 end
  146.             end    
  147.         crt=crt*simpFitSec*0.33333;
  148.         zmn(secNum)=crt;
  149.       if secNum~=1
  150.        zmn(np+secNum-1)=crt;
  151.       end
  152. end
  153. rb=2.3*radius; %magfrill
  154. tlab=2.0*log(2.3); %magfrill
  155. for i = 1: np
  156.       zi=height-(i-0.5)*secLength; %magfrill
  157.       r1=k*sqrt(zi*zi+radius*radius); %magfrill
  158.       r2=k*sqrt(zi*zi+rb*rb); %magfrill
  159.       j=0.0+j*1.0; %magfrill
  160.       if iex==1 %magfrill
  161.          cga(i)=-j*k^2/(eta*tlab)*(expm(-j*r1)/r1-expm(-j*r2)/r2); %magfrill
  162.       else   %delta gap
  163.             if i~=fg %if segment is not feedgap
  164.               cga(i)=0; %then current = 0
  165.             else  
  166.               cga(i)=-j*k/(eta*secLength);
  167.             end
  168.       end
  169.    end
  170. %******************************************************************
  171. %       INPUT:
  172. %       (C)A(2*M - 1)        THE FIRST ROW OF THE T-MATRIX FOLLOWED BY
  173. %                            ITS FIRST COLUMN BEGINNING WITH THE SECOND
  174. %                            ELEMENT.  ON RETURN A IS UNALTERED.
  175. %       (C)B(M)              THE RIGHT HAND SIDE VECTOR B.
  176. %       (C)WA(2*M-2)         A WORK AREA VECTOR
  177. %       (I)M                 ORDER OF MATRIX A.
  178. %     OUTPUT:
  179. %       (C)B(M)              THE SOLUTION VECTOR.
  180. %     PURPOSE:
  181. %       SOLVE A SYSTEM OF EQUATIONS DESCRIBED BY A TOEPLITZ MATRIX.
  182. %       A * X = B
  183. %     ******************************************************************
  184. t2=length(zmn);
  185. t1=length(wa);
  186. m=np;
  187. negSecBound=zmn;
  188. posSecBound=cga;
  189. wa=wa;
  190. m=np;
  191. a1=negSecBound;
  192. a2=negSecBound(m+1:t2);
  193. t=posSecBound;
  194. c1=wa;
  195. c2=wa(m-1:t1);
  196. r1=a1(1);
  197. t(1)=posSecBound(1)/r1;
  198. if m ~=1
  199.     for n=2:m
  200.         n1=n-1;
  201.         n2=n-2;
  202.         r5=a2(n1);
  203.         r6=a1(n);
  204.             if n ~= 2
  205.                 c1(n1)=r2;
  206.                     for i1=1:n2
  207.                         i2=n-i1;
  208.                         r5=r5+a2(i1)*c1(i2);
  209.                         r6=r6+a1(i1+1)*c2(i1);
  210.                     end
  211.             end
  212.         r2=-r5/r1;
  213.         r3=-r6/r1;
  214.         r1=r1+r5*r3;
  215.             if n~=2
  216.                 r6=c2(1);
  217.                 c2(n1)=0.0+j*0.0;
  218.                     for i1=2:n1
  219.                         r5=c2(i1);
  220.                         c2(i1)=c1(i1)*r3+r6;
  221.                         c1(i1)=c1(i1)+r6*r2;
  222.                         r6=r5;
  223.                     end
  224.             end
  225.         c2(1)=r3;
  226.         r5=0.0+j*0.0;
  227.             for i1=1:n1
  228.                 i2=n-i1;
  229.                 r5=r5+a2(i1)*t(i2);
  230.             end
  231.         r6=(posSecBound(n)-r5)/r1;
  232.             for i1=1:n1
  233.                 t(i1)=t(i1)+c2(i1)*r6;
  234.             end
  235.         t(n)=r6;
  236.     end
  237.  end
  238. cga=t;
  239. %******************************************************************
  240. %     Output files for curr-MoM.dat
  241. %******************************************************************
  242. fid=fopen('Curr-MoM_m.dat','wt');
  243. fprintf(fid,'CURRENT DISTRIBUTION ALONG ONE HALF OF THE DIPOLE\n');
  244. fprintf(fid,'POSITION Z:   MAGNITUDE:       REAL PART:       IMAGINARY PART:      SECTION #:\n\n');
  245. %*****************************************************************************
  246. %     OUTPUT THE CURRENT DISTRIBUTION ALONG OF THE DIPOLE
  247. %*****************************************************************************
  248. for i=1:fg
  249.     xi=height-(i-0.5)*secLength;
  250.     yi=abs(cga(i));
  251.     table2=[xi,yi,real(cga(i)),imag(cga(i)),i];
  252.     fprintf(fid,'%1.4f       %1.6f            %1.6f        %1.6f          %2.1f \n\n',table2);
  253. end
  254. %******************************************************************
  255. %     Output figure for curr-MoM.dat
  256. %******************************************************************
  257. i=[1:fg];
  258. xi=l-(i-0.5)*secLength;
  259. %yi=abs(cga(i));
  260. yiRe=real(cga(i));
  261. yiIm=imag(cga(i));
  262. %stem(xi,yi)
  263. %stem(xi,yiRe)
  264. stem(xi,yiIm)
  265. grid on;
  266. xlabel('Position (z)')
  267. ylabel('Imaginary Current')
  268. title('CURRENT DISTRIBUTION ALONG ONE HALF OF THE DIPOLE')
  269. figure;
  270.  
  271. fclose(fid);
  272. %******************************************************
  273. %     COMPUTATION OF THE INPUT IMPEDANCE
  274. %******************************************************
  275. zin=1.0/cga(fg);
  276. %******************************************************************
  277. %     COMPUTATION OF AMPLITUDE RADIATION PATTERN OF THE ANTENNA
  278. %******************************************************************
  279. for i=1:181
  280.     theta=(i-1.0)*rad;
  281.     cth=cos(theta);
  282.     sth=sin(theta);
  283.       if abs(cth)<0.001
  284.          ft=1;
  285.       else
  286.          ft=sin(k*secLength*cth*0.5)/(k*secLength*cth*0.5);
  287.       end
  288.     crt=0;
  289.          for m=1:np
  290.              zSec1minushalfFg=height-(m-0.5)*secLength;
  291.              crt=crt+exp(j*k*zSec1minushalfFg*cth)*ft*cga(m)*secLength;
  292.          end
  293.     ptt=abs(crt)*sth*sth*eta*0.5;
  294.     etmm(i)=ptt;
  295.  end
  296. amax=etmm(1);
  297. for i=2:181
  298.     if etmm(i)>=amax
  299.        amax=etmm(i);
  300.     end
  301. end
  302. for i=1:181
  303.     ptt=etmm(i)/amax;
  304.       if ptt<=0.00001
  305.          ptt=0.00001;
  306.          etmm(i)=20*log10(ptt);
  307.       end
  308.       etmm(i)=20*log10(ptt);
  309. end
  310. %******************************************************************
  311. %     Output files for Patt-MoM_m.dat
  312. %******************************************************************
  313. pok=fopen('Patt-MoM_m.dat','wt');
  314. fprintf(pok,'RADIATION PATTERN   vs   OBSERVATION ANGLE THETA\n');
  315. fprintf(pok,'THETA (in degrees)        MAGNITUDE(in dB)\n');
  316.  
  317. for i=1:181
  318.   xi=i-1;
  319.   table3=[xi,etmm(i)];
  320.   fprintf(pok,'%3.1f                            %3.3f         \n',table3);
  321. end
  322. %******************************************************************
  323. %     Output figure for Patt-MoM_m.dat
  324. %******************************************************************
  325. i=[1:181];
  326. xi=i-1;
  327. % Polar Plot
  328. etmm1=[etmm(1:181),fliplr(etmm(1:180))];
  329. q=polar_dB([0:360],etmm1,-40,0,4,'-');
  330. set(q,'linewidth',1.5);
  331. % plot(xi,etmm(i),'linewidth',2);
  332. % axis ([0 180 -60 0]);
  333. % grid on;
  334. % xlabel('Theta(degrees)');
  335. % ylabel('Magnitude(dB)');
  336. title('RADIATION PATTERN   vs   OBSERVATION ANGLE')
  337. for i=182:361
  338.   xi=i-1;
  339.    table4=[xi,etmm(362-i)];
  340.    fprintf(pok,'%3.1f                           %3.3f         \n',table4);
  341. end
  342.  
  343.  
  344.  
  345. %^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
  346. %***********************************************************************
  347. %***          HALLEN'S INTEGRAL EQUATION                             ***
  348. %***********************************************************************
  349.  
  350. case 2
  351. %******************************************************
  352. %     SOME CONSTANTS AND INPUT DATA
  353. %******************************************************
  354. np=input('NUMBER OF SUBDIVISIONS <ODD OR EVEN NUMBER> =');
  355. tl=input('TOTAL DIPOLE LENGTH <WAVELENGTHS> =');
  356. radius=input('RADIUS OF DIPOLE <WAVELENGTHS> =');
  357. n=np;
  358. l=tl;
  359. rho=radius;
  360. rtod=180/pi;
  361. eta=120*pi;
  362. bk=2*pi;
  363. cj=0.0+j*1.0;
  364. secLength=l/(2*(n-1));
  365. dz1=l/(2*n);
  366. %C***********************************************************************
  367. %C    PERFORM COMPLEX INTEGRATION USING SIXTEEN POINT  
  368. %C    GAUSSIAN QUADRATURE WITH INCREASING ACCURACY SET  
  369. %C    BY INTEGER NO
  370. %C***********************************************************************
  371. absica=[-0.095012509837637,-0.281603550779259;
  372.         -0.458016777657227,-0.617876244402644;
  373.         -0.755404408355003,-0.865631202387832;
  374.         -0.944575023073233,-0.989400934991650;
  375.          0.095012509837637,0.281603550779259;
  376.          0.458016777657227,0.617876244402644;
  377.          0.755404408355003,0.865631202387832;
  378.          0.944575023073233,0.989400934991650];
  379. wght=[0.189450610455068,0.182603415044924;
  380.          0.169156519395002,0.149595988816577;
  381.          0.124628971255534,0.095158511682493;
  382.          0.062253523938648,0.027152459411754;
  383.          0.189450610455068,0.182603415044924;
  384.          0.169156519395002,0.149595988816577;
  385.          0.124628971255534,0.095158511682493;
  386.          0.062253523938648,0.027152459411754];
  387.       %************************************************************
  388.       %     FILL THE MATRIX AND EXCITATION VECTOR OF THE SYSTEM:  
  389.       %      [ZMATRX] and [ELECUR]
  390.       %************************************************************
  391. for i=1:n
  392.     z=(2*i-1)*dz1/2.0;
  393.     zmatrx(i,n)=-cos(bk*z);
  394.     elecur(i)=-cj*sin(bk*z)/(2.0*eta);
  395.     for j=1:n-1
  396.         lower=(j-1)*dz1;
  397.         upper=(j)*dz1;
  398.         %*****************************************************************
  399.         %     PERFORM NUMERICAL INTEGRATION OF THE KERNEL FOR HALLEN'S
  400.         %     INTEGRAL EQUATION
  401.         %*****************************************************************
  402.         no=10;
  403.         del=(upper-lower)/(2.0*no);
  404.         sum=0.0+j*0.0;
  405.         for t=1:no
  406.             s=lower+(2*t-1)*del;
  407.             for q=1:16
  408.                x=s+absica(q)*del;
  409.                %***********************************************************************
  410.                %C    KERNEL PROVIDES THE KERNEL OF HALLEN'S EQN FOR INTEGRATION  
  411.                %C    SYMMETRY IS USED TO REDUCE THE SYSTEM OF EQUATIONS AND  
  412.                %C    HENCE ALTERS THE KERNEL
  413.                %***********************************************************************
  414.                 r1=sqrt(rho*rho+(z-x)*(z-x));
  415.                 r2=sqrt(rho*rho+(z+x)*(z+x));
  416.                 kernel=exp(-cj*bk*r1)/(4.0*pi*r1)+exp(-cj*bk*r2)/(4.0*pi*r2);
  417.                 sum=sum+wght(q)*kernel;
  418.             end
  419.         end
  420.         res=sum*del;
  421.     zmatrx(i,j)=res;
  422.   end
  423. end
  424.  
  425. %*********************************************************************************
  426. %   DECOMPOSE AND SOLVE THE SYSTEM FOR THE CURRENT DISTRIBUTION
  427. %*********************************************************************************
  428.  
  429. %****************************
  430. %    GET SCALING INFO.
  431. %****************************
  432. for i=1:n
  433.     zmax=0.0;
  434.     for j=1:n
  435.         caz=abs(zmatrx(i,j));
  436.         if caz >= zmax
  437.             zmax=caz;
  438.         end
  439.     end
  440.     scal(i)=1.0/zmax;
  441.  end
  442. %****************************  
  443. %    CROUT's algorithm.
  444. %****************************
  445. for j=1:n
  446.     for i=1:j-1
  447.         for ITER=1:i-1
  448.             zmatrx(i,j)=zmatrx(i,j)-zmatrx(i,ITER)*zmatrx(ITER,j);
  449.         end
  450.     end
  451.     zmax=0.0;
  452.     %*****************************************
  453.     %    SEARCH FOR LARGEST PIVOT ELEMENT.
  454.     %*****************************************
  455.     for i=j:n
  456.         for ITER=1:j-1
  457.             zmatrx(i,j)=zmatrx(i,j)-zmatrx(i,ITER)*zmatrx(ITER,j);
  458.         end
  459.         problem=scal(i)*abs(zmatrx(i,j));
  460.         if problem >=zmax
  461.             imax=i;
  462.             zmax=problem;
  463.         end
  464.      end
  465.      %***********************************
  466.      %    INTERCHANGE THE ROWS.
  467.      %***********************************
  468.     if j~=imax
  469.         for ITER=1:n
  470.             temp=zmatrx(imax,ITER);
  471.             zmatrx(imax,ITER)=zmatrx(j,ITER);
  472.             zmatrx(j,ITER)=temp;
  473.         end
  474.         scal(imax)=scal(j);
  475.     end
  476.     iperm(j)=imax;
  477.     %***********************************
  478.     %    DIVIDE BY PIVOT ELEMENT.
  479.     %***********************************
  480.     if j~=n
  481.         for i=j+1:n
  482.             zmatrx(i,j)=zmatrx(i,j)/zmatrx(j,j);
  483.         end
  484.     end
  485.  end
  486. %******************************************************************  
  487. %    SOLVES LINEAR SYSTEM GIVEN THE LU DECOMPOSITION FROM LUDEC
  488. %    FORCING VECTOR IS REPLACED WITH SOLUTION VECTOR UPON EXIT
  489. %*****************************
  490. %    FORWARD SUBSTITUTION.
  491. %******************************************************************
  492. for i=1:n
  493.     temp=elecur(iperm(i));
  494.     elecur(iperm(i))=elecur(i);
  495.     for j=1:i-1
  496.         temp=temp-zmatrx(i,j)*elecur(j);
  497.     end
  498.     elecur(i)=temp;
  499.  end
  500. %********************************  
  501. %    BACKWARD SUBSTITUTION.
  502. %********************************
  503. for i=1:n
  504.     ii=n-i+1;
  505.     temp=elecur(ii);
  506.     for j=ii+1:n
  507.         temp=temp-zmatrx(ii,j)*elecur(j);
  508.     end
  509.     elecur(ii)=temp/zmatrx(ii,ii);
  510.  end
  511. %***************************************************************************  
  512. %     COMPUTATION OF THE INPUT IMPEDANCE AND CURRENT DISTRIBUTION
  513. %***************************************************************************
  514. zin=1.0/elecur(1);
  515. %******************************************************************
  516. %     Output files for curr-MoM_m.dat
  517. %******************************************************************
  518. fid=fopen('Curr-MoM_m.dat','wt');
  519. fprintf(fid,'CURRENT DISTRIBUTION ALONG ONE HALF OF THE DIPOLE\n');
  520. fprintf(fid,'POSITION Z:   CURRENT MAGNITUDE:    CURRENT PHASE:    SECTION:\n');
  521. for i=1:n-1
  522.    %******************************************************************
  523.    %    THIS FUNCTION IS COMPUTES THE ARCTANGENT GIVEN X,Y.  IT IS  
  524.    %    SIMILAR TO ATAN2 EXCEPT IT AVOIDS THE RUN TIME ERRORS ON  
  525.    %    SOME MACHINES FOR SMALL ARGUMENTS.
  526.    %******************************************************************
  527.     smlt=0.0000001;
  528.     if (abs(x)<=smlt) & (abs(y)<=smlt)
  529.         btan2=0.0;
  530.     else
  531.         btan2=atan2(real(elecur(i)),imag(elecur(i)));
  532.     end
  533.     cur=abs(elecur(i));
  534.     curRe=real(elecur(i));
  535.     curIm=imag(elecur(i));
  536.     pha=rtod*btan2;
  537.     table=[i*secLength-secLength/2.0,cur,pha,i];
  538.     fprintf(fid,'%2.6f       %2.6f              %3.6f          %3.1f\n\n\n\n',table);
  539.  end
  540. %******************************************************************
  541. %     Output figure for curr-MoM_m.dat
  542. %******************************************************************
  543.  
  544. i=[1:n-1];
  545. smlt=0.0000001;
  546.     if (abs(x)<=smlt) & (abs(y)<=smlt)
  547.         btan2=0.0;
  548.     else
  549.         btan2=atan2(real(elecur(i)),imag(elecur(i)));
  550.     end
  551.      cur=abs(elecur(i));
  552.     pha=rtod*btan2;
  553. stem(i*secLength-secLength/2.0,cur)
  554. grid on
  555. xlabel('Position (z)')
  556. ylabel('Real Current magnitude')
  557. title('CURRENT DISTRIBUTION ALONG ONE HALF OF THE DIPOLE')
  558. fclose(fid);
  559. figure;
  560. %stem(i*dz-dz/2.0,curIm)
  561. %grid on
  562. %xlabel('Position (z)')
  563. %ylabel('Imaginary Current magnitude')
  564. %title('CURRENT DISTRIBUTION ALONG ONE HALF OF THE DIPOLE')
  565. %fclose(fid);
  566. %figure;
  567. %*********************************************************************************
  568. %   CALCULATE THE RADIATION PATTERN OF THE ANTENNA
  569. %*********************************************************************************
  570. maxang=181;
  571. pmax=-1.0;
  572. for j=1:maxang
  573.     theta=(j-1)/(maxang-1)*pi;
  574.     %********************************************************************
  575.     %    CALCULATES THE RADIATED POWER LEVEL AT ANGLE THETA RADIANS
  576.     %    TO THE DIPOLE AXIS.  SINCE THE PATTERN IS NORMALIZED TO THE  
  577.     %    MAXIMUM RADIATED POWER, COMMON CONSTANTS ARE REMOVED
  578.     %********************************************************************
  579.     sth=sin(theta);
  580.     cth=cos(theta);
  581.     arg=pi*secLength*cth;
  582.     if abs(arg) <= 0.001
  583.         ft=1.0;
  584.     else
  585.         ft=sin(arg)/arg;
  586.     end
  587.     n2=n-1;;
  588.     crt=0.0+j*0.0;
  589.     for ITER=1:n2
  590.         argp=pi*(-l+(ITER-1)*2.0*secLength+secLength)*cth;
  591.         crt=crt+exp(cj*argp)*ft*elecur(ITER);
  592.         argp=pi*(-l+(n2+ITER-1)*2.0*secLength+secLength)*cth;
  593.         crt=crt+exp(cj*argp)*ft*elecur(ITER);
  594.     end
  595.     power=abs(crt)*sth*sth;
  596.     pwr(j)=power;
  597.     if pwr(j)>=pmax
  598.         pmax=pwr(j);
  599.     end
  600.  end
  601.  
  602. %******************************************************************
  603. %     Output files for Patt-MoM_m.dat
  604. %******************************************************************
  605. hel=fopen('Patt-MoM_m.dat','wt');
  606. fprintf(hel,'RADIATION PATTERN   vs  OBSERVATION ANGLE THETA\n');
  607. fprintf(hel,'THETA (in degrees)      MAGNITUDE (in dB)\n');
  608. %*******************************************************************
  609. %   WRITE THE RADIATION PATTERN IN dB
  610. %*******************************************************************
  611. for i=1:maxang
  612.     theta=(i-1)/(maxang-1)*180;
  613.     pattrn=pwr(i)/pmax;
  614.     if pattrn <=0.00001
  615.         pattrn=-100;
  616.     else
  617.         pattrn=20*log10(pattrn);
  618.     end
  619.     table1=[theta,pattrn];
  620.     fprintf(hel,'%3.1f                         %3.3f         \n',table1);
  621. end
  622. %******************************************************************
  623. %     Output figure for Patt-MoM_m.dat
  624. %******************************************************************
  625. i=[1:181];
  626. theta=(i-1);
  627. pattrn=pwr(i)/pmax;
  628. pattrn=20*log10(pattrn);
  629. % Polar Plot
  630. pattrn=[pattrn,fliplr(pattrn(1:180))];
  631. q=polar_dB([0:360],pattrn,-40,0,4,'-');
  632. set(q,'linewidth',1.5);
  633. % plot(theta,pattrn,'linewidth',2);
  634. % axis ([0 180 -60 0]);
  635. % grid on;
  636. % xlabel('Theta(degrees)');
  637. % ylabel('Magnitude(dB)');
  638. title('RADIATION PATTERN   vs   OBSERVATION ANGLE')
  639. for i=182:361
  640.     theta=(i-1)/(maxang-1)*180;
  641.     pattrn=pwr(362-i)/pmax;
  642.     if pattrn <=0.00001
  643.         pattrn=-100;
  644.     else      
  645.         pattrn=20*log10(pattrn);
  646.     end
  647.     table2=[theta,pattrn];
  648.     fprintf(hel,'%3.1f                         %3.3f         \n',table2);
  649. end
  650. fclose(hel);
  651. end
  652. %*******************************************
  653. %        OUTPUT FILE
  654. %*******************************************
  655. if(option_a==2)
  656.    diary(filename);
  657. end
  658. %*******************************************
  659. %         FORMAT STATEMENTS  
  660. %*******************************************      
  661. disp(sprintf('\n\n\n\n\n\n\n\n'));
  662. disp(strvcat('WIRE ANTENNA PROBLEM','================'));
  663. if (option==1)&(iex==1)
  664.     disp(sprintf('POCKLINGTON''S EQUATION AND MAGNETIC FRILL MODEL'));
  665. elseif (option==1)&(iex==2)
  666.     disp(sprintf('POCKLINGTON''S EQUATION AND DELTA GAP MODEL'));
  667. elseif (option==2)
  668.     disp(sprintf('HALLEN''S EQUATION'));
  669. end
  670. disp(sprintf('\nLENGTH = %4.4f (WLS)',tl));
  671. disp(sprintf('RADIUS OF THE WIRE = %4.4f (WLS)',radius));
  672. disp(sprintf('NUMBER OF SUBSECTIONS = %2.2f\n',np));
  673. ZR=real(zin);
  674. ZI=imag(zin);
  675. if ZI>0
  676.     output=sprintf('INPUT IMPEDANCE: Z= %5.1f +j %5.1f  (OHMS)\n',ZR,ZI);
  677. else
  678.     output=sprintf('INPUT IMPEDANCE: Z= %5.1f -j %5.1f  (OHMS)\n',ZR,abs(ZI));
  679. end
  680. disp(output);
  681. disp(strvcat('*** NOTE:',...
  682.    '    THE DIPOLE CURRENT DISTRIBUTION IS STORED IN Curr-MoM_m.dat',...
  683.    '    THE AMPLITUDE RADIATION PATTERN IS STORED IN Patt-MoM_m.dat',...
  684.    '    ========================================================='));
  685. diary off;
  686. warning off;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement