Галерея Phased Array

В этом примере показано, как смоделировать и визуализировать множество конфигураций антенной решетки с Phased Array System Toolbox™. Эти конфигурации могут также использоваться, чтобы смоделировать другой вид массивов, таких гидрофонных массивов и массивов микрофона. Можно просмотреть код для каждого графика и использовать его в собственном проекте.

Линейные матрицы

Линейные антенные решетки могут иметь универсальный или неоднородный интервал между элементами. Эта наиболее распространенная линейная антенная решетка является Универсальной линейной матрицей (ULA).

N = 20;  % Number of elements
D = 0.5; % Element spacing (m)
ula = phased.ULA(N,D);
viewArray(ula,'Title','Uniform Linear Array (ULA)')
set(gca,'CameraViewAngle',4.4);

Минимальная линейная матрица сокращения (MRLA) является примером расположенной с неоднородными интервалами линейной матрицы. MRLA минимизирует количество пар элемента, которые имеют ту же пространственную задержку корреляции. Возможно спроектировать массив с 4 элементами, апертура которого эквивалентна ULA с 7 элементами.

N = 4;                         % Number of elements
pos = zeros(3,N);
pos(2,:) = [-1.5 -1 0.5 1.5];  % Aperture equivalent to 7-element ULA
mrla = phased.ConformalArray('ElementPosition',pos,...
                           'ElementNormal',zeros(2,N));

viewArray(mrla,'Title','Minimum Redundancy Linear Array (MRLA)')
set(gca,'CameraViewAngle',4.85);

Круговые массивы

Круговые антенные решетки могут также иметь универсальный или неоднородный интервал между элементами. Затем пример Универсального кругового массива (UCA).

N = 24;   % Number of elements
R = 1;    % Radius (m)
uca = phased.UCA(N,R);

viewArray(uca,'ShowNormals',true,'Title','Uniform Circular Array (UCA)')
view(0,90)

Несколько круговых антенных решеток с тем же числом элементов и различными радиусами формируют концентрический круговой массив.

N = 16;                    % Number of elements on each ring
R = [1 1.5 2];             % Radii (m)
azang = (0:N-1)*360/N-180;
pos = [zeros(1,N);cosd(azang);sind(azang)];
elNormal = zeros(2,N);
concentricCircularArray = phased.ConformalArray(...
    'ElementPosition',[R(1)*pos R(2)*pos R(3)*pos],...
    'ElementNormal',[elNormal elNormal elNormal]);

viewArray(concentricCircularArray,'Title','Concentric Circular Array');

Плоские массивы с прямоугольной сеткой

Плоские антенные решетки могут иметь регулярную координатную сетку (или решетка) и различные граничные формы. Затем пример Универсального прямоугольного массива (URA) с прямоугольной сеткой и прямоугольным контуром.

M = 18;   % Number of elements on each row
N = 16;   % Number of elements on each column
dy = 0.5; % Spacing between elements on each row (m)
dz = 0.5; % Spacing between elements on each column (m)
ura = phased.URA([N M],[dz dy]);

viewArray(ura,'Title','Uniform Rectangular Array (URA)');

Можно также смоделировать плоскую антенную решетку с круговым контуром. Следующий код запускается с URA и удаляет элементы вне круга.

N = 20;   % Number of elements on each row/column of rectangular array
dy = 0.5; % Spacing between elements on each row (m)
dz = 0.5; % Spacing between elements on each column (m)
R = 4.5;  % Radius (m)
refArray = phased.URA(N,[dy,dz]);
pos = getElementPosition(refArray);
elemToRemove = sum(pos.^2)>R^2; 
pos(:,elemToRemove) = []; % Exclude elements outside circle
circularPlanarArray = phased.ConformalArray('ElementPosition',pos,...
                           'ElementNormal',zeros(2,size(pos,2)));

viewArray(circularPlanarArray,'Title','Circular Planar Array');

Затем пример плоской антенной решетки с эллиптическим контуром.

N = 20;   % Number of elements on each row/column of rectangular array
dy = 0.5; % Spacing between elements on each row (m)
dz = 0.5; % Spacing between elements on each column (m)
Ry = 4.5; % Major radius (m)
Rz = 2.8; % Minor radius (m)
refArray = phased.URA(N,[dy,dz]);
pos = getElementPosition(refArray);
elemToRemove = (pos(2,:)/Ry).^2+(pos(3,:)/Rz).^2>1; 
pos(:,elemToRemove) = [];  % Exclude elements outside ellipse
ellipticalPlanarArray = phased.ConformalArray('ElementPosition',pos,...
                           'ElementNormal',zeros(2,size(pos,2)));

viewArray(ellipticalPlanarArray,'Title','Elliptical Planar Array');

Следующим примером является шестиугольный массив с прямоугольной сеткой.

