How to optimize the antenna weight of a two-dimensional array to generate null in a specific direction

7 views (last 30 days)
I have read the” Array Pattern Synthesis Part II: Optimization“,the optimization example is for one-dimensional array(ULA), and there are problems in my process of weight optimization for two-dimensional array(URA),Please give me some guidance,thanks!
N = 8;
M=8;
URA1 = phased.URA('Size',[N,M],'ArrayNormal','z');
pos = getElementPosition(URA1);
% position of elements
ang_i = [-70 -40 -20;0 0 0]; % interference angles
ang_d = [0;0]; % desired angle
Rn = sensorcov(pos,ang_i,db2pow(-40)); % Noise covariance matrix
sv_c = steervec(pos,[ang_d ang_i]); % Linear constraints
r_c = [1 zeros(size(ang_i))]'; % Desired response
w_lcmv = lcmvweights(sv_c,r_c,Rn); % LCMV weights
ang_plot = -90:0.1:90;
sv_plot = steervec(pos,ang_plot);
plcmv = plot(ang_plot,mag2db(abs(w_lcmv'*sv_plot)));
xline(ang_i,"--")
ylim([-100 0])
grid on
legend(plcmv,"LCMV - Analytic")
xlabel("Azimuth Angle (deg)")
ylabel("Beam Pattern (dB)")

Answers (1)

Honglei Chen
Honglei Chen on 19 Jun 2024
Your script is pretty close, you just need to set up the desired response properly. However, you could take advantage of the pattern plot to plot the pattern for a planar array.
Hope this helps,
N = 8;
M = 8;
URA1 = phased.URA('Size',[N,M],'ArrayNormal','z');
pos = getElementPosition(URA1);
% position of elements
ang_i = [-40 -20 10;10 20 -10]; % interference angles
ang_d = [0;0]; % desired angle
Rn = sensorcov(pos,ang_i,db2pow(-40)); % Noise covariance matrix
sv_c = steervec(pos,[ang_d ang_i]); % Linear constraints
r_c = [1 zeros(1,size(ang_i,2))]'; % Desired response
w_lcmv = lcmvweights(sv_c,r_c,Rn); % LCMV weights
pattern(URA1,3e8,-90:90,-90:90,'CoordinateSyste','Rectangular',...
'Type','powerdb','Weights',w_lcmv);
view(0,90);

Community Treasure Hunt

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

Start Hunting!