ARRAY_GEOMETRY = '2D_RANDOM';
lambda = 1;
theta_tar = 60;
half_beamwidth = 10;
min_sidelobe = -20;
if strcmp( ARRAY_GEOMETRY, '2D_RANDOM' )
rand('state',0);
n = 36;
L = 5;
loc = L*rand(n,2);
elseif strcmp( ARRAY_GEOMETRY, '1D_UNIFORM_LINE' )
n = 30;
d = 0.45*lambda;
loc = [d*[0:n-1]' zeros(n,1)];
elseif strcmp( ARRAY_GEOMETRY, '2D_UNIFORM_LATTICE' )
m = 6; n = m^2;
d = 0.45*lambda;
loc = zeros(n,2);
for x = 0:m-1
for y = 0:m-1
loc(m*y+x+1,:) = [x y];
end
end
loc = loc*d;
else
error('Undefined array geometry')
end
theta = [1:360]';
A = kron(cos(pi*theta/180), loc(:,1)') + kron(sin(pi*theta/180), loc(:,2)');
A = exp(2*pi*i/lambda*A);
[diff_closest, ind_closest] = min( abs(theta - theta_tar) );
Atar = A(ind_closest,:);
ind = find(theta <= (theta_tar-half_beamwidth) | ...
theta >= (theta_tar+half_beamwidth) );
As = A(ind,:);
cvx_begin
variable w(n) complex
minimize( norm( w ) )
subject to
Atar*w == 1;
abs(As*w) <= 10^(min_sidelobe/20);
cvx_end
disp(['Problem is ' cvx_status])
if ~strfind(cvx_status,'Solved')
return
end
fprintf(1,'The minimum norm of w is %3.2f.\n\n',norm(w));
figure(1), clf
plot(loc(:,1),loc(:,2),'o')
title('Antenna locations')
y = A*w;
figure(2), clf
ymin = -30; ymax = 0;
plot([1:360], 20*log10(abs(y)), ...
[theta_tar theta_tar],[ymin ymax],'r--',...
[theta_tar+half_beamwidth theta_tar+half_beamwidth],[ymin ymax],'g--',...
[theta_tar-half_beamwidth theta_tar-half_beamwidth],[ymin ymax],'g--',...
[0 theta_tar-half_beamwidth],[min_sidelobe min_sidelobe],'r--',...
[theta_tar+half_beamwidth 360],[min_sidelobe min_sidelobe],'r--');
xlabel('look angle'), ylabel('mag y(theta) in dB');
axis([0 360 ymin ymax]);
figure(3), clf
zerodB = 50;
dBY = 20*log10(abs(y)) + zerodB;
plot(dBY.*cos(pi*theta/180), dBY.*sin(pi*theta/180), '-');
axis([-zerodB zerodB -zerodB zerodB]), axis('off'), axis('square')
hold on
plot(zerodB*cos(pi*theta/180),zerodB*sin(pi*theta/180),'k:')
plot( (min_sidelobe + zerodB)*cos(pi*theta/180), ...
(min_sidelobe + zerodB)*sin(pi*theta/180),'k:')
text(-zerodB,0,'0 dB')
text(-(min_sidelobe + zerodB),0,sprintf('%0.1f dB',min_sidelobe));
theta_1 = theta_tar+half_beamwidth;
theta_2 = theta_tar-half_beamwidth;
plot([0 55*cos(theta_tar*pi/180)], [0 55*sin(theta_tar*pi/180)], 'k:')
plot([0 55*cos(theta_1*pi/180)], [0 55*sin(theta_1*pi/180)], 'k:')
plot([0 55*cos(theta_2*pi/180)], [0 55*sin(theta_2*pi/180)], 'k:')
hold off
Calling Mosek 9.1.9: 1439 variables, 414 equality constraints
For improved efficiency, Mosek is solving the dual problem.
------------------------------------------------------------
MOSEK Version 9.1.9 (Build date: 2019-11-21 11:32:15)
Copyright (c) MOSEK ApS, Denmark. WWW: mosek.com
Platform: MACOSX/64-X86
Problem
Name :
Objective sense : min
Type : CONIC (conic optimization problem)
Constraints : 414
Cones : 342
Scalar variables : 1439
Matrix variables : 0
Integer variables : 0
Optimizer started.
Presolve started.
Linear dependency checker started.
Linear dependency checker terminated.
Eliminator started.
Freed constraints in eliminator : 0
Eliminator terminated.
Eliminator - tries : 1 time : 0.00
Lin. dep. - tries : 1 time : 0.00
Lin. dep. - number : 0
Presolve terminated. Time: 0.00
Problem
Name :
Objective sense : min
Type : CONIC (conic optimization problem)
Constraints : 414
Cones : 342
Scalar variables : 1439
Matrix variables : 0
Integer variables : 0
Optimizer - threads : 8
Optimizer - solved problem : the primal
Optimizer - Constraints : 72
Optimizer - Cones : 343
Optimizer - Scalar variables : 1099 conic : 1099
Optimizer - Semi-definite variables: 0 scalarized : 0
Factor - setup time : 0.00 dense det. time : 0.00
Factor - ML order time : 0.00 GP order time : 0.00
Factor - nonzeros before factor : 2628 after factor : 2628
Factor - dense dim. : 0 flops : 5.53e+06
ITE PFEAS DFEAS GFEAS PRSTATUS POBJ DOBJ MU TIME
0 0.0e+00 1.0e+00 3.6e+01 0.00e+00 3.410000000e+01 -1.000000000e+00 1.0e+00 0.01
1 5.3e-14 9.4e-01 3.7e+01 1.11e+01 1.440560643e+01 -1.338598654e+00 9.4e-01 0.02
2 1.6e-13 3.5e-01 5.1e+00 4.61e+00 1.884111089e+00 -4.827843861e-01 3.5e-01 0.02
3 2.3e-13 8.4e-02 4.9e-01 1.61e+00 6.065250993e-03 -4.847201593e-01 8.4e-02 0.03
4 4.2e-13 6.3e-02 3.2e-01 9.45e-01 -1.485235974e-01 -5.299185532e-01 6.3e-02 0.03
5 8.8e-13 2.4e-02 6.8e-02 9.82e-01 -4.472091476e-01 -5.976390060e-01 2.4e-02 0.03
6 1.7e-12 2.0e-03 6.5e-04 1.01e+00 -6.312972273e-01 -6.443621841e-01 2.0e-03 0.03
7 3.6e-11 1.0e-03 2.3e-04 1.00e+00 -6.412479614e-01 -6.479375854e-01 1.0e-03 0.04
8 2.9e-11 1.7e-04 1.4e-05 9.96e-01 -6.498607255e-01 -6.509727401e-01 1.7e-04 0.04
9 5.6e-11 9.2e-06 1.8e-07 1.00e+00 -6.515133315e-01 -6.515725485e-01 9.2e-06 0.04
10 1.2e-09 1.5e-06 1.1e-08 1.00e+00 -6.515926398e-01 -6.516020441e-01 1.5e-06 0.04
11 1.1e-09 3.0e-08 3.3e-11 1.00e+00 -6.516072068e-01 -6.516073994e-01 3.0e-08 0.05
12 1.7e-09 3.9e-09 1.6e-12 1.00e+00 -6.516074744e-01 -6.516074993e-01 3.9e-09 0.05
13 2.0e-09 1.3e-09 4.1e-17 1.00e+00 -6.516075141e-01 -6.516075141e-01 6.0e-12 0.05
Optimizer terminated. Time: 0.06
Interior-point solution summary
Problem status : PRIMAL_AND_DUAL_FEASIBLE
Solution status : OPTIMAL
Primal. obj: -6.5160751406e-01 nrm: 3e+00 Viol. con: 4e-10 var: 0e+00 cones: 0e+00
Dual. obj: -6.5160751430e-01 nrm: 7e-01 Viol. con: 0e+00 var: 8e-11 cones: 0e+00
Optimizer summary
Optimizer - time: 0.06
Interior-point - iterations : 13 time: 0.05
Basis identification - time: 0.00
Primal - iterations : 0 time: 0.00
Dual - iterations : 0 time: 0.00
Clean primal - iterations : 0 time: 0.00
Clean dual - iterations : 0 time: 0.00
Simplex - time: 0.00
Primal simplex - iterations : 0 time: 0.00
Dual simplex - iterations : 0 time: 0.00
Mixed integer - relaxations: 0 time: 0.00
------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): +0.651608
Problem is Solved
The minimum norm of w is 0.65.