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

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