Main Content

Subarrays Within Arrays

Definition of Subarrays

In Phased Array System Toolbox™ software, a subarray is an accessible subset of array elements. When you use an array that contains subarrays, you can access measurements from the subarrays but not from the individual elements. Similarly, you can perform processing at the subarray level but not at the level of the individual elements. As a result, the system has fewer degrees of freedom than if you controlled the system at the level of the individual elements.

Benefits of Using Subarrays

Radar applications often use subarrays because operations, such as phase shifting and analog-to-digital conversion, are too expensive to implement for each element. It is less expensive to group the elements of an array through hardware, thus creating subarrays within the array. Grouping elements through hardware limits access to measurements and processing to the subarray level.

Support for Subarrays Within Arrays

To work with subarrays, you must define the array and the subarrays within it. You can either define the array first or begin with the subarray. Choose one of these approaches:

  • Define one subarray, and then build a larger array by arranging copies of the subarray. The subarray can be a ULA, URA, or conformal array. The copies are identical, except for their location and orientation. You can arrange the copies spatially in a grid or a custom layout.

    When you use this approach, you build the large array by creating a phased.ReplicatedSubarray System object™. This object stores information about the subarray and how the copies of it are arranged to form the larger array.

  • Define an array, and then partition it into subarrays. The array can be a ULA, URA, or conformal array. The subarrays do not need to be identical. A given array element can be in more than one subarray, leading to overlapped subarrays.

    When you use this approach, you partition your array by creating a phased.PartitionedArray System object. This object stores information about the array and its subarray structure.

After you create a phased.ReplicatedSubarray or phased.PartitionedArray object, you can use it to perform beamforming, steering, or other operations. To do so, specify your object as the value of the SensorArray or Sensor property in objects that have such a property and that support subarrays. Objects that support subarrays in their SensorArray or Sensor property include:

  • phased.AngleDopplerResponse

  • phased.ArrayGain

  • phased.ArrayResponse

  • phased.Collector

  • phased.ConstantGammaClutter

  • phased.MVDRBeamformer

  • phased.PhaseShiftBeamformer

  • phased.Radiator

  • phased.STAPSMIBeamformer

  • phased.SteeringVector

  • phased.SubbandPhaseShiftBeamformer

  • phased.WidebandCollector

Rectangular Array Partitioned into Linear Subarrays

This example shows how to set up a rectangular array containing linear subarrays. The example also finds the phase centers of the subarrays.

Create a 2-by-3 rectangular array.

array = phased.URA('Size',[2 3]);

Plot the positions of the array elements in the yz-plane (all x-coordinates are zero.) Include labels that indicate the numbering of the elements. The numbering is important for selecting which elements are included in each subarray.

viewArray(array,'ShowIndex','All')

Create and view an array consisting of three 2-element linear subarrays each parallel to the z-axis. Use the indices from the plot to form the matrix for the SubarraySelection property. The getSubarrayPosition method returns the phase centers of the three subarrays.

subarray1 = [1 1 0 0 0 0; 0 0 1 1 0 0; 0 0 0 0 1 1];
partitionedarray1 = phased.PartitionedArray('Array',array,...
   'SubarraySelection',subarray1);
viewArray(partitionedarray1)

subarray1pos = getSubarrayPosition(partitionedarray1)
subarray1pos = 3×3

         0         0         0
   -0.5000         0    0.5000
         0         0         0

Create and view another array consisting of two 3-element linear subarrays parallel to the y-axis. Using the getSubarrayPosition method, find the phase centers of the two subarrays.

subarray2 = [0 1 0 1 0 1; 1 0 1 0 1 0];
partitionedarray2 = phased.PartitionedArray('Array',array,...
   'SubarraySelection',subarray2);
viewArray(partitionedarray2)

subarraypos2 = getSubarrayPosition(partitionedarray2)
subarraypos2 = 3×2

         0         0
         0         0
   -0.2500    0.2500

Linear Subarray Replicated to Form Rectangular Array

This example shows how to arrange copies of a linear subarray to form a rectangular array.

Create a 4-element linear array parallel to the y-axis.

array = phased.ULA('NumElements',4);

Create a rectangular array by arranging two copies of the linear array.

replsubarray = phased.ReplicatedSubarray('Subarray',array,'GridSize',[2 1]);

Plot the positions of the array elements (filled circles) and the phase centers of the subarrays (unfilled circles). The elements lie in the yz-plane because all the x-coordinates are zero.

viewArray(replsubarray);
hold on;
subarraypos = getSubarrayPosition(replsubarray);
sx = subarraypos(1,:);
sy = subarraypos(2,:);
sz = subarraypos(3,:);
scatter3(sx,sy,sz,'ro')
hold off

Linear Subarray Replicated in a Custom Grid

This example shows how to arrange copies of a linear subarray in a triangular layout.

Create a 4-element linear array.

antenna = phased.CosineAntennaElement('CosinePower',1);
array = phased.ULA('NumElements',4,'Element',antenna);

Create a larger array by arranging three copies of the linear array. Define the phase centers and normal directions of the three copies explicitly.

vertex_ang = [60 180 -60];
vertex = 2*[cosd(vertex_ang); sind(vertex_ang); zeros(1,3)];
subarray_pos = 1/2*[...
   (vertex(:,1)+vertex(:,2)) ...
   (vertex(:,2)+vertex(:,3)) ...
   (vertex(:,3)+vertex(:,1))];
replsubarray = phased.ReplicatedSubarray('Subarray',array,...
   'Layout','Custom',...
   'SubarrayPosition',subarray_pos,...
   'SubarrayNormal',[120 0;-120 0;0 0].');

Plot the positions of the array elements (blue) and the phase centers (red) of the subarrays. The plot is in the xy-plane because all the z-coordinates are zero.

viewArray(replsubarray,'ShowSubarray',[])
hold on
scatter3(subarray_pos(1,:),subarray_pos(2,:),...
   subarray_pos(3,:),'ro')
hold off

Related Topics