Why is the radiation pattern does not show the required steering angle?

5 次查看(过去 30 天)
N = 16;%number of elements
wl = 1;%wavelength
k = 2.*pi./wl;
d = wl./2;%distance
f = zeros(1,180);%empty array for field
AF = zeros(1,100);%empty array for complec weights
thi = -45;%The scan angle
angle_radi = thi.*pi./180;%angle to radian
phi= (2.*pi.*d .*sin(angle_radi))./wl;%equation for phase shift
for a = 1:N %for loop to repeat until the Nth phase shift
AF(a)= (a-1).*phi;%First number = (1-1)*phi
while AF(a) > 2*pi
AF(a) = AF(a) - 2.*pi;
if AF(a)<= 2*pi;break;end
end %minimize the data if it is larger than 2pi
while AF(a) < -2*pi
AF(a) =AF(a) + 2*pi;
if AF(a) >= -2*pi;break;end
end %maximize the data if it is smaller than -2pi
end%does not affect the result but mitigate the calculation
as = AF(2)+AF(3)+AF(4)+AF(5)+AF(6)+AF(7)+AF(8)+AF(9);%weights in total
for th =1:360 %angle from 1 to 360
s = 0
angle_1rad(th) = th.*pi/180;%angle to radian
for i = 1:N
s = s + exp((-1j).*k.*(i-1).*d.*sin(angle_1rad(th))+as)%equation for field
end
f(th)= abs(s);
end
M = max(f);
z = f./M;%normalize the data
figure
polarplot(angle_1rad+as,z);
%title('linear polar plot');

采纳的回答

David Goodmanson
David Goodmanson 2021-5-8
编辑:David Goodmanson 2021-5-8
Hi ZW,
In the code below, the key line is
s = s + exp((-1j*k*d*(i-1).*sin(angle_1rad(th))) +1j*AF(i)); %equation for field
which is simply the sum of N phase angles due to propagation at the given angle, each multplied by the phase angle AF required to aim the beam at -45 degrees. I don't know the intent of the sum as = AF(2) + ...AF(9), but it is not necessary. I left out the while loops changing the values of angles by multiples of 2pi since it is unnecessary for accuracy (unless the number of antenna elements gets into maybe millions).
The polar plot shows a peak at -45 degrees and an equal peak at -135 degrees. With your geometry the line of emitters is the plus and minus vertical y axis, 90 degrees and 270 degrees, so there is equal emission on each side of the antenna as required.
The second code shortens things up by replacing some of the for loops with the vectorized version. (the code also uses exp(+1j*k*x)-type wave propagation rather than exp(-1j*k*x), since the former seems more intuitive).
N = 16; % number of elements
wl = 1; % wavelength
k = 2.*pi./wl;
d = wl./2; % distance
f = zeros(1,360); % empty array for field
AF = zeros(1,100); % empty array for complec weights
thi = -45; % The scan angle
angle_radi = thi.*pi./180; % angle to radian
phi= (k.*d .*sin(angle_radi)); % eqn for phase shift [in terms of k]
for a = 1:N %for loop to repeat until the Nth phase shift
AF(a)= (a-1).*phi; % First number = (1-1)*phi
end
%as = AF(2)+AF(3)+AF(4)+AF(5)+AF(6)+AF(7)+AF(8)+AF(9);%weights in total
for th =1:360 %angle from 1 to 360
s = 0;
angle_1rad(th) = th.*pi/180; % angle to radian
for i = 1:N
s = s + exp((-1j*k*d*(i-1).*sin(angle_1rad(th)))+1j*AF(i)); %equation for field
end
f(th)= abs(s);
end
%
M = max(f);
z = f./M;%normalize the data
figure(1)
polarplot(angle_1rad,z);
title('linear polar plot');
N = 16; % number of elements
wl = 1; % wavelength
k = 2*pi/wl;
d = wl/2; % distance
thi = -45; % The scan angle
thirad = thi.*pi./180; % angle to radian
f = zeros(1,360);
anglerad = zeros(1,360);
phi= (k*d*sin(thirad)); % eqn for phase shift [in terms of k]
AF = (0:N-1)*phi;
for th =1:360 % angle from 1 to 360
anglerad(th) = th.*pi/180; % angle to radian
thvecN = k*d*(0:N-1)*sin(anglerad(th)); % phase angles due to propagation
s = sum(exp(1j*(thvecN-AF)));
f(th)= abs(s);
end
z = f/max(f); % normalize the data
figure(2)
polarplot(anglerad,z);
title('linear polar plot');
  1 个评论
ZIYI WENG
ZIYI WENG 2021-5-10
Thank you very much. I found a different way to solve it later that day, but thanks anyway. I will try your code and see what will happen.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Antennas, Microphones, and Sonar Transducers 的更多信息

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by