maximum of the radiation pattern in a direction

5 views (last 30 days)
Hello,
:
I need help to solve one problem and I'm stucked in a part, I have to design a linear array of N dipoles having a maximum of the radiation pattern in a direction given by: theta = pi/2 phi = pi/4 + 9*pi/56.
I have got this, and I have adapted to my case, but I don't know where I have to change the data tu include de direction given :
clear
close all
N=4; %number of antennas
lambda=10; %length of the antennas (m)
%positions of dipoles
X= [-lambda/2 -lambda/4 lambda/4 lambda/2]
Y= zeros(1,N);
Z= zeros(1,N);
%amplitudes of dipoles
A=ones(1,N);
ang = [pi/2 0 0 pi/2] %0:pi/4:(N-1)*pi/4; %rad
E1=A.*exp(j*ang); %field constant
%go spheric
[a1,a2,delta]=cart2sph(X,Y,Z);
phip=a1;
thetap=pi/2-a2;
RP=10; %distance at which the field is measured (m)
Rez=100; %resolution of represetation
phi=linspace(0,2*pi, 2*Rez);
theta=linspace(0,pi,Rez);
E=zeros(length(theta),length(phi));
AE=zeros(length(theta),length(phi));
XE=zeros(length(theta),length(phi));
YE=zeros(length(theta),length(phi));
ZE=zeros(length(theta),length(phi));
for u1=1:length(theta),
for v1=1:length(phi),
u=theta(u1);
v=phi(v1);
cosA=sin(u)*sin(thetap).*cos(v-phip)+cos(u)*cos(thetap);
E2=E1/RP*exp(-j*2*pi*RP/lambda).*exp(j*2*pi/lambda*delta.*cosA)*sin(u);
E3=sum(E2);
E(u1,v1)=E3;
AE(u1,v1)=abs(E(u1,v1));
XE(u1,v1)=abs(E(u1,v1))*sin(u)*cos(v);
YE(u1,v1)=abs(E(u1,v1))*sin(u)*sin(v);
ZE(u1,v1)=abs(E(u1,v1))*cos(u);
end
end
X=XE/max(max(AE));
Y=YE/max(max(AE));
Z=ZE/max(max(AE));
figure (1)
%colormap('gray')
surf(X,Y,Z)
%axis equal
axis square
xlabel('x')
ylabel('y')
zlabel('z')
Thanks for all,
Francisco

Accepted Answer

Meg Noah
Meg Noah on 11 Jan 2020
Solution, I hope!
% for a general (theta0,phi0) express the surface in spherical coordinates
% [Azimuth,Elevation,R] = cart2sph(X,Y,Z);
theta0 = pi/2;
elevation0 = pi/2 - theta0;
% since your elevation is 0, you can just take the values in the X-Y plane
% the Z values are not players in this question
[Azimuth,R] = cart2pol(X,Y);
Azimuth = wrapTo2Pi(Azimuth);
phi0 = pi/4 + 9*pi/56;
% your input values were generated on this cadence
arrAz = linspace(0, 2*pi, 2*Rez)';
% just to be fancy - strip away every point that is not the maximum
% distance from the origin at each aximuth angle
arrMaxR = nan(numel(arrAz),1);
for iAz = 1:numel(arrAz)
idx = find(abs(Azimuth-arrAz(iAz)) < 2*pi/Rez);
if (~isempty(idx))
tmpR = R(idx);
arrMaxR(iAz) = max(tmpR(:));
end
end
figure()
plot(X,Y);
hold on; axis equal; axis tight;
plot(arrMaxR.*cos(arrAz),arrMaxR.*sin(arrAz),'.k');
xlabel('X'); ylabel('Y');
maxRInDirectionPhi0 = interp1(arrAz,arrMaxR,phi0,'pchip');
p1 = [0 0];
p2 = [ maxRInDirectionPhi0.*cos(phi0) maxRInDirectionPhi0.*sin(phi0)];
dp = p2-p1;
quiver(p1(1),p1(2),dp(1),dp(2),0,'MaxHeadSize',0.3,'color','k','linewidth',3)
title({'Radiation Pattern In X-Y Plane'; ...
['R(\theta=\pi/2,\phi_0=\pi/4 + 9\pi/56)=' num2str(maxRInDirectionPhi0)]});
AntennaPattern.png
It's a little more complicated if theta is not pi/2 - so that the Z values must be interpolated as well.
  1 Comment
FRANCISCO JAVIER DE LA PUENTE SECADES
I thank you very much for the answer, it has been very helpful.
Finally I would like to know if you know any way to calculate the directivity of that antenna, without using any addon as an antenna toolbox. I have tried formulas with the array factor but I have not obtained a logical solution.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!