Main Content

thinnedArray

Create thinned array from full array

Since R2023b

Description

thinarray = thinnedArray(array,freq,steerang,sll) creates a duplicate System object™ thinarray with a reduced number of elements created by thinning an array. A thinned array is a copy of an array with the Taper property set to the product of the Taper values of array and the derived thinning coefficients. Thinning coefficients are either 0 or 1. Zeros indicate that the corresponding array elements are 'off' (inactive) and ones indicate that the corresponding array elements are 'on' (active). This object function applies only to the phased.ULA or phased.URA System objects. The freq argument is the array operating frequency, steerang is the array steering direction, and sll is the desire sidelobe level. This object function uses an optimization procedure to find a thinned set of array tapers for the original array such that the resulting array pattern evaluated at the frequency freq, for the steering direction steerang, has a sidelobe level equal to or below sll.

You must have a Global Optimization Toolbox license to use this object function.

example

[thinarray,w] = thinnedArray(___) also returns the computed thinning coefficients w.

thinarray = thinnedArray(array,freq,steerang,sll,nstart,nstop) returns a thinned array thinarray such that its array pattern has null response regions starting at the directions specified in nstart and stopping at the directions specified in nstop.

thinarray = thinnedArray(___,Name = Value) returns a thinned array thinarray with thinning coefficients computed so that the specified parameter Name is set to the specified Value. You can specify additional name-value pair arguments in any order as (Name1 = Value1, ..., NameN = ValueN).

[thinarray,w,info] = thinnedArray(___) also returns a struct info containing additional information about the returned thinned array thinArray.

Examples

collapse all

Create a thined array from a 100 element uniform linear array of cosine antenna elements. The desired sidelobe level is -20 dB when the array is steered to -30 off broadside. Additionally, the resulting array pattern should have a null region from 46 to 47.5. The operating frequency is 3 GHz.

N = 100;
fc = 3e9;
lambda = freq2wavelen(fc);
steerAng = -30;
nullStart = 46;
nullStop = 47.5;
sll = -20;

Create a uniform linear array of cosine antenna elements.

element = phased.CosineAntennaElement;
ula = phased.ULA(N,lambda/2,Element=element);

Create a thinned array from the original array.

thinned_ula = ula.thinnedArray(fc,steerAng,sll, ...
    nullStart,nullStop,SymmetricThinning=false);

Create a steering vector to point the array at steerAng.

steeringVector = phased.SteeringVector(SensorArray=ula);
sv = steeringVector(fc,steerAng);

Plot the array pattern in azimuth.

az = -90:0.1:90;
pattern(thinned_ula,fc,az,0,Type='powerdb', ...
    weights=sv,CoordinateSystem='rectangular')
yline(sll,Label={'Desired','Sidelobe level'}, ...
    LabelVerticalAlignment='middle')
xline(steerAng,Label={'Steering','angle'},  ...
    LabelVerticalAlignment='bottom', ...
    LabelHorizontalAlignment='center')
xline((nullStart+nullStop)/2,Label={'Null','Region'}, ...
    LabelVerticalAlignment='top', ...
    LabelHorizontalAlignment='center')
ylim([-60 1])

Figure contains an axes object. The axes object with title Azimuth Cut (elevation angle = 0.0°), xlabel Azimuth Angle (degrees), ylabel Normalized Power (dB) contains 4 objects of type line, constantline. This object represents 3 GHz.

Create a thinned array from a 20-by-30 uniform rectangular array (URA) of isotropic elements such that the resulting sidelobe level is below -20 dB. The operating frequency of the array is 300 Mhz.

fc = 300e6;
lambda = freq2wavelen(fc);

Create a URA of isotropic antenna elements. The elements are spaced 1/2-wavelength apart.

ura = phased.URA([20 30],[lambda/2 lambda/2]);

Create the thinned URA.

[ura_thinned,~,info] = ura.thinnedArray(fc,[0;0],-20);
info
info = struct with fields:
      ThinningFactor: 57.3333
    MaxSidelobeLevel: -19.9155
    BeamwidthThinned: [2x1 double]
       BeamwidthFull: [2x1 double]

Plot the 2-D array pattern at 1/2 degree increments.

az = -90:0.5:90;
el = -90:0.5:90;
pattern(ura_thinned,fc,az,el,Type='powerdb', ...
    CoordinateSystem='rectangular')
view(2);
clim([-20 1]);

Figure contains an axes object. The axes object with title 3D Response Pattern, xlabel Azimuth Angle (degrees), ylabel Elevation Angle (degrees) contains an object of type surface.

Visualize the array geometry.

viewArray(ura_thinned,'ShowTaper',true)

Figure contains an axes object. The hidden axes object with xlabel x axis (Az 0 El 0) -->, ylabel y axis --> contains 7 objects of type scatter, line, text.

Input Arguments

collapse all

Phased array, specified as a phased.ULA or phased.URA System object or System object.

Array operating frequency, specified as a positive scalar. Frequency units are in Hz.

Example: 1e9

Data Types: double