Nmin = 7;      % Number of elements on bottom row
Nmax = 19;     % Number of elements on widest row
dy = 0.5;      % Row spacing
dz = 0.5;      % Column spacing
rows = [Nmin:2:Nmax Nmax-2:-2:Nmin];
N = sum(rows); % Total number of elements
stop = cumsum(rows);
start = stop-rows+1;
pos = zeros(3,N);
count = 0;
for m = Nmin-Nmax:2:Nmax-Nmin
    count = count+1;
    idx = start(count):stop(count);
    pos(2,idx) = (-(rows(count)-1)/2:(rows(count)-1)/2)*dy;
    pos(3,idx) = m/2*dz;
end
hexagonalPlanarArray = phased.ConformalArray('ElementPosition',pos,...
                           'ElementNormal',zeros(2,N));

viewArray(hexagonalPlanarArray,...
    'Title','Hexagonal Planar Array with Rectangular Grid');

Плоские массивы с треугольной сеткой

Треугольные сетки обеспечивают эффективную пространственную выборку и широко используются на практике. Здесь снова, различные граничные конфигурации могут быть применены. Сначала прямоугольный массив с треугольной решеткой.

M = 18;   % Number of elements on each row
N = 16;   % Number of elements on each column
dy = 0.5; % Spacing between elements on each row (m)
dz = 0.5; % Spacing between elements on each column (m)
rectArrayTriGrid = phased.URA([N M],[dz dy],'Lattice','Triangular');

viewArray(rectArrayTriGrid,...
    'Title','Rectangular Array with Triangular Grid');

Затем круговая плоская антенная решетка с треугольной решеткой.

N = 18;   % Number of elements on each row/column of rectangular array
dy = 0.5; % Spacing between elements on each row (m)
dz = 0.5; % Spacing between elements on each column (m)
R = 4.5;  % Radius (m)
refArray = phased.URA(N,[dy,dz],'Lattice','Triangular');
pos = getElementPosition(refArray);
elemToRemove = sum(pos.^2)>R^2; 
pos(:,elemToRemove) = []; % Exclude elements outside circle
circularPlanarArrayTriGrid = phased.ConformalArray(...
    'ElementPosition',pos,'ElementNormal',zeros(2,size(pos,2)));

viewArray(circularPlanarArrayTriGrid,...
    'Title','Circular Planar Array with Triangular Grid');

Затем эллиптическая плоская антенная решетка с треугольной решеткой.

N = 18;   % Number of elements on each row/column of rectangular array
dy = 0.5; % Spacing between elements on each row (m)
dz = 0.5; % Spacing between elements on each column (m)
Ry = 4.5; % Major radius (m)
Rz = 2.8; % Minor radius (m)
refArray = phased.URA(N,[dy,dz],'Lattice','Triangular');
pos = getElementPosition(refArray);
elemToRemove = (pos(2,:)/Ry).^2+(pos(3,:)/Rz).^2>1; 
pos(:,elemToRemove) = [];  % Exclude elements outside ellipse
ellipticalPlanarArrayTriGrid = ...
    phased.ConformalArray('ElementPosition',pos,...
    'ElementNormal',zeros(2,size(pos,2)));

viewArray(ellipticalPlanarArrayTriGrid,...
    'Title','Elliptical Planar Array with Triangular Grid');

Затем пример Универсального шестиугольного массива (UHA).

Nmin = 9;           % Number of elements on bottom row
Nmax = 17;          % Number of elements on mid row
dy = 0.5;           % Row spacing
dz = 0.5*sin(pi/3); % Column spacing
rows = [Nmin:Nmax Nmax-1:-1:Nmin];
N = sum(rows);      % Total number of elements
stop = cumsum(rows);
start = stop-rows+1;
pos = zeros(3,N);
count = 0;
for m = Nmin-Nmax:Nmax-Nmin
    count = count+1;
    idx = start(count):stop(count);
    pos(2,idx) = (-(rows(count)-1)/2:(rows(count)-1)/2)*dy;
    pos(3,idx) = m*dz;
end
uha = phased.ConformalArray('ElementPosition',pos,...
    'ElementNormal',zeros(2,N));

viewArray(uha,'Title','Uniform Hexagonal Array (UHA)');

Разбавленные массивы

Можно также смоделировать плоские антенные решетки с нерегулярными координатными сетками. Затем пример разбавленной антенной решетки.

M = 19;   % Number of elements on each row
N = 17;   % Number of elements on each column
dy = 0.5; % Spacing between elements on each row (m)
dz = 0.5; % Spacing between elements on each column (m)
refArray = phased.URA([N M],[dz dy]);
pos = getElementPosition(refArray);
elemToRemove = [3:11:M*(N-1)/2 M*N-3:-11:(N+1)/2]; 
pos(:,elemToRemove) = [];  
thinnedURA = phased.ConformalArray('ElementPosition',pos,...
                           'ElementNormal',zeros(2,size(pos,2)));

