Tapering, Thinning and Arrays with Different Sensor Patterns
This example shows how to apply tapering and model thinning on different array configurations. It also demonstrates how to create arrays with different element patterns.
ULA Tapering
This section shows how to apply a Taylor window on the elements of a uniform linear array (ULA) in order to reduce the sidelobe levels.
%set the random seed rs = rng(6); % Create a ULA antenna of 20 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).';
Compare the response of the tapered to the untapered array. Notice how the sidelobes of the tapered ULA are lower.
helperCompareResponses(taperedULA,ula, ... 'Ideal ULA versus Tapered ULA response', ... {'Tapered','Not tapered'});
ULA Thinning
This section shows how to model thinning using tapering. When thinning, each element of the array has a certain probability of being deactivated or removed. The taper values can be either 0, for an inactive element, or 1 for an active element. Here, the probability of keeping the element is proportional to the value of the Taylor window at that element.
% 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;
The following plot shows how the thinning taper values are distributed. Notice on the edges when the window level goes down, the number of inactive sensors is up.
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');
Compare the response of the thinned to the ideal array. Notice how the sidelobes of the thinned ULA are lower.
helperCompareResponses(thinnedULA,ula, ... 'Ideal ULA versus Thinned ULA response', ... {'Thinned','Not thinned'});
URA Tapering
This section shows how to apply a Taylor window along both dimensions of a 13 by 10 uniform rectangular array (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;
View the sensor's color brightness in proportion to the taper magnitudes.
viewArray(taperedURA,'Title','Tapered URA','ShowTaper',true);
Plot the taper values at each sensor in 3d space.
clf pos = getElementPosition(taperedURA); plot3(pos(2,:),pos(3,:),taperedURA.Taper(:),'*'); title('Applied Taper');ylabel('Sensor Position');zlabel('Taper Values');
Compare the response of the tapered to the untapered array. Notice how the sidelobes of the tapered URA are lower.
helperCompareResponses(heterogeneousURA,taperedURA, ... 'Ideal URA versus Tapered URA response', ... {'Not tapered','Tapered'});
Circular Planar Tapering
This section shows how to apply a taper on a circular planar array with a radius of 5 meters and distance between elements of 0.5 meters.
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)));
Apply a circular Taylor window.
taperedCircularPlanarArray = clone(circularPlanarArray); nbar=3; sll = -25; taperedCircularPlanarArray.Taper = taylortaperc(pos,2*radius,nbar,sll).';
View the array and plot the taper values at each sensor.
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');
Compare the response of the tapered to the untapered array. Notice how the sidelobes of the tapered array are lower.
helperCompareResponses(circularPlanarArray,taperedCircularPlanarArray, ... 'Ideal versus Tapered response', ... {'Not tapered','Tapered'});
Circular Planar Thinning
Calculate the thinning taper values similar to the ULA section.
taper = taperedCircularPlanarArray.Taper; randvect = rand(size(taper)); thinningTaper = zeros(size(taper)); thinningTaper(randvect<taper/max(max(taper))) = 1; thinnedCircularPlanarArray = clone(circularPlanarArray); thinnedCircularPlanarArray.Taper = thinningTaper;
View the array and compare the response of the thinned to the ideal array.
viewArray(thinnedCircularPlanarArray,'ShowTaper',true)
clf; helperCompareResponses(circularPlanarArray,thinnedCircularPlanarArray, ... 'Ideal versus Thinned response', ... {'Not thinned','Thinned'});
Multiple Element Patterns in URA
This section shows how to create a 13 by 10 URA with sensor patterns on the edges and corners different than the patterns of the remaining sensors. This ability could be used to model coupling effects.
Create three different cosine patterns with the following azimuth and elevation cosine exponents [azim exponent, elev exponent]: [2, 2] for the edges, [4, 4] for the corners, and [1.5, 1.5] for the main sensors.
mainAntenna = phased.CosineAntennaElement('CosinePower',[1.5 1.5]); edgeAntenna = phased.CosineAntennaElement('CosinePower',[2 2]); cornerAntenna = phased.CosineAntennaElement('CosinePower',[4 4]);
Map the sensors to the patterns.
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);
View the pattern layout in the array.
helperViewPatternArray(heterogeneousURA);
Compare the response of the multiple pattern array to the single pattern array.
clf; helperCompareResponses( heterogeneousURA, ... phased.URA(uraSize,'Element',mainAntenna), ... 'Multiple versus single pattern response', ... {'Single Pattern','Multiple Patterns'});
Multiple Element Patterns in Circular Planar Arrays
This section shows how to set the pattern of sensors located more than 4 meters from the center of the array.
% 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);
View the pattern layout in the array.
helperViewPatternArray(heterogeneousCircularPlanarArray);
Compare the response of the multiple pattern array to the single pattern array.
clf; helperCompareResponses(circularPlanarArray,... heterogeneousCircularPlanarArray,... 'Multiple versus single pattern response',... {'Single Pattern','Multiple Patterns'}); % reset the random seed rng(rs)
Summary
This example demonstrated how to apply taper values and model thinning using taper values for different array configurations. It also showed how to create arrays with different element patterns.