Main Content


Optimize antenna or array using SADEA optimizer

Since R2020b


optimizedelement = optimize(element,frequency,objectivefunction,propertynames,bounds) optimizes the antenna or the array at the specified frequency using the specified objective function and the antenna or array properties and their bounds.


optimizedelement = optimize(___,Name=Value) optimizes the antenna or the array using additional name value pairs.


collapse all

Create and view a default dipole antenna.

ant = dipole;

Maximize the gain of the antenna by changing the antenna length from 3 m to 7 m and the width from 0.11 m to 0.13 m.

Optimize the antenna at a frequency of 75 MHz.

optAnt = optimize(ant,75e6,"maximizeGain", ...
                {'Length','Width'}, {3 0.11; 7 0.13})

optAnt = 
  dipole with properties:

        Length: 4.7973
         Width: 0.1100
    FeedOffset: 0
     Conductor: [1x1 metal]
          Tilt: 0
      TiltAxis: [1 0 0]
          Load: [1x1 lumpedElement]


This example shows how to optimize an E-Notch microstrip patch antenna for gain with constraints on its geometry.

Create E-Notch Microstrip Patch Antenna

Create an E-Notch microstrip patch antenna operating at 2GHz and vary its center arm notch length and width.

% Create E-notch microstrip antenna
ant = design(patchMicrostripEnotch,2e9);
ant.CenterArmNotchLength = 0.0073;
ant.CenterArmNotchWidth = 0.0144;

Plot its radiation pattern and check the maximum gain value.

% Check the gain

Optimize E-Notch Microstrip Patch Antenna for Gain

Define the design variables, and their lower and upper bounds.

designVariables = {'CenterArmNotchLength','NotchLength','Width','CenterArmNotchWidth','NotchWidth'};
XVmin = [0.001, 0.03, 0.03, 0.01, 0.001];
XVmax = [0.02, 0.06, 0.07, 0.03, 0.009];

Add geometric constraints

Prepare coefficients in the form of a matrix with reference to below linear inequalities:

  1. 5*CenterArmNotchLength<NotchLength

  2. CenterArmNotchWidth+(2*Notchwidth)<Width

Rewrite the inequalities 1 & 2 in the form of ax+by+cz0

  1. 5*CenterArmNotchLength-NotchLength<0

  2. CenterArmNotchWidth+(2*Notchwidth)-Width<0

Convert these inequalities to a matrix of form AX<=b, where A is coefficient matrix and b is constant matrix. Write the coefficients as per the order of design variables.

