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