exponenta event banner

Сужение, утончение и массивы с различными шаблонами датчиков

В этом примере показано, как применять сужение и утончение модели к различным конфигурациям массива. В нем также показано, как создавать массивы с различными образцами элементов.

Сужение ULA

В этом разделе показано, как применить окно Тейлора к элементам однородного линейного массива (ULA) для уменьшения уровней бокового узла.

%set the random seed
rs = rng(6);

% Create a ULA antenna of 10 elements.
N = 20;
ula = phased.ULA(N);

% Clone the ideal ULA
taperedULA = clone(ula);

% Calculate and assign the taper
nbar = 5; sll = -20;
taperedULA.Taper = taylorwin(N,nbar,sll).';

Сравните отклик суживающегося массива на нетканый массив. Обратите внимание, что боковые лопасти клиновидной ULA ниже.

helperCompareResponses(taperedULA,ula, ...
                       'Ideal ULA versus Tapered ULA response', ...
                       {'Tapered','Not tapered'});

Утончение ULA

В этом разделе показано, как моделировать утончение с помощью сужения. При утончении каждый элемент массива имеет определённую вероятность деактивации или удаления. Значения конусности могут быть либо 0 для неактивного элемента, либо 1 для активного элемента. Здесь вероятность сохранения элемента пропорциональна значению окна Тейлора в этом элементе.

% Get that previously computed taper values corresponding to a Taylor
% window
taper = taperedULA.Taper;

% Create a random vector uniformly distributed between 0 and 1
randvect =  rand(size(taper));

% Compute the taper values whose probability of being 1 is equal to
% the value of the normalized Taylor window at the corresponding sensor.
thinningTaper = zeros(size(taper));
thinningTaper(randvect<taper/max(taper)) = 1;

% Apply thinning
thinnedULA = clone(ula);
thinnedULA.Taper = thinningTaper;

На следующем графике показано распределение значений сужения. Обратите внимание, что при снижении уровня окна количество неактивных датчиков увеличивается.

plot(taper)
hold on
plot(thinningTaper,'o')
hold off
legend('Taylor window','Thinning taper')
title('Applied Thinning Taper');xlabel('Sensor Position');
ylabel('Taylor Window Values');

Сравните отклик прореженного на идеальный массив. Обратите внимание, что боковые обтекатели утонченной ULA ниже.

helperCompareResponses(thinnedULA,ula, ...
                       'Ideal ULA versus Thinned ULA response', ...
                       {'Thinned','Not thinned'});

Сужение URA

В этом разделе показано, как применить окно Тейлора вдоль обоих размеров однородного прямоугольного массива (URA) 13 на 10.

uraSize = [13,10];
heterogeneousURA = phased.URA(uraSize);

nbar=2; sll = -20;

% along the z axis
twinz = taylorwin(uraSize(1),nbar,sll);

% along the y axis
twiny = taylorwin(uraSize(2),nbar,sll);

% Get the total taper values by multiplying the vectors of both dimensions
tap = twinz*twiny.';

% Apply the taper
taperedURA = clone(heterogeneousURA);
taperedURA.Taper = tap;

Просмотр цветовой яркости датчика пропорционально значениям конусности

viewArray(taperedURA,'Title','Tapered URA','ShowTaper',true);

Постройте график значений конусности для каждого датчика в 3d пространстве

clf
pos = getElementPosition(taperedURA);
plot3(pos(2,:),pos(3,:),taperedURA.Taper(:),'*');
title('Applied Taper');ylabel('Sensor Position');zlabel('Taper Values');

Сравните отклик суживающегося массива на нетканый массив. Обратите внимание, что боковые лопасти сужающейся URA ниже.

helperCompareResponses(heterogeneousURA,taperedURA, ...
                       'Ideal URA versus Tapered URA response', ...
                       {'Not tapered','Tapered'});

Круговое плоское сужение

В этом разделе показано, как применить конусность к круговому плоскому массиву радиусом 5 метров и расстоянием между элементами 0,5 метра.

radius = 5; dist = 0.5;
numElPerSide = radius*2/dist;

% Get the positions of the smallest URA which could fit the circular planar
% array
pos = getElementPosition(phased.URA(numElPerSide,dist));

% Remove all elements in URA which are outside the circle
elemToRemove = sum(pos.^2) > radius^2;
pos(:,elemToRemove) = [];

% Create the circular planar array
circularPlanarArray = phased.ConformalArray('ElementPosition',pos,...
                           'ElementNormal',[0;0]*ones(1,size(pos,2)));

Применение кругового окна Тейлора

taperedCircularPlanarArray = clone(circularPlanarArray);
nbar=3; sll = -25;