A = [5,-1,0,0,0;...

b = [0;0];

Define a structure to contain both the coefficient and constant matrices.

constraintsStructure.A = A;
constraintsStructure.b = b;

Optimize E-Notch microstrip patch antenna and check its gain

Run the optimization on E-Notch microstrip patch antenna leveraging these constraints. Visualize the optimized design and plot the radiation pattern.

optAnt = optimize(ant, 2e9, "maximizeGain", designVariables, {XVmin;XVmax}, Iterations=50, GeometricConstraints=constraintsStructure);



Input Arguments

collapse all

Antenna or array, specified as an antenna object from the Antenna Catalog, array object from the Array Catalog, or customAntenna object.


To optimize pcbStack antenna, use PCB Antenna Designer app.

Example: dipole

Example: linearArray(Element=dipole)

Example: customAntenna(Shape=shape.Rectangle)

Operating frequency of the antenna or array to optimize, specified as a positive scalar in Hertz.

Example: 70e6

Data Types: double

Objective of antenna or array optimization, specified as a string from one of the following:

  • maximizeGain — Maximize the gain of the given antenna or array element

  • fronttoBackRatio — Increase the front-lobe-to-back-lobe ratio of the antenna or array element

  • maximizeBandwidth — Maximize the operation bandwidth of the antenna or array element. Use this objective function for optimizing antennas or arrays for wideband applications.

  • minimizeBandwidth — Minimize the operation bandwidth of the antenna or array element. Use this objective function for optimizing antennas or arrays for narrowband applications.

  • maximizeSLL — Maximize the ratio between the front lobe and the first side lobes of the antenna or array pattern.

  • minimizeArea — Minimizes the maximum area occupied by the antenna or the array element. If the dimension of the element in the array is smaller than the aperture, the objective function minimizes the array aperture.

  • Custom objective function — Optimizes the antenna or array as per the user defined objective function.

Data Types: string

Properties of the antenna or array object to optimize, specified as a cell array of character vectors. The property names are selected as the design variables in optimization.

Example: {'Length','Width'}

Data Types: cell

Lower and upper bounds of design variables, specified as a two-row cell array.

Example: {3 0.11; 7 0.13}

Data Types: double

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: Constraints={'Area<0.03'}

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: 'Constraints',{'Area<0.03'}

Antenna or array optimization constraints, specified as a cell array of strings or character vectors. Each character vector or string must be of the form: (analysis function) (inequality sign) (value). You can specify any of the following analysis functions:

  • Area in meter square

  • Volume in meter cube

  • S11 in dB

  • Gain in dBi

  • F/B in dBi

  • SLL in dBi

The inequality signs '<' or '>' and the values specifies the analysis function limits. For example, 'Area < 0.03' indicates that the area of the optimizing antenna must be less than 0.03 square meter.

Example: {'Area<0.03'}

Data Types: char | string

Weight or penalty of each constraint function, specified as a vector of positive integers in the range (1,100). If the penalty is set to high, a higher priority is given to the constraint function in case of multiple constraint optimization. All constraint functions are weighted equally by default.

Example: 8

Data Types: double

Range of frequencies for vector frequency analysis like S-parameters, specified as a vector of positive numbers with each element unit in Hertz.

The default frequency range is obtained from the center frequency considering a bandwidth of less than 10 percent.

Example: linspace(1e9,2e9,10)

Data Types: double

Reference impedance of antenna or array being optimized, specified as a scalar in ohms.

Example: 75

Data Types: double

Azimuth and elevation of main lobe of antenna or array being optimized, specified as a two-element vector with each element unit in degrees. The first element represents azimuth and the second element represents elevation.

Example: [20 30]

Data Types: double

Number of iterations to run the optimizer after you build the model, specified as a positive scalar.

Example: 40

Data Types: double

Use Parallel Computing Toolbox during optimization, specified as either true or false. Use the canUseGPU function to check if dedicated GPU is available for computations and Parallel Computing Toolbox is installed and ready for use.

Example: true

Data Types: logical

Enable mutual coupling of elements in an array during optimization, specified as either true or false.

Example: false

Data Types: logical

Enable printing iteration number and value of convergence on the command line, specified as either true or false.

Example: true

Data Types: logical

Geometric constraints for optimization, specified as a structure of coefficient matrix and constant vector.

Specify linear inequality constraints in the A matrix and b vector.

  • A is a real M-by-N matrix where M is the number of inequalities, and N is the number of design variables. A holds the design variable coefficients of the inequalities.

  • b is a real M-element column vector and holds the constants of inequalities corresponding to the coefficients in A.

For example, consider an optimization problem consisting of 5 design variables as follows:

designVariables = {'CenterArmNotchLength','NotchLength','Width',...
The geometric constraints for optimization are:

  • 5*CenterArmNotchLength - NotchLength < 0

  • CenterArmNotchWidth + 2*Notchwidth - Width < 0

Define the A and b as follows:

A = [5,-1,0,0,0;...
b = [0;0];

Example: A=[5,-1,0,0,0; 0,0,-1,1,2]; b=[0;0]; structure.A=A; structure.b=b;

Data Types: struct

Output Arguments

collapse all

Optimized antenna or array element, returned as an antenna, array, or customAntenna object.

Version History

Introduced in R2020b

expand all