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

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

Сужение 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

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

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);

Постройте значения заострения в каждом датчике на 3-м пробеле

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

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

Создайте три различных шаблона косинуса со следующим азимутом и экспонентами косинуса вертикального изменения [azim экспонента, экспонента подъемника]: [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)

Сводные данные

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