taperedCircularPlanarArray.Taper = taylortaperc(pos,2*radius,nbar,sll).';

Просмотрите массив и постройте график значений конусности для каждого датчика.

viewArray(taperedCircularPlanarArray,...
    'Title','Tapered Circular Planar Array','ShowTaper',true)

clf
plot3(pos(2,:),pos(3,:),taperedCircularPlanarArray.Taper,'*');
title('Applied Taper');ylabel('Sensor Position');zlabel('Taper Values');

Сравните отклик суживающегося массива на нетканый массив. Обратите внимание, что боковые обочины сужающегося массива ниже.

helperCompareResponses(circularPlanarArray,taperedCircularPlanarArray, ...
                       'Ideal versus Tapered response', ...
                       {'Not tapered','Tapered'});

Круговое плоское истончение

Рассчитайте значения сужения, аналогичные сечению ULA.

taper = taperedCircularPlanarArray.Taper;
randvect = rand(size(taper));
thinningTaper = zeros(size(taper));
thinningTaper(randvect<taper/max(max(taper))) = 1;

thinnedCircularPlanarArray = clone(circularPlanarArray);
thinnedCircularPlanarArray.Taper = thinningTaper;

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

viewArray(thinnedCircularPlanarArray,'ShowTaper',true)

clf;
helperCompareResponses(circularPlanarArray,thinnedCircularPlanarArray, ...
                       'Ideal versus Thinned response', ...
                       {'Not thinned','Thinned'});

Многоэлементные шаблоны в URA

В этом разделе показано, как создать URA 13 на 10 с шаблонами датчиков на краях и углах, отличающимися от шаблонов остальных датчиков. Эту способность можно использовать для моделирования эффектов связи.

Создайте три различных косинуса со следующими степенями азимута и косинуса отметки [azim exponent, elev exponent]: [2, 2] для краев, [4, 4] для углов и [1.5, 1.5] для основных датчиков.

mainAntenna = phased.CosineAntennaElement('CosinePower',[1.5 1.5]);
edgeAntenna = phased.CosineAntennaElement('CosinePower',[2 2]);
cornerAntenna = phased.CosineAntennaElement('CosinePower',[4 4]);

Сопоставьте датчики с шаблонами.

uraSize = [13,10];

% Create a cell array which includes all the patterns
patterns = {mainAntenna, edgeAntenna, cornerAntenna};

% Initialize all sensors to first pattern.
patternMap = ones(uraSize);

% Set the edges to the second pattern.
patternMap([1 end],2:end-1) = 2;
patternMap(2:end-1,[1 end]) = 2;

% Set the corners to the third pattern.
patternMap([1 end],[1 end]) = 3;

% Create the URA

heterogeneousURA = phased.HeterogeneousURA('ElementSet' , patterns, ...
                               'ElementIndices', patternMap);

Просмотр макета массива.

helperViewPatternArray(heterogeneousURA);

Сравните отклик массива с несколькими шаблонами с одним массивом.

clf;
helperCompareResponses( heterogeneousURA, ...
                        phased.URA(uraSize,'Element',mainAntenna), ...
                        'Multiple versus single pattern response', ...
                        {'Single Pattern','Multiple Patterns'});

Многоэлементные массивы в кольцевых плоских массивах

В этом разделе показано, как задать рисунок датчиков, расположенных более чем в 4 метрах от центра массива.

% Create a cell array which includes all the patterns
patterns = {mainAntenna, edgeAntenna};

% Get positions
pos = getElementPosition(circularPlanarArray);

% Initialize all sensors to first pattern in sensorPatterns.
patternMap = ones(1,size(pos,2));

% Get the indexed of the sensors more than 4 meters away from the center.
sensorIdx = find(sum(pos.^2) > 4^2);

% Set the edges to the second pattern in sensorPatterns.
patternMap(sensorIdx) = 2;

% Set the corresponding properties
heterogeneousCircularPlanarArray = ...
    phased.HeterogeneousConformalArray('ElementPosition',pos,...
                            'ElementNormal',[1;0]*ones(1,size(pos,2)),...
                            'ElementSet' , patterns, ...
                            'ElementIndices', patternMap);

Просмотр макета массива.

helperViewPatternArray(heterogeneousCircularPlanarArray);

Сравните отклик массива с несколькими шаблонами с одним массивом.

clf;
helperCompareResponses(circularPlanarArray,...
    heterogeneousCircularPlanarArray,...
    'Multiple versus single pattern response',...
    {'Single Pattern','Multiple Patterns'});

% reset the random seed
rng(rs)

Резюме

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