Array steering angle, specified as a scalar or a 2-by-1 real-valued column vector. When steerang is a 2-by-1 vector, it specifies a steering direction in the form [azimuth; elevation]. The azimuth angle should lie in the range [-180 180] degrees and the elevation angle should lie in the range [-90 90] degrees. If steerang is a scalar, it specifies only the steering azimuth angle. The corresponding elevation angle is assumed to be zero degrees.

Example: [75;10]

Data Types: single | double

Side-lobe level, specified as a negative scalar. Units are in dB.

Example: -20

Data Types: single | double

Null region start direction, specified as a real-valued 1-by-M vector or real-valued 2-by-M matrix. M is the number of null regions. If nstart is a matrix, the columns specify the start directions of the null regions in space in the form [azimuth; elevation]. The azimuth angle should be between [-180 180] degrees and the elevation angle should be between [-90 90] degrees.

Null regions are defined by the nstart and nstop arguments. nstart and nstop must agree in size. Both nstart and nstop must be either length-M row vectors or a 2-by-M matrices. When both are matrices, the mth null region extends from nstart(1,m) to nstop(1,m) in azimuth and nstart(2,m) to nstop(2,m) in elevation. When nstart and nstop are row vectors, the elevation is assumed to be equal to 0. In this case the mth null region extends from nstart(m) to nstop(m) in azimuth.

Example: [-20,20]

Data Types: single | double

Null regions are defined by the nstart and nstop arguments. nstart and nstop must agree in size. Both nstart and nstop must be either length-M row vectors or a 2-by-M matrices. When both are matrices, the mth null region extends from nstart(1,m) to nstop(1,m) in azimuth and nstart(2,m) to nstop(2,m) in elevation. When nstart and nstop are row vectors, the elevation is assumed to be equal to 0. In this case the mth null region extends from nstart(m) to nstop(m) in azimuth.

Example: [-20,20]

Data Types: single | 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.

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

Example: SymmetricThinning = false

Perform symmetric thinning, specified as true or false. Set this property to true to perform symmetric thinning. Symmetric thinning can be used to obtain a symmetric array geometry and to speed up the computation.

  • For phased.ULA when SymmetricThinning is true, the 'on-off' states of the array elements are symmetric with respect to the center of the array. In this case the total number of 'on-off' states that must be determined is equal to a half of the total number of array elements.

  • For phased.URA when SymmetricThinning is true, the 'on-off' states of the array elements are symmetric in both rows and columns. In this case the total number of 'on-off'states that must be determined to equal to a quarter of the total number of array elements.

When SymmetricThinning is false the 'on-off' states of all array elements must be determined independently.

Data Types: logical

Signal propagation speed in the medium, specified as a positive scalar. Units are in m/s.

Example: 3e8

Data Types: single | double

Display optimization progress, specified as 'off' or 'on'. When Display is set to 'on', the optimization progress is displayed at the command line every 10 iterations of the optimization algorithm. When Display is set to 'off', no optimization progress is reported in the command window.

Data Types: char | string

Output Arguments

collapse all

Thinned array, returned as a Phased Array System Toolbox™ System object.

Thinning coefficients, returned as an N-by-1 real-valued vector. N is the number of array elements in the full array. Each entry of w is either "1" or "0". A "1" indicates that the corresponding array element of the output thinned array thinarray is 'on' (active), while 0 indicates that the corresponding array elements of thinarray are 'off' (inactive).

Data Types: single | double

Additional information about the output thinned array thinarray, returned as struct. info has these fields:

Field nameDescription
ThinningFactor

Percent of active elements after thinning.

MaxSidelobeLevel

Maximum array sidelobe level (in dB).

MinNullRegionDepth

Minimum array pattern depth (in dB) inside the null regions. This field is present only when nstart and nstop are specified.

BeamwidthFull

3 dB down beamwidth (in degrees) of the array before thinning.

BeamwidthThinned

3 dB down beamwidth (in degrees) of the thinned array.

Data Types: struct

Algorithms

This object function utilizes a global optimization procedure based on the genetic algorithm to compute the array thinning coefficients. The global optimization does not guarantee that the found solution is the optimal solution. It also does not guarantee satisfaction of the sidelobe level and the null region constraints. The maximum sidelobe level and the minimum null region depth reported in the returned info struct are the values computed during the optimization by evaluating the array pattern over an angular grid. The actual values can be higher if the array pattern is to be evaluated over a finer angular grid. Additionally, due to the nature of the genetic algorithm the same set of input values will produce different results at each run. To ensure the reproducibility of the results from run to run, fix the random number generator seed using the rng function before calling thinnedArray.

References

[1] Rocca, Paolo, Giacomo Oliveri, Robert J. Mailloux, and Andrea Massa. "Unconventional phased array architectures and design methodologies - a review". Proceedings of the IEEE 104, no. 3 (2016): 544-560.

[2] Haupt, Randy L. "Thinned arrays using genetic algorithms". IEEE transactions on antennas and propagation 42, no. 7 (1994): 993-999.

Version History

Introduced in R2023b