How to find optimum complex weighting coefficients for antenna beam pattern optimisation? A purely optimisation problem
4 views (last 30 days)
Hi, I need to optimize antenna pattern weights so that it has a certain value at certain directions. I've seen there is an example here: https://es.mathworks.com/company/newsletters/articles/synthesizing-an-array-from-a-specified-pattern-an-optimization-workflow.html also reproduced below
My objective is Beam_d, and stvmat is always a known vector (with complex numbers). What I want to find are the optimum weights in w
The following code seems to do the trick somehow; probably there are more advanced optimization options. The optimized weights output weights_o I would like it to be a complex value, as the weights can be expressed as an amplitude and a phase. In fact I would like to be able to restrict the output for example to only phase or only amplitude weights, but I have no clue on how to tackle this optimization. Could anyone provide some hints?
% We start with a desired 2D pattern, Beam_d, which is specific to a set of azimuth and elevation angles.
% %We then build a cost function to minimize the distance between the desired pattern, Beam_d, and the pattern generated from the weighting vector, weights_o.
% Our initial conditions for the optimization are based on uniform weighting. This pattern is included in the objective function shown in the code below.
%% Set up optimization
objfun = @(w)norm(w'*stvmat-Beam_d); % Define objective function used in fmincon
% Goal is to minimize the norms between
% the desired pattern and
% resulting pattern
weights_i = ones(N,1); % Initial setting for array amplitudes
% Serves as starting point to
weights_o = fmincon(objfun,weights_i,,,,,zeros(N,1),ones(N,1));
% fmincon takes in the objfun,
% the initial weights, and
% upper and lower bounds of the weights
% In this example,
% 0 <= weights_o <= 1
% weights_o holds the weights
% which can be used to create
% a beam that matches our
% desired pattern