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

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

Сужение 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'});

УЛА-утончение

В этом разделе показано, как смоделировать утончение с помощью сужения. При утончении каждый элемент массива имеет определенную вероятность быть деактивированным или удаленным. Значения конусности могут быть либо 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)

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

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