viewArray(thinnedURA,'Title','Thinned Array');

Полусферические конформные массивы

Можно также смоделировать неплоские массивы. Во многих приложениях датчики должны соответствовать форме кривой поверхности, на которой они смонтированы. Затем пример антенной решетки, элементы которой равномерно распределены на полушарии.

R = 2;                          % Radius (m)
az = -90:10:90;                 % Azimuth angles
el = -80:10:80;                 % Elevation angles (excluding poles)
[az_grid, el_grid] = meshgrid(az,el);
poles = [0 0; -90 90];          % Add south and north poles
nDir = [poles [az_grid(:) el_grid(:)]']; % Element normal directions
N = size(nDir,2);               % Number of elements
[x, y, z] = sph2cart(degtorad(nDir(1,:)), degtorad(nDir(2,:)),R*ones(1,N));
hemisphericalConformalArray = phased.ConformalArray(...
    'ElementPosition',[x; y; z],'ElementNormal',nDir);

viewArray(hemisphericalConformalArray,...
    'Title','Hemispherical Conformal Array');
view(90,0)

Подмассивы

Можно смоделировать и визуализировать подмассивы. Затем пример непрерывных подмассивов.

replicatedURA = phased.ReplicatedSubarray('Subarray',phased.URA(5),...
                               'Layout','Rectangular',...
                               'GridSize',[3 3],'GridSpacing','Auto');

viewArray(replicatedURA,'Title','3x3 Subarrays Each Having 5x5 Elements');

Можно разметить подмассивы на нерегулярной координатной сетке. Следующий пример моделирует отказ модуля T/R для одного подмассива.

Ns = 6;               % Number of subarrays
posc = zeros(3,Ns);
posc(2,:) = -5:2.5:7.5; % Subarray phase centers 
posc(:,3) = [];         % Take out 3rd subarray to model T/R failure
defectiveSubarray = phased.ReplicatedSubarray(...
    'Subarray',phased.URA([25 5]),...
    'Layout','Custom',...
    'SubarrayPosition',posc, ...
    'SubarrayNormal',zeros(2,Ns-1));

viewArray(defectiveSubarray,'Title','Defective Subarray'); 
view(90,0)

Подмассивы могут быть чередованы и перекрыты, чтобы смягчить скрипучие лепестки.

N = 40;  % Number of elements
Ns = 8;  % Number of subarrays
sel = zeros(Ns,N);
Nsec = N/Ns;
for m = 1:Ns
    if m==1
        sel(m,(m-1)*Nsec+1:m*Nsec+1) = 1;
    elseif m==Ns
        sel(m,(m-1)*Nsec:m*Nsec) = 1;
    else
        sel(m,(m-1)*Nsec:m*Nsec+1) = 1;
    end
end
overlappedSubarray = phased.PartitionedArray('Array',phased.ULA(N),...
    'SubarraySelection', sel);

viewArray(overlappedSubarray,'Title','Overlapped Subarrays'); 
set(gca,'CameraViewAngle',4.65);

В определенных ограниченных пробелом приложениях, такой как на спутниках, несколько антенных решеток должны совместно использовать тот же пробел. Группы элементов чередованы, чередованы или вкраплены. Следующие модели в качестве примера чередованные, неперекрытые подмассивы.

N = 20;
idx = reshape(randperm(N*N),N,N); 
sel = zeros(N,N*N);
for i =1:N,
    sel(i,idx(i,:)) = 1;
end
interleavedArray = phased.PartitionedArray('Array',phased.URA(N),...
    'SubarraySelection',sel);

viewArray(interleavedArray,'Title','Interleaved Arrays');

Другой тип неплоской антенной решетки является массивом с несколькими плоскими поверхностями. Следующий пример показывает универсальные шестиугольные массивы, расположенные как подмассивы на сфере.

R = 9;                          % Radius (m)
az = unigrid(-180,60,180,'[)'); % Azimuth angles
el = unigrid(-30,60,30);        % Elevation angles (excluding poles)
[az_grid, el_grid] = meshgrid(az,el);
poles = [0 0; -90 90];          % Add south and north poles
nDir = [poles [az_grid(:) el_grid(:)]']; % Subarray normal directions
N = size(nDir,2);               % Number of subarrays
[x, y, z] = sph2cart(degtorad(nDir(1,:)), degtorad(nDir(2,:)),R*ones(1,N));
sphericalHexagonalSubarray = phased.ReplicatedSubarray('Subarray',uha,...
        'Layout','Custom',...
        'SubarrayPosition',[x; y; z], ...
        'SubarrayNormal',nDir);

viewArray(sphericalHexagonalSubarray,...
    'Title','Hexagonal Subarrays on a Sphere'); 
view(30,0)

Можно также просмотреть массив от различного угла и в интерактивном режиме вращать его в 3-D.

view(0,90)
rotate3d on